공식 매뉴얼 Config / Rule

Shadowrocket
규칙 및 설정 참고

설정 섹션, 매칭 조건, 실행 정책별로 내용을 확인하세요. 먼저 요청에 어떤 Config가 적용되는지 확인한 다음, 해당 Rule이 매칭된 이유를 살펴봅니다.

이 페이지는 설정을 찾아보는 매뉴얼이며, 첫 연결 절차를 대신하지 않습니다. 기존 구독이나 서버 정보를 아직 가져오지 않았다면 시작 가이드에서 추가·연결·확인을 마친 뒤, 규칙 적용 범위나 우선순위, 설정 덮어쓰기 문제에 해당하는 장을 확인하세요.

위에서 아래로 매칭 첫 번째 일치 규칙 적용 예시 도메인은 서버 주소로 사용할 수 없음
01 / CONFIG

설정 파일 구조와 편집 범위

전체 설정, 규칙 목록, 서버 정보를 구분해 서로 다른 용도의 내용을 덮어쓰지 않도록 합니다.

하나의 파일, 각 섹션의 역할은 다릅니다

Shadowrocket 설정 파일에는 연결 처리 옵션, 분기 조건, 도메인 매핑, 요청 재작성 규칙을 함께 넣을 수 있습니다. 대괄호로 표시된 섹션 이름이 각 항목의 역할을 구분합니다. [General]에는 일반 처리 옵션, [Rule]에는 순서대로 확인하는 규칙, [Host]에는 명시적 도메인 매핑, [URL Rewrite]에는 조건에 맞는 URL 처리 규칙을 저장합니다. 섹션 이름은 장식용 제목이 아닙니다. 내용을 잘못된 섹션에 넣으면 예상대로 해석되지 않을 수 있습니다. 처음 보는 파일을 읽을 때는 해당 섹션부터 찾고, 각 항목을 차례로 살펴보세요. 도메인을 먼저 검색해 내용을 그대로 붙여 넣는 방식은 피해야 합니다.

서버 정보와 분기 규칙도 서로 다른 항목입니다. 서버 정보는 연결 대상, 프로토콜, 인증 매개변수를 설명하고, 규칙은 요청에 적용할 정책을 지정합니다. DOMAIN-SUFFIX,example.com,PROXY 한 줄만으로 사용할 수 있는 서버가 만들어지지는 않습니다. 구독을 성공적으로 가져왔더라도 지정한 규칙 파일이 활성화됐다는 뜻은 아닙니다. 이 페이지의 설명은 사용자가 이미 자신의 구독이나 서버 정보를 보유하고 있다는 전제에서 작성했습니다. 예시 도메인과 주소는 매칭 범위를 설명하기 위한 것이며, 연결 리소스를 제공하지 않습니다.

먼저 복사본을 저장한 뒤 한 항목씩 수정

Config에서 현재 선택된 파일을 확인하고 이름을 기록한 다음, 원본 내용을 별도 복사본으로 보관하세요. 편집하기 전에 파일이 원격 주소에서 가져온 것인지, 이후 업데이트 시 전체 내용이 다시 다운로드되는지 확인합니다. 원격 설정 파일과 서버 구독은 모두 링크 형태로 보일 수 있지만, 업데이트되는 대상은 다를 수 있습니다. 실제 가져오기 경로와 내용을 기준으로 구분하세요. 업데이트 방식을 이해하기 전에 원격 파일을 영구적인 로컬 메모처럼 편집하지 마세요. 다음 업데이트에서 직접 추가한 규칙이 덮어써질 수 있습니다.

수정할 때는 기존 섹션 이름을 유지하고 대상 섹션에만 내용을 추가하세요. 먼저 범위가 명확한 DOMAIN 규칙 하나를 추가하고 저장·활성화한 다음 테스트 연결을 새로 설정하는 것이 좋습니다. 결과를 확인한 뒤 DOMAIN-SUFFIX로 범위를 넓히세요. 편집기에 저장 완료가 표시되더라도 텍스트가 기록됐다는 뜻일 뿐, 모든 키워드와 매개변수, 정책이 유효하다는 보장은 없습니다. 파싱 안내가 표시되면 안내된 문제부터 해결하세요. 오류를 가리려고 규칙을 계속 추가하지 마세요.

[General]
dns-server = system

[Rule]
DOMAIN,api.example.net,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

[Host]
lab.example.com = 192.168.10.20

이 조각은 설정 파일의 기본 구조를 보여주는 예시이지, 완전한 연결 설정이 아닙니다. 시스템 DNS를 사용하고, 지정한 전체 도메인은 DIRECT로, example.com과 하위 도메인은 PROXY로, 나머지 요청은 DIRECT로 보냅니다. 실험용 도메인 하나에는 고정 주소도 지정합니다. 실제 접속 가능 여부는 선택한 서버, 네트워크 연결 상태, 주소가 사용자 환경에 맞는지, 관련 서비스가 실행 중인지에 따라 달라집니다. 실험용 주소 매핑을 그대로 운영 환경에 적용하지 마세요.

문법이 유효한지와 용도에 맞는지 구분하기

문법상 문제가 없는 한 줄이라도 네트워크 사용 목적에는 맞지 않을 수 있습니다. 예를 들어 FINAL,DIRECT와 FINAL,PROXY는 모두 유효한 기본 처리 방식을 나타내지만, 어느 규칙에도 매칭되지 않은 요청을 서로 다른 방향으로 처리합니다. 설정을 검토할 때는 오류가 없는지만 보지 말고, 어떤 요청이 이 규칙에 해당하는지, 지정된 정책을 사용할 수 있는지, 실패했을 때 복구할 수 있는지도 확인하세요. 수정할 때마다 예상 입력과 결과를 기록하고 수정 전후의 차이를 보관하는 것이 좋습니다.

파일에 같은 섹션이 여러 번 나오거나 설정이 서로 충돌한다면 문제를 찾기 전에 구조부터 정리하세요. 중복 항목은 “마지막 항목이 항상 적용된다” 같은 검증되지 않은 가정에 기대지 마세요. 같은 용도의 규칙은 알아보기 쉽게 모으고, 중복 매핑을 줄이며, 이유를 알 수 있는 기록을 남기면 조건을 계속 늘리는 것보다 관리하기 쉽습니다.

02 / GLOBAL ROUTING

작동 모드와 규칙 적용 조건

규칙이 올바른 것은 시작일 뿐입니다. 현재 모드, 선택된 설정, 연결 상태에 따라 규칙이 처리 과정에 적용되는지가 달라집니다.

Config, Proxy, Direct의 역할

규칙을 확인하기 전에 Home에서 Global Routing을 확인하세요. 설정 모드인 Config는 현재 설정의 분기 로직에 따라 요청을 처리합니다. 프록시 모드인 Proxy는 주로 요청을 프록시 방향으로 보냅니다. 직접 연결 모드인 Direct는 주로 대상에 직접 접속합니다. Proxy와 Direct 모드는 Rule 순서를 검증하는 대체 환경이 아닙니다. Proxy에서 특정 도메인에 접속된다는 사실은 테스트 경로에서 프록시 연결이 작동할 가능성을 보여줄 뿐, DOMAIN-SUFFIX 작성이 올바르다는 뜻은 아닙니다.

이 페이지의 규칙 분석은 Global Routing이 Config로 설정되어 있고, 대상 설정이 활성화되어 있으며, 연결을 새로 설정했다는 전제로 진행합니다. 화면에 Scene이 있다면 현재 씬에서 실제로 적용하는 설정과 정책을 먼저 확인하세요. 씬 이름 자체를 규칙으로 간주하지 마세요. 기기마다 화면 구성은 다를 수 있으므로 현재 화면에서 선택된 항목을 기준으로 확인합니다. 중요한 것은 버튼 위치를 외우는 것이 아니라 요청에 최종적으로 어떤 처리 로직이 적용되는지 파악하는 것입니다.

모드 및 화면 표시 용어확인할 내용적합한 확인 목적
설정 / Config현재 Config 및 Rule 순서도메인·주소 규칙과 FINAL 분기 확인
프록시 / Proxy선택된 프록시 서버와 연결 가능 여부프록시 연결 문제를 따로 확인
직접 연결 / Direct현재 네트워크의 직접 접속 가능 여부직접 연결 경로의 비교 기준 설정

General은 두 번째 Rule이 아닙니다

General의 옵션은 어떤 DNS를 사용할지, 특정 주소 계열을 처리할지, 어떤 대상을 특정 처리 범위에서 제외할지 등 기본적인 처리 환경에 영향을 줍니다. Rule에 있는 개별 조건과 같은 기능이 아닙니다. 더 앞선 네트워크 범위 설정에서 특정 요청을 이미 제외했다면 Rule 끝에 해당 요청을 위한 규칙을 추가해도 예상한 결과가 나오지 않을 수 있습니다. 문제를 찾을 때 General도 살펴보되, 여러 일반 매개변수를 한꺼번에 바꾸지 마세요.

예를 들어 dns-server = system은 시스템 DNS를 사용한다는 뜻입니다. 모든 요청이 직접 연결되거나 접속하려는 도메인이 반드시 해석된다는 뜻은 아닙니다. 프록시 방향은 정책으로 정하고, 이름 해석은 이후 연결에 사용할 주소를 제공하므로 각각 따로 확인해야 합니다. 원래 설정에 다른 DNS 옵션이 있다면 먼저 옵션 간 관계를 파악하세요. 예시와 똑같이 보이도록 기존 설정 전체를 바꾸지 마세요.

[General]
dns-server = system

[Rule]
DOMAIN,api.example.com,PROXY
FINAL,DIRECT

이 예시에서는 전체 도메인 api.example.com만 명시적으로 PROXY에 전달합니다. Config 모드에서 첫 번째 조건을 확인할 수 있지만, 다른 모드로 전환한 뒤 관찰한 연결 방향만으로는 두 규칙의 순서를 검증할 수 없습니다. 비교 테스트를 할 때는 먼저 모드를 기록하고 같은 요청을 보낸 다음 원래 Config로 되돌리세요. 그렇지 않으면 일시적으로 모드를 바꾼 것만으로도 이후 규칙 테스트의 공통 전제가 달라질 수 있습니다.

연결 상태와 기존 세션

설정을 저장한 뒤에도 이미 만들어진 장시간 연결은 기존 경로를 계속 사용할 수 있습니다. 브라우저의 연결 재사용, 앱의 백그라운드 세션, 이름 해석 캐시도 관찰 결과에 영향을 줍니다. 테스트할 때는 대상 앱의 기존 세션을 가능한 한 종료하고, 필요하면 연결을 끊었다가 다시 연결한 뒤 새 요청을 보내세요. 계속 재생 중인 미디어 연결의 방향이 바뀌지 않았다고 해서 새 규칙이 적용되지 않았다고 판단하지 마세요. 페이지가 로컬 캐시에서 표시된 것을 인터넷 연결 성공으로 간주해서도 안 됩니다.

Connectivity Test는 특정 서버의 기본 연결 상태를 확인하는 데 도움을 주지만, 실제 서비스 요청과는 다른 테스트입니다. 서버 테스트가 성공해도 대상 도메인이 해석되지 않거나 서버가 현재 요청을 거부할 수 있습니다. 반대로 서비스 페이지가 일부 로드됐더라도 관련된 모든 하위 도메인에 같은 정책이 적용됐다고 볼 수는 없습니다. 규칙을 제대로 확인하려면 테스트 아이콘 하나에 의존하지 말고 실제 요청과 매칭 결과를 살펴보세요.

03 / DOMAIN

도메인 규칙의 범위와 경계

먼저 전체 도메인으로 요구 사항을 확인한 뒤, 후위 도메인이나 키워드로 범위를 넓힐지 결정하세요.

DOMAIN: 전체 도메인 하나만 지정

DOMAIN의 매칭 값은 도메인이며 전체 URL이 아닙니다. DOMAIN,api.example.com,PROXY는 api.example.com에 적용됩니다. 페이지 경로에 같은 문자열이 있다는 이유로 다른 사이트에 매칭되지 않으며, www.example.com에 자동 적용되지도 않습니다. 입력할 때 https://, 경로, 쿼리 매개변수, 끝의 포트 번호를 넣지 마세요. 같은 도메인에서 경로별로 구분하려는 경우 도메인 규칙은 적합한 방법이 아닙니다. 먼저 앱에서 해당 요청 정보를 실제로 확인할 수 있는지 살펴보세요.

전체 도메인 규칙은 범위를 좁힌 예외를 설정할 때 유용합니다. 기본 사이트와 다른 하위 도메인은 프록시로 보내되 내부 인터페이스 하나는 직접 연결해야 한다면, 해당 인터페이스의 DOMAIN 규칙을 넓은 후위 도메인 규칙보다 앞에 두세요. 이렇게 하면 예외를 먼저 적용한다는 점을 설정에서 명확히 확인할 수 있습니다. 전체 도메인 규칙이 클라이언트에서 자동으로 더 높은 우선순위를 얻는 것은 아닙니다. 먼저 확인되기 때문에 적용되는 것이며, 두 줄의 순서를 바꾸면 뒤에 있는 예외가 실행되지 않을 수 있습니다.

[Rule]
DOMAIN,intranet.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

DOMAIN-SUFFIX: 후위 도메인과 하위 도메인

DOMAIN-SUFFIX,example.com,PROXY는 example.com 자체와 api.example.com, img.cdn.example.com 같은 하위 도메인에 적용됩니다. 후위 도메인은 도메인 경계를 기준으로 판단하며 임의의 문자열 포함 여부를 확인하지 않습니다. 따라서 notexample.com은 example.com의 하위 도메인이 아닙니다. 일반적으로 기본 도메인을 그대로 입력하면 되며 *.example.com처럼 적을 필요가 없습니다. 와일드카드 표기법을 후위 도메인 값에 섞으면 오히려 혼란이 생길 수 있습니다.

후위 조건은 같은 도메인 트리를 관리할 때 적합하지만, 같은 서비스가 항상 하나의 도메인 트리만 사용하는 것은 아닙니다. 페이지가 별도의 로그인 도메인, 정적 리소스 도메인, API 도메인을 함께 사용할 수 있으므로 기본 사이트 규칙이 매칭된 뒤에도 이미지나 로그인 요청은 다른 방향으로 처리될 수 있습니다. 실제 요청을 관찰하고 필요한 도메인의 용도를 하나씩 확인하세요. 규칙 범위를 공개 후위 도메인 전체로 넓히지 마세요. 공유 호스팅 도메인에 특히 주의해야 합니다. 범위가 지나치게 넓으면 관련 없는 서비스에도 영향을 줍니다.

DOMAIN-KEYWORD: 더 넓은 포함 조건

DOMAIN-KEYWORD는 도메인에 지정한 키워드가 포함되어 있는지 확인합니다. DOMAIN-KEYWORD,example,PROXY는 example.com 후위 조건보다 범위가 넓어 이름에 example이 들어간 다른 도메인에도 매칭될 수 있습니다. 해당 도메인들이 같은 운영 주체에 속하는지는 판단하지 않으며, 기본 도메인 부분만 검색하지도 않습니다. 이렇게 넓은 포함 조건이 필요한 이유가 분명하고 추가 매칭을 감수할 수 있을 때만 사용하세요.

대상이 api.example.com과 download.example.com뿐이라면 짧게 쓰려고 무리하게 키워드 조건을 사용하지 말고 전체 도메인이나 후위 조건을 우선 고려하세요. 한 글자나 흔한 약어는 검토하기 어렵고, 설정을 수정하지 않아도 나중에 추가된 사이트가 의도치 않게 포함될 수 있습니다. 키워드 규칙은 확인하기 쉬운 위치에 두고, 매칭되어야 하는 사례와 매칭되지 않아야 하는 사례를 몇 가지씩 테스트하세요.

조건예시 값범위 설명
DOMAINapi.example.com해당 전체 도메인만
DOMAIN-SUFFIXexample.com이 도메인 및 하위 도메인
DOMAIN-KEYWORDexample도메인에 이 문자열이 포함됨

도메인 확인 가능 여부와 입력값 정리

도메인 조건을 적용하려면 처리 과정에서 요청과 도메인을 연결할 수 있어야 합니다. 앱이 IP 주소에 직접 연결하거나 매칭에 쓸 이름이 요청 정보에 남아 있지 않다면 도메인 규칙이 예상대로 작동하지 않을 수 있습니다. 이때는 IP를 DOMAIN에 넣지 말고 대상 주소와 로그를 확인하세요. 국제화 도메인의 경우 설정에 사용하는 형식이 실제 인식된 이름과 일치해야 합니다. 복사할 때 전각 쉼표, 보이지 않는 공백, URL 인코딩 문자가 섞이지 않았는지 확인하세요.

규칙을 일괄 정리할 때는 중복 항목을 먼저 제거하고, 앞쪽의 넓은 조건이 뒤쪽의 구체적인 조건을 덮는지 확인하세요. 같은 도메인에 서로 다른 정책을 적용하는 중복 규칙을 두더라도 자동으로 선택되지는 않습니다. 결과는 여전히 위치에 따라 결정됩니다. 기본적인 범위 예시는 DOMAIN, GEOIP, FINAL 규칙 입문에서 확인할 수 있습니다. 이 페이지로 돌아와 규칙 범위와 전체 설정의 순서를 함께 검토하세요.

04 / IP & GEOIP

IP 대역, 주소 계열과 GEOIP

도메인 규칙은 “이름이 무엇인지”, IP 규칙은 “어디에 연결하는지”를 다룹니다. 서로 대체할 수 없습니다.

IP-CIDR: 네트워크 프리픽스로 매칭

IP-CIDR은 주소와 프리픽스 길이로 IPv4 주소 범위를 지정합니다. 192.168.0.0/16은 16비트 네트워크 프리픽스로 구분되는 주소 대역을 나타냅니다. 어떤 페이지 URL이 192.168로 시작하는지 검사하는 규칙이 아닙니다. 프리픽스 길이가 클수록 일반적으로 범위가 좁습니다. 단일 IPv4 주소는 /32로 표현할 수 있습니다. 편집하기 전에 대상이 전체 네트워크인지 단일 호스트인지 확인하세요. 서브넷 마스크, 포트 번호, CIDR 프리픽스를 한 매개변수에 섞지 마세요.

로컬 네트워크 서비스는 보통 로컬 주소에 직접 연결해야 하지만, 예외는 실제 네트워크 설정에 맞춰 지정해야 합니다. 사설 주소 대역을 DIRECT로 지정해도 다른 네트워크 대역으로 가는 경로가 생기거나 기기 및 라우터의 접근 제어가 자동으로 우회되지는 않습니다. 다른 Wi-Fi에 연결해 기기의 주소 범위가 바뀌면 이전의 로컬 예외가 같은 서비스를 가리키지 않을 수 있습니다. 회사, 게스트, 가정 네트워크에서 주소 대역이 겹칠 수도 있으니 현재 환경에서 확인하세요.

[Rule]
IP-CIDR,192.168.0.0/16,DIRECT
IP-CIDR,10.0.0.0/8,DIRECT
IP-CIDR,172.16.0.0/12,DIRECT
FINAL,PROXY

no-resolve: 규칙 매칭을 위한 추가 해석 줄이기

IP 규칙에는 no-resolve 매개변수를 사용할 수 있습니다. 이 매개변수는 해당 규칙의 매칭만을 위해 도메인 해석을 추가로 실행하지 않겠다는 의도를 나타냅니다. 대상 주소를 이미 알고 있거나 특정 주소 대역을 확인하려고 이름을 해석하는 일을 피하고 싶을 때 적합합니다. “연결 전체에 DNS가 필요 없다”는 뜻으로 이해하면 안 됩니다. 이후 프록시 측이나 앱, 다른 규칙에서 해석하지 않는다고 단정할 수도 없습니다. 요청에 주소가 이미 포함되어 있는지, 이후 어떤 조건이 적용되는지에 따라 실제 동작이 달라집니다.

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
FINAL,PROXY

이 예시에서는 명확한 도메인 정책을 앞에 두고 로컬 주소 예외를 뒤에 둡니다. 요청에 도메인만 있는 경우 no-resolve가 포함된 주소 규칙이 그 도메인에서 사설 주소를 반드시 찾아낸다고 보장하지 않습니다. 요청에 대상 IP가 이미 포함되어 있다면 주소를 기준으로 판단할 수 있습니다. 설정을 관리할 때는 원하는 동작을 선택해야 합니다. 주소 분류를 위해 해석 결과를 얻을 것인지, 도메인 기반 경로를 우선할 것인지 결정하세요. 모든 IP 규칙에 같은 매개변수를 기계적으로 추가하지 마세요.

IP-CIDR6: IPv6 대역 별도 처리

IPv6는 IPv4 대역 규칙에 자동으로 포함되지 않습니다. 환경에서 IPv6를 사용한다면 해당 주소 계열도 테스트해야 합니다. IP-CIDR6도 CIDR 형식으로 매칭 값을 지정하지만 주소는 IPv6 표기법을 사용합니다. 아래의 2001:db8::/32는 형식을 설명하기 위한 문서용 예시 주소 대역이므로 실제 서비스 네트워크에 그대로 사용하면 안 됩니다. 실제 규칙에는 보유 중이거나 처리할 필요가 있음을 확인한 대상 주소 범위를 사용하세요.

[Rule]
IP-CIDR6,2001:db8::/32,DIRECT,no-resolve
FINAL,PROXY

도메인에서 IPv4와 IPv6 주소를 모두 반환하면 앱이 둘 중 하나를 먼저 시도하거나 동시에 시도할 수 있습니다. 따라서 한 번의 성공이나 실패만으로는 어떤 주소 규칙이 적용됐는지 알기 어렵습니다. 사용한 주소 계열과 대상 IP를 각각 기록한 다음 규칙 범위를 확인하세요. IPv6 경로에 문제가 있다면 먼저 네트워크 연결과 설정의 지원 여부를 확인하세요. 특정 주소 계열을 무작정 끄는 방법을 모든 문제의 해결책으로 삼지 마세요.

GEOIP: 주소 분류이지 콘텐츠 분류가 아닙니다

GEOIP,CN,DIRECT는 대상 IP의 지리 정보 데이터에 따라 판단합니다. 웹페이지 언어, 사이트 운영자, 기기의 위치를 기준으로 하지 않으며 모든 주소가 사용자의 예상대로 분류된다고 보장하지도 않습니다. 콘텐츠 전송 네트워크, 공유 주소, 서비스 이전으로 같은 도메인도 네트워크에 따라 다른 주소를 반환할 수 있습니다. 따라서 한 번 GEOIP에 매칭된 결과를 해당 사이트의 모든 요청에 일반화하지 마세요.

서비스에서 안정적인 도메인 정책이 필요하다면 명확한 도메인 예외를 먼저 지정하고 GEOIP는 범위가 넓은 주소 분류 조건으로 사용하세요. 분류 결과가 다른 이유를 조사할 때는 당시 해석된 IP, 테스트 네트워크, 매칭된 규칙을 기록하세요. “이 사이트는 분명 특정 지역에 속한다”는 판단만으로 끝내지 마세요. 현재 사용하는 지리 정보가 목적에 적합한지도 확인해야 합니다. 어떤 분류도 실제 대상 주소와 네트워크 연결 가능 여부를 확인하는 일을 대신할 수 없습니다.

05 / POLICY & ORDER

정책의 의미와 첫 번째 매칭

먼저 매칭된 조건이 정책을 결정합니다. 더 구체적인 규칙이라고 해서 앞에 있는 규칙을 자동으로 건너뛰지는 않습니다.

PROXY, DIRECT, REJECT의 차이

PROXY는 요청을 프록시 방향으로 처리한다는 뜻이며, 실제 연결은 현재 선택과 설정에 참조된 유효한 서버에 따라 달라집니다. DIRECT는 대상에 직접 연결한다는 의미입니다. “먼저 프록시를 시도하고 실패하면 직접 연결”하는 방식이 아닙니다. REJECT는 매칭된 요청을 거부하며 성능을 높이는 스위치가 아닙니다. 세 가지는 서로 다른 목적을 위한 것이므로 요청이 실패했다고 무작정 바꾸지 마세요. 먼저 대상 요청이 어떤 경로를 사용해야 하는지 판단한 다음, 해당 경로의 주소 해석, 연결, 서비스 응답을 확인하세요.

설정에서 사용자 지정 정책 이름을 사용한다면 해당 이름이 실제로 존재하는지, 참조 이름과 정의가 정확히 일치하는지 확인하세요. 서버 메모 이름을 사용할 수 있는 정책 이름으로 간주하지 말고, 다른 파일에서 참조만 복사해 관련 정의를 빠뜨리지도 마세요. 이 페이지는 기본 처리 방향으로 기본 로직을 설명하며, 사용자 지정 정책 그룹의 전체 정의는 다루지 않습니다. 이름을 인식하지 못한다면 같은 이름의 규칙을 더 추가하기보다 참조 관계부터 수정하세요.

위에서 아래로 확인하며 자동으로 ‘가장 구체적인 규칙’을 우선하지 않습니다

Rule은 위에서 아래로 읽는 것이 기본입니다. 요청이 어떤 규칙의 조건과 일치하면 해당 규칙의 정책이 적용되고, 같은 매칭에 다른 정책을 적용하기 위해 뒤의 규칙을 계속 확인하지 않습니다. 규칙 유형에 텍스트 순서를 무시하는 보편적인 우선순위는 없습니다. 예를 들어 앞에 example.com 후위 규칙이 있고 뒤에 api.example.com 전체 도메인 예외가 있으면, 뒤의 예외는 앞의 규칙에 이미 포함될 수 있습니다. 큰 규칙 목록을 관리할 때 흔히 발생하는 숨은 오류입니다.

[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,example,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

api.example.com은 첫 번째 전체 도메인 조건에 매칭되어 DIRECT로 처리되고 후위 조건은 더 확인하지 않습니다. www.example.com은 첫 번째 조건에 매칭되지 않고 두 번째 조건에 매칭되어 PROXY로 처리됩니다. example이 포함되어도 해당 후위 도메인에 속하지 않는 다른 도메인은 키워드 조건에 매칭될 수 있습니다. 앞의 조건에서 매칭이 끝나지 않은 경우에만 주소 규칙을 확인합니다. 주소 규칙을 독립적으로 겹쳐 적용되는 강제 규칙처럼 이해하면 안 됩니다.

FINAL은 목록의 마지막 기본 규칙이어야 합니다

FINAL에는 별도의 매칭 값이 없으며 일반적인 표기는 FINAL,PROXY 또는 FINAL,DIRECT입니다. 앞의 규칙에 매칭되지 않은 요청을 처리하므로 목록 맨 끝에 두어야 합니다. FINAL을 중간에 두면 뒤의 규칙은 정상적으로 확인되지 않습니다. 새 규칙을 파일 끝에 추가하다가 기존 FINAL 뒤에 넣는 실수도 생길 수 있습니다. 새 줄이 있는지만 확인하지 말고 편집할 때마다 마지막 위치를 살펴보세요.

기본 처리 방향은 네트워크 사용 목적과 테스트 예상 결과에 맞춰 선택하세요. FINAL은 네트워크 장애 시 자동으로 대신 연결해 주는 서버가 아니며, 앞의 PROXY 연결이 실패한 뒤 다음 규칙을 계속 실행하지도 않습니다. 한 번 매칭되어 정책이 정해지면 이후 연결 실패는 해당 정책 경로에서 해결해야 할 문제입니다. FINAL을 실패 시 대체 경로로 오해하면 프록시 서버가 작동하지 않을 때 무관한 마지막 규칙을 계속 수정하게 되고 실제 문제는 해결되지 않습니다.

검토하기 쉬운 순서로 구성하기

일반적인 구성 방식은 구체적인 서비스 예외를 먼저 배치하고, 적절한 범위의 도메인 규칙을 그 뒤에 둔 다음, 로컬 주소와 지리 조건을 배치하고 마지막에 FINAL을 두는 것입니다. 이는 검토하기 편한 구성 방법일 뿐 모든 환경에서 따라야 하는 고정 순서는 아닙니다. 특정 주소 대역을 모든 도메인 조건보다 우선 적용해야 한다면 앞쪽에 배치하세요. 주소 정보가 필요할 수 있고 이후 도메인 판단에 영향을 줄 수 있다는 점도 고려해야 합니다.

순서를 검토할 때 중요한 규칙마다 매칭되어야 하는 입력 하나와 계속 다음 규칙으로 넘어가야 하는 입력 하나를 정리하세요. 긍정 사례만 확인하면 범위가 넓은 규칙이 다른 항목을 덮는 문제를 놓칠 수 있습니다. 오래된 규칙을 삭제할 때도 같은 방법으로 확인해야 합니다. 오랫동안 효과가 없어 보인 예외가 특정 네트워크, 주소 계열, 로그인 절차에서만 필요할 수 있습니다. 규칙 수로 설정 품질을 판단하기보다 각 규칙의 용도를 명확히 기록하는 것이 중요합니다.

06 / DNS & HOST

이름 해석과 Host 매핑

이름이 어떤 주소로 변환되는지와 연결에 어떤 정책이 적용되는지를 먼저 구분한 뒤 해석 문제를 살펴보세요.

DNS 결과와 분기 결과는 별도로 확인해야 합니다

DNS는 도메인을 연결에 필요한 주소로 변환하고, Rule은 매칭된 요청에 적용할 처리 정책을 정합니다. 둘은 서로 영향을 줄 수 있지만 같은 설정은 아닙니다. 도메인 해석에 성공해도 연결되지 않을 수 있고, 경로에 따라 서로 다른 위치에서 이름을 해석해야 할 수도 있습니다. 문제를 분석할 때는 최소한 도메인, 해석된 주소, 매칭된 규칙, 최종 정책을 기록하세요. “도메인에 IP가 있다”는 사실만으로 분기가 올바르다고 볼 수 없으며, PROXY만 확인했다고 대상 주소에 연결할 수 있다는 뜻도 아닙니다.

General의 DNS 소스는 해석 환경에 영향을 줍니다. 시스템 소스를 사용하면 Wi-Fi, 모바일 네트워크, 시스템 네트워크 설정에 따라 결과가 달라질 수 있습니다. 다른 소스를 지정했다면 현재 네트워크에서 해당 소스에 연결할 수 있는지, 설정에 다른 해석 옵션이 있는지도 확인하세요. 테스트 결과를 맞추려고 기록 없이 DNS, 서버, 규칙 순서를 한꺼번에 바꾸지 마세요. 다시 접속되더라도 어떤 변경이 실제로 작동했는지 알 수 없습니다.

Host는 명시적인 이름-주소 관계만 설정합니다

Host는 직접 관리하는 테스트 서비스, 고정 내부 기기, 일시적인 이전 테스트에 주소를 지정할 때 적합합니다. 일반적인 형식은 도메인, 등호, 주소입니다. 페이지 경로를 넣거나 프로토콜 암호를 저장하는 곳이 아닙니다. 아래 설정은 lab.example.com을 사설 주소로 연결하고 해당 도메인에 DIRECT를 지정합니다. 각각 별도의 결정을 나타냅니다. Host는 주소를 매핑하고 Rule은 처리 방향을 정합니다.

[General]
dns-server = system

[Rule]
DOMAIN,lab.example.com,DIRECT
FINAL,PROXY

[Host]
lab.example.com = 192.168.10.20

이 주소는 사용자 네트워크에 해당 기기와 서비스가 실제로 존재할 때만 의미가 있습니다. 매핑을 저장해도 서버가 생기거나 다른 로컬 네트워크에 접근할 경로가 기기에 자동으로 추가되지는 않습니다. 대상 서비스가 HTTPS를 사용한다면 인증서가 접속 도메인과 일치해야 합니다. TCP 연결을 설정할 수 있는 주소로 도메인을 매핑해도 TLS 인증이 성공한다는 보장은 없습니다. 인증서 오류가 발생하면 도메인, 인증서, 서비스 설정을 확인하세요. 검증을 끄는 것을 Host 설정의 일반적인 절차로 삼지 마세요.

공용 서비스 주소를 장기간 고정하지 말아야 하는 이유

공용 서비스는 DNS를 통해 지역, 부하, 주소 계열이 다른 대상으로 연결될 수 있습니다. 주소를 수동으로 고정하면 이런 분배 과정을 우회하게 됩니다. 단기간 작동한 주소도 나중에 이전되거나 서비스가 중단될 수 있고 현재 네트워크에 적합하지 않을 수 있습니다. 공유 서비스는 요청의 도메인을 기준으로 사이트를 선택하기도 합니다. 따라서 Host는 이유가 명확하고 확인 및 되돌리기가 가능한 매핑에 적합합니다. 문제 해결 중 확인한 IP를 모든 기기에 영구적으로 설정하지 마세요.

임시 매핑이 필요하다면 원래 도메인, 원래 해석 결과, 대체 주소, 복구 방법을 기록하세요. 테스트가 끝나면 매핑을 삭제하고 일반 이름 해석이 복구됐는지 확인합니다. 오래된 Host 항목이 있으면 해당 이름이 계속 이전 주소로 명시적으로 연결되어 DNS를 바꿔도 효과가 없는 것처럼 보일 수 있습니다. 이런 문제를 확인할 때는 General에서 해석 소스만 바꾸지 말고 먼저 Host에서 전체 도메인을 검색하세요.

캐시와 주소 계열에 따른 관찰 차이

해석 캐시는 시스템, 앱, 브라우저, 연결 처리 과정 등 여러 위치에 있을 수 있습니다. 설정을 저장하고 곧바로 페이지를 새로 고쳐도 이전 주소나 기존 연결을 계속 사용할 수 있습니다. 매핑 전후의 결과를 비교할 때는 새 요청 세션을 만들고, 필요하면 다시 연결한 뒤 실제 대상 주소를 확인하세요. 페이지가 다시 표시되는지만 보고 캐시가 비워졌다고 판단하지 마세요. 페이지 자체가 로컬 데이터에서 표시될 수도 있습니다.

IPv4와 IPv6가 함께 사용되는 경우도 흔합니다. IPv4 주소 하나만 매핑하거나 주소 계열 하나만 테스트하면 앱의 전체 연결 동작을 설명하지 못할 수 있습니다. 앱의 실제 접속 기록을 통해 최종적으로 선택한 주소를 확인한 다음, IP-CIDR과 IP-CIDR6이 해당 범위를 포함하는지 살펴보세요. IP에 직접 연결하는 요청은 변환할 도메인 이름이 없으므로 보통 Host 매핑에서 문제 해결을 시작하지 않습니다.

07 / REQUEST MATCHING

USER-AGENT와 URL Rewrite

이 조건은 요청 정보를 확인할 수 있는지에 따라 적용됩니다. 임의의 앱이나 암호화된 내용을 식별하는 기능이 아닙니다.

USER-AGENT가 확인하는 정보

USER-AGENT는 요청에서 확인할 수 있는 User-Agent 정보를 대상으로 하며, 기기에 설치된 앱 이름을 모두 찾아주는 일반적인 목록이 아닙니다. 앱 아이콘만으로 모든 연결의 출처를 알 수 없으며 모든 트래픽을 앱별로 분기하는 기능이라고 설명해서도 안 됩니다. 서로 다른 앱이 같은 시스템 네트워크 구성 요소를 사용할 수 있고, 같은 앱도 요청마다 다른 식별 정보를 보내거나 이런 매칭에 쓸 정보를 전혀 제공하지 않을 수 있습니다. 따라서 사용 전에 실제 요청에 어떤 필드가 있는지 확인해야 합니다.

[Rule]
USER-AGENT,ExampleApp*,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

이 예시는 ExampleApp으로 시작하는 식별 값을 사용해 조건 형식을 보여줄 뿐, 실제 특정 앱이 반드시 매칭된다는 뜻은 아닙니다. 처리 과정에서 해당 요청 정보를 확인할 수 있을 때만 이 조건을 판단할 수 있습니다. 관련 필드가 보이지 않는 연결은 도메인이나 대상 주소처럼 확인 가능한 정보를 기준으로 분석하세요. 입력 정보가 없는 문제를 해결하려고 범위가 모호한 와일드카드를 계속 추가하지 마세요.

HTTPS에서 요청 경로와 헤더가 자동으로 보이는 것은 아닙니다

일반적인 분기에 사용할 수 있는 이름이나 주소 정보와 암호화된 요청 전체를 읽는 것은 서로 다른 기능입니다. 도메인을 기준으로 DOMAIN-SUFFIX 규칙을 적용할 수 있다고 해서 HTTPS 경로, 쿼리 매개변수, User-Agent까지 읽을 수 있다는 뜻은 아닙니다. 실제로 확인할 수 있는 필드에 맞춰 규칙을 설계하세요. 적용되지 않는 요청 헤더 규칙을 확인하려고 인증서 신뢰 설정을 성급하게 변경하거나 처리 범위를 넓히지 마세요. 이런 변경은 보안에 미치는 영향과 적용 조건을 별도로 이해해야 합니다.

특정 사이트를 원하는 방향으로 보내는 것이 목적이라면 도메인 규칙이 더 간단한 경우가 많습니다. 실제 서비스에 요청 단위 조건이 필요하고 처리 과정에서 해당 정보를 인식한다는 사실을 확인할 수 있을 때만 USER-AGENT 등의 조건을 사용하세요. 확인할 때는 직접 제어하는 테스트 요청을 사용해 입력 식별 값과 예상 정책을 연결하세요. 한 번 접속에 성공했다는 이유만으로 해당 필드를 읽었다고 단정하지 마세요.

URL Rewrite: 요청 주소를 바꾸며 프록시를 선택하지는 않습니다

URL Rewrite는 표현식에 일치하는 URL을 처리합니다. Rule과 역할이 다릅니다. Rule은 정책을 선택하고, 재작성은 조건에 맞는 요청 주소를 바꾸거나 해당 요청을 리디렉션합니다. 아래 예시는 일반 HTTP URL을 대상으로 example.com 요청을 대응하는 HTTPS 주소로 리디렉션합니다. 표현식에서 점은 이스케이프해야 하고, 시작 앵커는 매칭 시작 위치를 제한하며, 캡처 그룹은 원래 경로를 보존합니다.

[URL Rewrite]
^http://example\.com/(.*)$ https://example.com/$1 302

여기서 302는 임시 리디렉션을 나타냅니다. 클라이언트가 이후 예상대로 새 요청을 보내는지는 실제 요청 방식과 앱 동작에도 달려 있습니다. 리디렉션이 항상 메서드와 요청 본문을 그대로 유지한다고 가정하지 마세요. 브라우저 주소 표시줄이 바뀌었다고 모든 백그라운드 API 요청에도 같은 규칙이 적용됐다고 볼 수는 없습니다. 확인하기 쉽고 관찰 가능한 단순 요청을 대상으로 응답과 리디렉션 경로를 확인한 뒤 범위를 넓히세요.

정규식의 범위와 반복을 제한하기

표현식을 작성할 때는 먼저 프로토콜, 도메인 경계, 경로 범위를 정하고 캡처 그룹을 고려하세요. 도메인의 점을 이스케이프하지 않으면 정규식에서 임의의 문자로 해석되어 예상치 못한 주소에 매칭될 수 있습니다. 범위가 넓은 키워드 하나만 사용해도 쿼리 매개변수나 다른 사이트에 영향을 줄 수 있습니다. 대체된 주소가 원래 표현식에 다시 매칭되면 반복 리디렉션이 발생할 수도 있습니다. “원래 URL → 새 URL → 재매칭 여부”의 전체 흐름을 확인하세요.

공유할 수 있는 재작성 조각에 계정 인증 정보, 구독 토큰, 서비스 키를 넣지 마세요. 교육과 기록용 요청에서는 민감한 매개변수를 제거하고 규칙 동작을 재현하는 데 필요한 구조만 남기세요. 실제 설정에 민감한 정보가 꼭 필요하다면 개인 설정으로 관리하고 문제 해결 첨부 파일로 공개하지 마세요. 다른 사람이 작성한 표현식을 복사할 때도 첫 번째 조건만 보지 말고 대상 도메인과 대체 주소를 먼저 확인하세요.

설정을 검토할 때는 Rule만 보지 말고 URL Rewrite를 별도 목록으로 확인하세요. 도메인 분기가 예상대로여도 잘못된 재작성 때문에 요청이 다른 경로로 갈 수 있습니다. 반대로 재작성 규칙이 있다고 모든 연결에 적용되는 것은 아닙니다. 요청 프로토콜, 확인 가능한 정보, 현재 설정에 따라 적용 여부가 결정됩니다.

08 / VALIDATION

규칙 확인, 문제 해결과 유지 관리

한 번에 조건 하나만 바꾸고 새 요청으로 매칭 규칙과 실제 경로를 확인한 뒤 복구할 수 있는 설정을 보관하세요.

최소한의 변경으로 되돌릴 수 있는 테스트 절차 만들기

먼저 현재 작동하는 설정을 복사하고 테스트 권한이 있는 도메인 하나를 선택한 뒤 예상 정책을 기록하세요. 그다음 전체 도메인 규칙 하나를 추가합니다. 관련된 넓은 조건과 FINAL보다 앞에 있는지 확인하고 저장한 뒤 복사본을 활성화하세요. Global Routing을 Config로 설정하고 새 연결을 만든 다음 대상 도메인, 목적지 주소, 매칭 조건, 적용 정책을 확인합니다. 관찰 결과가 예상과 일치한 뒤에만 규칙 범위를 넓히거나 일상적으로 사용하는 설정에 병합하세요.

작동 환경에서 새 설정 전체를 바로 적용한 뒤 여러 오류를 보고 원인을 추측하지 마세요. 원격 설정은 원본과 로컬 변경 사항을 따로 보관하세요. 업데이트되는 구독은 서버 데이터와 규칙 파일의 변경을 구분해야 합니다. 업데이트 후 문제가 발생하면 먼저 어떤 항목이 업데이트됐는지 확인하세요. 서버 주소나 인증 정보 변경과 DOMAIN 철자 오류는 서로 다른 문제이며 같은 규칙을 수정해 해결할 수 없습니다.

  1. 현재 네트워크, Config 이름, Global Routing, 테스트 대상을 기록하고 원본 복사본을 보관합니다.
  2. 규칙 하나 또는 매개변수 하나만 수정하고 소속 섹션과 앞뒤 규칙의 적용 범위를 확인합니다.
  3. 저장한 뒤 수정한 파일이 실제로 활성화됐는지 확인하고 테스트 세션을 새로 만듭니다.
  4. 로그의 도메인, 주소, 규칙, 정책을 비교하고 필요한 경우 Direct와 Proxy로 비교 기준을 설정합니다.
  5. Config로 되돌리고 결과를 기록합니다. 예상한 결과가 나오지 않았다면 이번 변경을 취소한 뒤 다음 항목을 확인합니다.

관찰된 현상에 따라 범위를 좁히기

예상한 규칙의 매칭 기록이 전혀 없다면 먼저 모드, 설정 선택, 현재 세션에서 요청이 실제로 전송됐는지 확인하세요. 그다음 도메인 대신 전체 URL을 입력했는지, 앞에 범위가 넓은 조건이 있는지, IP에 직접 연결했는지 살펴보세요. PROXY에 매칭됐는데 접속에 실패했다면 같은 도메인 규칙을 더 추가하지 말고 선택한 서버, 프로토콜 매개변수, DNS, 대상 서비스로 확인 범위를 옮기세요. 규칙 매칭 성공과 연결 성공은 별도로 기록해야 합니다.

현상우선 확인할 항목다음 확인 단계
수정 후에도 연결 방향이 바뀌지 않음Global Routing, 현재 Config, 기존 연결새 세션에서 대상 규칙에 매칭되는지 확인
전체 도메인 규칙이 매칭되지 않음앞쪽의 후위 도메인, 키워드, FINAL실제 도메인이 입력한 값과 일치하는지 확인
PROXY에 매칭돼도 접속 실패서버 상태, 프로토콜 매개변수, 이름 해석같은 대상에 대한 직접 연결과 프록시 비교
페이지가 일부만 로드됨API, 로그인, 리소스에 별도 도메인이 있는지 확인실패한 요청에 다른 정책이 적용됐는지 확인
업데이트 후 수동 규칙이 사라짐원격 설정의 덮어쓰기와 로컬 복사본업데이트 전후 차이를 다시 검토

프로토콜 문제와 규칙 문제도 나누어 확인해야 합니다. Trojan의 주소, 포트, 암호, SNI는 연결 매개변수입니다. 자세한 내용은 Trojan 매개변수 입력 가이드를 참고하세요. Hysteria2와 네트워크의 UDP 조건은 Hysteria2와 QUIC 안내에서 확인할 수 있습니다. 프로토콜 매개변수가 잘못됐다면 분기 규칙이 매칭되어도 인증 정보가 보완되지는 않습니다.

진단 정보를 공유하기 전에 민감한 내용을 삭제하세요

문제를 설명하는 데 필요한 최소 기록에는 보통 규칙 일부, 사용한 모드, 대상 도메인, 실패 단계가 포함되며 전체 구독은 필요하지 않습니다. 공유 전에 링크에 포함된 토큰, 서버 암호, 식별 정보, 사설 네트워크 정보를 삭제하세요. 스크린샷도 주소 표시줄, QR 코드, 알림 영역을 확인해야 합니다. example.com 같은 예시 도메인으로 바꿨다면 대체한 부분을 설명하되, 규칙 순서와 문법 구조는 유지해야 다른 사람이 덮어쓰기 관계를 확인할 수 있습니다.

실제 용도를 기준으로 규칙을 관리하세요. 사용하지 않는 Host를 삭제하고 중복 도메인을 정리하며 FINAL이 여전히 마지막에 있는지 확인하고, 중요한 서비스의 테스트 입력을 몇 가지 보관하세요. 네트워크를 바꾼 뒤에는 로컬 네트워크 주소와 주소 계열을 다시 확인하세요. 가정용 Wi-Fi에서 한 번 검증했다고 모든 환경에서 보장되는 것은 아닙니다. 규칙이 많다고 범위가 정확해지는 것은 아닙니다. 각 예외의 목적, 입력, 복구 방법을 설명할 수 있어야 장기적으로 관리하기 쉽습니다.

앱 다운로드와 사용 전 확인 사항

Shadowrocket은 클로즈드 소스 상용 앱입니다. iPhone / iPad 버전은 App Store에서 $2.99 일회성 결제로 제공되며, Mac(Apple 실리콘 및 Intel), Windows, Android, Linux 버전은 무료입니다. 클라이언트 일회성 구매는 연결 서비스 이용권과 다릅니다. 이 사이트는 서버나 구독을 제공·판매·추천하지 않으며, 이 매뉴얼은 사용자가 이미 보유한 정보를 활용하는 방법만 설명합니다. iPhone / iPad의 시스템 요구 사항은 App Store 페이지를 기준으로 확인하세요. 기기별 다운로드와 시스템 허용 안내는 전체 플랫폼 다운로드 페이지에서 확인할 수 있으며, 다른 플랫폼의 설치 파일은 사이트 내 /dl/에서 제공합니다.

연결 권한과 Home 화면을 다시 확인해야 한다면 시작하기 안내로 돌아가세요. 다운로드, 구입 항목 복원, 설치 관련 자주 묻는 질문은 다운로드 FAQ에서 확인할 수 있습니다. 규칙 문제를 다룰 때는 먼저 현재 상태를 저장하고 재현 가능한 최소 변경으로 테스트하세요. 테스트 결과를 설명할 수 없다면 임시 수정 사항을 설정에 남기지 말고 변경을 취소한 뒤 범위를 더 좁히세요.

Shadowrocket 전체 플랫폼 다운로드