이 글은 Shadowrocket에서 연결을 설정하고 라우팅 규칙을 직접 조정하려는 사용자를 위한 안내입니다. 먼저 Home → Global Routing에서 Config를 선택하고 현재 설정의 [Rule]을 확인하세요. 도메인 규칙은 이름의 매칭 범위를, IP 규칙은 대상 주소를 확인하며, FINAL은 앞선 규칙에 해당하지 않는 트래픽을 처리합니다. 이 글을 읽고 여섯 가지 규칙을 구분해 순서를 정한 다음, 단일 요청으로 결과를 확인할 수 있습니다. 프록시 연결을 다루는 경우에는 이미 이용 중인 서비스와 구독이 있다고 전제합니다.
1. 규칙 적용 조건: Config와 첫 번째 일치 규칙
규칙 유형은 ‘어떤 조건으로 매칭할지’를, 행 끝의 정책은 ‘매칭 후 어떻게 처리할지’를 나타냅니다. 두 가지를 따로 살펴보세요. DOMAIN,example.com,DIRECT의 조건은 도메인 전체가 example.com과 일치하는 것이고, 결과는 직접 연결입니다. 해당 도메인을 특정 프록시 목록에 추가하는 규칙이 아닙니다.
이 글에서는 Home → Global Routing → Config에서 라우팅하는 방법을 다룹니다. Proxy와 Direct는 각각 전체 트래픽을 프록시 또는 직접 연결로 보내는 설정이므로 여기서 설명하는 규칙 순서를 확인하는 데 사용할 수 없습니다. Scene은 상황별로 라우팅을 선택하는 별도 모드이므로 이번 테스트에는 포함하지 않습니다. Config 화면에서 실제로 수정한 설정 파일을 선택해야 합니다. 선택되지 않은 파일만 저장해도 현재 라우팅에는 영향을 주지 않습니다.
이 글의 일반 규칙 예시에서는 조건을 만족하는 첫 번째 규칙이 적용되며, 그다음의 ‘더 정확한’ 규칙을 계속 찾지 않습니다. 정확한 매칭이 포괄적인 매칭보다 자동으로 우선하는 것은 아닙니다. 우선순위는 규칙의 배치 순서로 결정됩니다.
2. DOMAIN, DOMAIN-SUFFIX, DOMAIN-KEYWORD
세 규칙은 모두 도메인을 매칭 대상으로 하며 웹 페이지 경로나 쿼리 매개변수에는 적용되지 않습니다. https://example.com/docs?q=test에 접속할 때 도메인은 example.com입니다. 페이지를 골라내기 위해 /docs나 ?q=test를 DOMAIN에 입력할 수는 없습니다.
| 규칙 | 매칭 | 매칭되지 않음 |
|---|---|---|
DOMAIN,example.com,PROXY | example.com | www.example.com |
DOMAIN-SUFFIX,example.com,PROXY | example.com、api.example.com | notexample.com、example.com.test |
DOMAIN-KEYWORD,example,PROXY | example.com、myexample.test | sample.test |
DOMAIN: 도메인 전체를 정확히 지정
api.example.com만 프록시를 사용하고 다른 하위 도메인은 기존 정책을 따르게 하려면 DOMAIN을 사용하세요. 규칙 값에는 도메인만 입력하고, 프로토콜 접두사나 포트 번호, 와일드카드는 넣지 않습니다. HTTPS에서 흔히 사용하는 대상 포트 443은 도메인 문자열에 포함되지 않으므로 DOMAIN,example.com:443,PROXY는 이 글에서 설명하는 올바른 형식이 아닙니다.
DOMAIN-SUFFIX: 기본 도메인과 모든 하위 도메인 포함
도메인 전체 계층에 규칙을 적용하려면 DOMAIN-SUFFIX를 사용하세요. 이 규칙은 도메인 계층 경계를 기준으로 매칭하므로 아무 문자열이나 접미사로 비교하지 않습니다. example.com은 static.example.com에 매칭되지만 notexample.com에는 매칭되지 않습니다. 값에는 보통 example.com을 그대로 입력하고 *.example.com으로 작성하지 않습니다.
DOMAIN-KEYWORD: 도메인에 포함된 문자열로 매칭
DOMAIN-KEYWORD는 도메인의 어느 위치에든 문자열이 있으면 매칭될 수 있어 접미사 규칙보다 범위를 제어하기 어렵습니다. 이름 일부로 분류해야 하고 오매칭 가능성도 감수할 수 있을 때만 사용하세요. 실제 대상이 기본 도메인과 그 하위 도메인이라면 DOMAIN-SUFFIX 쪽이 규칙을 검토하기 쉽습니다.
3. GEOIP와 IP-CIDR: 대상 IP 확인
도메인 규칙은 이름을 확인하고 GEOIP와 IP-CIDR은 주소를 확인합니다. GEOIP는 로컬 IP 지리 데이터베이스를 기준으로 분류합니다. 예를 들어 GEOIP,CN,DIRECT는 데이터베이스에서 CN으로 분류된 대상 IP에 직접 연결을 적용한다는 뜻입니다. 웹 페이지의 언어나 도메인 등록 국가를 확인하는 규칙이 아니며, 서버의 실제 위치를 반드시 알아내는 것도 아닙니다.
[Rule]
DOMAIN,api.example.com,PROXY
IP-CIDR,192.168.50.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
IP-CIDR은 네트워크 접두사로 IPv4 주소 범위를 나타냅니다. 192.168.50.0/24는 192.168.50.0부터 192.168.50.255까지 포함합니다. 기기 한 대만 대상으로 하려면 192.168.50.10/32를 사용할 수 있습니다. 예시의 로컬 네트워크 주소는 원격 서비스 주소가 아니므로 실제 네트워크에 맞게 바꾸세요.
- IP 주소에 직접 접속: 대상이 이미 IP 주소라면 IP-CIDR 범위에 포함되는지 바로 확인할 수 있습니다.
- 도메인으로 접속: IP 규칙 적용 여부를 확인하려면 먼저 DNS 조회 결과를 얻어야 할 수 있습니다. DNS 결과와 캐시, 연결 재사용이 확인 결과에 영향을 줄 수 있습니다.
no-resolve: 이 IP 규칙의 판단만을 위해 도메인 조회를 임의로 수행하지 말라는 뜻입니다. 앱 전체의 DNS를 끄는 옵션이 아니며, 이 규칙이 매칭할 IP 주소를 반드시 얻도록 보장하지도 않습니다.- IPv6: 이 글의 IP-CIDR 예시는 IPv4만 다룹니다. 대상이 실제로 IPv6를 사용한다면 해당 주소 계열의 규칙을 확인하세요. IPv4 네트워크 범위만으로 결과를 추정할 수 없습니다.
도메인 하나에 여러 IP 주소가 연결될 수 있으며, 주소는 네트워크 환경에 따라 바뀔 수도 있습니다. ‘이 웹사이트는 항상 같은 정책으로 연결’하는 것이 목적이라면 보통 도메인 규칙을 먼저 고려하세요. 대상 네트워크 대역이나 IP 분류를 기준으로 처리해야 할 때 IP 규칙을 사용하면 됩니다.
4. FINAL과 규칙 순서: 예외, 일반 규칙, 마지막 기본 처리
FINAL에는 도메인이나 네트워크 대역을 입력하지 않습니다. 앞선 규칙에 해당하지 않는 트래픽을 처리합니다. FINAL,DIRECT는 나머지 요청을 직접 연결하고, FINAL,PROXY는 프록시로 보냅니다. 용도에 따라 선택하는 설정이며, 어떤 경우에도 항상 정답인 하나의 규칙은 없습니다.
[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
FINAL,DIRECT
이 규칙은 ‘API 도메인만 프록시로 보내고 같은 사이트의 나머지 도메인은 직접 연결’하도록 설정합니다. api.example.com 요청은 먼저 DOMAIN에 매칭됩니다. www.example.com은 첫 번째 규칙에는 해당하지 않지만 DOMAIN-SUFFIX에 매칭됩니다. example.net은 FINAL로 처리됩니다.
| 규칙 순서 | api.example.com 요청 | 이유 |
|---|---|---|
| DOMAIN이 앞에 있는 경우 | PROXY | 정확한 예외 규칙이 먼저 매칭됩니다 |
| DOMAIN-SUFFIX가 앞에 있는 경우 | DIRECT | 포괄적인 규칙이 API 하위 도메인보다 먼저 적용됩니다 |
| FINAL이 가장 앞에 있는 경우 | DIRECT | 기본 처리 규칙이 요청을 먼저 받아 뒤에 있는 일반 규칙은 적용되지 않습니다 |
DOMAIN-KEYWORD,example,PROXY를 추가한다면 원래 직접 연결되어야 할 도메인까지 먼저 매칭하지 않는지 확인하세요. 규칙을 검토할 때는 대상 도메인이 있는지만 검색하지 말고, 파일 앞부분부터 먼저 적용될 수 있는 모든 조건을 살펴봐야 합니다.
5. Config에서 규칙 수정 및 확인
아래 내용은 [Rule] 구간만 보여주는 예시이며, 기존 설정 파일을 통째로 대체할 수 없습니다. PROXY는 이미 설정된 프록시 선택 항목을 사용합니다. 설정에서 사용자 지정 정책 그룹 이름을 참조한다면 해당 그룹이 실제로 있는지도 확인해야 합니다. 클라이언트 일회성 구매와 회선 요금제는 별개입니다. 앱을 구매해도 프록시 연결 정보가 자동으로 설정되지는 않습니다.
- 기존 설정 보관: Config로 이동해 현재 파일의 사본을 만들거나 백업을 내보내고, 어떤 설정 파일이 선택되어 있는지 기록하세요.
- 수정할 파일 편집: 수정할 설정을 열고 기존
[Rule]구간을 찾으세요. 명확한 DOMAIN 테스트 규칙을 해당 규칙에 앞서 매칭될 수 있는 규칙보다 위에 배치하고, 중복된 구간을 추가하지 마세요. - 저장 후 선택: Config에서 수정한 파일이 현재 선택되어 있는지 확인한 다음 Home → Global Routing → Config로 돌아가세요.
- 연결 준비: Home에서 이미 보유한 사용 가능한 연결이 선택되어 있는지 확인하세요. 대상 정책이 PROXY라면 Connectivity Test를 실행해 볼 수 있지만, 테스트에 성공해도 웹사이트의 모든 리소스에 접근할 수 있다는 뜻은 아닙니다.
- 새 요청 만들기: 기존 웹 페이지를 닫고 대상 페이지를 다시 여세요. 필요한 경우 연결을 끊어도 되는 상황에서 다시 연결합니다. 이미 성립한 장시간 연결은 방금 수정한 규칙을 확인하기에 적합하지 않습니다.
- 기록 확인: 이번 요청의 연결 기록에서 대상 도메인, 대상 IP, 매칭된 규칙과 실제 정책을 확인하세요. 한 번에 한 항목만 수정하고 새 요청을 보내 결과를 비교합니다.
이 글은 example.com으로 문법의 범위를 설명합니다. 표는 규칙 동작을 논리적으로 살펴보는 예시이며 실제 네트워크 속도 측정 결과가 아닙니다. 실제 테스트에는 사용자가 접근 권한을 보유하고 실제로 이용하는 대상 도메인을 사용하세요. 페이지가 빠르게 열리는지만 보고 라우팅 결과를 판단하지 마세요. 네트워크 지연 시간만으로 어떤 규칙에 매칭됐는지 알 수 없습니다.
6. 접속 실패: DNS, 연결, 규칙 문제 구분
웹 페이지 오류가 규칙 문법 오류를 뜻하는 것은 아닙니다. 먼저 요청이 예상한 정책에 매칭됐는지 확인하고, 이어서 해당 정책의 DNS 조회와 연결 경로를 점검하세요. 아래 두 항목은 DNS 응답에 사용되는 표준 오류 식별자이며 Shadowrocket에 항상 표시되는 고정 팝업 문구가 아닙니다. 실제 진단 결과에서 해당 오류가 나타나면 각각에 맞는 방법으로 확인하세요.
DNS 응답: NXDOMAIN
원인: 조회한 도메인이 존재하지 않는다고 DNS 리졸버가 응답했습니다. 이름을 잘못 입력했거나 도메인을 사용할 수 없는 경우일 수 있습니다.
해결 방법: 먼저 요청의 호스트명과 DNS 레코드를 확인한 다음 리졸버 응답을 살펴보세요. DOMAIN을 DOMAIN-SUFFIX로 바꾸는 것만으로 누락된 DNS 레코드가 생성되지는 않습니다.
DNS 응답: SERVFAIL
원인: 리졸버가 조회를 완료하지 못했습니다. 상위 DNS 조회 실패나 검증 문제 등이 원인일 수 있으며, 이 오류만으로 도메인이 존재하지 않는다고 판단할 수는 없습니다.
해결 방법: 현재 DNS 설정과 상위 DNS 서버에 연결할 수 있는지 확인하고, 같은 도메인으로 응답을 다시 확인하세요. 도메인에서 IP 주소를 얻은 다음 GEOIP 또는 IP-CIDR의 매칭 결과를 검증합니다.
IP 주소까지 조회됐는데 연결이 시간 초과된다면 DIRECT와 PROXY 경로를 나눠 확인하세요. DIRECT에 매칭됐다면 현재 네트워크에서 대상에 연결할 수 있는지 확인합니다. PROXY에 매칭됐다면 먼저 현재 프록시에 연결할 수 있는지 확인한 다음 프록시에서 대상까지의 경로를 점검하세요. FINAL 설정을 번갈아 바꾸는 것은 조건을 통제한 비교에만 사용할 수 있으며, 원인 파악을 대신하지는 못합니다.
- 잘못된 규칙에 매칭됨: Global Routing, 현재 선택된 설정 파일, 규칙 순서와 실제 요청 도메인을 확인하세요.
- 올바른 규칙에 매칭됐지만 연결할 수 없음: DNS, 대상 포트, 기존 연결의 사용 가능 여부와 대상 서비스 상태를 확인하세요.
- 페이지 리소스 일부만 로드되지 않음: 실패한 리소스마다 도메인을 확인하세요. 주소 표시줄의 기본 도메인만 살펴보면 안 됩니다.
7. 규칙 작성 시 자주 묻는 질문
DOMAIN을 설정했는데 하위 도메인에는 왜 같은 프록시가 적용되지 않나요?
DOMAIN은 도메인 전체가 일치하는 경우에만 매칭됩니다. 기본 도메인과 모든 하위 도메인에 같은 정책을 적용하려면 규칙을 DOMAIN-SUFFIX,example.com,PROXY로 바꾸고, 앞에서 먼저 매칭되는 규칙이 있는지 확인하세요.
규칙은 PROXY인데 기록에는 직접 연결로 표시됩니다. 무엇부터 바꿔야 하나요?
먼저 Home → Global Routing에서 Config가 선택되어 있는지 확인하고, Config에서 수정한 파일이 현재 선택되어 있는지 살펴보세요. 그런 다음 [Rule]의 맨 위부터 확인해 앞선 DOMAIN-SUFFIX, IP 규칙 또는 FINAL이 먼저 매칭되는지 점검합니다.
GEOIP,CN,DIRECT를 사용하면 중국어 웹사이트가 모두 직접 연결되나요?
아닙니다. GEOIP는 대상 IP를 데이터베이스 기준으로 분류하며 페이지에 표시된 언어는 확인하지 않습니다. 특정 도메인을 직접 연결해야 한다면 GEOIP 앞에 DOMAIN 또는 DOMAIN-SUFFIX 규칙을 추가하고 새 연결로 결과를 확인하세요.
일부 웹사이트만 프록시로 보내려면 FINAL을 어떻게 설정해야 하나요?
대상 도메인에 PROXY를 지정하고 필요한 예외를 앞에 배치한 다음 마지막에 FINAL,DIRECT를 사용하세요. 테스트할 때는 대상 도메인과 대상이 아닌 도메인을 모두 확인해 전자는 도메인 규칙에, 후자는 직접 연결 기본 규칙에 매칭되는지 살펴봅니다.
Settings → On Demand가 규칙의 매칭 범위를 바꾸나요?
On Demand는 조건에 따라 연결을 시작하도록 관리하는 기능이며 DOMAIN을 접미사 매칭으로 바꾸지 않습니다. 먼저 터널이 연결되어 있는지 확인하고 Config 모드에서 규칙을 살펴보세요. ‘연결 여부’와 ‘연결 후 트래픽을 어떻게 라우팅할지’를 하나의 설정으로 혼동하지 마세요.