도메인 목록, IP 주소 목록, 아웃바운드 태그를 먼저 구분한 뒤 ‘지정 예외 → 중국 도메인 → 중국 및 사설 주소 → 나머지는 프록시’ 순서로 규칙을 구성합니다. 노드를 가져온 뒤 v2rayN 트래픽 분기를 조정하려는 사용자를 위한 글입니다. V2Ray/Xray의 기존 라우팅 필드를 사용한 예제와 함께 DNS, 규칙 데이터베이스, 클라이언트가 생성하는 설정의 차이도 설명합니다.
geosite, geoip, 프록시 아웃바운드 구분하기
라우팅은 ‘이 연결을 어떤 아웃바운드로 보낼지’를 결정합니다. 사용할 노드 프로토콜을 고르는 기능은 아닙니다. VMess, VLESS 등의 프로토콜은 프록시 아웃바운드의 연결 방식이고, geosite:cn과 geoip:cn은 매칭 조건입니다. 구독 노드의 프로토콜이 바뀌더라도 실제 아웃바운드 태그가 그대로라면 라우팅 규칙을 바꿀 필요는 없습니다.
| 표기 | 매칭 대상 | 이것만으로 판단할 수 없는 내용 |
|---|---|---|
geosite:cn | 현재 규칙 데이터베이스에서 cn 분류에 포함된 도메인 | 모든 중국어 웹사이트를 뜻하지 않으며, 중국 본토의 모든 IP를 의미하지도 않음 |
geoip:cn | 현재 규칙 데이터베이스에서 CN으로 분류된 IP 대역 | 웹사이트 운영자의 소재지나 접속 품질을 판단할 수 없음 |
geoip:private | 규칙 데이터베이스에 정의된 사설 및 특수 용도 주소 목록 | 운영체제의 모든 로컬 네트워크 라우팅을 대신하지 않음 |
outboundTag | 기존 아웃바운드의 tag 문자열 | proxy라고 적어도 프록시 노드가 자동으로 생성되지는 않음 |
기존 설정은 대개 geosite.dat와 geoip.dat에서 목록을 읽습니다. 여기서 ‘cn’은 데이터 분류 이름이지, 코어가 온라인으로 조회해 얻은 지리적 판정이 아닙니다. 규칙 데이터베이스의 출처와 배포 시점, 분류 관리 방식에 따라 결과가 달라질 수 있습니다. 새로 활성화된 도메인이 목록에 없다면 먼저 정확한 예외 규칙을 추가하고, 그다음 데이터 업데이트를 검토하세요.
매칭 순서에 맞춰 중국 본토 직접 연결과 프록시 기본 경로 설정하기
라우팅 규칙은 일반적으로 배열에 적힌 순서대로 위에서 아래로 검사합니다. 모든 조건을 처음으로 만족하는 규칙이 아웃바운드를 결정하며, 이후 규칙에서 더 정확한 항목을 자동으로 찾지는 않습니다. 한 규칙에 domain, ip, port 등 여러 조건을 넣으면 보통 모든 필드가 함께 일치해야 합니다. 반면 domain 목록 안의 여러 항목은 어느 하나만 일치해도 됩니다.
구성 예제: 중국 본토는 직접 연결, 나머지는 프록시
도메인 우선 규칙
- 먼저 프록시 또는 직접 연결을 강제할 정확한 예외를 추가합니다.
- 그다음
geosite:cn으로 중국 본토 도메인 목록을 매칭합니다. - 도메인 규칙에 매칭된 연결은 이후 IP 규칙을 검사하지 않습니다.
IP 및 기본 경로 규칙
geoip:private로 사설 주소를 처리합니다.geoip:cn으로 중국 본토 IP를 처리합니다.- 마지막으로 나머지 TCP·UDP 연결을 프록시 아웃바운드로 보냅니다.
정확한 예외는 넓은 범위의 목록보다 앞에 두고, 프록시 기본 경로는 마지막에 배치해 도메인 해석 전략과 함께 설정하세요.
예를 들어 cn 목록에 포함된 도메인을 프록시로 보내야 한다면 해당 도메인의 프록시 규칙을 geosite:cn보다 앞에 배치해야 합니다. 프록시 규칙을 맨 아래에 추가해도 앞의 직접 연결 규칙에서 이미 매칭이 끝나므로 효과가 없습니다. 반대로 ‘모든 TCP·UDP를 프록시로’ 보내는 규칙을 첫 번째에 두면 이후의 중국 본토 분기 규칙은 적용되지 않습니다.
full:example.com: 이 도메인과 정확히 일치하는 경우만 매칭하며 하위 도메인은 포함하지 않습니다.domain:example.com: 해당 도메인과 하위 도메인을 매칭하지만notexample.com은 매칭하지 않습니다.regexp:: 정규 표현식에 사용합니다. 일반적인 사이트 예외에는 앞의 두 가지 표기를 우선 사용해 범위를 지나치게 넓히지 마세요.
JSON 설정과 domainStrategy 확인하기
아래는 라우팅 설정 일부이며 노드, 인바운드, DNS를 포함한 전체 설정이 아닙니다. proxy 태그의 사용 가능한 프록시 아웃바운드와 direct 태그, freedom 프로토콜을 사용하는 직접 연결 아웃바운드가 이미 있다고 가정합니다. 예시 도메인 example.com은 정확한 예외를 보여주기 위한 것입니다. 해당 예외가 필요 없다면 첫 번째 규칙을 삭제하세요.
{
"routing": {
"domainStrategy": "IPOnDemand",
"rules": [
{
"type": "field",
"domain": ["full:example.com"],
"outboundTag": "proxy"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:private", "geoip:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
여기서는 의도적으로 IPOnDemand를 선택했습니다. 도메인이 앞의 두 규칙에 매칭되지 않고 IP 규칙에 도달하면 도메인을 해석한 뒤 결과 IP를 중국 본토 또는 사설 주소와 비교합니다. cn 도메인 목록에 이미 매칭된 연결은 직접 연결로 결정되므로 이후 라우팅 규칙을 위해 추가로 해석할 필요가 없습니다. 요청이 처음부터 IP 주소라면 주소 매칭으로 바로 넘어갑니다.
이 글의 설정
- 해석 전략
IPOnDemand- 중국 본토 도메인
geosite:cn → direct- 중국 본토 및 사설 IP
geoip:cn / private → direct- 최종 기본 경로
tcp,udp → proxy
IP 조건에 도달했을 때 필요에 따라 해석합니다. 명시적인 기본 경로를 사용하는 이 글의 구성에 적합하지만, 해석에 실패하거나 결과가 부정확하면 판단에 영향을 줍니다.
다른 설정 방식
- 해석 전략
IPIfNonMatch- 해석 시점
- 도메인이 어떤 규칙에도 매칭되지 않은 뒤
- 포괄적인 기본 경로
- 모든 연결이 앞에서 매칭되지 않도록 주의
- 미매칭 시 동작
- 일반적으로 설정에서 첫 번째 아웃바운드로 전달
아웃바운드 순서도 함께 확인해야 합니다. 이 글의 전략 이름만 바꾸면 동작도 그대로라고 생각해서는 안 됩니다.
AsIs는 라우팅 판단을 위해 도메인을 IP로 변환하지 않습니다. 도메인 규칙을 주로 사용하는 구성에 적합하지만, 도메인만 포함된 요청이 자동으로 geoip:cn에 매칭되지는 않습니다. 또한 라우팅의 domainStrategy와 직접 연결 아웃바운드의 같은 이름 설정은 역할이 다릅니다. 전자는 매칭 방식을 결정하고 후자는 연결 대상 주소의 처리에 영향을 주므로 서로 대체할 수 없습니다.
v2rayN에서 규칙 저장하고 적용 여부 확인하기
아래 안내는 ‘설정’과 ‘라우팅 설정’ 메뉴가 있는 v2rayN 중국어 데스크톱 인터페이스를 기준으로 합니다. 버전에 따라 대화상자 배치나 규칙 편집 버튼의 문구가 다를 수 있습니다. 먼저 현재 활성화된 라우팅 설정을 확인한 뒤 규칙을 수정하세요. 이 글의 예제는 V2Ray/Xray JSON 형식입니다. 한 줄짜리 도메인 입력란처럼 JSON을 지원하지 않는 곳에 붙여 넣지 마세요.
-
기존 설정 보관하기
‘설정’ → ‘라우팅 설정’을 열어 현재 활성화된 라우팅 항목을 확인하고 원본 내용을 따로 보관하세요. 라우팅 항목을 추가할 수 있다면 기존에 사용 중인 규칙을 덮어쓰지 않도록 테스트용 설정을 새로 만드는 편이 좋습니다.
-
아웃바운드 확인하기
현재 노드가 연결되는지 확인하고 클라이언트 규칙에서 사용하는 직접 연결 및 프록시 아웃바운드 식별자를 확인하세요. 예제의
proxy와direct는 실제 생성된 설정의 태그와 일치해야 합니다. 노드 표시 이름으로 대신할 수 없습니다. -
순서대로 입력하기
‘설정’ → ‘라우팅 설정’에서 대상 라우팅 항목을 편집하고 예제 순서대로 domain, ip, network, 목적지 아웃바운드를 입력하세요. 도메인 해석 전략은
IPOnDemand로 설정하고 모든 조건을 하나의 규칙에 합치지 마세요. -
적용 후 다시 연결하기
라우팅 항목을 저장하고 활성화한 다음 코어를 재시작하거나 화면 안내에 따라 설정을 적용하세요. 전체 프록시 또는 전체 직접 연결 강제 모드가 활성화되어 있지 않은지 확인한 뒤 새 연결로 테스트합니다. 기존에 연결된 세션의 경로는 즉시 바뀌지 않을 수 있습니다.
-
로그 확인하기
클라이언트 로그를 열고 중국 본토 도메인, 그 밖의 도메인, 로컬 네트워크 주소에 각각 접속해 보세요. 접속 로그를 확인할 수 있다면 목적지 주소와 선택된 아웃바운드 태그를 살펴봅니다. 규칙 데이터베이스 로드 실패나 아웃바운드 없음 오류가 나타나면 테스트를 계속하기 전에 설정부터 수정하세요.
클라이언트는 화면 설정을 바탕으로 코어 설정을 다시 생성하는 경우가 많습니다. 임시 생성 파일을 직접 수정하면 다음에 노드를 바꾸거나 재시작할 때 내용이 덮어써질 수 있습니다. 규칙을 계속 사용하려면 클라이언트에서 지원하는 라우팅 설정 메뉴에 저장하세요. 전체 사용자 지정 설정을 명시적으로 사용하는 경우에만 JSON 전체를 직접 관리해야 합니다.
Android에서는 v2rayNG가 Xray 코어를 사용하고 v2flyNG는 v2fly 코어를 사용합니다. 규칙 필드가 비슷하다는 이유만으로 두 앱의 메뉴 위치, 내장 규칙 데이터베이스, 사용자 지정 설정 가져오기 방식까지 같다고 가정할 수 없습니다. 규칙을 옮기기 전에 현재 코어와 클라이언트가 지원하는 설정 기능을 확인하세요. 구독 주소를 라우팅 규칙으로 가져와서도 안 됩니다.
포트·로그·DNS로 트래픽 분기 하나씩 점검하기
적용 여부는 웹페이지가 열리는 속도만 비교하지 말고 연결이 코어에 들어왔는지, 어떤 아웃바운드에 매칭됐는지 확인해야 합니다. DNS 캐시 적중, 연결 재사용, 원격 콘텐츠 캐시만으로도 속도는 크게 달라질 수 있어 라우팅 선택이 정확했다는 근거가 되지 않습니다. 아래 세 값은 테스트를 위한 입력값이지 이 사이트의 실측값이나 모든 클라이언트의 기본값이 아닙니다.
먼저 ‘설정’ → ‘매개변수 설정’에서 로컬 수신 포트와 SOCKS 지원 여부를 확인하세요. 로컬 SOCKS가 실제로 127.0.0.1:10808에서 수신 중이라면 터미널에서 아래 명령을 실행할 수 있습니다. Windows에서는 curl.exe를 명시적으로 호출하세요. socks5h는 대상 도메인을 프록시에서 처리하므로 도메인 규칙 확인에 적합합니다. socks5는 보통 로컬에서 도메인을 해석하므로 코어에는 이미 IP 주소가 전달될 수 있습니다.
curl --proxy socks5h://127.0.0.1:10808 --head --max-time 15 https://www.baidu.com/
curl --proxy socks5h://127.0.0.1:10808 --head --max-time 15 https://example.com/
- 첫 번째 명령은 중국 본토 도메인의 연결 경로를 확인합니다. 최종적으로 직접 연결되는지는 현재 geosite 데이터와 로그를 기준으로 판단하세요.
- 두 번째 명령은 예제의 첫 번째 규칙을 유지한 경우 정확한 도메인 예외에 따라
proxy가 선택되어야 합니다. - 요청 시간 초과가 규칙 미매칭을 뜻하는 것은 아닙니다. 프록시 노드, 대상 서비스, DNS가 각각 정상인지 확인하세요.
- 수정할 때마다 새 요청을 보내 브라우저가 기존 연결을 재사용하지 않도록 하세요.
앱이 IP 주소만 코어에 전달하면 도메인 규칙에 사용할 도메인 정보가 없을 수 있습니다. 일부 프로토콜과 연결에서는 스니핑으로 도메인 정보를 보완할 수 있지만 모든 트래픽을 식별하는 것은 아니며 매칭 결과가 달라질 수도 있습니다. 문제를 확인할 때는 먼저 실제 대상이 도메인인지 IP인지 기록한 다음 스니핑 설정을 조정하세요. DNS, 스니핑, 라우팅을 한꺼번에 바꾸면 원인을 찾기 어렵습니다.
중국 본토 웹사이트가 프록시로 연결되거나 규칙이 적용되지 않을 때
geosite:cn을 추가했는데도 중국 본토 웹사이트가 프록시로 연결되나요?
먼저 ‘설정’ → ‘라우팅 설정’에서 해당 항목이 활성화되어 있는지 확인하고, 그 앞에 모든 연결을 프록시로 보내는 규칙이 있는지 살펴보세요. 로그에 도메인이 목록에 없다고 표시되면 임시로 domain: 예외를 추가해 기본 경로 규칙보다 앞에 배치할 수 있습니다. 요청이 IP 주소로 들어왔다면 도메인 규칙을 계속 추가하지 말고 geoip와 DNS를 확인하세요.
geosite 또는 geoip를 불러오지 못한다는 오류가 나오면 어떻게 하나요?
오류 메시지에 표시된 규칙 데이터베이스 이름, 분류명, 경로를 확인하세요. 클라이언트에서 제공하는 데이터 업데이트 메뉴로 해당 파일을 복구한 뒤 코어를 재시작합니다. 다른 형식의 규칙 파일 이름을 .dat로 바꾸지 마세요. 사용자 지정 데이터 소스라면 cn, private 등 필요한 분류를 실제로 제공하는지도 확인해야 합니다.
IPIfNonMatch로 바꾼 뒤 중국 본토 IP 규칙이 매칭되지 않나요?
마지막에 network: tcp,udp 같은 전체 연결 대상 규칙이 남아 있는지 확인하세요. 도메인이 먼저 이 규칙에 매칭되면 ‘매칭되지 않은 경우 해석’이 실행되지 않습니다. 이 글의 IPOnDemand 구성을 사용하거나, 앞에서 모든 연결을 처리하는 규칙 없이 구성을 다시 설계하고 첫 번째 아웃바운드도 확인하세요.
로컬 네트워크에 연결할 수 없을 때 private 규칙만 추가하면 되나요?
먼저 실제 주소를 확인하세요. 예를 들어 게이트웨이가 정말 192.168.1.1인지 살펴봅니다. 요청이 코어에 들어왔다면 사설 주소가 direct에 매칭되는지 확인하세요. TUN 제외 설정, 운영체제 라우팅, 방화벽에 의해 차단된 경우에는 코어 라우팅만으로 해결할 수 없습니다. 직접 연결은 로컬 네트워크 경로를 선택한다는 뜻일 뿐, 대상에 반드시 연결된다는 보장은 아닙니다.
구독을 업데이트해도 트래픽 분기가 바뀌지 않는 이유는 무엇인가요?
일반적인 노드 구독은 노드 연결 정보를 업데이트하며, 라우팅 규칙 데이터베이스나 로컬 라우팅 설정까지 동기화하지는 않습니다. 구독 업데이트, geo 데이터 업데이트, 현재 라우팅 항목을 각각 확인하세요. 한 번에 하나씩 변경하고 같은 테스트 도메인으로 로그를 다시 확인해야 어떤 변경이 영향을 줬는지 알 수 있습니다.
유지 관리 시에는 도메인, 원하는 아웃바운드, 추가 이유를 적은 간단한 예외 목록을 보관하세요. 규칙을 더 추가하기 전에 범위가 지나치게 넓은 규칙과 순서를 먼저 바로잡는 편이 좋습니다. 중국 본토는 직접 연결하고 나머지는 프록시로 보내는 방식은 이해하기 쉬운 기본 구성이지, 모든 네트워크 환경에 맞는 유일한 선택은 아닙니다. 실제 접속 요구, 해석 결과, 코어 로그를 함께 확인해 결정하세요.