Shadowrocket 규칙 문법 가이드: DOMAIN-SUFFIX·GEOIP·IP-CIDR·FINAL 매칭

DOMAIN, DOMAIN-SUFFIX, DOMAIN-KEYWORD, GEOIP, IP-CIDR, FINAL의 매칭 기준과 규칙이 위에서 아래로 적용되는 순서를 설명하고, PROXY, DIRECT, REJECT 작성 예시를 소개합니다.

이 글 미리보기

Shadowrocket 규칙은 연결에 적용할 정책을 결정하며, 사용할 수 있는 서버를 제공하지는 않습니다. 서버 가져오기를 마치고 Config에서 트래픽을 분리하려는 사용자를 위해 Global Routing과 구성 파일을 먼저 구분하고, 주요 규칙 키워드 여섯 가지를 살펴본 뒤 간단한 예제로 매칭 순서, DNS 조건, 실제 트래픽 출구를 확인합니다. 도메인과 주소 예시는 문법 설명용이며 실제로 사용할 수 있는 연결 경로가 아닙니다.

1. 규칙을 확인하기 전에 Config 선택하기

Shadowrocket 규칙은 연결을 켜면 반드시 한 줄씩 적용되는 것이 아닙니다. 먼저 Home에서 Global Routing을 확인하세요. 현재 구성 파일의 규칙을 사용하려면 Config를 선택해야 합니다. Config에서도 방금 수정한 파일이 실제로 활성화되어 있는지 확인하세요. 이름이 같은 다른 파일이 선택되어 있을 수도 있습니다.

옵션용도규칙 확인 시 유의 사항
Config현재 구성에 따라 트래픽 분리이 글의 규칙 예시를 확인하기 위한 전제입니다.
Proxy모든 트래픽을 프록시로 연결이 상태에서는 특정 규칙이 DIRECT를 선택하는지 확인할 수 없습니다.
Direct모든 트래픽을 직접 연결이 상태에서는 PROXY 규칙이 올바른지 판단할 수 없습니다.
Scene시나리오 조건에 따라 설정 적용먼저 현재 시나리오를 확인해 시나리오 전환을 규칙 오류로 오해하지 않도록 하세요.

Home에서는 서버를 선택하고 연결하며, Config에서는 구성 파일을 관리합니다. Settings에서는 앱 설정을 조정할 수 있습니다. Settings → On Demand는 조건에 따라 연결을 시작하는 방식에 영향을 주지만, DOMAIN-SUFFIX 규칙의 정책을 다른 것으로 자동 변경하지는 않습니다. 문제를 확인할 때는 ‘연결이 시작되는지’와 ‘연결 후 어떤 규칙이 적용되는지’를 구분하고 두 설정을 한꺼번에 바꾸지 마세요.

2. 규칙은 위에서 아래로 확인하며, 처음 일치한 항목이 정책을 결정합니다

일반적인 규칙은 영문 쉼표로 항목을 구분하며 기본 형식은 ‘규칙 유형, 매칭 값, 정책’입니다. FINAL은 매칭 값 없이 ‘FINAL, 정책’으로 작성합니다. 규칙은 순서대로 확인되고 처음 일치하는 항목의 정책이 적용됩니다. 따라서 뒤에 더 구체적인 규칙이 있더라도 계속 확인하지 않습니다. 구성에서는 ‘구체적인 예외를 먼저, 넓은 범위 규칙을 나중에, FINAL은 마지막에’ 배치하는 것이 중요합니다.

연결 정보규칙별 확인첫 매칭정책 선택트래픽 출구 적용
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
FINAL,PROXY

이 세 줄에서 api.example.com은 첫 번째 줄에 매칭되어 PROXY를 선택합니다. www.example.com은 첫 번째 줄에는 맞지 않지만 두 번째 줄에는 맞으므로 DIRECT를 선택합니다. 두 번째 줄을 첫 번째 줄 위로 옮기면 api.example.com도 먼저 접미사 규칙에 매칭되어 원래의 정확한 예외가 적용되지 않습니다. 순서가 잘못되어도 문법 오류가 반드시 발생하는 것은 아니지만 결과는 달라집니다.

3. DOMAIN, DOMAIN-SUFFIX, DOMAIN-KEYWORD의 매칭 범위

도메인 규칙은 연결에서 사용할 수 있는 도메인 정보를 기준으로 매칭하며, 웹페이지의 전체 주소를 기준으로 하지는 않습니다. 매칭 값에는 프로토콜, 포트, 경로, 쿼리 매개변수를 넣지 마세요. 예를 들어 /account 경로가 포함된 페이지에 접속해도 DOMAIN은 호스트 이름만 확인하므로 같은 호스트의 서로 다른 페이지를 구분할 수 없습니다.

키워드 및 예시매칭되는 항목매칭되지 않는 항목 또는 유의 사항
DOMAIN,example.com,DIRECTexample.comwww.example.com은 포함되지 않습니다.
DOMAIN-SUFFIX,example.com,PROXYexample.com、www.example.com、a.b.example.comnotexample.com은 포함되지 않습니다. 접미사 매칭은 도메인 레이블 경계를 따릅니다.
DOMAIN-KEYWORD,metrics,REJECT도메인에 metrics가 포함된 연결매칭 범위가 넓을 수 있으며 metrics라는 이름의 하위 도메인만 매칭하는 것은 아닙니다.

api.example.com만 프록시를 사용하게 하려면 api를 DOMAIN-KEYWORD로 지정하기보다 DOMAIN을 우선 사용하세요. DOMAIN-KEYWORD는 관련 없는 다른 도메인까지 매칭할 수 있습니다. 한 도메인과 그 모든 하위 도메인까지 포함하려면 DOMAIN-SUFFIX를 사용하세요. 이 접미사 문법 대신 와일드카드 *.example.com을 쓰지 마세요.

4. IP-CIDR, GEOIP와 DNS의 관계

IP-CIDR은 IP 주소 대역을 기준으로 매칭하고, GEOIP는 IP 지리 정보 데이터베이스의 분류 결과를 기준으로 매칭합니다. 두 규칙 모두 주소 정보를 확인하며 웹페이지 언어, 계정 지역, 도메인 끝의 국가·지역 접미사를 기준으로 하지 않습니다. 도메인 접미사만으로 해당 도메인이 GEOIP의 어떤 지역 코드에 매칭될지 단정할 수 없습니다.

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

192.0.2.0/24는 문서 예시용 네트워크 대역입니다. /24는 앞의 24비트가 네트워크 접두사라는 뜻이며, 192.0.2.0부터 192.0.2.255까지 포함합니다. 실제로 사용할 수 있는 서버 주소가 아닙니다. IP-CIDR은 주소 범위 전체를 매칭하며, 텍스트에 나온 192.0.2.0만 매칭하지 않습니다. IPv6 대역에는 해당하는 IP-CIDR6 규칙 유형을 사용하세요. IPv6 주소를 IPv4 예시에 그대로 넣으면 안 됩니다.

도메인 규칙이 매칭되지 않고 뒤의 IP 규칙에 주소 정보가 필요한 경우 DNS 상태가 매칭 과정에 영향을 줄 수 있습니다. GEOIP 결과는 실제 대상 주소와 데이터베이스 내용에 따라 달라지므로 특정 사이트의 모든 리소스를 빠짐없이 처리한다고 보장할 수 없습니다. 문제를 확인할 때는 ‘앱이 열리지 않는다’고만 기록하지 말고 구체적인 도메인, 실제 주소, 매칭된 정책을 기록하세요.

5. 간단한 규칙 집합으로 FINAL과 정책 결과 이해하기

아래 규칙은 읽고 실험하기 위한 완전한 규칙 예시이며 모든 네트워크에 권장하는 구성은 아닙니다. 사용하기 전에 기존 구성과 서버 설정 전체를 보관하고 복사본에서만 규칙을 수정하세요. [Rule]만 있는 일부 규칙을 모든 연결 매개변수가 포함된 새 구성으로 간주하지 마세요.

[Rule]
DOMAIN,blocked.example.com,REJECT
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
DOMAIN-KEYWORD,metrics,REJECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

metrics.example.com도 거부하려면 접미사 규칙 앞에 정확한 DOMAIN 예외를 추가할 수 있습니다. 키워드 규칙 전체를 위로 옮기면 metrics가 포함된 모든 도메인이 먼저 거부될 수 있습니다. 수정하기 전에 원하는 범위를 명확히 정한 뒤 ‘정확한 예외 추가’와 ‘넓은 범위 규칙 이동’ 중 하나를 선택해 한 도메인을 고치려다 영향을 넓히지 않도록 하세요.

6. 현재 구성에서 수정하고 확인하기

  1. 기존 구성 보관

    Config로 이동해 현재 사용할 수 있는 구성의 복사본을 먼저 보관한 뒤 수정할 파일의 편집 메뉴를 여세요. 되돌릴 수 있도록 파일 이름과 기존 Global Routing 설정을 기록해 두세요.

  2. 규칙 부분 확인

    구성 텍스트에서 [Rule]을 찾아 영문 쉼표로 구분된 규칙을 한 줄씩 수정하세요. 정확한 예외는 해당하는 넓은 범위 규칙보다 앞에 두고 FINAL은 마지막에 배치하세요. 순서를 정리하는 대신 [Rule] 구간을 여러 번 붙여 넣지 마세요.

  3. 활성화하고 모드 선택

    저장한 뒤 Config에서 이 파일이 사용 중인지 확인하세요. Home → Global Routing → Config로 이동합니다. 파일만 저장하고 선택하지 않았다면 방금 수정한 내용을 확인할 수 없습니다.

  4. 트래픽 출구 확인

    Home에서 기존 서버를 선택하고 Connectivity Test를 실행해 프록시 연결에 필요한 조건이 충족되는지 먼저 확인하세요. 서버와 구독 정보는 서비스 제공업체에서 받아야 합니다. 규칙 텍스트만으로 이러한 매개변수를 대신할 수 없습니다.

  5. 새 연결로 확인

    대상 요청을 다시 보내고 앱의 연결 기록에서 대상, 매칭 규칙, 트래픽 출구 정책을 확인하세요. 한 번에 하나씩만 수정하세요. 기존 연결이 계속 재사용될 수 있으므로 필요한 경우 이전 요청을 중지한 뒤 새로 연결해 테스트하세요.

Connectivity Test는 연결 가능 여부를 확인하는 기능이며 특정 웹사이트가 지정한 규칙에 매칭되었음을 단독으로 증명하지는 않습니다. 규칙은 구체적인 요청의 기록을 기준으로 확인하세요. 서버 구독과 규칙 구성도 구분해야 합니다. Home의 서버 목록을 업데이트해도 현재 Config의 규칙이 함께 업데이트되는 것은 아닙니다. 원격 구성을 다시 업데이트한 뒤에는 로컬 수정 사항이 유지되었는지도 다시 확인하세요.

7. 규칙 오류와 트래픽 출구 오류 구분하기

규칙이 PROXY에 매칭되었는데도 웹페이지가 열리지 않는다고 해서 반드시 문법 오류인 것은 아닙니다. 아래는 연결 기록에 자주 표시되는 네트워크 오류 문구입니다. 전체 오류 메시지에는 주소, 포트, 하위 계층 설명이 포함될 수 있습니다. 오류가 발생한 단계가 대상 연결인지 프록시 서버 연결인지 먼저 확인하세요.

오류: connection refused

원인과 해결: 연결 대상이 연결 요청을 거부한 상태입니다. 대상 포트가 수신 대기 중이 아니거나 연결이 명시적으로 거부된 경우가 흔합니다. 먼저 연결 기록에서 실패한 대상을 확인한 뒤 해당 서버 또는 대상 서비스의 주소와 포트를 점검하세요. FINAL의 위치를 바꾸는 것만으로는 해결할 수 없습니다.

오류: i/o timeout

원인과 해결: 제한 시간 내에 네트워크 작업이 완료되지 않았습니다. 먼저 Home의 Connectivity Test로 선택한 서버를 확인한 뒤 요청이 실제로 DIRECT와 PROXY 중 어느 쪽을 사용하는지 살펴보고 해당 경로를 점검하세요.

예를 들어 서비스 제공업체가 서버 포트로 443을 안내했다면 서버 설정의 포트도 실제로 443인지 확인해야 합니다. 규칙 예시에 443이 나온다는 이유로 기존 포트를 임의로 바꾸지 마세요. DOMAIN-SUFFIX에는 포트 필드가 없습니다. 서버의 수신 포트와 도메인 매칭 조건은 서로 다른 계층입니다.

8. 규칙 구성 관련 자주 묻는 질문

DOMAIN을 작성했는데 왜 다른 정책이 적용되나요?

먼저 Home → Global Routing에서 Config가 선택되어 있는지 확인하고 Config에서 활성화된 파일을 확인하세요. 그런 다음 해당 규칙 위에 있는 항목을 한 줄씩 살펴보세요. 특히 앞쪽의 DOMAIN-SUFFIX, DOMAIN-KEYWORD, FINAL을 확인해야 합니다. 앞선 규칙에 매칭된 연결은 뒤의 규칙까지 진행되지 않습니다.

GEOIP,CN,DIRECT로 모든 도메인 규칙을 대신할 수 있나요?

아니요. GEOIP는 대상 IP가 데이터베이스에서 어떤 지역으로 분류되는지 기준으로 판단하며, 같은 서비스도 서로 다른 지역의 리소스를 사용할 수 있습니다. 특정 도메인에 고정된 정책을 적용하려면 명확한 DOMAIN 또는 DOMAIN-SUFFIX 규칙을 GEOIP보다 앞에 배치하고 연결 기록으로 확인하세요.

구독을 새로고침했는데 규칙은 왜 그대로인가요?

먼저 업데이트한 항목을 확인하세요. Home에서 서버 구독을 업데이트하면 주로 서버 목록이 갱신됩니다. 규칙은 현재 Config에서 가져옵니다. Config로 이동해 실제 구성 내용과 활성화 상태를 확인하고 서버 이름이 바뀐 것을 규칙 업데이트의 근거로 삼지 마세요.

FINAL을 DIRECT로 바꾸면 연결 문제가 해결되나요?

이렇게 하면 앞선 규칙에 매칭되지 않은 연결의 기본 출구만 바뀝니다. 서버 매개변수나 DNS 문제를 해결하지는 않습니다. 먼저 대상이 실제로 FINAL에 매칭되는지 확인하세요. 특정 도메인에만 예외가 필요하다면 매칭 범위가 명확한 규칙을 추가하는 편이 모든 미매칭 연결의 정책을 바꾸는 것보다 낫습니다.

App Store 정식 앱 받기개발자와 앱 ID 확인