라우팅 규칙 설정 실전: 중국 본토·해외 분기 규칙 작성법과 매칭 순서

중국 본토·해외 분기의 정확도는 두 가지에 달려 있습니다. 규칙이 배열된 순서, 그리고 도메인이 커널에 들어올 때의 형태입니다. 이 글에서는 v2rayN 라우팅 설정 화면과 커널 설정 필드를 기준으로 이 두 가지를 한 줄씩 대조해 확인할 수 있는 수준까지 풀어봅니다.

이 글 한눈에 보기

이미 노드 연결이 정상이고 중국 본토 사이트를 직결로 돌리고 싶은 사용자에게 맞습니다. 읽고 나면 순서가 올바른 규칙 목록을 직접 짤 수 있습니다. 차단이 맨 앞, 내부망과 중국 본토 도메인 직결이 중간, 나머지 트래픽은 프록시로 넘기는 구조입니다. 각 규칙이 어떤 조건에서 무효가 되는지, 무효일 때 어느 단계를 되짚어야 하는지도 함께 알게 됩니다.

분기 판단의 두 축: 도메인과 IP

라우팅 규칙의 기본 구조는 '조건 + 아웃바운드'입니다. 조건은 도메인, IP, 포트, 네트워크 유형 네 가지가 중심이고, 아웃바운드는 프록시·직결·차단 세 가지뿐입니다. 중국 본토·해외 분기의 일반적인 방식은 두 종류의 조건으로 각각 한 세트씩 작성하는 것입니다. 도메인이 geosite:cn에 걸리면 직결, IP가 geoip:cn에 걸리면 직결, 나머지 트래픽은 프록시로 보냅니다.

판단은 커널 내부에서 이루어지며 순서는 고정되어 있습니다. 목적지 주소는 먼저 원래 형태 그대로 매칭에 참여합니다. 애플리케이션이 커널에 넘긴 것이 도메인이면 도메인 규칙을 먼저 비교하고, 도메인 규칙에 모두 걸리지 않아야 커널이 도메인 전략에 따라 IP로 해석할지 결정한 뒤 그 IP로 IP 규칙을 비교합니다.

애플리케이션이 연결 시작커널이 트래픽 인계도메인 전략 전처리규칙 순차 매칭직결 아웃바운드 매칭프록시 아웃바운드 매칭

이 순서가 설명해 주는 흔한 현상이 있습니다. geoip:cn만 쓰고 geosite:cn을 쓰지 않은 설정은 도메인 전략이 AsIs일 때 거의 작동하지 않습니다. 커널이 도메인을 해석하지 않으니 비교할 IP가 없고, 요청은 전부 맨 아래 기본 아웃바운드로 떨어집니다.

반대로 도메인 규칙만 쓴 경우에도 한계가 있습니다. 애플리케이션이 먼저 DNS를 해석해 IP 형태의 주소를 커널에 넘기면 도메인 규칙 역시 적용할 대상이 없습니다. 분기가 정확하려면 도메인이 도메인 형태로 커널에 들어와야 합니다.

매칭 순서: 위에서 아래로, 첫 번째 매칭이 적용

규칙 목록은 집합이 아니라 순서가 있는 배열입니다. 커널은 첫 번째부터 차례로 비교하고, 첫 번째로 걸리는 순간 매칭이 끝나 뒤의 규칙은 참여하지 않습니다. 순서 자체가 논리입니다. 차단은 직결보다 앞, 직결은 기본 아웃바운드보다 앞입니다.

v2rayN의 '설정' → '라우팅 설정'에서 관리하는 것이 바로 이 배열이며, 아웃바운드 드롭다운의 '프록시' '직결' '차단'은 커널 설정의 proxy, direct, block 세 가지 아웃바운드 태그에 각각 대응합니다. 각 행은 조건 조합 하나만 기술하고, 순서는 위아래로 옮겨 조정합니다.

10808
SOCKS 인바운드 포트
10809
HTTP 인바운드 포트
3종
아웃바운드: 프록시 / 직결 / 차단
geoip:cn
내장 중국 본토 IP 규칙 세트

대부분의 상황을 커버하는 순서는 다음과 같습니다. 마지막 줄은 규칙이 아니라 모든 규칙에 걸리지 않았을 때 커널이 사용하는 기본 아웃바운드입니다.

순서조건아웃바운드역할
1geosite:category-ads-all차단광고·통계 도메인 즉시 거부
2geosite:private직결내부망 도메인은 프록시를 거치지 않음
3geoip:private직결192.168.0.0/16 등 대역 직결
4geosite:cn직결중국 본토 사이트를 도메인으로 판정
5geoip:cn직결도메인 규칙이 놓친 중국 본토 IP를 받아냄
6매칭된 규칙 없음프록시기본 아웃바운드, 나머지 트래픽은 노드로

순서를 잘못 두면 대가가 구체적으로 나타납니다. IP 규칙을 도메인 규칙보다 앞에 두면 IPOnDemand 전략에서는 연결마다 도메인을 한 번씩 해석해 첫 패킷 지연이 늘고, CDN 해석 결과가 해외에 떨어져 오판할 수도 있습니다. 차단 규칙을 맨 뒤에 두면 광고 도메인이 앞선 직결이나 프록시 규칙에 먼저 먹혀 차단 규칙은 끝내 읽히지 않습니다.

도메인 규칙의 네 가지 표기법

도메인 조건은 네 가지 접두사를 지원하며 범위는 넓은 쪽에서 좁은 쪽으로 좁혀집니다. 접두사를 잘못 쓰는 것이 분기가 어긋나는 가장 흔한 원인입니다.

표기매칭 범위예시
맨 문자열 / domain:해당 도메인과 모든 하위 도메인domain:qq.com은 www.qq.com에 매칭
full:완전히 동일한 도메인full:www.example.cn은 a.www.example.cn에 매칭되지 않음
keyword:도메인에 해당 문자열 포함keyword:doubleclick은 해당 문자열을 포함한 모든 도메인에 매칭
regexp:정규 표현식regexp:.*\.google\.com$는 하위 도메인에 매칭

접두사 표기 외에 geosite 컬렉션을 직접 참조할 수도 있습니다. geosite:cn은 흔한 중국 본토 도메인을, geosite:geolocation-cn은 더 넓은 범위를, geosite:private는 내부망 도메인을, geosite:category-ads-all은 광고·통계 도메인 컬렉션을 담당합니다. 컬렉션 데이터는 규칙 파일과 함께 패키징되어 배포되므로 새로 생긴 도메인은 반영이 늦습니다. '규칙을 썼는데도 빠진다'는 상황의 흔한 원인입니다.

규칙 하나에 여러 조건을 쉼표로 구분해 쓸 수 있고, 그중 하나라도 걸리면 매칭으로 간주합니다.

"domain": [
  "domain:qq.com",
  "full:www.example.cn",
  "keyword:doubleclick",
  "regexp:.*\\.google\\.com$",
  "geosite:cn"
]

keyword:와 regexp:는 Xray 커널의 확장 표기라 v2ray 커널에서는 작동하지 않는다는 점을 짚어둘 필요가 있습니다. v2rayN은 '설정' → '파라미터 설정'에서 커널을 바꿀 수 있고, v2rayNG는 Xray 커널을 고정 사용하며, v2flyNG는 v2fly 커널을 사용합니다. 커널을 넘나들며 규칙을 옮기기 전에 이 두 표기가 지원되는지 먼저 확인하세요.

IP 규칙과 geoip:cn의 적용 경계

geoip:cn이 판단하는 것은 IP 소속이지 도메인 소속이 아닙니다. 중국 본토 도메인이 해외 CDN의 IP로 해석되면 중국 본토가 아닌 것으로, 해외 도메인이 중국 본토 IP로 해석되면 중국 본토로 판정됩니다. 그래서 IP 규칙은 받아내는 용도에 맞고 주된 판단 기준으로는 맞지 않습니다.

내부망 주소는 반드시 명시적으로 직결해야 합니다. geoip:private는 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8 등의 대역을 포함합니다. geoip:cn만 써 두면 공유기 관리 페이지, NAS, 같은 LAN의 프린터 접속이 프록시로 넘어가 노드는 연결되는데 내부망 서비스가 열리지 않는 증상이 나타납니다.

도메인 전략이 해석 시점을 결정

AsIs는 도메인을 해석하지 않아 IP 규칙이 무용지물이 됩니다. IPIfNonMatch는 도메인 규칙이 모두 빗나갔을 때만 한 번 해석하고, 그 결과를 들고 첫 번째 규칙부터 다시 매칭합니다. IPOnDemand는 IP 규칙을 만나면 즉시 해석합니다. v2rayN 기본 템플릿은 IPIfNonMatch를 사용하므로, IP로 정밀 판정할 필요가 없다면 IPOnDemand로 바꾸지 마세요.

놓치기 쉬운细节이 하나 더 있습니다. IPIfNonMatch의 두 번째 라운드 매칭은 IP를 들고 첫 번째 규칙부터 다시 시작합니다. 목록 앞쪽에 있는 IP 규칙이 두 번째 라운드에서 원래 도메인 규칙에 걸렸어야 할 요청을 가로챌 수 있습니다. 로그의 아웃바운드가 예상과 다르다면 이번 매칭이 몇 번째 라운드에서 일어났는지부터 확인하세요.

결론: 도메인 규칙이 정밀도를, IP 규칙이 받아내기를 결정

geosite:private, geosite:cn을 geoip:cn보다 앞에 두고 geoip:private로 내부망을 받아내면, 중국 본토·해외 분기의 오차는 CDN과 DNS 두 가지로 줄어듭니다. 이 둘은 순서 조정으로 해결되지 않고 DNS 설정으로 좁혀야 합니다.

바로 쓸 수 있는 규칙 골격과 적용 단계

앞의 결론을 모으면 순서가 완성된 골격 하나가 됩니다. 광고·통계 도메인 차단, 내부망 직결, 중국 본토 도메인 직결, 중국 본토 IP 직결, 나머지 트래픽은 프록시입니다. v2rayN 라우팅 설정에 그대로 옮겨 적거나 사용자 정의 규칙 세트로 가져올 수 있습니다.

"routing": {
  "domainStrategy": "IPIfNonMatch",
  "rules": [
    { "type": "field", "domain": ["geosite:category-ads-all"], "outboundTag": "block" },
    { "type": "field", "domain": ["geosite:private"], "outboundTag": "direct" },
    { "type": "field", "ip": ["geoip:private"], "outboundTag": "direct" },
    { "type": "field", "domain": ["geosite:cn"], "outboundTag": "direct" },
    { "type": "field", "ip": ["geoip:cn"], "outboundTag": "direct" }
  ]
}

직결 그룹

도메인
geosite:cn, geosite:private
IP
geoip:cn, geoip:private
아웃바운드
direct
위치
차단 규칙 뒤

도메인 조건을 앞에, IP 조건을 뒤에 두고 중국 본토 사이트를 도메인으로 우선 판정합니다.

프록시 그룹

도메인
geosite:geolocation-!cn
아웃바운드
proxy
위치
규칙 목록 맨 끝
기본 아웃바운드
매칭되지 않았을 때의 기본 아웃바운드

이 줄은 생략하고 기본 아웃바운드에 맡겨도 되며, 명시해 두면 나중에 예외를 추가하기 편합니다.

v2rayN에서 적용하는 단계는 다음과 같습니다.

  1. v2rayN 메인 화면에서 '설정' → '라우팅 설정'으로 들어갑니다. 7.x 버전은 '설정' → '파라미터 설정' → '라우팅' 탭에서 같은 목록을 관리합니다.
  2. 순서대로 규칙을 하나씩 추가합니다. 조건 칸에는 geosite:category-ads-all, geosite:private, geoip:private, geosite:cn, geoip:cn을 차례로 넣고, 아웃바운드는 각각 '차단' 또는 '직결'을 고르고 비고에 용도를 적어 둡니다.
  3. '도메인 전략'을 IPIfNonMatch로 설정합니다. IP로 정밀 판정할 필요가 없다면 IPOnDemand를 고르지 마세요. 연결마다 해석이 한 번씩 더 붙습니다.
  4. 저장한 뒤 커널을 재시작해 새 설정이 config.json에 기록되고 적용되게 합니다.
  5. SOCKS 포트 10808(HTTP 포트 10809)로 중국 본토 사이트와 해외 사이트에 각각 접속해, '로그' 탭에서 두 요청의 아웃바운드 태그가 각각 direct와 proxy인지 확인합니다.

검증 단계에서 웹페이지가 열리는지만 보면 안 됩니다. 중국 본토 사이트도 프록시를 거치면 열리기 때문입니다. 판단 기준은 로그의 아웃바운드 태그입니다. direct로 표시되면 직결, proxy로 표시되면 프록시입니다. 중국 본토 사이트가 proxy로 표시되면 규칙이 걸리지 않은 것이므로 도메인 전략 → 규칙 순서 → DNS 순으로 되짚어 보세요.

자주 묻는 문제와 점검 순서

아래 네 가지 문제면 대부분의 분기 이상을 커버합니다. 점검 순서는 도메인 전략 → 규칙 순서 → DNS로 고정입니다.

중국 본토 사이트가 여전히 프록시를 타고, 페이지는 열리지만 눈에 띄게 느림

먼저 도메인 전략을 확인합니다. AsIs에서는 커널이 도메인을 해석하지 않아 geoip:cn 같은 IP 규칙이 작동하지 않습니다. IPIfNonMatch로 바꾸고 커널을 재시작한 뒤 로그의 아웃바운드 태그를 다시 보세요.

geosite:cn을 넣었는데 새 도메인은 여전히 빠짐

geosite 컬렉션은 패키징된 데이터라 새로 추가된 도메인 반영이 늦습니다. 빠진 도메인을 domain: 접두사로 직결 규칙 하나 추가해 기본 아웃바운드 앞에 넣고 다시 테스트하세요.

LAN 장비 관리 페이지가 열리지 않음

geoip:private 직결 규칙을 하나 추가해 목록 맨 앞에 둡니다. geoip:cn만으로는 192.168.0.0/16 같은 대역이 커버되지 않아 요청이 노드로 넘어갑니다.

규칙을 저장해도 아무 변화가 없음

v2rayN은 라우팅 설정을 저장한 뒤에야 코어 설정을 다시 생성하므로 커널을 재시작해야 적용됩니다. 로그에서 읽은 규칙 개수가 화면에 표시된 개수와 같은지도 함께 확인하세요.

규칙을 고친 뒤에는 한 번의 결과만 보고 판단하지 마세요. 중국 본토 사이트와 해외 사이트를 두세 개씩 테스트하고 로그에서 아웃바운드 태그를 훑어 direct와 proxy가 예상한 위치에 나오는지 확인해야 규칙이 확정됩니다.

v2rayN 다운로드