Shadowrocket의 규칙은 매칭 조건과 실행 정책으로 구성됩니다. 이미 이용 중인 서비스와 구독이 있고 설정 파일을 조정하려는 사용자를 위한 안내입니다. 먼저 Global Routing이 Config로 설정되어 있는지 확인하고, 정확한 예외 규칙을 앞에, 범위가 넓은 조건을 뒤에 배치한 다음 FINAL을 마지막에 둡니다. 마지막으로 동일한 요청을 보내 규칙이 어떻게 적용됐는지 확인하세요. 예시는 문법 설명용이며 노드나 구독을 제공하지 않습니다.
1. Global Routing을 확인한 다음 규칙 점검하기
규칙을 파일에 작성했다고 해서 현재 요청이 반드시 해당 파일의 규칙에 따라 처리되는 것은 아닙니다. Home에서는 연결과 서비스 항목을 관리하고, Config에서는 설정 파일을 관리하며, Settings에서는 앱 설정을 관리합니다. 문제를 확인할 때는 먼저 연결에 사용 중인 설정을 확인한 다음 Home → Global Routing으로 이동하세요. 이 글의 규칙 설명은 Config를 사용하는 경우를 전제로 하며, Proxy 또는 Direct로 일시적으로 처리를 덮어쓴 상황에는 적용되지 않습니다.
Config
권장현재 설정의 규칙에 따라 요청 정책을 결정합니다. PROXY, DIRECT, REJECT 중 어떤 정책이 적용될지는 실제로 일치한 규칙에 달려 있으며, 이 모드에서 미리 정해지지 않습니다.
적합한 경우: 규칙 작성, 매칭 순서 확인, 설정에 따른 일상적인 트래픽 분기
Proxy
트래픽을 프록시 모드로 처리하며, 이 글에서 설명하는 개별 규칙에 따른 일반적인 분기를 적용하지 않습니다. 같은 대상에 프록시로 연결할 수 있는지 비교할 때 사용할 수 있지만, 규칙 검증을 대신하지는 않습니다.
적합한 경우: 프록시 연결과 Config 분기 결과를 잠시 비교할 때
Direct
트래픽을 직접 연결 모드로 처리합니다. 현재 Direct를 사용 중이라면 설정에 PROXY 규칙을 추가하는 것만으로 규칙이 적용됐다고 볼 수 없습니다.
적합한 경우: 현재 네트워크에서 대상에 직접 접속한 결과를 비교할 때
Global Routing의 Scene은 상황별 설정 선택과 관련되므로, 현재 해당 Scene에서 어떤 설정을 사용하는지 확인해야 합니다. Scene은 [Rule]에 작성하는 규칙 키워드가 아닙니다. 처음 규칙을 확인할 때는 변수를 줄이기 위해 Config로 명확히 전환하세요. Settings → On Demand는 조건에 따라 연결을 시작하는 동작을 제어하며, 규칙의 순서를 바꾸지는 않습니다.
판단 기준: 먼저 모드를 고정한 뒤 규칙 하나만 변경
Config로 전환한 뒤에야 결과가 달라진다면 먼저 이전 Global Routing 또는 Scene 설정을 확인하세요. DNS, 서비스 항목, 규칙 순서를 동시에 바꾸면 어떤 변경이 영향을 줬는지 파악하기 어렵습니다.
2. 규칙 문법: 조건을 먼저, 정책을 다음에
설정 파일의 규칙은 [Rule] 섹션에 작성합니다. 일반적인 규칙은 '유형,매칭값,정책' 구조이며 영문 반각 쉼표로 구분합니다. 아래 세 줄은 각각 정확한 도메인, 도메인 접미사, 최종 정책을 보여줍니다. 예시 도메인은 문법 설명용이므로 실제 서비스 목록으로 그대로 사용하지 마세요.
[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
FINAL,PROXY
| 정책 | 동작 | 확인할 사항 |
|---|---|---|
PROXY | 프록시 경로를 통해 요청을 처리합니다. | 현재 선택된 프록시를 사용할 수 있는지 확인하세요. 설정에서 사용자 지정 정책 그룹을 사용하는 경우 그룹 내 선택 항목도 확인해야 합니다. |
DIRECT | 프록시 정책을 거치지 않고 대상에 직접 연결합니다. | 현재 로컬 네트워크에서 대상에 접속할 수 있어야 합니다. DIRECT 규칙에 일치해도 연결 성공이 보장되는 것은 아닙니다. |
REJECT | 조건에 일치하는 요청을 거부합니다. | 조건이 충분히 구체적인지 확인해 로그인, 이미지 또는 기타 필수 요청까지 차단하지 않도록 하세요. |
PROXY는 서버 주소나 프로토콜 이름이 아닙니다. Shadowsocks, VMess, VLESS, Trojan, Hysteria2, WireGuard는 연결 프로토콜에 해당합니다. 규칙은 요청에 적용할 정책을 결정하고, 서비스 항목은 실제 연결에 필요한 매개변수를 제공합니다. 프로토콜 이름, 구독 주소, 서버 포트를 규칙의 정책 위치에 입력하지 마세요. 사용자 지정 정책 그룹을 참조한다면 설정에 정의된 이름과 정확히 일치해야 합니다.
3. 매칭 순서: 위쪽 규칙에 일치하면 아래 규칙은 확인하지 않습니다
규칙은 위에서 아래로 차례대로 확인하며, 일치하면 해당 정책을 실행합니다. '더 구체적인 규칙이 자동으로 우선 적용되는' 방식이 아니며, 여러 규칙의 결과를 합치는 것도 아닙니다. 위 예시에서 api.example.com은 먼저 DOMAIN에 일치하므로 PROXY를 사용합니다. img.example.com은 첫 번째 줄에 일치하지 않아 다음 DOMAIN-SUFFIX 규칙에 따라 DIRECT를 사용합니다.
- 정확한 예외 규칙을 먼저 배치하세요. 개별 처리할 전체 도메인은 범위가 넓은 접미사 규칙보다 앞에 둘 수 있습니다. 예를 들어
DOMAIN,api.example.com,PROXY를DOMAIN-SUFFIX,example.com,DIRECT보다 먼저 배치합니다. - 그다음 범위 규칙을 배치하세요. DOMAIN-SUFFIX는 지정한 도메인과 하위 도메인을 모두 포함합니다.
example.com은example.com과a.example.com에 적용되지만, 해당 문자열이 들어 있는 모든 도메인에 적용되는 것은 아닙니다. - 거부 규칙은 신중하게 배치하세요.
DOMAIN-SUFFIX,example.com,REJECT를 먼저 작성하면 뒤에 추가한api.example.com허용 규칙은 실행되지 않습니다. - FINAL은 마지막에 배치하세요. 앞선 조건에 하나도 일치하지 않을 때 최종 정책을 적용합니다. FINAL 뒤에 작성한 규칙은 일반적인 후속 매칭에 사용할 수 없습니다.
앞의 두 줄 순서를 바꾸면 결과도 달라집니다. 아래처럼 작성하면 api.example.com이 첫 번째 줄에 먼저 일치해 직접 연결됩니다. 두 번째 줄이 더 구체적이어도 이미 결정된 결과를 바꾸지는 못합니다.
[Rule]
DOMAIN-SUFFIX,example.com,DIRECT
DOMAIN,api.example.com,PROXY
FINAL,PROXY
4. FINAL 기본 규칙과 IP 규칙의 조합
FINAL에는 도메인이나 네트워크 대역을 지정하지 않습니다. 올바른 형식은 FINAL,정책이며, 예를 들어 FINAL,PROXY 또는 FINAL,DIRECT로 작성합니다. FINAL은 연결 실패 시 재시도하는 기능이 아닙니다. PROXY 규칙에 이미 일치했지만 연결에 실패해도 아래로 내려가 FINAL을 찾아 DIRECT로 바꾸지 않습니다. FINAL은 '일치하는 조건이 없는 경우'에 적용되며 '연결에 실패한 경우'에 적용되는 것이 아닙니다.
| 규칙 형식 | 매칭 기준 | 헷갈리기 쉬운 점 |
|---|---|---|
DOMAIN-SUFFIX,example.com,PROXY | 요청에서 확인할 수 있는 도메인 접미사입니다. | 매칭값에 https://를 넣지 않으며 웹 페이지 경로도 포함하지 않습니다. |
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve | 대상의 IPv4 주소가 지정한 네트워크 대역에 속하는지 확인합니다. | /16은 네트워크 접두사이며 포트가 아닙니다. 이 예시는 192.168.0.0부터 192.168.255.255까지 포함합니다. |
GEOIP,CN,DIRECT | 대상 IP가 지리적 위치 데이터베이스에서 속하는 지역입니다. | 페이지 내용, 도메인 접미사 또는 사용자 위치를 기준으로 판단하지 않습니다. |
FINAL,PROXY | 앞선 규칙에 하나도 일치하지 않은 경우입니다. | 매칭값을 추가로 입력할 필요가 없으며 마지막에 배치해야 합니다. |
no-resolve는 이 IP 규칙의 매칭을 위해 별도의 도메인 조회를 시작하지 않도록 합니다. 앱 전체의 DNS를 끄는 옵션이 아니며, 도메인을 자동으로 IP로 변환하지도 않습니다. 요청에 사용할 수 있는 대상 IP가 이미 포함되어 있다면 해당 IP를 기준으로 확인할 수 있습니다. 도메인만 있고 사용할 수 있는 IP가 없다면 이 규칙이 반드시 일치한다고 볼 수 없습니다.
GEOIP 결과는 대상 IP와 로컬 데이터베이스에 따라 달라집니다. 같은 도메인도 조회 결과가 달라지면 매칭되는 지역 조건이 달라질 수 있습니다. 일부 도메인에 반드시 고정된 정책을 적용해야 한다면 명확한 DOMAIN 또는 DOMAIN-SUFFIX 예외를 먼저 작성하고 GEOIP와 같은 범위가 넓은 조건을 뒤에 배치하세요. '조회 성공', '규칙 매칭', '연결 성공'은 서로 다른 단계입니다.
[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
위 예시는 규칙 배치 순서의 한 사례일 뿐, 완성된 설정이나 모든 네트워크에 권장되는 목록이 아닙니다. 적용하기 전에 로컬 네트워크 대역, 대상 도메인, 최종 정책이 필요에 맞는지 확인하세요. 대상이 실제로 IPv6를 사용한다면 IPv4 IP-CIDR 규칙 하나만으로 해당 IPv6 주소를 처리할 수 없으므로 관련 규칙과 네트워크 조건을 별도로 확인해야 합니다.
5. 저장 후 규칙 적용 결과 확인하기
검증 대상은 이미 열려 있는 페이지가 아니라 새로 시작한 연결이어야 합니다. 브라우저가 기존 연결을 재사용할 수 있고 웹 페이지에 캐시가 표시될 수도 있습니다. 페이지가 계속 열리는지만으로는 방금 변경한 규칙이 적용됐는지 판단할 수 없습니다. 변경 전에 원래 설정을 저장하고, 테스트할 때마다 조건이나 정책을 하나씩만 바꾸세요.
-
설정 확인
Config로 이동해 현재 선택된 파일을 확인하세요. 해당 파일의
[Rule]섹션을 편집하고 저장해야 합니다. 활성화되지 않은 다른 사본만 수정하지 마세요. -
모드 고정
Home → Global Routing → Config로 돌아가 Proxy, Direct 또는 확인되지 않은 Scene이 아니라 Config가 선택되어 있는지 확인하세요.
-
연결 다시 시작
설정을 다시 적용한 다음 대상 요청을 새로 보내고, 필요한 경우 연결을 끊었다가 다시 연결하세요. 테스트 페이지의 기존 연결을 닫아 연결 재사용을 새 규칙의 미적용으로 오해하지 않도록 하세요.
-
기록 확인
요청 기록에서 실제 대상 도메인 또는 IP, 일치한 규칙, 적용된 정책을 확인하세요. 페이지에서 여러 도메인을 사용하는 경우 기본 문서, 로그인 API, 리소스 요청을 구분해 살펴보세요.
-
테스트 항목 복원
원래 규칙, 변경 내용, 결과를 기록하고 임시로 추가한 거부 또는 예외 규칙을 되돌리세요. 정상적으로 접속해야 하는 서비스 도메인에 테스트용 REJECT를 남기지 마세요.
예를 들어, 사용 권한이 있는 테스트 도메인을 REJECT로 설정하면 새 대상 요청이 거부되어야 합니다. 다만 페이지의 기존 문구는 캐시에서 계속 표시될 수 있고 다른 도메인에서 불러온 이미지도 남아 있을 수 있습니다. 이는 검증 방법을 설명하는 예시이며 이 사이트에서 직접 측정한 결과가 아닙니다. 웹 페이지 전체가 즉시 빈 화면이 되는지를 기준으로 삼지 말고 해당 요청의 기록을 확인하세요.
6. 규칙 관련 자주 묻는 질문
FINAL,PROXY를 설정했는데 일부 요청이 왜 직접 연결되나요?
먼저 Home → Global Routing → Config인지 확인한 다음 요청이 앞선 DIRECT 규칙에 이미 일치했는지 살펴보세요. FINAL은 앞선 규칙에 하나도 일치하지 않은 요청에만 적용됩니다. 앞쪽에 DOMAIN-SUFFIX, IP-CIDR 또는 GEOIP의 DIRECT 조건이 있다면 FINAL을 반복해서 추가하지 말고 해당 줄을 먼저 확인하세요.
URL 전체를 DOMAIN-SUFFIX에 그대로 붙여 넣어도 되나요?
URL 형식 그대로 입력하면 안 됩니다. https://api.example.com/login에서 호스트 이름을 추출하세요. 해당 호스트만 처리하려면 DOMAIN,api.example.com,PROXY로 작성합니다. 루트 도메인과 하위 도메인을 모두 포함해야 할 때만 DOMAIN-SUFFIX,example.com,PROXY를 사용하고, 프로토콜·포트·경로는 넣지 마세요.
PROXY에 일치했는데 열리지 않아요. 규칙 순서가 잘못된 건가요?
기록에 예상한 규칙과 PROXY가 표시된다면 트래픽 분기 선택 단계는 정상적으로 끝난 것입니다. 다음으로 도메인 조회, 현재 프록시의 사용 가능 여부, 대상 서비스 상태를 각각 확인하세요. 지연 시간 테스트가 정상이라는 것은 해당 테스트에 응답이 있었다는 뜻일 뿐, 대상 도메인의 조회나 웹사이트 접속까지 성공한다는 의미는 아닙니다.
REJECT를 추가한 뒤 로그인이 실패합니다. 어떻게 복구하나요?
먼저 방금 추가한 거부 규칙을 되돌리고 연결을 다시 시작해 테스트하세요. 로그인이 복구되면 차단된 도메인이 인증 API에 사용되는지 확인합니다. 허용해야 하는 정확한 DOMAIN 예외는 범위가 넓은 REJECT보다 앞에 두거나 거부 조건의 범위를 줄이세요. 의존 관계를 모르는 상태에서 서비스의 루트 도메인 전체를 거부하지 마세요.
설정을 정리할 때는 먼저 적은 수의 규칙으로 각 테스트 결과를 설명할 수 있게 한 다음 적용 범위를 점차 넓히세요. 규칙을 하나 추가할 때마다 세 가지를 확인할 수 있어야 합니다. 무엇과 일치하는가, 앞에 이를 가로채는 조건이 있는가, 일치하면 어떤 정책을 사용하는가. 이 세 가지가 분명하다면 FINAL은 마지막에 두는 명확한 선택일 뿐, 앞선 규칙의 오류를 가리는 임시방편이 아닙니다.
Shadowrocket 다운로드 및 설정 방법 보기
2가지 설치 경로: iPhone/iPad 버전은 App Store에서 $2.99 일회성 결제로 제공되며, 시스템 요구 사항은 App Store 페이지 표기를 기준으로 합니다. Mac(Apple 실리콘/Intel), Windows, Android, Linux 버전은 무료입니다. 다운로드 페이지에서 기기에 맞는 플랫폼을 선택하거나 시작 안내에서 설정 방법을 확인하세요. 이 사이트는 노드나 구독을 제공·판매·추천하지 않습니다. 이미 이용 중인 서비스를 사용하세요.