Shadowrocket에서 Global Routing을 Config로 선택하면 현재 Config의 Rule 섹션에 따라 트래픽을 라우팅할 수 있습니다. 이미 사용할 서비스와 Config를 갖춘 상태에서 특정 사이트만 프록시로 연결하려는 경우를 대상으로 합니다. 먼저 도메인 규칙을 만들고 FINAL,DIRECT로 마무리한 다음 요청 기록에서 실제로 어떤 규칙이 적용됐는지 확인하세요. 예시 도메인은 문법 설명을 위한 것으로, 회선이나 서비스를 추천하는 의미가 아닙니다.
먼저 Config와 프록시 출구 확인하기
규칙 라우팅이 제대로 작동하려면 두 가지를 확인해야 합니다. 현재 사용하는 Config에 대상 규칙이 포함되어 있어야 하고, Home의 Global Routing이 Config로 설정되어 있어야 합니다. Config 파일을 편집하는 것만으로 모든 트래픽이 해당 파일에 따라 라우팅되는 것은 아닙니다. 편집한 파일이 현재 선택된 Config인지도 확인하세요.
Global Routing의 Proxy는 모든 트래픽을 프록시로 보내는 설정이고, Direct는 모든 트래픽을 직접 연결하는 설정입니다. 둘 다 이 글에서 다루는 ‘특정 사이트는 프록시, 나머지는 직접 연결’ 방식의 확인에는 적합하지 않습니다. Scene은 상황별 설정을 선택하는 기능이므로 현재 파일을 사용하는 Config 모드와 동일하게 볼 수 없습니다. 문제를 확인할 때는 Config가 선택되어 있는지 먼저 살펴보고, Scene 전환으로 테스트 조건이 바뀌지 않도록 하세요.
PROXY는 프록시 정책을 뜻하며, 일반적으로 현재 선택된 프록시 출구를 사용합니다. DIRECT는 대상에 직접 연결합니다. 기존 파일에서 사용자 지정 정책 그룹을 사용한다면 그룹 이름과 그룹 안의 선택 항목을 먼저 확인하세요. 그룹 이름, 서버 표시 이름, 내장 정책은 서로 다른 항목입니다. 이 글에서는 별도의 그룹 정의를 추가하지 않도록 PROXY와 DIRECT만 사용합니다.
- Home에서 사용할 수 있는 기존 프록시 출구를 선택하고 Connectivity Test로 기본 연결 상태를 확인하세요.
- Config로 이동해 현재 파일을 백업한 다음, 이번 테스트에 사용할 로컬 사본을 편집하세요.
- 수정한 사본이 선택되어 있는지 확인한 뒤 Home → Global Routing → Config로 돌아가세요.
- 연결을 켠 뒤 대상 사이트에 다시 접속하세요. 기존 연결이 이전 출구를 계속 사용할 수 있으므로 새 규칙을 확인하는 기준으로 삼아서는 안 됩니다.
DOMAIN-SUFFIX와 FINAL을 사용하는 최소 규칙
example.com과 하위 도메인은 프록시로 연결하고 나머지 요청은 직접 연결하려면 핵심 규칙 두 줄이면 됩니다. 아래는 독립된 Rule 섹션의 예시이며, 기존 Config 전체를 덮어쓸 파일이 아닙니다. 기존 파일에 [Rule]이 있다면 해당 섹션을 편집하고 같은 이름의 섹션을 중복으로 추가하지 마세요.
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
DOMAIN-SUFFIX,example.com,PROXY는 도메인 접미사를 기준으로 일치하며 example.com 자체와 www.example.com, api.example.com 같은 하위 도메인을 포함합니다. 입력할 값은 도메인이므로 https://, 포트, 경로는 넣지 않습니다. 전체 웹 주소를 입력할 필요가 없고 도메인 앞에 *.을 붙이지 않아도 됩니다.
FINAL,DIRECT에는 도메인 매개변수가 없습니다. 앞선 규칙에 일치하지 않은 요청은 최종적으로 DIRECT를 사용합니다. 이는 ‘나머지 트래픽은 직접 연결’한다는 뜻이지, ‘먼저 직접 연결을 시도하고 실패하면 자동으로 프록시로 전환’한다는 의미가 아닙니다. 두 번째 대상 사이트를 추가하려면 새 도메인 규칙을 FINAL보다 앞에 두세요.
DOMAIN-KEYWORD는 언제 사용하나요?
DOMAIN-KEYWORD는 도메인에 포함된 키워드를 기준으로 일치시키므로 일반적으로 DOMAIN-SUFFIX보다 범위가 넓습니다. 웹페이지 본문, URL 경로, 검색어를 기준으로 일치시키는 규칙은 아닙니다. 예를 들어 다음 규칙의 media는 특정 사이트만이 아니라 도메인에 이 문자열이 포함된 요청과 일치합니다.
[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,media,PROXY
FINAL,DIRECT
첫 번째 도메인 규칙은 의도적으로 설정한 예외입니다. login.example.com은 직접 연결하고, example.com에 해당하는 나머지 요청은 프록시로 연결합니다. 그 밖에도 도메인에 media가 포함된 요청은 프록시로 연결합니다. 이 예시는 적용 범위와 순서를 설명하기 위한 것이며, 모든 사용자가 media 키워드를 추가해야 한다는 뜻은 아닙니다. 일부 지정된 사이트만 프록시로 연결하려면 DOMAIN 또는 DOMAIN-SUFFIX를 우선 사용하세요.
| 규칙 키워드 | 일치 기준 예시 | 적용 범위 |
|---|---|---|
| DOMAIN | login.example.com | 해당 도메인에만 정확히 일치하며 다른 하위 도메인에는 자동으로 적용되지 않습니다. |
| DOMAIN-SUFFIX | example.com | 해당 도메인과 하위 도메인에 일치하므로 사이트 단위 라우팅에 적합합니다. |
| DOMAIN-KEYWORD | media | 도메인에 포함된 문자열과 일치하므로 프록시로 연결할 생각이 없던 도메인까지 포함될 수 있습니다. |
| FINAL | 도메인 매개변수 불필요 | 앞선 규칙에 일치하지 않은 요청에 적용되므로 Rule 섹션의 마지막에 두어야 합니다. |
규칙 순서: 처음 일치하는 규칙이 적용됩니다
Rule 섹션은 위에서 아래 순서로 확인합니다. 요청이 유효한 규칙 하나와 일치하면 해당 규칙의 정책을 사용하며, 아래쪽에서 ‘더 정확한’ 규칙을 계속 찾지 않습니다. 구체적인 예외를 넓은 범위의 규칙보다 앞에 두고 FINAL을 마지막에 배치하는 것이 규칙 구성에서 가장 중요합니다.
앞 절의 예시에서 DOMAIN-SUFFIX,example.com,PROXY를 DOMAIN,login.example.com,DIRECT보다 앞에 두면 login.example.com은 먼저 PROXY와 일치하므로 뒤에 있는 DIRECT 예외가 적용되지 않습니다. 마찬가지로 FINAL을 앞쪽에 배치하면 뒤에 있는 규칙이 예상대로 작동하지 않습니다.
- 구체적인 예외를 먼저 배치: 로그인 도메인을 직접 연결해야 한다면 해당 DOMAIN 규칙을 DOMAIN-SUFFIX보다 앞에 두세요.
- 그다음 사이트 범위 설정: 프록시로 연결할 기본 도메인과 하위 도메인은 DOMAIN-SUFFIX로 지정하세요.
- 키워드는 신중하게 추가: DOMAIN-KEYWORD는 범위가 넓으므로 추가한 뒤에는 의도치 않게 일치하지 않아야 하는 도메인도 함께 테스트하세요.
- 마지막으로 기본 규칙 설정: 나머지를 직접 연결하려면 FINAL,DIRECT를 사용하고, 그 앞에 적용 범위가 큰 규칙이 있는지 확인하세요.
기존 Config에 RULE-SET, GEOIP 또는 IP-CIDR이 있다면 새로 추가한 두 줄만 보지 말고 함께 확인하세요. 해당 규칙이 앞쪽에서 먼저 일치하면 요청은 기존 정책에 따라 처리됩니다. 새 규칙을 파일 맨 끝, 특히 FINAL 뒤에 추가해도 적용된다고 보장할 수 없습니다.
IP-CIDR, GEOIP와 도메인 라우팅의 차이
DOMAIN-SUFFIX는 도메인을, IP-CIDR은 대상 IP가 속한 네트워크 대역을, GEOIP는 IP의 지리적 위치 정보를 기준으로 일치시킵니다. 세 규칙은 기준이 서로 다릅니다. 일부 사이트만 프록시로 연결하려는 경우에는 도메인 규칙부터 설정하는 편이 확인하기 쉽습니다. 같은 사이트도 IP가 바뀔 수 있고, 여러 사이트가 하나의 IP 주소를 공유할 수도 있기 때문입니다.
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,DIRECT
여기에서 사용하는 192.0.2.0/24는 문서 예시용 네트워크 대역이며 실제 사이트 주소로 복사해 쓰면 안 됩니다. no-resolve는 이 IP 규칙과 일치시키기 위해 별도로 도메인 조회를 하지 않도록 하는 옵션이며, 모든 DNS를 끈다는 뜻은 아닙니다. GEOIP,CN,DIRECT는 대상 IP가 CN으로 분류될 때 직접 연결한다는 의미입니다. 특정 도메인을 반드시 프록시로 연결해야 하는 경우 이를 대신할 수 없습니다.
- 앱이 IP 주소로 직접 접속하고 요청에 사용할 수 있는 도메인 정보가 없다면 도메인 규칙이 일치하지 않을 수 있습니다.
- 사이트가 여러 콘텐츠 전송 도메인을 사용한다면 기본 도메인만 지정해서는 모든 리소스를 처리하지 못할 수 있습니다.
- HTTPS에서 일반적으로 사용하는 대상 포트는 443이지만, 이 글의 도메인 규칙은 443 포트를 기준으로 일치하지 않으며 브라우저에만 적용되는 것도 아닙니다.
- DNS 조회 경로와 연결 출구는 각각 확인해야 합니다. PROXY 규칙과 일치했다고 해서 모든 DNS 조회 요청도 같은 경로를 사용한다는 뜻은 아닙니다.
저장한 뒤 요청 기록으로 확인하기
Connectivity Test에 결과가 표시되어도 해당 테스트 조건에서 출구에 어느 정도 연결성이 있다는 뜻일 뿐, 특정 사이트가 지정한 규칙과 일치했다는 증거는 아닙니다. ‘대상 사이트, 일반 사이트, 예외 도메인’ 세 가지 요청을 비교한 뒤 요청 기록에서 대상, 일치한 규칙, 정책을 확인하세요.
- Config를 저장하고 방금 수정한 파일이 현재 선택되어 있는지 확인하세요.
- Home → Global Routing이 계속 Config로 설정되어 있는지 확인하세요. Settings → On Demand를 설정한 적이 있다면 자동 실행으로 연결 상태가 바뀌지 않았는지도 살펴보세요.
- 대상 페이지의 기존 연결을 닫고, 필요한 경우 Shadowrocket을 다시 연결한 뒤 새 페이지 요청을 보내세요.
- 관련 요청 기록을 확인하세요. 대상 도메인은 DOMAIN-SUFFIX 또는 다른 명시적 규칙과 일치하고 정책은 PROXY여야 합니다. 범위에 없는 도메인은 FINAL에 따라 DIRECT로 연결되어야 합니다.
- 리소스 요청이 실패하면 브라우저 주소창의 기본 도메인만 보고 판단하지 말고 실제 리소스 도메인을 기록하세요.
아래는 네트워크 오류나 로그에 표시될 수 있는 일반적인 오류 문구입니다. 실제 표시 방식은 요청을 보낸 앱과 시스템에 따라 달라집니다. 이러한 오류는 연결 실패를 뜻하지만, 그 자체만으로 규칙 문법에 문제가 있다고 단정할 수는 없습니다. 먼저 어떤 정책이 적용됐는지 확인한 뒤 프록시 출구, 직접 연결 경로, 대상 서비스 중 어디에 문제가 있는지 살펴보세요.
오류: Connection refused
원인: 연결하려는 대상 주소 또는 프록시 포트에서 연결을 거부했습니다. 해결 방법: 요청에 PROXY 또는 DIRECT 중 어떤 정책이 적용됐는지 확인한 다음 해당 주소와 포트가 올바른지 살펴보세요. 프록시 출구 정보는 사용 중인 서비스 제공업체의 Config와 일치해야 합니다.
오류: Operation timed out
원인: 제한 시간 안에 연결 또는 응답이 완료되지 않았습니다. 현재 네트워크, 출구 또는 대상 사이트가 원인일 수 있습니다. 해결 방법: 먼저 Connectivity Test를 실행한 뒤 같은 사이트의 요청 기록과 비교하세요. 프록시를 사용해야 하는 요청에 FINAL,DIRECT가 적용됐다면 우선 규칙 범위를 수정하세요.
특정 사이트 라우팅 관련 자주 묻는 질문
규칙을 추가했는데 왜 모든 사이트가 여전히 프록시로 연결되나요?
먼저 Home → Global Routing에서 Proxy가 아니라 Config가 선택되어 있는지 확인하세요. 그런 다음 현재 Config에 앞에서 먼저 일치하는 범위가 넓은 PROXY 규칙이 있는지, FINAL도 PROXY로 설정되어 있는지 확인합니다. 한 번에 조건 하나만 변경하고 새 요청으로 확인하세요. 여러 설정을 동시에 바꾸면 결과를 비교하기 어렵습니다.
웹페이지는 열리지만 이미지와 로그인이 실패합니다. 어떤 규칙을 추가해야 하나요?
먼저 요청 기록에서 실패한 리소스의 실제 도메인을 찾으세요. 별도의 도메인이라면 해당 도메인을 대상으로 DOMAIN 또는 DOMAIN-SUFFIX 규칙을 추가하고 FINAL보다 앞에 배치하세요. 페이지 일부가 실패한다고 해서 흔한 키워드 하나를 광범위하게 추가하지 마세요. 관련 없는 사이트까지 포함될 수 있습니다.
기존 구독을 업데이트한 뒤 사용자 지정 규칙이 사라지는 이유는 무엇인가요?
서버 구독과 원격 Config는 서로 다른 항목입니다. 서버 목록을 업데이트해도 Rule이 바뀌는 것은 아니지만, 원격 Config를 다시 가져오면 해당 파일에 저장된 로컬 수정 내용이 덮어써질 수 있습니다. 사용자 지정 규칙은 직접 관리할 수 있는 로컬 사본에 보관하세요. 업데이트 후에는 현재 선택된 Config와 Rule 섹션을 확인하고 비교해야 합니다.
다른 프로토콜로 바꾸면 DOMAIN-SUFFIX를 다시 작성해야 하나요?
대부분은 그럴 필요가 없습니다. 도메인 규칙은 요청을 어느 정책에 맡길지 정하고, 프록시 프로토콜은 출구에 어떻게 연결할지를 정합니다. 역할이 서로 다릅니다. 기존 출구를 바꾼 뒤에는 PROXY가 사용할 수 있는 선택 항목을 가리키는지 확인하고, 같은 대상이 기존 규칙과 계속 일치하는지도 살펴보세요. 출구 연결 문제를 도메인 규칙 수정으로 해결하려고 하지 마세요.
마지막에는 간결하고 이해하기 쉬운 규칙만 남기세요. 명시한 사이트는 PROXY를 사용하고, 필요한 예외는 앞에 배치하며, 나머지는 FINAL,DIRECT로 처리합니다. 도메인을 추가할 때마다 프록시로 연결해야 하는 요청과 직접 연결해야 하는 요청을 함께 확인하세요. 연결 스위치만 보는 것보다 설정 결과를 정확하게 확인할 수 있습니다.