구독을 가져와 노드에 연결했지만 중국 본토 웹사이트와 로컬 네트워크 트래픽을 어떻게 직접 연결할지 잘 모르겠다면 이 글이 도움이 됩니다. v2rayN에서 관리하는 Xray 코어를 기준으로 규칙 순서, 도메인·IP 매칭, 기본 출구와 검증 방법을 살펴봅니다. 끝까지 읽으면 되돌릴 수 있는 중국 본토 우회 규칙을 구성하고, ‘규칙이 일치하지 않은 경우’와 ‘요청이 클라이언트에 들어오지 않은 경우’를 구분할 수 있습니다.
1. 트래픽 유입 경로·라우팅 규칙·출구 구분하기
시스템 프록시, TUN, 라우팅 분기는 서로 다른 설정입니다. 시스템 프록시는 해당 설정을 따르는 앱이 요청을 로컬 프록시로 보내도록 합니다. TUN은 시스템 라우팅 범위에 있는 트래픽을 가져오고, 코어의 라우팅 규칙은 요청을 받은 뒤 어떤 출구로 보낼지 결정합니다. 요청이 코어에 들어오지 않으면 geosite 목록을 바꿔도 효과가 없습니다.
이 글에서는 proxy를 프록시 출구 태그, direct를 직접 연결 태그, block을 차단 태그로 사용합니다. 태그는 설정에서 사용하는 이름일 뿐, 입력한다고 해당 프로토콜이 자동으로 생기는 것은 아닙니다. 실제 생성된 설정의 outbounds[].tag에 같은 이름이 있어야 합니다. 그렇지 않으면 설정을 불러오지 못하거나 출구를 찾지 못할 수 있습니다.
직접 연결과 프록시
- direct
- 일반적으로 freedom 출구에 해당
- proxy
- 현재 선택한 프록시 노드 또는 프록시 출구에 해당
- 적용 대상
- 로컬 네트워크 및 중국 본토 리소스는 직접 연결하고, 나머지는 기본 출구로 처리
VMess와 VLESS는 노드 연결 프로토콜이며 geosite 분류명이 아닙니다.
차단과 기본 출구
- block
- 일반적으로 blackhole 출구에 해당
- 일치하는 규칙이 없는 경우
- Xray는 outbounds 배열의 첫 번째 출구를 사용
- 확인할 위치
- 실제 실행 중인 설정의 routing 및 outbounds
기본 출구는 태그 이름으로 정해지지 않습니다. 출구 순서를 확인하세요.
2. geosite와 geoip를 입력하는 위치
geosite:cn은 규칙의 domain 배열에 입력하며, 도메인 데이터베이스의 cn 분류와 일치합니다. geoip:cn은 ip 배열에 입력하며, IP 데이터베이스의 cn 주소 범위와 일치합니다. 둘 다 온라인 조회 서비스가 아니며, 중국 본토의 모든 서비스를 정확하게 자동 분류한다고 보장할 수 없습니다.
| 표현식 | 입력 필드 | 매칭 기준 |
|---|---|---|
geosite:cn | domain | 도메인 목록의 cn 분류 |
geoip:cn | ip | IP 주소 목록의 cn 분류 |
domain:example.com | domain | example.com 및 하위 도메인 |
full:example.com | domain | example.com과 정확히 일치하는 도메인만 |
192.168.0.0/16 | ip | 지정한 IPv4 대역 |
Xray 도메인 규칙에서 example.com을 그대로 입력하면 키워드 매칭으로 처리되며, ‘해당 도메인 및 하위 도메인’과는 다릅니다. 특정 서비스에 예외를 추가할 때는 domain: 또는 full:을 명시해, 이름에 같은 문자열이 포함된 다른 도메인까지 의도치 않게 매칭되는 일을 피하세요.
3. 규칙은 위에서 아래로 검사하며, 예외를 먼저 배치
Xray는 라우팅 규칙을 순서대로 검사하고, 조건에 처음 일치하는 규칙의 출구를 선택합니다. ‘어느 규칙이 더 정확한지’를 먼저 계산해 자동으로 우선순위를 정하지 않습니다. 적용 범위가 넓은 규칙을 앞에 두면 뒤에 있는 세부 규칙은 실행되지 않을 수 있습니다.
- 서비스 예외: 특정 도메인을 반드시 프록시로 보내거나 직접 연결해야 한다면 일반 분류 규칙보다 앞에 배치합니다.
- 선택적 차단: 서비스에 영향을 주지 않는 것으로 확인된 광고 도메인 분류는 block으로 보낼 수 있습니다. 오차단이 의심되면 먼저 이 규칙을 제거하고 확인하세요.
- 로컬 네트워크 직접 연결: 비공개 도메인과 사설 IP를 매칭해 라우터나 프린터 서비스 요청이 원격으로 전송되지 않도록 합니다.
- 중국 본토 직접 연결: 먼저 geosite로 도메인을 매칭하고, geoip로 IP 대상에 대한 조건을 보완합니다.
- 나머지 트래픽: 확인된 기본 프록시 출구로 보내거나 선택한 정책에 따라 처리합니다.
일반적으로 하나의 규칙에 서로 다른 필드를 여러 개 입력하면 모든 조건을 동시에 충족해야 합니다. 예를 들어 domain과 ip를 함께 입력해도 ‘도메인이 중국 본토에 속하거나 IP가 중국 본토에 속하는 경우’라는 뜻은 아닙니다. 이런 ‘또는’ 조건으로 분기하려면 도메인과 IP를 각각 매칭하는 규칙 두 개로 나누고, 같은 direct 출구로 보내세요.
{
"type": "field",
"domain": ["full:example.com"],
"outboundTag": "proxy"
}
아래는 문법을 보여 주기 위한 정확한 도메인 예외이며, 예시 도메인을 프록시로 보내야 한다는 뜻은 아닙니다. 실제로 사용할 때는 해당 서비스 도메인으로 바꾸고, 이 도메인을 포함할 수 있는 일반 규칙보다 앞에 배치하세요. 로그인, 정적 리소스, API 도메인도 사용하는 서비스라면 로그를 바탕으로 하나씩 확인해야 합니다. 브라우저 주소창에 표시된 호스트명 하나만 처리해서는 충분하지 않습니다.
4. 중국 본토 트래픽 우회를 위한 Xray 라우팅 예시
아래 내용은 routing 객체만 보여 주며, 단독으로 실행할 수 있는 완전한 클라이언트 설정이 아닙니다. proxy, direct, block 출구가 이미 있고, outbounds의 첫 번째 출구가 proxy라고 가정합니다. IPIfNonMatch가 추가로 도메인을 해석할 수 있도록 모든 요청에 일치하는 기본 규칙은 넣지 않았습니다.
{
"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"
}
]
}
}
IPIfNonMatch는 대상이 도메인이고 첫 번째 규칙 검사에서 일치 항목이 없을 때 도메인을 해석한 뒤, 확인된 IP로 다시 매칭을 시도한다는 뜻입니다. IP 주소로 직접 연결하는 요청은 처음부터 IP 규칙에 매칭될 수 있습니다. 도메인이 이미 geosite 규칙에 일치하면 이후 geoip 규칙을 위해 추가로 해석하지 않습니다.
이 정책은 ‘중국 본토 도메인은 무조건 직접 연결된다’고 보장하지 않습니다. 도메인 분류에 누락이 있을 수 있고, CDN 설정에 따라 해석 결과가 달라질 수 있습니다. 안정성이 중요한 서비스에는 명시적인 도메인 규칙을 먼저 추가하고 geoip는 보조 기준으로 사용하세요. 광고 분류는 선택 사항입니다. 처음에는 첫 번째 규칙을 제외하고 기본 분기가 정상적으로 작동하는지 확인한 뒤 활성화할 수 있습니다.
5. v2rayN에서 저장·활성화·검증하기
현재 노드가 Xray를 사용하는지 먼저 확인하세요. 이 글의 routing 필드는 다른 코어의 설정 형식에 그대로 사용할 수 없습니다. v2rayN은 데스크톱 버전에 따라 창 제목이 조금 다를 수 있습니다. 아래에서는 한국어 인터페이스의 ‘설정’ → ‘라우팅 설정’에서 해당 항목을 찾습니다. 규칙 창에서는 라우팅 프로필 목록과 프로필 안의 규칙 목록을 구분해야 합니다.
- 복구할 프로필 보관: ‘설정’ → ‘라우팅 설정’에서 현재 활성화된 프로필을 확인하고 기록하세요. 복사 기능이 있으면 먼저 복사한 다음 수정합니다. 사용 가능한 유일한 규칙 세트를 바로 덮어쓰지 마세요.
- 프로필 만들기 또는 편집: 위 순서에 따라 도메인 규칙과 IP 규칙을 추가하고, 출구로 direct·proxy·block을 선택합니다. 그래픽 인터페이스의 각 입력 형식은 해당 창의 안내를 따르세요. 전체 routing 객체를 ‘도메인’ 입력란에 붙여 넣으면 안 됩니다.
- 도메인 전략 설정: 라우팅 프로필의 도메인 해석 전략에서 IPIfNonMatch를 선택합니다. 저장한 뒤 메인 화면으로 돌아가 방금 수정한 라우팅 프로필을 선택하세요. 저장만 하고 활성화하지 않으면 실행 동작은 바뀌지 않습니다.
- 유입 경로 확인: ‘설정’ → ‘매개변수 설정’에서 로컬 수신 포트를 확인하세요. 아래에서는 10808을 예시로 사용하며 실제 포트는 인터페이스에 표시된 값을 따릅니다. 시스템 프록시를 테스트할 때는 메인 화면의 시스템 프록시 메뉴에서 ‘시스템 프록시 자동 설정’을 선택하세요.
- 실행 결과 확인: 설정을 적용하고 코어를 다시 시작한 뒤, 로그에 리소스 로드·규칙 파싱·출구 태그 오류가 있는지 확인하세요. 클라이언트의 설정 보기 기능이나 실행 중인 설정 파일을 통해 실제로 생성된 routing 및 outbounds를 확인합니다.
클라이언트가 자동 생성한 임시 설정을 직접 수정해 장기적으로 사용하지 마세요. 노드 전환, 구독 업데이트, 재시작 시 파일이 다시 생성될 수 있습니다. 라우팅 설정에서 규칙을 저장하세요. 사용자 지정 설정을 사용하려면 인바운드, DNS, 출구, 라우팅을 모두 사용자 지정 설정에서 관리해야 합니다.
curl --proxy socks5h://127.0.0.1:10808 --head https://example.com
curl --proxy socks5://127.0.0.1:10808 --head https://example.com
위 명령은 ‘도메인을 프록시에서 해석하는 경우’와 ‘로컬 기기에서 먼저 해석하는 경우’를 비교하기 위한 것으로, 속도 측정이 아닙니다. socks5h는 대상 도메인을 프록시 서버로 전달하고, socks5는 일반적으로 로컬에서 먼저 해석한 다음 IP를 프록시로 전달합니다. 해당 포트가 실제로 SOCKS 요청을 받는지, 명령줄 환경에 curl이 있는지 먼저 확인하세요. 연결 문제를 감추기 위해 -k로 인증서 검증을 건너뛰지 마세요.
| 검증 대상 | 예상 결과 | 기록할 내용 |
|---|---|---|
| cn 분류에 포함된 것으로 확인된 도메인 | direct | 대상 도메인, 시간, 출구 태그 |
| 192.168.1.1과 같은 로컬 네트워크 주소 | direct | 대상 주소의 실제 존재 여부, 서비스 포트 |
| 직접 연결 및 차단 규칙에 해당하지 않는 대상 | 기본 proxy 출구 | 첫 번째 출구와 로그에 기록된 실제 출구 |
| 광고 분류에 포함된 것으로 확인된 도메인 | block | 분류의 존재 여부와 서비스 영향 |
로그에 표시되는 세부 정보는 코어와 로그 수준에 따라 달라지며, ‘몇 번째 규칙’인지 직접 표시되지 않을 수 있습니다. 연결 기록의 대상과 출구 태그를 함께 확인하세요. 필요하면 잠시 로그 수준을 높여 한 번 재현한 뒤 원래 설정으로 되돌립니다. 테스트 기록에는 대상 유형과 출구만 남기고 구독 주소, 노드 인증 정보, 개인의 전체 접속 기록은 공개하지 마세요.
6. DNS·트래픽 탐지·TUN이 분기에 미치는 영향
domainStrategy는 라우팅을 판단할 때 대상 도메인을 해석할지 결정하는 설정이지, 모든 DNS 설정이 완료됐다는 뜻은 아닙니다. 클라이언트 DNS 설정, 시스템 DNS, 브라우저의 보안 DNS, 앱이 IP 주소를 직접 보내는지 여부에 따라 코어가 받는 대상 정보가 달라집니다. geosite를 추가했다는 이유만으로 모든 연결에서 매칭할 도메인을 확인할 수 있다고 생각하면 안 됩니다.
- IP만 있는 요청: geosite는 IP 주소만으로 매칭할 수 없습니다. geoip를 사용하거나, 필요한 경우 트래픽 탐지를 설정해 코어가 프로토콜 데이터에서 도메인을 식별하도록 할 수 있습니다.
- 트래픽 탐지: 모든 프로토콜에서 도메인을 복원할 수 있는 것은 아닙니다. 탐지된 결과를 라우팅에만 사용하고 연결 대상은 바꾸지 않으려면 Xray의
routeOnly설정을 검토하고 클라이언트가 생성한 설정을 확인하세요. - DNS 시간 초과: IPIfNonMatch의 추가 판단 과정에서 도메인 해석을 기다릴 수 있습니다. 처음 연결할 때 느리다면 DNS 조회 시간과 노드 핸드셰이크 시간을 따로 확인하세요.
- TUN 트래픽 캡처: TUN은 가로채는 트래픽 범위를 넓히지만 잘못된 규칙 순서를 수정하거나 geosite 데이터베이스에서 빠진 분류를 자동으로 채우지는 않습니다.
- 로컬 네트워크 예외: 시스템 프록시 우회 목록, TUN 라우팅 제외, 코어의 direct 규칙은 서로 다른 단계에 적용됩니다. 요청이 코어에 들어오기 전에 우회될 수 있으며, 이런 경우 로그에 요청이 표시되지 않는 것이 정상입니다.
분기 설정을 수정할 때는 한 번에 한 부분만 변경하세요. 먼저 명시적인 프록시 명령으로 라우팅을 확인하고, 다음으로 시스템 프록시를 테스트한 뒤 필요하면 TUN을 테스트합니다. DNS, 규칙, 트래픽 캡처 방식을 동시에 바꾸면 어떤 변경으로 문제가 해결됐는지 알기 어렵습니다. 트래픽 캡처 설정은 입문 가이드의 TUN 설정을 참고하세요.
7. 라우팅이 적용되지 않을 때 확인할 문제 4가지
중국 본토 우회를 선택했는데 중국 본토 웹사이트가 계속 프록시를 사용하는 이유는 무엇인가요?
저장된 프로필만 보지 말고 현재 활성화된 라우팅 프로필부터 확인하세요. 이어서 해당 도메인이 geosite:cn에 포함되어 있는지, 앞에 강제 프록시 규칙이 있는지 확인합니다. 임시로 바로잡으려면 해당 서비스의 domain: 규칙을 일반 규칙보다 앞에 배치하고, 연결 기록에서 출구가 direct로 바뀌었는지 확인하세요.
geoip:cn을 입력했는데 왜 매칭되지 않나요?
ip 배열에 입력했는지 확인하세요. domain 배열에 넣으면 안 됩니다. 대상이 도메인으로 들어오는 경우 domainStrategy를 확인하세요. IPIfNonMatch를 사용한다면 모든 요청과 먼저 일치하는 기본 규칙을 제거하거나 해석 전략을 다시 검토해야 합니다. 마지막으로 실제 해석된 IP가 현재 데이터베이스의 cn 범위에 속하는지 확인하세요.
광고 차단을 추가한 뒤 로그인 또는 결제 페이지가 열리지 않으면 어떻게 하나요?
먼저 category-ads-all 규칙을 비활성화하고 다시 시도해 오차단인지 확인하세요. 차단을 유지해야 한다면 실패한 요청의 실제 도메인을 확인해 더 앞에 direct 또는 proxy 예외를 추가합니다. 서비스에 관련된 모든 주소를 광범위한 키워드 허용 목록에 넣지는 마세요.
구독을 업데이트하면 기존 규칙도 바뀌나요?
일반적인 서버 구독 업데이트는 주로 노드 정보를 변경하며, 로컬 라우팅 규칙이나 지리 데이터까지 업데이트하는 것은 아닙니다. 현재 라우팅 프로필과 선택된 코어가 바뀌었는지 먼저 확인하세요. 사용자 지정 설정이나 별도의 설정 가져오기 절차를 사용한다면 덮어쓰기 범위도 따로 확인해야 합니다. 규칙 분류가 누락된 문제를 해결하려고 구독을 반복해서 새로 고치지 마세요.
라우팅 규칙의 안정성은 규칙 수가 아니라 각 테스트 요청이 어떤 출구를 사용하는지 설명할 수 있는지에 달려 있습니다. 사용할 수 있는 프로필을 보관하고 변경한 항목과 검증 대상을 기록하세요. 문제가 생기면 가장 최근 변경을 먼저 되돌린 뒤 유입 경로, 대상 정보, 매칭 순서, 출구를 확인합니다. 기본 설정은 라우팅 설정 가이드에서 확인할 수 있으며, 연결 오류는 문제 해결에서 항목별로 점검하세요.