Shadowrocket 규칙은 매칭 대상, 규칙 순서, 매칭 후 적용되는 정책 순으로 확인해야 합니다. 이미 사용할 서비스 설정이나 구독을 보유하고 Config를 수정하려는 사용자를 위한 안내입니다. 도메인 규칙과 IP 규칙을 구분하고, 최소한의 규칙을 작성한 뒤 연결 기록을 통해 규칙이 적용되지 않는 원인을 찾는 방법을 설명합니다. 이 사이트는 서버나 구독을 제공하거나 판매하거나 추천하지 않습니다.
규칙 형식: 유형, 매칭 값, 정책
일반적인 규칙은 쉼표로 항목을 구분하며, DOMAIN-SUFFIX,example.com,DIRECT와 같은 형식입니다. 첫 번째 항목은 검사 유형, 두 번째 항목은 매칭 조건, 세 번째 항목은 매칭 후 연결 처리 방식을 지정합니다. 규칙은 웹페이지 URL 필터가 아닙니다. 도메인 항목에는 https://, 경로, 쿼리 매개변수 또는 포트를 입력하지 않습니다.
[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,tracker,REJECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
다음은 문법 설명을 위한 예시이며 모든 네트워크에 적용할 수 있는 완전한 설정이 아닙니다. [Rule]은 규칙 섹션입니다. 기존 설정을 수정할 때는 해당 섹션을 편집하고, 같은 섹션을 중복으로 추가하지 마세요. example.com과 192.0.2.0/24는 문서용 예시 값이며 실제 서비스에 연결할 수 있는지 확인하는 데 사용할 수 없습니다.
DIRECT: 대상에 직접 연결합니다. 실제 연결 여부는 현재 네트워크 환경의 영향을 받습니다.PROXY: 프록시 정책으로 연결을 처리합니다. 사용하기 전에 현재 설정의 정책 참조와 Home에서 선택할 수 있는 항목을 확인하세요.REJECT: 매칭된 연결을 거부합니다. 웹페이지의 특정 요소를 삭제한다는 뜻은 아닙니다.- 사용자 지정 정책 이름은 설정에 정의된 이름과 정확히 일치해야 합니다. 이름 오타와 매칭 조건 오류는 서로 다른 문제입니다.
FINAL에는 매칭 값이 없으므로 FINAL,PROXY로 작성합니다. FINAL,example.com,PROXY처럼 세 항목 형식으로 작성하면 안 됩니다. 예시의 no-resolve는 IP 규칙의 추가 매개변수이지, 네 번째 정책이 아닙니다.
DOMAIN 계열: 정확한 도메인, 접미사, 포함 문자열
도메인 규칙은 특정 도메인에 어떤 정책을 적용할지 결정합니다. 세 규칙의 차이는 매칭 범위에 있으며 우선순위에 있지 않습니다. 아래 예시는 같은 도메인을 기준으로 합니다. 표의 ‘매칭’은 조건이 성립한다는 의미이며, 실제로 해당 규칙이 적용되는지는 앞선 규칙이 먼저 매칭되는지에 따라 달라집니다.
| 규칙 예시 | 매칭되는 대상 | 매칭되지 않는 대상 |
|---|---|---|
DOMAIN,example.com,DIRECT | example.com | www.example.com |
DOMAIN-SUFFIX,example.com,DIRECT | example.com、www.example.com | notexample.com、example.com.other.test |
DOMAIN-KEYWORD,example,DIRECT | example.com、notexample.com | 도메인에 example이 포함되지 않은 대상 |
DOMAIN-SUFFIX는 도메인 레이블 경계를 기준으로 판단하므로, 끝부분의 문자가 같다고 해서 매칭되는 것은 아닙니다. 일반적으로 example.com만 입력하면 되며 *.를 추가할 필요가 없습니다. api.example.com만 처리하고 다른 하위 도메인에는 영향을 주지 않으려면 DOMAIN을 사용하는 편이 범위를 확인하기 쉽습니다.
앱은 메인 사이트, 로그인, 이미지, API 등 여러 도메인에 동시에 연결할 수 있습니다. 메인 사이트에 규칙 하나를 추가했다고 해서 다른 요청에도 적용되는 것은 아닙니다. 키워드 범위를 계속 넓히기보다 연결 기록을 확인해 요청별로 점검하세요.
GEOIP와 IP-CIDR: IP의 지역 정보와 주소 범위
GEOIP,CN,DIRECT는 사용 중인 지리 정보 데이터베이스를 기준으로 대상 IP의 지역을 확인합니다. 웹페이지 언어, 도메인 접미사, 사용자의 현재 위치 또는 서비스 제공자의 등록지를 기준으로 판단하지 않습니다. 도메인은 지역이 다른 IP로 해석될 수 있으므로 ‘중국어 사이트는 반드시 CN에 매칭된다’고 보고 문제를 진단하는 것은 적절하지 않습니다.
IP-CIDR는 IPv4 주소와 접두사 길이로 주소 범위를 판단합니다. 예를 들어 192.0.2.0/24는 192.0.2.0부터 192.0.2.255까지 포함하며, 192.0.2.8/32는 주소 하나만 매칭합니다. IPv6 주소 범위에는 해당하는 IP-CIDR6를 사용하고, IPv6 주소를 IPv4 예시에 입력하지 마세요.
IP-CIDR,192.0.2.8/32,DIRECT,no-resolve
IP-CIDR,192.0.2.0/24,PROXY,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
위 예시에서는 단일 주소 예외를 더 넓은 주소 범위보다 앞에 배치했습니다. 대상이 192.0.2.8이면 첫 번째 규칙이 먼저 매칭되므로 두 번째 규칙은 결과를 바꾸지 않습니다. 순서를 뒤집으면 범위가 넓은 /24 규칙이 이 주소를 먼저 처리합니다.
no-resolve는 해당 IP 규칙을 위해 도메인 해석을 새로 요청하지 않는다는 뜻입니다. ‘모든 DNS를 끈다’는 의미는 아닙니다.- 요청 대상이 IP 주소이거나 매칭 시점에 사용할 수 있는 대상 IP가 이미 있다면
no-resolve가 포함된 규칙에 매칭될 수 있습니다. - 도메인만 있고 사용할 수 있는 IP가 없다면, 이 규칙의 매칭을 위해 추가 해석이 이루어질 것으로 기대해서는 안 됩니다. 요청은 다음 규칙을 계속 확인할 수 있습니다.
- 같은 서비스의 IP 주소는 바뀔 수 있습니다. 한 번 해석된 IP를 영구히 유효한 설정값으로 취급하지 마세요.
규칙 순서: 구체적인 예외를 먼저, FINAL은 마지막에
규칙은 순서대로 확인되며, 처음 매칭된 규칙이 해당 연결의 정책을 결정합니다. 아래쪽에 있는 규칙이 더 구체적으로 보여도 결과를 덮어쓰지 않습니다. DOMAIN이 자동으로 DOMAIN-SUFFIX보다 먼저 처리되는 것도 아니며, IP-CIDR의 범위가 작다고 우선 적용되는 것도 아닙니다.
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
이 순서에서는 login.example.com에 DIRECT, img.example.com에 PROXY가 적용되고, 앞의 두 조건에 해당하지 않는 대상에는 FINAL이 적용됩니다. 접미사 규칙을 첫 번째 줄로 옮기면 로그인 도메인도 먼저 매칭되어 정확한 도메인 예외가 적용되지 않습니다.
먼저 범위가 명확한 예외 규칙을 몇 개 작성하고, 그다음 범위가 넓은 도메인이나 주소 규칙을 배치한 뒤, 설명 가능한 FINAL 규칙을 마지막에 두는 것이 좋습니다. 관리하기 쉬운 배열 방식일 뿐, 모든 설정에서 규칙 유형을 기계적으로 분류해야 한다는 뜻은 아닙니다.
Config에서 규칙 수정 및 확인
테스트 전에 원래 설정을 보관하고, 현재 활성화된 설정과 편집 중인 파일이 같은지 확인하세요. 구독에 포함된 서버 항목 업데이트와 Config의 규칙 파일 수정은 별개의 작업입니다. Home에서 기존 구독을 새로고침해도 현재 활성화된 규칙을 확인하는 작업을 대신할 수 없습니다.
-
기존 설정 보관
Config로 이동해 복구할 수 있는 설정 사본을 먼저 보관한 다음, 대상 설정의 편집 화면을 여세요.
[Rule]을 찾아 수정하려는 위치가 규칙 섹션인지 확인합니다. -
규칙 하나 추가
범위가 명확한
DOMAIN규칙 하나를 먼저 추가하고, 이 규칙보다 먼저 매칭될 수 있는 접미사 또는 키워드 규칙 앞에 배치하세요. 한 번에 조건 하나만 변경한 뒤 저장합니다. -
규칙 설정 활성화
Config에서 방금 저장한 설정이 선택되어 있는지 확인한 다음 Home → Global Routing → Config로 이동하세요. Proxy와 Direct는 전체 연결에 적용되는 모드이므로, 개별 규칙의 분기 동작을 확인하는 방법으로 사용할 수 없습니다.
-
새 연결 시작
대상 페이지를 다시 열거나 앱에서 요청을 새로 보내고, 연결 기록에서 대상, 매칭된 규칙, 정책을 확인하세요. 기존 연결이 계속 재사용될 수 있으므로 수정 전에 열어 둔 페이지만 확인해서는 안 됩니다.
-
매칭 결과 확인
기록에 다른 규칙이 표시되면 먼저 해당 규칙의 위치를 확인하세요. 예상한 규칙에 매칭됐지만 연결에 실패했다면 그다음 아웃바운드 연결을 점검합니다. 검증을 마친 뒤 다른 조건을 하나씩 추가하세요.
Global Routing의 Scene은 시나리오 설정에 따라 현재 실제로 적용되는 정책을 확인해야 합니다. 처음 규칙을 확인할 때는 Config를 명시적으로 선택해 변수를 줄일 수 있습니다. Settings → On Demand는 조건에 따라 VPN 연결을 시작하는 동작을 설정합니다. DOMAIN-SUFFIX의 매칭 범위를 바꾸거나 활성 설정 선택을 대신하지는 않습니다.
테스트 결과는 새 연결의 기록을 기준으로 확인하고, 페이지가 열리는지만으로 판단하지 마세요. 페이지 캐시 때문에 실패한 것처럼 보이는 연결이 성공한 것처럼 나타날 수 있으며, 백그라운드 API 요청이 실패해도 메인 페이지는 표시되면서 로그인이 완료되지 않을 수 있습니다.
규칙 미적용과 연결 실패를 구분해 확인
‘어떤 규칙에 매칭됐는가’와 ‘매칭 후 연결에 성공했는가’는 별개의 문제입니다. 다음은 네트워크 연결에서 표시될 수 있는 오류 문구의 예시이며, 규칙 문법 오류가 아닙니다. 먼저 매칭된 규칙과 정책을 확인한 뒤에 연결 오류를 점검하세요.
오류: Connection refused
원인 및 해결 방법: 연결 대상에서 요청을 거부한 경우입니다. 주소, 포트 또는 서비스가 요청과 일치하지 않을 때 발생할 수 있습니다. 먼저 연결 기록에 표시된 실제 연결 대상을 확인한 뒤, 기존 설정의 포트와 서비스 상태를 점검하세요. 포트 문제를 해결하기 위해 DOMAIN-SUFFIX를 수정해서는 안 됩니다.
오류: Operation timed out
원인 및 해결 방법: 제한 시간 안에 작업이 완료되지 않은 경우입니다. 네트워크 경로, 대상 또는 프록시 연결이 원인일 수 있습니다. 먼저 매칭된 정책을 확인하고 대상에 대한 접근과 기존 프록시 연결을 각각 점검하세요. 이 오류 문구만으로 GEOIP 데이터나 규칙 순서에 문제가 있다고 단정할 수 없습니다.
DOMAIN을 설정했는데 하위 도메인에는 왜 적용되지 않나요?
DOMAIN은 입력한 전체 도메인만 매칭합니다. 기본 도메인과 하위 도메인을 함께 처리하려면 DOMAIN-SUFFIX,example.com,DIRECT를 사용하고, 위쪽에 먼저 매칭되는 규칙이 없는지 확인하세요.
FINAL을 맨 앞에 두면 어떻게 되나요?
해당 줄까지 도달한 요청이 모두 이 규칙에 매칭되어 이후 규칙이 예상대로 적용되지 않습니다. 기본 규칙을 규칙 섹션의 마지막으로 옮긴 다음 새 연결을 시작하고 매칭 기록을 확인하세요.
no-resolve가 포함된 IP-CIDR 규칙에 왜 매칭되지 않나요?
먼저 해당 요청에 사용할 수 있는 대상 IP가 있는지 확인한 다음, 주소가 접두사 범위에 포함되는지 확인하세요. 도메인만 있고 사용할 수 있는 IP가 없다면 이 규칙은 매칭을 위해 주소를 해석하지 않습니다. 매칭되지 않았다고 해서 바로 접두사 문법 오류라고 판단하지 마세요.
REJECT에 매칭됐는데 왜 비슷한 콘텐츠가 계속 표시되나요?
REJECT는 매칭된 연결을 거부할 뿐 페이지 콘텐츠를 분류하지 않습니다. 콘텐츠가 다른 도메인에서 제공되는지 또는 로컬 캐시에서 불러온 것인지 먼저 확인하세요. 같은 도메인이 필요한 API도 제공한다면 거부 범위를 넓혀 정상 기능에 영향을 줄 수 있습니다.
마지막으로 활성 Config, Global Routing 모드, 요청 대상, 처음 매칭된 규칙, 최종 정책, 실제 연결 결과를 정해진 순서대로 확인하세요. 키워드는 규칙 키워드 용어집에서 더 살펴볼 수 있습니다. 도메인 해석 동작은 DNS 설정 안내를 참고해 해석 문제와 규칙 범위를 혼동하지 마세요.