Shadowrocket 규칙 작성법: DOMAIN-SUFFIX·GEOIP·IP-CIDR·FINAL 매칭 범위

DOMAIN, DOMAIN-SUFFIX, DOMAIN-KEYWORD, GEOIP, IP-CIDR, FINAL의 매칭 대상과 규칙을 위에서 아래로 확인하는 순서를 예시로 알아봅니다.

이 글의 핵심 내용

Shadowrocket의 규칙은 연결 경로를 어떻게 결정할까요? 먼저 Home → Global Routing에서 Config를 선택했는지 확인한 뒤, 매칭 조건·정책·순서라는 세 가지 요소를 살펴보세요. 이 글은 이미 사용할 서버와 구독을 보유하고 설정을 조정하려는 사용자를 위한 안내입니다. 읽고 나면 도메인 규칙과 IP 규칙을 구분하고, 적용 범위가 명확한 예외 규칙을 작성해 요청 기록으로 변경 사항을 확인할 수 있습니다.

규칙이 적용되는 모드 확인하기: 먼저 Global Routing 점검

규칙을 올바르게 작성하면 반드시 적용될까요? 그렇지는 않습니다. 먼저 Home → Global Routing을 확인하세요. 이 글에서는 Config 모드를 다룹니다. 연결은 현재 선택된 설정 파일의 규칙에 따라 매칭됩니다. Proxy 또는 Direct로 전환하면 이 글의 규칙별 매칭 결과만으로 모든 연결을 설명할 수 없습니다. Scene을 사용하는 경우에는 선택한 장면의 실제 설정도 확인해야 합니다.

모드기본 용도테스트 전 확인 사항
Config현재 설정 파일의 규칙에 따라 연결을 분기합니다.Config에서 선택한 파일이 방금 수정한 파일인지 확인합니다.
Proxy연결을 프록시로 처리합니다.현재 선택된 서버와 연결 매개변수가 유효한지 확인합니다.
Direct연결을 직접 연결로 처리합니다.현재 네트워크에서 대상에 직접 접속할 수 있는지 확인합니다.
Scene장면 설정에 따라 연결 동작을 결정합니다.현재 어떤 장면을 사용 중인지, 장면에 무엇이 설정되어 있는지 확인합니다.

규칙으로 서버 정보를 보완할 수 있나요? 불가능합니다. 규칙은 연결 정책을 선택할 뿐, 연결 서비스를 만들거나 서비스 제공업체의 매개변수를 수정하지 않습니다. 이 글은 이미 사용할 수 있는 연결이 있다는 전제에서 설명하며, 노드·구독·서비스 제공업체 리소스를 제공하거나 판매하거나 추천하지 않습니다. 변경하기 전에 기존 설정을 보관해 연결 문제와 트래픽 분기 문제를 혼동하지 않도록 하세요.

규칙 한 줄 읽는 법: 매칭 조건과 정책 나누어 보기

쉼표 앞뒤에는 각각 무엇이 올까요? 일반 규칙은 보통 ‘규칙 키워드, 매칭 값, 정책’ 순서로 작성합니다. 아래 첫 번째 줄은 대상 도메인이 example.com과 정확히 일치할 때 DIRECT를 사용하라는 뜻입니다. 두 번째 줄의 FINAL에는 매칭 값이 없으며 기본 정책을 지정합니다.

[Rule]
DOMAIN,example.com,DIRECT
FINAL,PROXY

DIRECT와 PROXY는 도메인인가요? 아닙니다. 여기서는 정책을 뜻합니다. DIRECT는 직접 연결, PROXY는 프록시 정책을 사용한다는 의미이며, 실제로 어떤 경로로 나가는지는 현재 선택된 서버도 확인해야 합니다. 직접 설정한 정책 그룹 이름을 사용하는 경우에는 설정 파일에 실제로 정의된 이름과 일치해야 합니다. 규칙 끝에 정의되지 않은 이름을 적는 것만으로는 사용할 수 없습니다.

연결 수신대상 확인순서대로 매칭정책 선택연결 설정

이 예시를 기존 설정 파일에 그대로 덮어써도 되나요? 규칙 예시만으로 완전한 설정 파일을 만들 수는 없습니다. [Rule]은 규칙 섹션을 나타냅니다. 기존 파일을 수정할 때는 다른 설정 섹션을 보존하고 기존 규칙 섹션 안에서 항목을 조정하세요. 이 글의 example.com과 문서용 예시 IP는 문법 설명에만 사용되며, 실제로 이용할 수 있는 서버 주소가 아닙니다.

DOMAIN과 DOMAIN-SUFFIX의 차이: 매칭 범위 비교

특정 호스트 하나에만 지정한 정책을 적용하려면 DOMAIN을 사용하세요. 기본 도메인과 하위 도메인까지 함께 처리하려면 DOMAIN-SUFFIX를 사용합니다. 접미사 매칭은 도메인 레이블 경계를 따르므로, 해당 문자열이 들어간 모든 도메인에 매칭되는 것은 아닙니다.

규칙매칭되는 대상매칭되지 않는 대상
DOMAIN,example.com,DIRECTexample.comapi.example.com
DOMAIN-SUFFIX,example.com,DIRECTexample.com、api.example.comnotexample.com
DOMAIN-KEYWORD,example,DIRECTexample.com、notexample.comsample.test

DOMAIN-KEYWORD를 사용하면 안 되나요? 이 규칙은 도메인에 포함된 키워드로 매칭하므로 도메인 접미사보다 범위가 넓습니다. 이름만 비슷하고 같은 도메인 체계에 속하지 않는 대상까지 함께 처리할 수 있습니다. 전체 도메인을 알고 있다면 DOMAIN 또는 DOMAIN-SUFFIX를 우선 사용하세요. 문자열 포함 여부로 매칭해야 하는 경우에만 키워드 규칙을 고려하는 것이 좋습니다.

GEOIP와 IP-CIDR의 매칭 대상: 지역 데이터와 IP 주소 대역 구분하기

GEOIP,CN,DIRECT는 무엇을 기준으로 지역을 판별하나요? 웹페이지의 문구, 도메인 접미사, 기기의 위치가 아니라 대상 IP의 GeoIP 데이터상 위치를 기준으로 매칭합니다. 데이터에 등록된 위치가 서비스의 실제 운영 지역과 다를 수 있으므로, 요청에 사용된 대상 IP와 앱의 매칭 결과를 기준으로 확인하세요.

IP-CIDR,198.51.100.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

/24는 포트 번호인가요? 아닙니다. IPv4 프리픽스 길이입니다. 198.51.100.0/24는 198.51.100.0부터 198.51.100.255까지의 주소를 포함하고, 198.51.100.23/32는 IPv4 주소 하나만 매칭합니다. 여기에는 문서용 예시 주소 대역을 사용했습니다. 실제 설정에는 매칭할 대상 네트워크 대역을 정확히 지정하세요.

no-resolve를 추가한 뒤 일부 도메인 요청이 매칭되지 않는 이유는 무엇인가요? 매칭 시점에 사용할 대상 IP가 없고 규칙에서 도메인을 직접 조회하지 않으면 다음 규칙을 계속 확인할 수 있습니다. 특정 도메인의 트래픽을 안정적으로 분기해야 한다면 도메인 규칙을 우선 사용하세요. IP 규칙을 매칭시키려고 DNS 설정 전체를 무작정 바꾸지 마세요.

여러 규칙이 모두 매칭되면 무엇이 적용될까요? 먼저 매칭된 규칙이 우선

더 구체적인 규칙이 자동으로 우선 적용되나요? 그렇지 않습니다. 여기서 다루는 일반 규칙은 위에서 아래로 확인하며, 먼저 매칭된 규칙에 지정된 정책을 사용합니다. 특정 호스트에 대한 예외 규칙이 예상대로 적용되게 하려면 범위가 넓은 규칙보다 앞에 배치하세요.

[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,198.51.100.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
  1. api.example.com은 첫 번째 규칙에 먼저 매칭되어 PROXY를 사용합니다. 두 번째 규칙이 이를 DIRECT로 바꾸지는 않습니다.
  2. www.example.com은 첫 번째 규칙에는 매칭되지 않지만 두 번째 규칙에 해당하므로 DIRECT를 사용합니다.
  3. 대상 주소가 198.51.100.23이고 앞의 도메인 규칙에 처리되지 않았다면 예시 네트워크 대역 규칙에 매칭될 수 있습니다.
  4. 앞선 규칙에 매칭되지 않으면 GEOIP를 확인하고, 여기에도 해당하지 않는 연결은 FINAL에서 처리합니다.

FINAL을 첫 줄에 써도 되나요? 문법은 간단하지만 앞에 두면 그 지점에서 기본 처리가 끝나 뒤에 있는 일반 규칙은 적용되지 않습니다. 보통 규칙 섹션의 마지막에 둡니다. 이는 “연결에 실패하면 다음 규칙을 다시 시도”하는 설정이 아닙니다. 규칙에 일치한 뒤 연결에 실패해도 다음 줄의 정책이 자동으로 적용되지는 않습니다.

변경 사항이 적용됐는지 확인하는 법: 한 번에 대상 하나씩 테스트

저장한 뒤 웹페이지가 열리면 규칙이 올바르다는 뜻인가요? 아닙니다. 직접 연결과 프록시 연결 모두 성공할 수 있습니다. 웹페이지가 열리는지만 보지 말고 현재 설정 파일, Global Routing, 요청 대상, 실제 적용된 정책을 함께 확인해야 합니다. 여러 변경 사항이 서로 영향을 주지 않도록 대상 하나를 정해 반복 테스트하세요.

  1. 기존 설정 보관

    Config로 이동해 현재 선택된 파일을 기록하고 복구할 수 있는 사본을 보관하세요. 파일이 원격 설정에서 가져온 것이라면 업데이트 시 로컬 변경 사항이 덮어써지는지도 먼저 확인하세요.

  2. 규칙 섹션 수정

    Config에서 수정할 설정을 열고 [Rule] 섹션을 찾습니다. 먼저 범위가 명확한 DOMAIN 규칙을 추가하고, 범위가 넓은 규칙과 FINAL보다 앞에 배치하세요.

  3. 모드 확인

    저장한 뒤 해당 설정 파일이 선택되어 있는지 확인하고 Home → Global Routing → Config로 이동합니다. 현재 서버가 기존에 사용하던 유효한 연결인지 확인하세요.

  4. 새 요청 생성

    테스트 페이지를 다시 열고 앱의 요청 기록에서 같은 시각의 대상을 찾습니다. 필요한 경우 중요한 작업을 중단하지 않는 범위에서 다시 연결해 기존 장기 연결을 재사용하지 않도록 하세요.

  5. 매칭 결과 확인

    기록에 표시된 대상 도메인 또는 IP, 매칭된 규칙, 실제 정책을 확인하세요. 구체적으로 어떤 항목이 표시되는지는 앱에서 확인할 수 있습니다. 결과가 예상과 다르면 해당 규칙 위에 있는 매칭 항목부터 살펴보고, 선택한 파일이 맞는지도 확인하세요.

규칙을 수정하면 이미 연결된 모든 연결도 바뀌나요? 그렇게 단정할 수 없습니다. 브라우저의 연결 재사용, 페이지 캐시, 앱의 장기 연결 때문에 테스트가 기존 연결을 계속 사용할 수 있습니다. 새로 생성된 연결 기록을 기준으로 확인하고, 테스트가 끝나면 필요한 설정을 복구하세요. 문제 해결을 위해 임시로 선택한 모드를 계속 사용하지 마세요.

규칙은 제대로 매칭되는데 연결되지 않나요? 매칭 문제와 연결 오류 구분하기

요청 기록에 올바른 정책이 표시되면 규칙을 더 수정해야 하나요? 우선 변경을 멈추고 연결 경로를 확인하세요. 아래는 네트워크 오류에서 자주 볼 수 있는 영문 문구입니다. 전체 접두어나 표시 위치는 다를 수 있으며, 연결 단계의 문제를 나타낼 뿐 특정 도메인 규칙이 잘못됐다는 증거는 아닙니다.

오류: Connection refused

원인과 해결 방법: 대상 연결이 거부된 경우로, 주소나 포트가 잘못됐거나 서비스가 연결을 수신 대기하지 않을 때 흔히 발생합니다. 먼저 요청 기록에서 거부된 연결이 프록시 서버 연결인지 대상 연결인지 확인하세요. 그런 다음 Home에서 서버 주소와 Port, 서비스 제공업체가 안내한 매개변수를 확인하세요. 서버 포트를 웹에서 흔히 사용하는 443으로 무작정 변경하지 마세요.

오류: Operation timed out

원인과 해결 방법: 정해진 시간 안에 연결 또는 관련 작업이 완료되지 않았습니다. 먼저 Home의 Connectivity Test로 기존 서버를 확인한 다음, 현재 네트워크와 DNS, 요청에 실제로 적용된 정책을 점검하세요. 기록에 잘못된 규칙 매칭이 확인된 경우에만 해당 규칙을 조정하세요.

문제 해결 범위를 불필요하게 넓히지 않으려면 어떻게 해야 하나요? 서버 사용 가능 여부, 현재 모드, 대상 주소 확인, 규칙 매칭 순서로 점검하고 매번 변수 하나만 바꾸세요. DNS 교체, 규칙 섹션 전체 재배치, 서버 변경을 한꺼번에 하면 접속이 복구되더라도 어떤 변경이 효과가 있었는지 확인하기 어렵습니다.

자주 묻는 질문: 규칙 업데이트, DNS, FINAL 처리 방법

구독을 업데이트하면 직접 작성한 규칙도 바뀌나요?

먼저 Home의 서버 구독과 Config의 원격 설정을 구분하세요. 서버 구독 업데이트는 주로 연결 항목을 갱신하지만, 원격 설정 업데이트는 설정 내용을 바꿀 수 있습니다. 수정하기 전에 Config에서 파일 출처를 확인하고, 업데이트 후에는 [Rule] 섹션과 선택 상태를 다시 점검하세요. 두 업데이트가 같은 방식으로 작동한다고 가정하지 마세요.

같은 웹사이트에 도메인이 여러 개 나타나는 이유는 무엇인가요?

페이지가 기본 사이트, 로그인 API, 리소스 도메인에 각각 요청을 보낼 수 있습니다. DOMAIN 하나는 지정된 호스트만 처리하므로 요청 기록에서 실제로 실패한 대상을 확인한 뒤 필요한 규칙을 추가하세요. 이미지 하나가 표시되지 않는다고 범위가 넓은 DOMAIN-KEYWORD를 바로 작성하지 마세요.

FINAL,PROXY를 사용하면 모든 요청이 프록시를 거치나요?

아닙니다. 앞선 규칙에 매칭되지 않고 해당 줄까지 도달한 연결만 처리합니다. 앞에 DOMAIN-SUFFIX,example.com,DIRECT가 있다면 해당 도메인은 먼저 DIRECT를 사용합니다. 실제 연결 경로를 확인하려면 규칙 섹션의 맨 위부터 순서대로 살펴보세요.

IP-CIDR이 매칭되지 않으면 도메인 규칙을 삭제해야 하나요?

먼저 앞에 있는 도메인 규칙이 이미 매칭됐는지 확인하고, 대상이 실제로 IPv4를 사용하는지 IPv6를 사용하는지, no-resolve 때문에 해당 줄에서 직접 조회하지 않는지 점검하세요. 네트워크 대역 규칙을 우선 적용해야 한다고 확인된 경우에만 순서를 조정하세요. 한 번의 테스트를 위해 모든 도메인 규칙을 삭제하지 마세요.

App Store 정식 앱 확인개발자 및 앱 ID