Shadowrocket 규칙 가이드
구성 섹션별로 문법을, 요청 흐름별로 매칭 결과를 확인하세요. 본 페이지는 이미 본인의 구독이나 서버 정보를 보유하고 규칙 파일을 관리하려는 사용자를 위한 안내입니다. 예시 도메인과 주소는 문법 설명용이며 실제 이용 가능한 서비스를 뜻하지 않습니다.
서버를 처음 추가하고 구독을 가져와 연결을 시작하려면 먼저 사용 방법 안내를 따라 진행하세요. 이 페이지에서는 각 단계와 구성의 관계, 수정 후 검증 방법을 설명합니다. 사용 방법 안내는 시작 절차를, 규칙 가이드는 전체 내용을 찾아보는 방법을 다루므로 두 문서를 함께 참고할 수 있습니다.
- 구성 파일: .conf
- Rule: 위에서 아래로 매칭
- 수정 전에 원본 파일 보관
구입, 서버, 구성을 구분하세요Shadowrocket은 Apple 플랫폼용 유료 클라이언트입니다. 앱을 한 번 구입하는 것과 회선 요금제는 별개입니다. 이 사이트는 노드나 구독을 제공·판매·추천하지 않습니다. 앱을 받을 수 있는 유일한 경로는 App Store입니다. 정품 확인 방법은 다운로드 및 구입 안내에서 확인하세요.
이 페이지의 목차
먼저 파일과 모드를 확인한 다음, 필요한 키워드를 찾아보세요. 문제가 발생하면 마지막 장의 안내에 따라 근거를 확인하며 원인을 추적할 수 있습니다. 구성 전체를 한꺼번에 교체할 필요는 없습니다.
구성 파일의 구조와 적용 범위
Shadowrocket의 구성 파일은 서버 목록을 달리 부르는 말이 아닙니다. 서버 정보에는 연결 대상, 인증 매개변수, 전송 설정이 담기며, 구성 파일은 트래픽 처리 방식과 이름 해석 방법, 특별 처리가 필요한 요청을 정의합니다. 구독을 갱신해 서버 정보가 바뀌더라도 현재 규칙 파일까지 함께 갱신되는 것은 아닙니다. 반대로 규칙 파일을 가져와도 연결할 수 있는 서버가 생기는 것은 아닙니다. 문제를 살펴보기 전에 이 두 계층을 구분해야 잘못된 곳을 반복해서 수정하는 일을 피할 수 있습니다.
구성 섹션과 행 형식 파악하기
일반적인 구성 섹션에는 [General], [Rule], [Host], [URL Rewrite]가 있습니다. 대괄호로 섹션을 선언하면 다음 섹션 이름이 나올 때까지 이후 내용이 해당 섹션에 속합니다. 섹션마다 문법이 다릅니다. General에는 주로 키와 값이, Rule에는 쉼표로 구분된 필드가, Host에는 이름과 주소의 매핑이 사용됩니다. 한 줄만 따로 보기에 맞아 보인다고 아무 섹션에나 넣어서는 안 됩니다. 섹션이 잘못되면 파싱 오류가 발생하거나 예상과 다르게 동작할 수 있습니다.
[General]
dns-server = system
[Rule]
DOMAIN,portal.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
[Host]
printer.example.com = 192.0.2.20
이 예시는 섹션 구성 방식만 보여 주며, 그대로 연결할 수 있는 완전한 서비스 구성은 아닙니다. example.com은 문서용 예시 도메인이고 192.0.2.20은 문서용 예시 주소입니다. 실제 작업에서는 본인이 관리 권한을 가진 대상으로 바꿔야 합니다. 예시에 있는 PROXY도 서버를 생성하지 않으며, 현재 사용 가능한 프록시 선택 항목이 있어야 합니다. 먼저 기존 서버가 정상 작동하는지 확인한 뒤 특정 도메인을 PROXY로 보낼지 검토해야 검증의 전제가 분명해집니다.
Config에서 사용 중인 파일 확인하기
Config에서 현재 선택된 구성을 확인한 뒤 편집 내용을 여세요. 파일 저장과 파일 선택은 서로 다른 작업입니다. 목록에 저장한 파일이 연결에 사용 중인 파일과 같다고 단정할 수 없습니다. 새 구성을 시험할 때는 원본을 보관하고 알아보기 쉬운 이름으로 복사본을 저장한 다음, 그 복사본을 현재 구성으로 선택할 수 있습니다. 전환한 뒤 Home으로 돌아가 Global Routing이 Config인지 확인하세요. Proxy나 Direct에 그대로 머물러 있지 않은지도 살펴보세요.
원격 구성과 로컬 복사본도 구분해서 이해해야 합니다. 원격 콘텐츠를 다시 업데이트하면 기존 로컬 수정 사항이 유지되지 않을 수 있으며, 이는 사용 중인 파일과 업데이트 방식에 따라 달라집니다. 개인 규칙을 장기간 관리하려면 원격 파일의 로컬 내용을 수정 중인지, 별도의 복사본을 편집 중인지 먼저 확인하세요. 이번에 저장에 성공했다고 해서 다음 업데이트에도 변경 사항이 유지된다고 볼 수는 없습니다. 업데이트 후 주요 규칙을 다시 확인하는 편이 병합 동작을 추측하는 것보다 확실합니다.
구조를 먼저 확인하고 본문을 수정하세요
긴 파일을 처음 살펴볼 때는 먼저 섹션 이름을 검색하고 Rule의 시작과 끝, FINAL이 있는 행을 기록하세요. 외부 규칙 참조나 별도의 정책 정의가 있는지도 확인해야 합니다. 검색 결과에서 한 줄만 잘라 동작을 판단하지 마세요. 그 위에 더 넓은 조건이 이미 있을 수 있습니다. 서로 다른 출처의 구성은 같은 키워드를 사용하더라도 각기 다른 정책 이름에 의존할 수 있습니다. 붙여 넣기 전에 현재 파일이나 실행 환경에서 해당 참조 대상을 찾을 수 있는지 확인하세요.
편집기가 자동으로 바꾸는 중국어 쉼표, 전각 대괄호, 굽은 따옴표는 예시 문법에 해당하지 않습니다. 구성 편집 영역에는 영문 구두점을 직접 입력하고, 필드 사이에 설명용 문구를 넣지 않는 것이 좋습니다. 주석은 별도의 행에 적으면 읽기 쉽고, 주석이 정책 이름의 일부로 오인될 가능성도 줄어듭니다. 빈 행은 항목을 구분하는 데 쓸 수 있지만 매칭을 끝내지는 않습니다. 실제 규칙 순서는 Rule 안의 배치에 따라 결정됩니다.
구성마다 명확한 최종 출구를 하나만 두세요관리할 때는 FINAL을 Rule의 마지막에 두고, 그 위에 예외와 도메인·주소 규칙을 배치하세요. FINAL 뒤에 있는 일반 규칙은 이번 규칙 매칭에 참여할 수 없습니다.
관리하기 쉬운 파일이라면 다음 세 가지를 확인할 수 있어야 합니다. 현재 파일을 어디서 선택하는지, 규칙이 어떤 기존 정책에 의존하는지, 수정에 실패했을 때 어떻게 복구하는지입니다. 먼저 이 내용을 기록한 뒤 기능을 추가하는 편이 검증하지 않은 섹션을 많이 쌓는 것보다 유용합니다. 파일 내보내기와 기기 변경 시 파일을 보존하는 방법은 구성 백업 및 기기 변경 안내에서 확인하세요. 파일을 복구한 후에도 현재 구성과 서버 선택을 다시 확인해야 합니다.
General, DNS 및 Global Routing
General 설정은 연결과 이름 해석의 기반을 제공하고, Rule은 그 전제 아래에서 요청 정책을 결정합니다. 규칙은 맞는데 접속이 실패한다면 Rule만 확인해서는 안 됩니다. 도메인 해석 성공 여부, 서버 연결 가능 여부, 시스템이 연결을 Shadowrocket에 전달했는지 여부가 대상 규칙보다 먼저 결과에 영향을 줄 수 있습니다. 이러한 전제를 이해하면 규칙 문제와 네트워크 문제를 구분할 수 있어 더 많은 규칙을 추가해 근본 원인을 가리는 일을 피할 수 있습니다.
세 가지 실행 모드에서 확인할 사항
Global Routing의 Config, Proxy, Direct는 실행 모드이며 동시에 활성화할 수 있는 세 가지 규칙 섹션이 아닙니다. Config는 현재 구성에 따라 트래픽을 라우팅하고, Proxy는 일반적인 전달 트래픽을 프록시 경로로 보냅니다. Direct는 직접 연결 경로를 사용합니다. 시스템 라우팅, 제외 항목, 개별 연결 제한은 실제 트래픽에 계속 영향을 줄 수 있으므로 모드 이름만으로 요청 결과를 판단해서는 안 됩니다. Rule을 테스트할 때는 Config를 명확히 선택하고 대상 요청의 처리 결과를 확인하세요.
| 화면 용어 | 설명 | 적절한 확인 항목 |
|---|---|---|
| Config | 구성 모드 | 현재 Rule의 라우팅 결과 검증 |
| Proxy | 프록시 모드 | 기존 프록시 경로의 사용 가능 여부 확인 |
| Direct | 직접 연결 모드 | 현재 네트워크에서 직접 연결되는지 확인 |
예를 들어 같은 대상이 Proxy에서는 열리지만 Config에서는 실패한다면, 매칭된 정책과 해당 정책에서 사용하는 서버, 이름 해석의 차이를 확인해야 합니다. 두 모드 모두 실패한다면 기존 서버 정보와 기본 연결부터 확인하세요. 곧바로 DOMAIN-SUFFIX의 오타라고 단정해서는 안 됩니다. Direct에서 성공했다는 사실은 당시 직접 연결 경로를 사용할 수 있었음을 뜻할 뿐, 프록시 규칙이 올바르게 적용되었거나 관련 리소스가 모두 같은 경로를 이용했다는 뜻은 아닙니다.
DNS 설정은 정책을 대신하지 않습니다
[General]
dns-server = system
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
dns-server = system은 시스템이 제공하는 이름 해석 설정을 사용한다는 뜻으로, 구성 구조를 이해하기 위한 간단한 출발점입니다. 모든 네트워크에 일괄적으로 권장되는 설정은 아닙니다. 실제 이름 해석 동작은 다른 DNS 옵션, 요청 유형, 현재 연결 환경에도 영향을 받습니다. 기존 구성을 관리할 때는 예시를 복사하려고 기존 DNS 설정을 삭제하지 마세요. 먼저 현재 값을 기록한 다음 한 번에 하나만 변경해 결과를 비교하고, 필요하면 되돌리세요. DNS, 규칙, 서버를 한꺼번에 수정하면 원인을 판단할 근거가 사라집니다.
도메인 규칙은 이름을, 주소 규칙은 주소를 비교하며 두 과정 사이에 이름 해석이 개입할 수 있습니다. 로그에 주소만 표시된다고 클라이언트가 원래 도메인을 항상 알고 있다고 단정할 수는 없습니다. 반대로 도메인이 로그에 보인다고 이후 연결까지 성공한다고 볼 수도 없습니다. 이름 해석 결과와 연결 결과를 따로 기록하세요. 도메인을 해석하지 못한다면 먼저 이름 해석 경로를 확인하고, 해석은 정상인데 연결 시간이 초과된다면 정책 출구와 대상 연결 가능성을 살펴보세요.
우회 항목과 On Demand 연결의 범위
기존 파일의 우회 또는 제외 설정으로 인해 일부 트래픽이 예상한 규칙 경로에 진입하지 않을 수 있습니다. 이러한 설정은 Rule에서 매칭된 후 적용되는 DIRECT와 완전히 같지 않습니다. DIRECT는 규칙 매칭 결과인 반면, 제외는 규칙 처리 전에 적용될 수도 있습니다. 수정 전에는 관련 옵션의 앱 내 설명을 읽고 시스템 라우팅, 프록시 예외 또는 다른 범위 중 무엇을 제어하는지 확인하세요. 이름이 비슷하다는 이유만으로 한 설정을 다른 설정의 대체품으로 사용하지 마세요.
On Demand는 주로 언제 연결을 시작하거나 복구할지를 관리하며, 특정 도메인에 적용할 정책을 Rule 대신 결정하지 않습니다. 연결은 자동으로 열렸는데 요청은 여전히 직접 연결되는 것처럼 보일 수 있습니다. 이때는 On Demand를 반복해서 수정하기보다 현재 Global Routing과 매칭 기록을 먼저 확인하세요. 반대로 규칙 파일이 완전해도 연결이 수립되지 않았다면 Rule이 알아서 트래픽을 처리할 것이라고 기대해서는 안 됩니다. 연결 시점과 연결 후 트래픽 라우팅은 별개의 문제입니다.
General을 조정할 때는 이유를 설명할 수 있도록 최소한의 변경 내역을 기록하세요. 기존 값, 변경한 항목, 검증에 사용한 요청, 결과의 차이를 적으면 됩니다. 연결이 복구되면 로컬 네트워크나 다른 이름 해석에 의존하는 대상도 다시 테스트하세요. 웹사이트 하나만 열리는지 확인해서는 충분하지 않습니다. General 매개변수는 대개 단일 도메인 규칙보다 넓은 범위에 영향을 줍니다. 정상 사례와 예외 사례를 모두 확인해야 변경이 성공했다고 판단할 수 있습니다.
모드를 먼저 확인한 뒤 규칙을 판단하세요이 가이드의 Rule 예시는 Config 모드를 테스트 전제로 합니다. Proxy 또는 Direct를 사용 중이라면 먼저 이 전제로 되돌린 다음 규칙 결과를 비교하세요.
DOMAIN, DOMAIN-SUFFIX 및 DOMAIN-KEYWORD
도메인 규칙은 자주 바뀌는 서버 주소를 따라가기보다 이름을 기준으로 접근 정책을 표현할 때 적합합니다. 작성 전에 정확한 호스트 이름 하나를 매칭할지, 도메인 계열 전체를 매칭할지, 특정 문자열이 포함된 이름을 매칭할지 정한 다음 키워드를 선택하세요. 범위가 넓을수록 잘못 매칭될 가능성도 커집니다. 개인 구성을 관리할 때는 정확한 매칭부터 시작하고, 요청 기록에서 공통된 요구가 확인된 뒤 여러 개의 정확한 규칙을 접미사 규칙으로 통합하는 편이 좋습니다.
DOMAIN: 지정한 호스트 이름만 처리
[Rule]
DOMAIN,login.example.com,PROXY
DOMAIN,static.example.com,DIRECT
FINAL,DIRECT
DOMAIN은 전체 도메인 이름을 정확히 매칭합니다. 첫 번째 규칙은 login.example.com을 처리하며 api.login.example.com이나 example.com 전체까지 처리한다고 보면 안 됩니다. 규칙 필드에는 호스트 이름을 입력하고 프로토콜, 포트, URL 경로는 넣지 않습니다. 예를 들어 브라우저 주소창의 전체 주소에서는 이름 부분을 먼저 추출해야 합니다. 특정 경로만 처리하려는 경우 DOMAIN만으로는 조건을 표현할 수 없습니다.
한 페이지에서 로그인, 이미지, API, 통계용 호스트를 동시에 이용할 수 있습니다. 페이지 주소에 정확한 규칙을 추가해도 그중 하나의 이름만 다룰 수 있습니다. 페이지의 글자는 보이는데 이미지가 표시되지 않는다면 모든 이름에 규칙을 확대하기 전에 실패한 요청이 실제로 접속한 호스트를 확인하세요. 한 페이지를 열었을 때 발생하는 연결을 하나씩 살펴보면 필요한 리소스 도메인을 찾을 수 있고 다른 서비스의 정책을 불필요하게 바꾸지 않을 수 있습니다.
DOMAIN-SUFFIX: 도메인과 하위 도메인
[Rule]
DOMAIN,local.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
DOMAIN-SUFFIX는 지정된 도메인과 그 하위 도메인을 매칭합니다. 위 예시는 먼저 local.example.com을 직접 연결 예외로 두고, 나머지 example.com 도메인에 속하는 이름은 PROXY를 사용하도록 합니다. 이때 example.com을 입력하면 됩니다. 앞에 별표를 붙일 필요가 없으며 *.example.com을 같은 표기법으로 사용하지 마세요. 도메인 경계가 중요하므로 접미사 매칭을 문자열이 어디에든 나타나면 매칭되는 것으로 이해해서는 안 됩니다.
예외 규칙은 범위가 넓은 규칙보다 앞에 둬야 합니다. 위 예시의 첫 두 행을 바꾸면 접미사 규칙이 먼저 매칭되어 아래의 정확한 직접 연결 규칙은 결과를 바꿀 수 없습니다. 이는 DOMAIN의 우선순위가 낮아서가 아니라 Rule이 순서대로 처리되기 때문입니다. 더 구체적인 조건이 자동으로 높은 우선순위를 얻지는 않습니다. 파일 작성자가 규칙 배치로 의도를 표현해야 합니다. 예외를 추가할 때는 해당 예외보다 먼저 매칭될 수 있는 넓은 규칙을 모두 찾아 적절한 위치를 정하세요.
DOMAIN-KEYWORD: 범위가 넓으므로 경계를 먼저 확인
[Rule]
DOMAIN-KEYWORD,example,PROXY
FINAL,DIRECT
DOMAIN-KEYWORD는 도메인 이름에 지정한 키워드가 포함되어 있는지 확인하며, 특정 도메인 계열에 한정되지 않습니다. 위 예시는 문법 설명용이지 검토 없이 일상적으로 사용할 규칙은 아닙니다. 이름에 example이 들어 있다고 해서 같은 조직이나 업무에 속하는 것은 아니기 때문입니다. 키워드가 짧거나 흔한 의미일수록 잘못 매칭되기 쉽습니다. 정확한 도메인이나 접미사로 표현할 수 있는 요구라면 범위가 분명한 조건을 우선 사용하세요.
| 키워드 | 범위 | 자주 하는 잘못된 작성 |
|---|---|---|
DOMAIN | 전체 호스트 이름 | 이름 필드에 전체 URL 입력 |
DOMAIN-SUFFIX | 도메인과 하위 도메인 | 불필요한 별표 접두사 추가 |
DOMAIN-KEYWORD | 이름에 키워드 포함 | 키워드를 조직 경계로 간주 |
도메인 규칙을 검증할 때는 최소한 매칭되어야 하는 이름 하나와 매칭되면 안 되는 이름 하나를 준비하세요. 접미사 규칙이라면 루트 도메인과 하위 도메인도 포함해야 합니다. 키워드 규칙은 같은 문구를 포함하지만 대상 범위에는 속하지 않는 이름도 추가로 확인하세요. 이런 반례를 테스트하면 규칙 범위가 지나치게 넓은지 알아낼 수 있습니다. 대상이 열린다는 사실만으로는 원래 직접 연결되어야 할 다른 요청까지 프록시 경로로 전송되었는지 판단할 수 없습니다.
도메인에 국제화 문자가 포함되어 있다면 요청 기록에 실제로 표시된 이름을 확인한 뒤 클라이언트가 허용하는 형식으로 입력하세요. 공백이 포함된 표시 제목을 그대로 복사하거나 브라우저가 읽기 쉽게 표시한 문구를 최종 매칭값으로 간주하지 마세요. 규칙 수정 후 기존 페이지를 반복해서 새로고침하는 것도 흔한 실수입니다. 앱이 기존 연결을 재사용할 수 있으므로 새 요청을 만들고 새 연결에 수정된 정책이 적용되는지 확인해야 합니다.
규칙이 많아지면 '정확한 예외, 업무별 접미사, 신중하게 사용할 키워드'를 연속된 그룹으로 나눌 수 있지만 키워드 순서대로 기계적으로 정렬하지 마세요. 정렬 기준은 알파벳이 아니라 업무상 예외 관계여야 합니다. 지정한 웹사이트만 프록시를 이용하게 하려면 특정 웹사이트 라우팅 규칙을 참고하세요. 범위를 좁힌 목록부터 만들고 실제 리소스 요청에 따라 보완하면 관련 없는 이름을 한꺼번에 포함하지 않아도 됩니다.
GEOIP, IP-CIDR, IP-CIDR6 및 USER-AGENT
주소 규칙은 대상 주소가 어느 범위에 속하는지를 처리하며 사용자가 어떤 앱을 쓰는지 판단하지 않습니다. 요청이 주소로 직접 연결되거나 도메인 정보를 사용할 수 없는 경우, 또는 명확한 내부 네트워크 대역에 예외를 설정해야 할 때 유용합니다. 하지만 주소는 여러 업무에서 공유될 수 있고 이름 해석 결과에 따라 달라질 수도 있습니다. 한 번 확인한 결과만으로 큰 주소 대역을 특정 정책에 장기간 고정하지 마세요. 주소의 출처와 관리 책임을 확인한 다음 구성에 넣을지 결정하세요.
IP-CIDR: 주소와 접두사 길이로 범위 지정
[Rule]
IP-CIDR,192.0.2.20/32,DIRECT,no-resolve
IP-CIDR,198.51.100.0/24,PROXY,no-resolve
FINAL,DIRECT
IPv4의 IP-CIDR 필드는 네트워크 주소와 접두사 길이로 구성됩니다. /32는 단일 주소를, /24는 주소 범위를 나타냅니다. 숫자는 포트나 우선순위가 아닙니다. 위 예시의 주소는 문서용이므로 실제 네트워크 연결 여부를 판단하는 데 사용할 수 없습니다. 실제 구성에서는 포함하려는 네트워크 경계를 확인하세요. 대상 주소 뒤에 짧은 접두사 길이를 임의로 붙이면 관련 없는 대상까지 범위가 넓어질 수 있습니다.
no-resolve는 해당 규칙만 확인하기 위해 도메인 해석을 실행하지 않도록 하는 IP 규칙의 선택적 매개변수입니다. 전체 DNS를 끈다는 뜻도, 규칙이 반드시 매칭된다는 뜻도 아닙니다. 요청에 비교 가능한 주소가 이미 있으면 주소를 매칭할 수 있지만, 도메인 정보만 있고 해당 주소가 없다면 이 매개변수가 먼저 해석을 수행해 매칭할 것이라고 기대할 수 없습니다. 이런 규칙을 점검할 때는 요청에 이름과 주소 중 무엇이 포함되어 있는지 모두 기록하세요.
IP-CIDR6: IPv6 경로를 별도로 확인
[Rule]
IP-CIDR6,2001:db8::20/128,DIRECT,no-resolve
IP-CIDR6,2001:db8:1::/48,PROXY,no-resolve
FINAL,DIRECT
IP-CIDR6는 IPv6 네트워크 접두사를 사용하며 /128은 단일 IPv6 주소를 나타낼 수 있습니다. 예시에 사용된 2001:db8::는 문서용 주소입니다. IPv4 규칙만 작성하면 같은 도메인에 IPv6로 연결할 때도 매칭된다는 뜻은 아닙니다. 네트워크와 대상에서 두 주소 유형을 모두 제공한다면 실제로 사용되는 주소 계열을 확인하도록 테스트를 구성하세요. IPv4 테스트 한 번이 성공했다고 전체 주소 라우팅이 완성된 것은 아닙니다.
네트워크에 따라 같은 대상의 정책이 달라진다면 먼저 이름 해석 결과와 실제 연결 주소를 확인한 다음 구성에 한쪽 주소 규칙만 있는지 살펴보세요. 특정 주소 계열 기능을 바로 끄면 현상이 일시적으로 달라질 수 있지만 규칙 범위가 적절하다는 근거가 되지는 않습니다. 요구가 안정적인 도메인 계열에 관한 것이라면 도메인 규칙을 우선 고려하세요. 본인이 관리하는 명확한 네트워크 대역에 관한 요구라면 해당 주소 규칙으로 표현하는 편이 일반적으로 관리하기 쉽습니다.
GEOIP: 주소 데이터베이스에 따라 분류
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
GEOIP,CN,DIRECT
FINAL,PROXY
GEOIP는 주소 데이터베이스를 기준으로 대상 주소를 분류합니다. GEOIP,CN,DIRECT는 데이터베이스에서 CN으로 분류되는 주소를 매칭해 DIRECT를 적용한다는 뜻입니다. 웹페이지 언어, 도메인 접미사, 사용자의 위치에 따라 판단한다는 뜻은 아닙니다. 데이터베이스 분류가 실제 업무의 소속과 일치하지 않을 수 있으며, 분산 인프라를 사용하는 대상은 특히 그렇습니다. 업무상 명확한 예외는 GEOIP보다 앞에 두세요. 주소 분류만으로 도메인에 적합한 경로를 추측해서는 안 됩니다.
GEOIP를 사용하려면 유효한 주소 정보도 필요합니다. 특정 요청이 예상한 지역 조건과 매칭되지 않는다면 국가나 지역 코드를 바꾸기만 하지 말고 실제 대상 주소, 데이터베이스 분류, 앞선 규칙을 확인하세요. GEOIP와 FINAL을 함께 사용할 때는 매칭되지 않은 요청이 어디로 가는지도 파악해야 합니다. 위 예시에서는 나머지 요청을 PROXY로 보내며, 이는 기본 경로를 DIRECT로 두는 FINAL과 반대입니다. 예시를 복사하기 전에 마지막 행까지 확인하세요.
USER-AGENT: 요청 특성은 앱 식별 정보가 아닙니다
[Rule]
USER-AGENT,ExampleClient*,DIRECT
FINAL,PROXY
USER-AGENT는 확인할 수 있는 User-Agent 정보를 기준으로 요청을 매칭합니다. 예시의 ExampleClient*는 해당 문구로 시작하는 특성을 나타냅니다. 앱 이름으로 트래픽을 라우팅하는 범용 방법은 아닙니다. 여러 앱이 같은 식별자를 사용할 수 있고 한 앱도 요청에 따라 서로 다른 식별자를 사용할 수 있습니다. 암호화된 요청에서 읽을 수 있는 요청 헤더 정보가 없다면 이 규칙만으로 내부 User-Agent를 식별할 수 없습니다.
USER-AGENT를 사용하기 전에 기록에서 해당 특성을 실제로 확인할 수 있는지 살펴본 뒤 명확한 테스트 요청으로 검증하세요. 이 규칙을 작동시키려고 해독 범위를 임의로 넓히지 마세요. 요청 헤더 매칭 실패를 프록시 서버 장애로 오해해서도 안 됩니다. 이름, 주소, 요청 헤더는 서로 다른 계층의 근거입니다. 요청에 어떤 정보가 제공되는지 정확히 알 때만 알맞은 키워드를 선택하세요.
PROXY, DIRECT, REJECT 및 매칭 우선순위
규칙은 조건과 동작으로 이루어집니다. 앞쪽 필드는 무엇을 매칭할지, 정책 필드는 매칭 후 어떻게 처리할지를 나타냅니다. PROXY, DIRECT, REJECT는 흔히 쓰이는 정책 키워드입니다. Global Routing 화면의 Proxy, Direct와는 대소문자 및 사용 위치가 다르므로 구분해야 합니다. 규칙을 읽을 때는 도메인이 포함되어 있는지만 보지 말고 조건과 동작을 함께 해석하세요. 같은 도메인도 정책에 따라 동작이 완전히 달라질 수 있습니다.
세 가지 정책의 역할
PROXY는 매칭된 트래픽을 해당 프록시 선택 항목으로 보내며, 이를 사용하려면 사용 가능한 서버와 올바른 연결 매개변수가 필요합니다. PROXY 매칭은 출구 방향을 정할 뿐 서버 연결이나 대상의 요청 수락을 보장하지 않습니다. DIRECT는 대상에 직접 연결하며 정상적인 이름 해석과 네트워크 경로가 필요합니다. REJECT는 매칭된 요청을 거부합니다. 차단해도 되는 대상과 범위가 명확할 때 사용하세요. 실패 후 다른 경로를 시도하라는 명령이 아닙니다.
| 정책 | 처리 방식 | 확인할 항목 |
|---|---|---|
PROXY | 프록시 경로로 전달 | 매칭 결과와 기존 서버 연결 가능 여부 |
DIRECT | 직접 연결 경로 사용 | 이름 해석 결과와 현재 네트워크의 연결 가능 여부 |
REJECT | 요청 거부 | 예정한 대상에만 영향을 주는지 |
DIRECT는 Shadowrocket을 종료하거나 연결을 중단하는 스위치가 아닙니다. Config에서 특정 규칙의 처리 결과로 DIRECT를 적용하는 동안 다른 요청은 계속 PROXY를 사용할 수 있습니다. 마찬가지로 REJECT는 기기 전체의 네트워크를 끊는 것이 아니라 조건에 매칭된 요청에만 적용됩니다. 다만 공용 API, 인증 서비스 또는 여러 페이지가 의존하는 리소스를 차단하면 영향이 크게 나타날 수 있습니다. 조건을 구체적으로 설정하고 복구 방법을 남겨 두세요.
먼저 매칭된 규칙이 해당 요청의 정책을 결정합니다
[Rule]
DOMAIN,blocked.example.com,REJECT
DOMAIN,office.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
GEOIP,CN,DIRECT
FINAL,DIRECT
위 예시에서는 먼저 특정 호스트를 거부하고, 다른 호스트에는 직접 연결 예외를 둡니다. 나머지 해당 접미사의 이름은 PROXY를 사용하며, 그다음 GEOIP를 확인하고 마지막으로 FINAL이 미매칭 요청을 처리합니다. 여기서 우선순위는 키워드의 '정확도 순위'가 아니라 규칙 위치에서 비롯됩니다. 접미사 규칙을 맨 앞에 놓으면 두 정확한 규칙이 먼저 가로막힙니다. FINAL을 맨 앞에 두면 다른 일반 규칙은 이번 판단에 참여할 수 없습니다.
매칭 즉시 중단된다는 것은 이번 Rule 정책 선택에서 다음 일반 규칙을 계속 찾지 않는다는 뜻이지, 요청 처리 과정 전체에서 구성 기능이 하나만 실행된다는 뜻은 아닙니다. DNS, 연결 수립 등 다른 처리에는 각각 별도의 단계가 있습니다. 연결에 실패하면 다음 행을 자동으로 계속 매칭한다는 의미도 아닙니다. PROXY 규칙이 매칭된 뒤 서버 연결에 실패해도 아래의 DIRECT가 자동으로 대체 출구가 되는 것은 아닙니다. 복구하려면 이후 규칙에 맡기지 말고 정책이 의존하는 경로를 고쳐야 합니다.
FINAL: 나머지 요청의 경로를 명확히 지정
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
FINAL에는 도메인이나 주소 매개변수가 필요하지 않습니다. 앞선 규칙에 매칭되지 않은 요청에 최종 정책을 적용합니다. 위 예시는 '나열한 도메인은 프록시를 사용하고 나머지는 직접 연결'한다는 뜻입니다. FINAL,PROXY로 바꾸면 기본 경로가 바뀌어 목록에 없는 모든 요청이 프록시로 갈 수 있습니다. 일부 예외처럼 보이는 문제도 실제로는 구성을 복사하면서 FINAL을 확인하지 않아 생길 수 있습니다. 최종 정책을 바꾸기 전에 로그인, 로컬 네트워크 접근, 자주 쓰는 서비스 등 유지할 예외를 먼저 정리하세요.
관리할 때는 Rule 맨 끝에 있는 FINAL 하나만 두는 것을 권장합니다. FINAL을 여러 개 둔다고 차례로 시도하는 대체 경로가 생기지는 않습니다. 첫 번째 FINAL이 이미 나머지 요청을 처리하므로 뒤쪽의 같은 조건은 매칭될 수 없습니다. 편집 도구로 파일 끝에 중복 규칙이 생겼다면 먼저 어떤 부분이 현재 Rule에 속하는지 확인하고 불필요한 항목을 정리하세요. 서로 다른 구성 섹션을 실수로 합친 것은 아닌지 확인하지 않은 채 중복처럼 보이는 행만 삭제해서는 안 됩니다.
사용자 지정 정책 참조를 확인할 수 있어야 합니다
복잡한 파일에서는 정책 필드에 PROXY 대신 사용자 지정 이름을 사용할 수 있습니다. 이때 해당 이름이 현재 구성과 앱에서 지원하는 기능에 정의되어 있고, 사용 가능한 대상과 연결되는지 확인해야 합니다. 외부 정책을 참조하는 규칙만 복사하고 관련 정의를 복사하거나 만들지 않으면 원인을 알 수 없는 의존성이 남습니다. 이 가이드에서는 핵심 문법을 설명하기 위해 내장 정책을 사용하며, 특정 구성의 명명 방식을 고정 키워드로 오해하지 않도록 합니다.
충돌을 확인할 때는 바로 앞뒤 두 줄만 보지 말고 위쪽 규칙을 읽으세요다른 규칙이 우선 적용되는지 확인하려면 Rule 첫 행부터 내려가며 최초 매칭 지점을 찾으세요. 앞에 있는 키워드 규칙, 주소 규칙, 외부 규칙 참조가 현재 보고 있는 정확한 규칙보다 먼저 결과를 결정할 수 있습니다.
규칙 순서를 정리하는 목적은 파일을 보기 좋게 만드는 것이 아니라 예외 관계를 쉽게 이해하도록 하는 것입니다. 각 규칙의 목적을 별도 주석으로 적고 아래 규칙 그룹보다 먼저 처리해야 하는 이유를 기록하세요. 이후 규칙을 추가하거나 삭제하기 전에 그 이유가 여전히 유효한지 확인해야 합니다. 규칙의 위치를 설명할 수 있어야 안전하게 통합할 수 있습니다. 용도를 설명할 수 없는 규칙은 장기간 사용할 파일에 바로 넣지 말고 먼저 분리해 테스트하세요.
Host와 URL Rewrite의 사용 범위
Host와 URL Rewrite는 모두 사용자에게 보이는 접속 결과를 바꿀 수 있지만 해결하는 문제는 다릅니다. Host는 주로 이름을 주소에 매핑하고, URL Rewrite는 보이는 URL을 기준으로 매칭해 처리합니다. Host는 프록시 정책이 아니며 URL Rewrite도 도메인 라우팅을 대신하지 않습니다. 필요한 기능을 판단할 때는 목표를 한 문장으로 정리하세요. 주소를 지정할지, 연결 경로를 선택할지, 특정 주소 형식을 다른 형식으로 바꿀지 확인하면 됩니다.
Host: 주소를 고정해도 출구 경로가 고정되지는 않습니다
[Host]
printer.example.com = 192.0.2.20
[Rule]
DOMAIN,printer.example.com,DIRECT
FINAL,PROXY
예시에서는 한 이름을 문서용 예시 주소에 매핑하고, Rule에서 해당 이름의 경로로 DIRECT를 선택합니다. 두 행은 각각 이름 해석과 경로 결정을 담당하므로 서로 대신할 수 없습니다. 실제로 사용할 때는 본인이 사용할 권한이 있고 현재 네트워크에서 도달할 수 있는 주소를 지정해야 합니다. 도메인을 특정 주소에 연결한다고 해서 원래 접근할 수 없던 네트워크에 연결할 수 있게 되거나, 인증·포트 전달·서버 측 가상 호스트 구성이 자동으로 마련되는 것은 아닙니다.
주소를 고정하면 기존의 동적 이름 해석이 더 이상 적용되지 않을 수도 있습니다. 대상이 주소 변경, 가까운 서버 선택, 장애 조치에 의존한다면 오래된 매핑을 계속 유지할 경우 연결 시간이 초과될 수 있습니다. 추가하기 전에 주소를 고정해야 하는 이유가 분명한지 확인하고 제거 방법도 기록하세요. 테스트할 때는 이름이 예상한 주소로 해석되는지뿐 아니라 서비스, 포트, 인증서의 신원도 예상과 일치하는지 확인해야 합니다. 주소가 응답한다는 사실만으로 서비스가 정상이라고 판단해서는 안 됩니다.
Host는 브라우저가 접속 중인 호스트 이름을 바꾸지 않습니다. HTTPS 이름에 접속할 때 서버 인증서는 여전히 해당 이름의 검증 조건을 충족해야 합니다. 해당 서비스를 제공하지 않는 주소에 이름을 매핑하면 인증서 오류나 엉뚱한 사이트가 표시될 수 있습니다. 검증을 무시하는 방식으로 해결해서는 안 됩니다. 대상 서비스가 해당 이름을 지원하는지, 승인된 테스트 환경에서 매핑을 사용하는지 확인하세요. 정상적인 이름 해석으로 복구한 다음 관련 캐시도 갱신되었는지 확인해야 합니다.
URL Rewrite: 정규식, 대상 및 동작
[URL Rewrite]
^http://legacy\.example\.com/(.*)$ https://www.example.com/$1 302
이 예시는 정규식으로 이전 주소를 매칭하고 캡처한 경로를 새 주소에 붙여 302 리디렉션을 반환합니다. 점 앞의 역슬래시는 실제 점 문자를 매칭하며, 시작·끝 앵커는 매칭 범위를 제한합니다. 괄호로 캡처한 값은 $1로 참조합니다. 두 도메인 모두 예시용입니다. 본인 구성에 적용하기 전에 테스트 권한이 있는 대상으로 바꾸고 쿼리 매개변수와 인코딩이 필요한 대로 유지되는지 확인하세요.
정규식에서 점은 기본적으로 특별한 의미를 가지므로 이스케이프를 빠뜨리면 대상이 아닌 이름까지 매칭할 수 있습니다. 호스트 경계를 생략해도 비슷해 보이는 다른 주소까지 포함될 수 있습니다. URL Rewrite를 관리할 때는 최소한 매칭되어야 할 예시, 비슷하지만 매칭되면 안 되는 예시, 경로와 쿼리 매개변수가 포함된 예시를 준비하세요. 경로가 없는 홈페이지 주소만 테스트해서는 안 됩니다. 홈페이지에서 성공해도 더 긴 URL이 올바르게 처리된다는 뜻은 아닙니다.
암호화로 인한 가시성 제한과 처리 단계
전체 HTTPS URL의 경로는 암호화된 내용에 포함되어 있으므로 일반적인 연결 라우팅이 그 안의 모든 필드를 자동으로 읽을 수는 없습니다. URL Rewrite가 대상에 적용될 수 있는지는 요청 정보의 가시성과 관련 처리 조건에 달려 있습니다. 정규식을 작성했다는 사실만으로 경로를 읽을 수 있는 조건이 갖춰졌다고 볼 수 없습니다. 리디렉션 규칙을 검증하기 위해 해독 범위를 바로 넓혀서도 안 됩니다. 인증서 및 암호화 처리 설정은 권한, 개인정보 보호, 앱 호환성을 따로 고려해야 합니다.
Rule의 위에서 아래로 처리 원칙을 구성 파일 전체가 위에서 아래로 한 번만 실행된다는 뜻으로 확대 해석해서는 안 됩니다. 각 구성 섹션은 서로 다른 기능을 맡으므로 파일에서 Host가 Rule보다 앞에 있다고 해서 반드시 문자 순서대로 먼저 실행되는 것은 아닙니다. URL Rewrite 문제를 확인할 때는 요청 흐름을 따라가세요. 원래 주소, 리디렉션 발생 여부, 리디렉션 후 대상, 이후 연결에 적용된 정책을 확인해야 합니다. 그래야 재작성 미적용, 리디렉션 대상 장애, 후속 라우팅 오류를 구분할 수 있습니다.
리디렉션이 반복되면 이번에 추가한 규칙을 먼저 비활성화하세요새 대상이 다시 기존 규칙에 매칭되거나 사이트가 요청을 원래 주소로 되돌리면 순환이 발생할 수 있습니다. 원래 구성으로 복구해 정상 여부를 확인한 다음 정규식 범위를 좁히세요. 반대 방향의 리디렉션을 계속 추가하지 마세요.
브라우저가 리디렉션 결과를 캐시할 수 있고, 앱도 이름 해석과 연결을 캐시할 수 있습니다. 규칙을 취소했는데도 이전 동작이 남아 있다고 해서 파일이 저장되지 않은 것은 아닐 수 있습니다. 현재 구성을 확인하고 새 테스트 요청이나 별도의 테스트 세션으로 다시 확인하세요. 장기간 사용할 재작성 규칙에는 목적, 적용 호스트, 예상 동작, 삭제 조건을 기록하세요. 대상 사이트의 주소 구조가 바뀌었는데도 로컬 규칙이 오래된 절차를 강제하지 않도록 해야 합니다.
Host와 URL Rewrite는 범위가 좁고 이유를 설명할 수 있는 요구에 적합합니다. 모든 접속 문제를 해결하는 첫 번째 수단으로 사용해서는 안 됩니다. 특정 사이트에 PROXY를 사용하려는 것뿐이라면 도메인 규칙을 확인하세요. 이름 해석 결과가 잘못되었다면 먼저 DNS와 기존 매핑을 확인해야 합니다. 사이트에서 요청을 거부한다면 인증과 서비스 응답도 살펴봐야 합니다. 문제가 발생한 계층을 먼저 판단한 뒤 구성 섹션을 선택하면 파일이 간결해지고 문제도 재현하기 쉬워집니다.
자주 쓰는 라우팅 규칙과 수정 단계
조합 예시는 규칙의 개수가 아니라 요구사항에서 시작해야 합니다. 먼저 기본 정책을 정하고, 예외 처리가 필요한 대상을 나열한 다음 정확한 도메인, 접미사, 주소 조건 중 무엇이 필요한지 결정하세요. 아래 각 예시는 별도의 구성 방식이므로 같은 Rule에 연이어 붙여 넣어서는 안 됩니다. 여러 방식을 합칠 때는 FINAL, 예외 순서, 중복 조건을 다시 점검해야 합니다. 그렇지 않으면 나중에 붙인 부분이 판단 과정에 전혀 참여하지 못할 수 있습니다.
지정한 웹사이트는 프록시 사용, 나머지는 직접 연결
[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-SUFFIX,example.net,PROXY
FINAL,DIRECT
범위가 분명하고 목록에 있는 대상만 프록시를 사용하려는 경우에 적합한 구성입니다. 먼저 직접 연결해야 하는 계정 호스트를 배치하고, 그다음 예시 도메인 계열 두 개를 추가한 뒤 나머지 요청은 DIRECT로 보냅니다. 실제로 추가할 때는 대상 하나로 서버와 규칙이 모두 정상인지 확인한 다음 해당 업무에 필요한 호스트를 차례로 보완하세요. 페이지 리소스 하나가 누락되었다고 FINAL을 PROXY로 바꾸지 마세요. 목록에 없는 모든 요청의 경로가 바뀌어 더는 범위가 좁은 구성이 아니게 됩니다.
목록을 관리할 때는 사용자가 입력한 페이지 주소와 실제 리소스 요청을 구분해 기록하세요. 서비스에서 정적 파일, API, 로그인 흐름을 다른 도메인에 둘 수 있으므로 접미사 규칙이 이런 관계를 자동으로 알아내지는 못합니다. 실제 관찰했고 필요한 대상만 추가한 다음 목록에 없는 자주 쓰는 사이트가 계속 직접 연결되는지도 확인하세요. 자세한 내용은 지정한 웹사이트만 프록시를 사용하는 규칙 안내를 참고하세요.
명확한 예외는 직접 연결하고 나머지는 프록시 사용
[Rule]
DOMAIN,portal.example.com,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
FINAL,PROXY
이 예시는 반대 방향의 기본 정책을 사용합니다. 명확한 호스트와 일반적인 사설 IPv4 주소 대역을 직접 연결 예외로 두고, 나머지는 프록시로 보냅니다. 사설 주소 규칙은 해당 주소 조건만 처리하며 로컬 네트워크 검색, 브로드캐스트, 특수 네트워크 기능이 모두 예상대로 동작한다고 보장하지 않습니다. 현재 네트워크에서 다른 주소 범위나 IPv6를 사용한다면 실제 환경에 맞게 따로 살펴보세요. 사설 주소 규칙 몇 개를 완전한 시스템 네트워크 구성의 대체품으로 사용하지 마세요.
FINAL,PROXY를 적용하기 전에 기존 프록시 경로가 일상적인 요구를 처리할 수 있는지 확인하고 인증, 로컬 네트워크 서비스, 필요한 직접 연결 예외를 점검하세요. 어떤 서비스에 직접 연결이 필요하다면 범위가 분명한 조건을 먼저 작성하고 공유 인프라의 다른 요청에 영향을 주는지 테스트하세요. 한 업무에서 동적 도메인을 많이 사용한다면 넓은 키워드를 추측해 장기간 정확하기를 기대하지 말고 요청 기록에 따라 꾸준히 관리해야 합니다.
특정 호스트만 차단하고 같은 도메인의 다른 요청은 유지
[Rule]
DOMAIN,blocked.example.com,REJECT
DOMAIN-SUFFIX,example.com,DIRECT
FINAL,DIRECT
여기서는 정확한 호스트 하나만 차단하고 접미사 전체를 거부하지 않습니다. REJECT를 처음 테스트할 때는 용도를 확인할 수 있고 중요한 흐름에 영향을 주지 않는 대상을 선택하는 것이 좋습니다. 이후 페이지, 로그인, API가 계속 정상인지 살펴보세요. 요청 실패는 이 규칙이 의도한 결과의 일부지만, 사용자는 실패 원인을 구분하기 어려울 수 있으므로 주석을 명확하게 남겨야 합니다. 의도치 않은 영향이 생기면 수정 사항을 계속 추가하는 것보다 이 규칙을 취소하는 편이 복구하기 쉽습니다.
차단된 호스트가 다른 필수 서비스도 제공한다면 도메인만으로 내부 용도를 구별할 수 없습니다. 이때는 범위가 더 넓은 차단 규칙을 보완책으로 사용하지 말고 요구사항을 다시 검토하세요. REJECT 이후 앱이 다른 대상으로 바꾸거나 재시도할 수 있습니다. 기록에 새로운 요청이 나타난다고 원래 규칙이 적용되지 않은 것은 아닙니다. 요청마다 실제 이름과 정책을 비교해 같은 대상의 재시도인지, 서비스가 새 연결을 시작한 것인지 확인하세요.
새 규칙을 기존 파일에 안전하게 추가
먼저 기존 구성을 복사한 다음 현재 Rule과 마지막 FINAL을 찾으세요. 예외 규칙은 이를 가로막을 수 있는 넓은 규칙보다 앞에 두고, 병합 결과를 추측하며 두 번째 Rule 섹션을 만들지 마세요. 기존 파일에서 규칙을 참조한다면 범위를 파악한 뒤 참조의 앞뒤 중 어느 위치에 넣을지 결정하세요. 저장 후 복사본을 선택하고 Global Routing이 Config인지 확인한 다음 새 요청을 만들어 매칭 결과를 점검하세요. 검증에 실패하면 확실하지 않은 상태에서 수정 사항을 더 쌓지 말고 원본 복사본으로 되돌리세요.
- 목표, 기본 정책, 유지해야 할 예외를 글로 정리하세요.
- 현재 구성, 서버 선택, Global Routing을 기록하세요.
- 이번에 필요한 규칙만 추가하고 필드, 정책 이름, FINAL 위치를 확인하세요.
- 매칭되어야 하는 요청, 제외되어야 하는 요청, 일상적으로 필요한 요청을 각각 테스트하세요.
- 결과를 확인한 뒤 기록을 저장하세요. 기대한 결과가 아니면 원본 파일로 복구하고 원인을 계속 확인하세요.
구독을 업데이트하면 기존 서버 목록이 바뀔 수 있지만 위 규칙 검증을 대신하지는 않습니다. 현재 정책이 의존하는 서버가 바뀌었다면 프록시 경로를 다시 확인해야 합니다. 서버 표시 이름만 달라졌다고 규칙 내용이 바뀌었다고 볼 수는 없습니다. 여러 구독을 관리한다면 여러 구독 그룹화 및 정리를 참고하세요. 출처 관리와 규칙 관리를 분리하면 중복 서버 문제를 규칙 예외로 잘못 처리하는 일을 피할 수 있습니다.
매칭 검증, 문제 진단 및 구성 복구
규칙 검증의 목적은 한 번의 접속이 우연히 성공하게 만드는 것이 아닙니다. 지정한 요청이 의도한 조건에 매칭되어 예정된 정책을 사용하는 동시에 유지해야 할 동작을 해치지 않는지 확인하는 것입니다. 한 번의 테스트를 기록할 때는 테스트 시간, 현재 구성 이름, Global Routing, 대상 이름 또는 주소, 실제 매칭 결과, 연결 상태를 포함하세요. 시간은 해당 테스트를 비교하기 위한 정보일 뿐 앱 업데이트 정보를 뜻하지 않습니다. 근거를 구체적으로 남겨야 다음에 네트워크가 바뀌었을 때 이전 결과와 비교할 수 있습니다.
규칙 개수로 원인을 추측하지 말고 계층별로 확인
먼저 연결이 수립되었는지, 현재 파일이 선택되어 있는지 확인한 다음 요청이 예상한 처리 범위에 들어왔는지 살펴보세요. 이어서 이름 해석과 실제 대상을 확인하고, 최초로 매칭된 조건을 찾은 뒤 정책 출구가 사용 가능한지 점검하세요. 앞 단계에서 이미 실패했다면 뒷단을 수정해도 대개 효과가 없습니다. 예를 들어 이름 해석에 실패했다면 도메인 접미사를 더 추가해도 도움이 되지 않을 수 있습니다. PROXY가 매칭되었지만 서버 연결에 실패했다면 FINAL을 옮기는 것은 문제를 해결하는 방법이 아닙니다.
| 관찰된 현상 | 우선 확인 항목 | 다음 단계 |
|---|---|---|
| 새 규칙이 모두 적용되지 않음 | 현재 구성 및 Config 모드 | 파일이 선택되어 있는지 확인하고 새 연결 생성 |
| 대상이 더 앞에 있는 규칙과 매칭됨 | 앞선 규칙의 적용 범위 | 필요한 예외를 넓은 규칙보다 앞에 배치 |
| PROXY가 매칭되지만 연결 실패 | 기존 서버 및 대상 연결 가능 여부 | Proxy 모드와 구체적인 오류 비교 |
| 일부 리소스만 실패 | 실패한 리소스의 실제 호스트 | 페이지 제목이 아닌 관련 요청을 하나씩 확인 |
| 규칙 취소 후에도 이전 동작이 남음 | 캐시, 장기 연결 및 현재 파일 | 새 테스트 요청을 만든 후 다시 비교 |
Connectivity Test는 기존 서버의 테스트 결과를 확인하는 데 도움이 될 수 있지만 모든 사이트, 프로토콜, 업무 요청이 사용 가능하다는 점을 증명하지는 않습니다. 테스트에 성공해도 실제 접속에서는 이름 해석, 대상의 요청 거부, 서비스 인증 문제를 만날 수 있습니다. 테스트 결과는 여러 근거 중 하나로 취급해야 하며 최종 결론으로 삼아서는 안 됩니다. 마찬가지로 웹페이지가 열렸다고 PROXY를 사용했다는 뜻도 아닙니다. 해당 요청의 정책 기록과 함께 확인해야 합니다.
정방향, 반대 방향, 회귀 테스트 사례 준비
정방향 테스트는 대상이 매칭되어야 한다는 점을, 반대 방향 테스트는 범위가 넓어지지 않았다는 점을, 회귀 테스트는 기존 기능이 계속 작동한다는 점을 확인합니다. 예를 들어 DOMAIN-SUFFIX를 추가한 뒤 루트 도메인과 하위 도메인 하나를 테스트하고, 해당 접미사에 속하지 않는 이름도 확인한 다음 로그인과 로컬 네트워크 접근을 점검할 수 있습니다. 테스트 목적으로 사용 권한이 없거나 용도를 모르는 대상을 방문할 필요는 없습니다. 본인이 접근 권한을 가진 목적이 분명한 서비스만 사용하세요. 예시 도메인은 문법 설명용입니다.
테스트할 때는 가능한 한 한 번에 하나의 변수만 바꾸세요. 서버, 네트워크, 실행 모드는 그대로 두고 규칙 하나만 조정한 뒤 결과를 비교하세요. 네트워크를 바꿔야 한다면 별도로 기록해 네트워크 변화로 인한 이름 해석 차이를 규칙 수정의 결과로 오인하지 않도록 하세요. 페이지가 연결을 재사용한다면 관련 테스트 세션을 종료하고 새 요청을 보내세요. 새 규칙은 새 연결로 확인하는 것이 일반적이며, 기존 연결이 계속되는 동작만으로 판단해서는 안 됩니다.
로그 공유 시 민감 정보 처리
문제 해결을 위해 기록을 공유해야 한다면 재현에 필요한 대상, 규칙, 정책, 오류 정보만 남기세요. 구독 링크의 인증 매개변수, 서버 비밀번호, 비공개 요청 경로, 계정 식별 정보, 전체 구성에 포함된 인증 정보는 먼저 삭제해야 합니다. 스크린샷에도 이러한 정보가 담길 수 있으므로 이미지라고 해서 확인을 건너뛰지 마세요. 민감한 정보는 알아보기 쉬운 예시 값으로 바꾸고 어떤 필드를 교체했는지 설명해야 재현 가능성과 정보 보호를 함께 지킬 수 있습니다.
문제를 좁혀야 한다면 최소 테스트 구성을 만들 수 있습니다. 필요한 General 설정, 대상 규칙 하나, FINAL 하나만 남기고 본인이 이미 보유한 서버를 계속 사용하세요. 최소 구성에서 정상 작동하면 원래 규칙을 그룹별로 복원해 차이를 일으키는 부분을 찾으세요. 복원할 때는 그룹 안의 원래 순서를 유지하고 파일 전체를 한꺼번에 재정렬하지 마세요. 이를 통해 문제가 특정 조건, 외부 참조, 예외 간 순서 중 어디에서 비롯되었는지 확인할 수 있습니다.
복구 후에도 실행 상태를 다시 확인하세요
되돌리기는 텍스트만 원래대로 바꾸는 작업이 아닙니다. 원래 구성을 다시 선택하고 Global Routing 및 기존 서버 선택을 확인한 뒤 필요한 경우 연결을 새로 수립하고 이전에 정상이었던 테스트 사례와 비교하세요. 원래 구성으로 복구한 뒤에도 문제가 지속된다면 네트워크, 서버, 대상 서비스에 변화가 있었는지 고려해야 합니다. 모든 문제를 이번 편집의 탓으로 돌리지 마세요. 수정 전후의 파일 두 개와 간단한 기록을 남기면 기억에 의존해 반복해서 복구하다가 새로운 차이를 만들지 않을 수 있습니다.
수정 완료 여부를 판단하는 기준대상이 올바르게 매칭되고, 예외 규칙이 다른 요청에 영향을 주지 않으며, 일상적인 요청이 회귀 테스트를 통과하고, 수정 전 상태로 되돌릴 수 있어야 합니다. 네 가지를 모두 확인한 뒤 테스트 복사본을 장기 구성으로 사용하세요.
기기를 변경해 복구할 때는 먼저 앱을 App Store에서 받았는지 확인하고, 직접 저장해 둔 서버 정보와 구성 파일을 복원한 다음 현재 구성과 시스템 연결 권한을 다시 확인하세요. 구체적인 시스템 요구 사항은 App Store 페이지에 표시된 내용을 기준으로 합니다. 구입 및 앱 재다운로드 관련 내용은 구입 항목 복원 안내와 해당 페이지의 구입 관련 자주 묻는 질문을 확인하세요. 처음 연결하는 단계는 사용 방법 안내에서 확인하고, 규칙의 의미는 이 페이지의 목차를 따라 하나씩 살펴보세요.
장기간 관리할 때는 안정 버전과 테스트 버전을 각각 하나씩 두는 방법이 좋습니다. 안정 버전에는 검증된 변경 사항만 적용하고, 테스트 버전은 새로운 조건과 재현 실험에 사용하세요. 더는 필요하지 않은 예외를 정기적으로 정리하고, 고정 주소가 여전히 유효한지 확인하며, 원격 구성을 업데이트한 뒤 개인 규칙을 다시 점검하세요. 규칙 파일의 가치는 길이가 아니라 각 조건의 목적을 설명할 수 있는지, 결과를 확인할 수 있는지, 수정 사항을 되돌릴 수 있는지에 달려 있습니다.