노드에 정상적으로 연결할 수 있지만 중국 본토 내 접속 경로를 최적화하고 싶은 사용자를 위한 글입니다. 요청 매칭 과정부터 바로 확인할 수 있는 routing 규칙, v2rayN 설정 위치, DNS 연동 방법과 로그를 활용한 문제 해결 절차까지 설명해 중국 본토 도메인과 IP는 직접 연결하고 나머지 트래픽은 프록시 outbound로 보내도록 구성합니다.
분기 목표와 처리 순서부터 정하기
V2Ray 라우팅 분기는 네트워크를 서로 독립된 두 연결로 나누는 기능이 아닙니다. 하나의 inbound가 애플리케이션 요청을 받은 뒤 도메인, 대상 IP, 포트와 네트워크 유형에 따라 outbound를 선택하는 방식입니다. 일반적인 설정에서는 direct라는 자유 outbound와 proxy라는 프록시 outbound를 준비합니다. routing 규칙은 이 태그를 참조할 뿐, 자체적으로 연결을 만들지는 않습니다.
중국 본토는 직접 연결하고 나머지는 프록시로 보내는 핵심 목표는 세 단계로 정리할 수 있습니다. 사설망과 예약 주소는 직접 연결하고, 중국 본토 도메인과 IP도 직접 연결하며, 앞선 규칙에 매칭되지 않은 요청은 프록시로 보냅니다. 마지막 fallback 규칙을 생략하면 매칭되지 않은 트래픽이 outbounds 배열의 첫 번째 outbound로 들어가 설정 배열 순서에 따라 결과가 달라지므로 반드시 추가해야 합니다.
규칙은 배열에 적힌 순서대로 실행되며 첫 번째 매칭이 성공하면 즉시 중단됩니다. 구체적인 도메인 규칙은 포괄적인 규칙보다 앞에 두고, 사설망 주소는 공인 주소 규칙보다 앞에 배치해야 합니다. 마지막 tcp,udp fallback은 반드시 끝에 둡니다. 모든 네트워크 유형을 포괄하는 프록시 규칙을 먼저 작성하면 뒤의 중국 본토 직접 연결 규칙은 실행될 기회가 없습니다.
- 1단계:
geoip:private로 사설망, 루프백 및 예약 주소를 처리해 라우터와 로컬 네트워크 장치 접속이 프록시로 우회되지 않도록 합니다. - 2단계:
geosite:cn으로 도메인 분류에 따라 중국 본토 사이트를 매칭합니다. - 3단계: IP를 직접 입력해 접속하거나 도메인 해석 결과가 중국 본토 주소 대역에 해당하는 요청을
geoip:cn으로 처리합니다. - 4단계: 매칭되지 않은 TCP 및 UDP 트래픽은 모두
proxyoutbound로 보냅니다.
geosite, geoip와 domainStrategy의 관계
geosite는 도메인 분류 데이터이고 geoip는 IP 주소 대역 분류 데이터입니다. 도메인이 포함된 URL에 접속하면 V2Ray가 먼저 받는 정보는 일반적으로 도메인입니다. 대상 IP를 계속 해석해 IP 규칙까지 적용할지는 domainStrategy가 결정합니다. 따라서 geoip:cn만 추가한다고 해서 모든 중국 본토 도메인이 안정적으로 직접 연결되는 것은 아닙니다.
AsIs는 원래 도메인 그대로 라우팅하며, 도메인 규칙이 매칭되지 않아도 라우팅 판단을 위해 IP를 능동적으로 해석하지 않습니다. IPIfNonMatch는 먼저 도메인 규칙을 시도하고, 매칭되지 않을 때만 IP를 해석해 IP 규칙을 계속 확인합니다. IPOnDemand는 IP가 필요한 규칙을 만나는 즉시 더 이른 시점에 해석을 시작합니다. 중국 본토 직접 연결 구성에서는 도메인 분류와 IP 대역 fallback을 함께 활용할 수 있는 IPIfNonMatch가 일반적으로 적합합니다.
| 정책 | 매칭 동작 | 적합한 상황 | 주의할 점 |
|---|---|---|---|
AsIs |
원래 도메인을 우선 유지하며 IP 라우팅을 위해 능동적으로 해석하지 않음 | 주로 도메인 분류에 의존하는 규칙 | geoip 규칙만 있으면 도메인 요청이 매칭되지 않을 수 있음 |
IPIfNonMatch |
도메인 규칙이 매칭되지 않은 뒤 해석해 IP 확인 | 중국 본토 도메인과 IP를 모두 직접 연결 | DNS가 정상적으로 결과를 반환해야 함 |
IPOnDemand |
라우팅 판단에 IP가 필요할 때 즉시 해석 | 대상 IP에 의존하는 규칙이 많은 경우 | DNS 조회 횟수가 늘어날 수 있음 |
결론: 기본값은 먼저 IPIfNonMatch 사용
geosite:cn과 geoip:cn을 함께 설정했다면 IPIfNonMatch는 먼저 도메인 분류를 사용하고, 분류되지 않은 도메인은 해석 결과로 보완합니다. 두 데이터 중 하나에만 의존하는 것보다 문제를 파악하기 쉽습니다.
바로 적용할 수 있는 routing 설정
다음은 기존 V2Ray 또는 Xray 설정에 병합할 수 있는 완전한 routing 객체입니다. outbounds에 direct와 proxy라는 두 태그가 이미 존재한다고 가정합니다. 붙여넣기 전에 기존 설정에 routing 필드가 있는지 확인하세요. 같은 레벨의 JSON 객체에는 동일한 이름의 필드를 두 개 둘 수 없으므로 단순히 추가하지 말고 교체하거나 병합해야 합니다.
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "direct"
},
{
"type": "field",
"domain": [
"geosite:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"geoip:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
첫 번째 규칙은 192.168.0.0/16, 10.0.0.0/8 같은 사설망 대상이 로컬로 접속되도록 합니다. 두 번째 규칙은 DNS 해석 전에 도메인 분류를 기준으로 직접 연결을 결정합니다. 세 번째 규칙은 도메인 분류에 포함되지 않았지만 해석된 주소가 중국 본토 주소 대역에 속하는 경우를 처리합니다. 네 번째 규칙에는 도메인이나 IP를 지정하지 않았으므로 남은 TCP 및 UDP 요청을 받습니다.
- 먼저 기존 설정의 직접 연결 outbound 태그를 확인하세요. 일반적인 구성은 프로토콜이
freedom이고 태그가direct입니다. - 프록시 outbound 태그가 현재 노드를 가리키는지 확인하세요. 예시에서는
proxy를 사용하지만 실제 이름은 다를 수 있습니다. - routing 객체는 설정 루트에 배치하고
inbounds,outbounds,dns와 같은 레벨에 두세요. - JSON 검사를 지원하는 편집기로 쉼표, 대괄호와 중괄호를 확인한 다음 커널을 재시작해 설정을 불러옵니다.
- 실행 로그를 열고 로컬 네트워크 관리 주소, 중국 본토 사이트와 해외 사이트에 차례로 접속해 실제 outbound 태그를 확인하세요.
v2rayN에서 해당 규칙 만들기
v2rayN은 그래픽 인터페이스로 라우팅을 관리할 수 있습니다. 「설정」→「라우팅 설정」으로 이동해 규칙 세트를 새로 만들고 활성화하세요. 버전에 따라 화면 문구는 조금 다를 수 있지만 도메인 정책, 규칙 순서, outbound 태그와 최종 fallback은 동일하게 확인해야 합니다. 수정 후에는 설정을 다시 불러오거나 커널을 재시작해야 하며, 창에서 저장만 하면 현재 연결에 즉시 적용되지 않을 수 있습니다.
| 순서 | 규칙 내용 | outbound | 목적 |
|---|---|---|---|
| 1 | geoip:private |
direct |
로컬 네트워크와 이 기기의 서비스 접속 유지 |
| 2 | geosite:cn |
direct |
중국 본토 도메인 직접 연결 |
| 3 | geoip:cn |
direct |
중국 본토 IP 주소 대역 직접 연결 |
| 4 | tcp,udp |
proxy |
나머지 요청은 프록시 노드로 전송 |
로컬 프록시 포트도 애플리케이션 설정과 일치해야 합니다. 일반적인 구성은 SOCKS 포트 10808과 HTTP 포트 10809를 사용하지만 이 번호가 필수 표준은 아닙니다. 「설정」→「매개변수 설정」에서 현재 로컬 수신 포트를 확인한 뒤 브라우저, 다운로드 도구 또는 시스템 프록시가 같은 포트를 사용하는지 점검하세요. 포트가 다르면 요청이 V2Ray에 들어오지 않으므로 라우팅 규칙도 적용되지 않습니다.
- 시스템 프록시를 사용할 때는 먼저 v2rayN의 시스템 프록시 상태가 원하는 모드로 전환되었는지 확인하세요.
- 개별 애플리케이션 프록시를 사용할 때는 앱에서
127.0.0.1과 실제 SOCKS 또는 HTTP 포트를 입력하세요. - TUN으로 트래픽을 가로챌 때는 TUN이 실행 중인지 확인하고 로컬 네트워크 우회 설정이
geoip:private대상과 일치하는지 점검하세요. - 새 규칙을 활성화한 뒤 기존 연결을 닫고 다시 접속하세요. 이미 연결된 장시간 연결은 변경 전 outbound를 계속 사용할 수 있습니다.
결론: 먼저 요청이 커널에 들어오는지 확인
분기 문제를 점검하기 전에 로그에서 대상 도메인이나 대상 IP를 찾으세요. 로그에 요청 기록이 전혀 없다면 먼저 시스템 프록시, TUN 상태와 10808/10809 포트를 확인하고 geosite 규칙부터 수정하지 마세요.
DNS가 geoip 규칙 적용을 좌우합니다
domainStrategy가 IPIfNonMatch일 때 도메인 규칙이 매칭되지 않으면 DNS가 주소를 반환해야 geoip:cn을 실행할 수 있습니다. DNS 조회가 실패하거나 애플리케이션이 자체적으로 암호화 처리하거나 브라우저가 도메인을 프록시에 전달하지 않으면 DNS와 라우팅이 보는 대상이 달라질 수 있습니다. 같은 사이트가 어떤 때는 직접 연결되고 어떤 때는 프록시로 연결되거나, 로그에 도메인 없이 IP만 표시되는 것이 대표적인 현상입니다.
가장 관리하기 쉬운 방법은 중국 본토 도메인에는 직접 접속 가능한 DNS를 사용하고, 나머지 조회는 통제된 경로로 처리하는 것입니다. 동시에 시스템 DNS, 브라우저 독립 DNS와 커널 DNS의 정책이 서로 덮어쓰지 않도록 해야 합니다. V2Ray의 dns 필드는 해석을 담당하고 routing은 연결 방향을 선택합니다. 두 기능은 관련되어 있지만 동일하지 않습니다.
geosite:cn을 분명히 설정했는데 중국 본토 사이트가 계속 프록시로 연결되나요?
먼저 fallback 프록시 규칙이 맨 앞에 놓이지 않았는지 확인하고, geosite.dat을 커널이 읽을 수 있는지도 점검하세요. 라우팅 로그를 열어 매칭된 규칙을 확인하고 출구 주소만으로 판단하지 마세요.
도메인으로 접속하면 프록시인데 IP를 직접 입력하면 연결되는 이유는?
일반적으로 geoip:cn은 적용되지만 도메인 규칙은 매칭되지 않았다는 뜻입니다. 설정에 geosite:cn이 작성되어 있는지 확인하고, 해당 도메인이 현재 데이터에서 분류되지 않은 CDN 주소를 사용하는지도 점검하세요.
분기를 활성화한 뒤 로컬 네트워크 관리 페이지가 열리지 않나요?
geoip:private를 첫 번째 규칙으로 배치하고 direct를 가리키게 하세요. TUN 또는 시스템 프록시에 로컬 네트워크 우회가 설정되어 있는지도 확인합니다. 테스트할 때는 라우터의 실제 주소로 직접 접속하세요.
로그에 DNS 시간 초과가 표시되면 무엇부터 바꿔야 하나요?
먼저 시스템 명령으로 현재 DNS에 연결할 수 있는지 확인한 다음 커널 DNS 설정과 outbound 경로를 점검하세요. 노드, 규칙, DNS를 동시에 바꾸면 어느 단계에서 복구되었는지 알 수 없으므로 한 번에 하나만 변경하세요.
구독을 업데이트한 뒤 사용자 지정 라우팅이 사라졌나요?
v2rayN의 「설정」→「라우팅 설정」에 규칙을 저장하고 해당 규칙 세트를 활성화하세요. Android 클라이언트에서 완전한 사용자 지정 설정을 사용하는 경우 구독을 업데이트하기 전에 현재 실행 설정의 출처를 확인해야 합니다.
애플리케이션이 IP를 직접 전송하면 V2Ray은 연결 자체만으로 원래 도메인을 복원할 수 없으므로 IP, 포트와 네트워크 유형 규칙만 실행합니다. 반대로 요청에 도메인이 포함되고 geosite:cn이 이미 매칭되면 IP를 다시 해석해 두 번째 라우팅 판단을 하지 않습니다. 따라서 규칙 순서와 domainStrategy를 함께 이해해야 합니다.
로그를 따라 단계별로 분기 결과 점검하기
문제를 해결할 때 처음부터 대규모로 규칙을 바꾸지 마세요. 로컬 네트워크 주소 하나, 중국 본토 분류에 속하는 것이 확실한 도메인 하나, 프록시 접속이 필요한 도메인 하나를 고정 테스트 대상으로 선택합니다. 매번 변수 하나만 바꾸고 연결을 새로 만든 뒤 로그의 대상, 매칭 규칙과 outbound 태그를 기록하세요. 이렇게 하면 진입, 분류, DNS와 노드 문제를 구분할 수 있습니다.
- 진입 확인: 로그에 테스트 요청이 반드시 표시되어야 합니다. 기록이 없다면 시스템 프록시, 애플리케이션 프록시 또는 TUN 가로채기 상태를 확인하세요.
- 대상 확인: 로그에 도메인과 IP 중 무엇이 기록되는지 확인하세요. IP만 표시된다면 이번 매칭에는
geosite가 참여할 수 없습니다. - 순서 확인: 더 포괄적인 규칙이 먼저 매칭되었는지 점검하세요. 특히 상단에 있는 전역 프록시 규칙을 확인해야 합니다.
- 데이터 확인:
geosite.dat과geoip.dat이 커널에서 읽을 수 있는 위치에 있는지 확인하고 업데이트 후 커널을 재시작하세요. - 태그 확인: routing의
outboundTag는 outbounds의tag와 한 글자까지 정확히 일치해야 합니다. - DNS 확인:
IPIfNonMatch를 사용할 때는 도메인 매칭 실패 후 정상적으로 해석되어야 IP 분류를 계속 실행할 수 있습니다. - 연결 재수립 확인: 테스트 페이지나 애플리케이션 연결을 닫은 뒤 요청을 다시 보내 이전 연결 재사용이 결과에 영향을 주지 않도록 하세요.
Android에서 v2rayNG 또는 v2flyNG를 사용할 때 구독 노드는 일반적으로 클라이언트가 실행 설정으로 생성합니다. 노드 사용 가능 여부만 확인하려면 기본 라우팅을 유지하세요. 사용자 지정 분기를 장기간 적용하려면 현재 클라이언트가 구독 생성 설정을 사용하는지, 가져온 완전한 설정을 사용하는지 확인해야 합니다. v2rayNG는 Xray 커널을, v2flyNG는 v2fly 커널을 사용하므로 실제 실행 로그와 커널이 지원하는 데이터 형식을 기준으로 판단하세요.
테스트 1: 192.168.1.1
예상 결과: geoip:private → direct에 매칭
테스트 2: 중국 본토 사이트 도메인
예상 결과: geosite:cn → direct에 매칭
테스트 3: 중국 본토 분류에 매칭되지 않는 도메인
예상 결과: 해석된 IP를 계속 확인한 뒤 최종적으로 proxy 또는 geoip:cn으로 이동
테스트 4: UDP 애플리케이션 요청
예상 결과: 직접 연결 규칙에 매칭되지 않으면 tcp,udp fallback → proxy
설정 완료 여부는 모든 웹사이트가 열리는지가 아니라 각 요청 유형이 예상 outbound로 들어가는지로 판단해야 합니다. 중국 본토 사이트가 열리지 않지만 로그에 direct가 매칭되었다면 로컬 네트워크와 DNS를 점검하세요. 해외 사이트가 proxy에 매칭되었는데도 연결되지 않는다면 노드, 전송 매개변수와 원격 연결 가능성을 확인해야 합니다. 라우팅 판단과 연결 품질을 분리해 처리하면 올바른 규칙을 반복해서 수정하는 일을 피할 수 있습니다.
예외 규칙은 어디에 배치해야 하나요?
실제 사용 중 특정 중국 본토 도메인은 프록시를 거쳐야 하거나, 분류되지 않은 도메인은 직접 연결해야 하는 경우가 있습니다. 이때는 범위를 최대한 좁힌 예외 규칙을 추가해 일반 분류 규칙보다 앞에 배치하세요. 도메인을 정확히 매칭하려면 full:을 사용할 수 있고, 특정 도메인과 하위 도메인을 지정하려면 domain:을 사용할 수 있습니다. 사이트 하나 때문에 전체 최상위 도메인으로 범위를 넓히지 마세요.
{
"type": "field",
"domain": [
"full:service.example.net"
],
"outboundTag": "proxy"
}
위 구조는 정확한 도메인 규칙의 위치와 작성법을 설명하기 위한 것입니다. 실제 설정에서는 처리할 실제 도메인으로 바꿔야 합니다. 이 예외 규칙을 geosite:cn 뒤에 배치하면 대상이 이미 중국 본토 분류에 매칭되어 예외가 실행되지 않습니다. 강제로 직접 연결할 도메인도 마찬가지로 마지막 프록시 fallback보다 앞에 배치해야 합니다.
- 정확한 도메인 규칙이 분류 도메인보다 우선합니다.
- 좁은 범위의 IP 대역이 국가 또는 지역 주소 목록보다 우선합니다.
- 차단, 직접 연결과 프록시 규칙이 충돌하면 먼저 매칭된 규칙을 적용합니다.
- 예외를 하나 추가할 때마다 이유를 기록하고 로그 검증 결과를 한 번 남겨야 합니다.
- 규칙이 늘어난 뒤에도 마지막 fallback은 유지해 outbound 배열 순서에 따라 동작이 달라지지 않도록 하세요.
일시적인 DNS 장애, 노드 연결 불가 또는 사이트 자체 장애를 영구 라우팅 규칙으로 바로 고정하지 마세요. 먼저 로그로 요청이 실제로 잘못된 outbound를 선택했는지 확인한 뒤 예외를 추가하세요. 이렇게 검증한 설정은 더 간결하고, geosite 및 geoip 데이터를 업데이트한 뒤 불필요해진 수동 규칙을 판단해 삭제하기도 쉽습니다.