노드를 가져와 프록시 연결까지 확인했지만 트래픽 분할 규칙은 아직 정리하지 않은 사용자를 위한 안내입니다. 데스크톱용 v2rayN의 Xray 코어를 기준으로 세 가지 아웃바운드와 기본 규칙 여섯 개를 구성하고, 시스템 프록시 진입 경로와 규칙 순서, 도메인 확인 조건을 점검합니다. 중국 내 분류는 직접 연결하고 나머지는 프록시로 보내는 보수적인 구성을 사용합니다. 광고 분류는 맨 위에 별도로 두므로 오차단이 발생하면 해당 규칙만 끌 수 있습니다.
1. 먼저 요청이 어떤 경로로 들어오는지 확인
트래픽 분할은 브라우저 화면의 URL을 보고 자동으로 ‘국내외’를 판단하는 방식이 아닙니다. 코어가 전달받은 대상 도메인, 대상 IP, 포트 등의 정보를 규칙과 대조합니다. 요청이 v2rayN의 로컬 인바운드로 들어오지 않으면 여기서 설명하는 라우팅도 적용되지 않습니다. 시스템 프록시는 일반적으로 시스템 프록시 설정을 따르는 앱에만 영향을 줍니다. 프록시를 거치지 않고 직접 연결하는 프로그램은 프록시를 별도로 설정하거나 Tun으로 트래픽을 가로채야 합니다.
v2rayN 7.x 데스크톱 인터페이스의 설정 메뉴를 기준으로 설명합니다. 먼저 시스템 프록시로 확인하고 Tun은 함께 켜지 않습니다. 세부 버전에 따라 버튼 위치가 다를 수 있으니 ‘설정’ → ‘매개변수 설정’에서 로컬 리슨 포트를 확인하고, ‘설정’ → ‘라우팅 설정’에서 규칙 세트를 관리하세요. 다른 코어를 사용 중이라면 먼저 Xray로 전환하고 노드 연결이 유지되는지 확인한 뒤 아래의 Xray 규칙 예시를 적용하세요.
- 사용 가능한 것으로 확인된 서버를 선택해 활성 서버로 지정합니다. 먼저 노드 연결 자체에 문제가 없는지 확인하세요.
- 로컬 HTTP 또는 혼합 인바운드의 실제 포트를 기록합니다. SOCKS 전용 포트를 HTTP 프록시 포트로 사용하지 마세요.
- 트레이 메뉴의 ‘시스템 프록시’에서 ‘시스템 프록시 자동 설정’을 선택하고, 브라우저 확장 프로그램이 시스템 프록시 설정을 덮어쓰지 않는지 확인하세요.
- 현재 라우팅 규칙 세트를 백업한 다음 테스트용 복사본을 만듭니다. 진입 경로가 바뀌지 않도록 다른 프록시 프로그램은 잠시 종료하세요.
여기서 사용하는 10808은 뒤에서 설명할 명령의 예시 값입니다. 이 값으로 변경해야 한다는 뜻도, 모든 설치 환경의 기본 포트라는 뜻도 아닙니다. ‘매개변수 설정’에서 해당 포트가 HTTP 또는 혼합 프록시 요청을 받는다고 확인된 경우에만 명령을 그대로 실행하세요.
2. 직접 연결·프록시·차단 아웃바운드 구성
v2rayN은 활성 서버와 인터페이스 설정을 조합해 코어 설정을 만듭니다. 일반적으로 규칙의 아웃바운드 옵션에서 direct, proxy, block을 선택할 수 있습니다. 이는 생성된 설정에서 사용하는 태그이지 노드 프로토콜 이름이 아닙니다. VMess나 VLESS 노드를 프록시 아웃바운드로 사용할 수 있으며, 라우팅 문법을 별도로 바꿀 필요는 없습니다.
연결 아웃바운드
- 직접 연결 태그
direct- 프록시 태그
proxy- 프록시 대상
- 현재 활성 서버
- 적용 범위
- 중국 내 분류는 직접 연결하고 나머지 요청은 프록시로 연결
직접 연결도 이 기기의 네트워크를 통해 대상에 접속합니다. 라우팅 규칙에 일치해도 대상에 연결할 수 있다는 보장은 없습니다.
차단 및 기본 경로
- 차단 태그
block- 차단 분류
geosite:category-ads-all- 기본 아웃바운드
proxy- 기본 네트워크
tcp,udp
차단은 규칙에 일치하는 요청에만 적용되며, 웹페이지 화면을 분석해 모든 광고 콘텐츠를 차단하지는 않습니다.
‘설정’ → ‘라우팅 설정’에서 테스트 규칙 세트를 만들고 규칙마다 도메인, IP, 네트워크, 아웃바운드 태그를 입력하세요. 저장한 뒤에는 해당 규칙 세트를 현재 사용 항목으로 지정해야 합니다. 편집만 하고 활성 규칙 세트를 바꾸지 않으면 접속 결과는 달라지지 않습니다. 인터페이스의 태그가 이 글과 다르면 현재 생성된 설정의 outbounds[].tag를 기준으로 삼으세요. 존재하지 않는 태그를 참조하면 안 됩니다.
3. 순서에 따라 기본 규칙 여섯 개 구성
Xray 라우팅은 위에서 아래로 규칙을 확인하며 처음 일치하는 규칙을 적용합니다. 한 규칙에 도메인과 포트를 함께 입력하면 두 조건을 모두 충족해야 합니다. 반면 같은 도메인 목록에 여러 항목을 넣으면 그중 하나만 일치해도 됩니다. 모든 도메인, IP, 포트를 하나의 규칙에 넣지 마세요. ‘또는’ 조건을 ‘그리고’ 조건으로 잘못 설정하기 쉽습니다.
| 순서 | 일치 조건 | 아웃바운드 | 용도 |
|---|---|---|---|
| 1 | geosite:category-ads-all | block | 광고 분류 도메인을 먼저 차단 |
| 2 | geoip:private | direct | 사설 주소(내부망·루프백 등)는 직접 연결 |
| 3 | geosite:cn | direct | 중국 도메인 분류는 직접 연결 |
| 4 | geoip:cn | direct | 대상 IP가 중국 내 주소로 확인되면 직접 연결 |
| 5 | full:example.com | proxy | 정확한 도메인 프록시 규칙 예시 |
| 6 | network: tcp,udp | proxy | 나머지 요청은 모두 프록시로 연결 |
5번 규칙은 정확히 일치하는지 확인하기 쉽도록 문서 예시 도메인을 사용합니다. 일상적인 설정에서는 삭제해도 됩니다. 앞선 분류에 포함된 사이트를 프록시로 보내려면 해당 사이트 전용 규칙을 그 분류 규칙보다 위로 옮겨야 합니다. 규칙이 더 ‘구체적’이라고 자동으로 우선 적용되는 것은 아닙니다. 규칙의 위치가 적용 순서를 결정합니다.
아래는 Xray routing 설정 예시입니다. 필드의 의미를 확인하기 위한 것으로, 바로 실행할 수 있는 전체 설정도 아니고 v2rayN 그래픽 인터페이스의 규칙 가져오기 형식도 아닙니다. 인터페이스의 가져오기 기능을 사용하려면 현재 버전에서 내보낸 규칙 구조부터 확인하세요. 이 예시를 완성된 규칙 파일로 가져오면 안 됩니다.
{
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"domain": ["geosite:category-ads-all"],
"outboundTag": "block"
},
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["full:example.com"],
"outboundTag": "proxy"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
geosite:cn은 도메인 분류이며 웹사이트 서버의 실제 위치를 실시간으로 확인하는 기능이 아닙니다. geoip:cn은 IP 주소 목록으로, 웹사이트 운영 주체의 소재지를 나타내지도 않습니다. 국경을 넘는 CDN이나 해외에 호스팅된 중국 사이트는 예상과 다르게 분류될 수 있습니다. 특정 사이트의 경로가 적절하지 않다면 전체 분류를 반복해서 수정하기보다 해당 도메인에 예외 규칙을 추가하는 편이 관리하기 쉽습니다.
4. AsIs를 선택해 기본 규칙이 도메인 확인 조건을 가리지 않도록 설정
이 예시에서는 AsIs를 명시적으로 사용합니다. 라우팅 규칙을 적용하기 위해 도메인을 별도로 조회하지 않습니다. 요청에 도메인이 포함되어 있으면 주로 도메인 규칙으로 판단하고, 요청에 처음부터 IP가 포함되어 있으면 IP 규칙도 바로 적용될 수 있습니다. 따라서 위의 4번 규칙이 분류되지 않은 모든 도메인을 먼저 조회한 다음 중국 IP로 직접 연결한다는 뜻은 아닙니다.
- AsIs: 도메인 기반 트래픽 분할을 안정적으로 시작하기에 적합합니다. 중국 도메인 분류에 일치하지 않는 도메인 요청은 프록시 기본 경로로 보내므로, 로컬 DNS 조회 결과에 따라 연결 경로가 달라지는 상황을 줄일 수 있습니다.
- IPIfNonMatch: 도메인 규칙에 일치하는 항목이 없을 때만 도메인을 조회하고 IP 규칙으로 다시 확인합니다. IP 규칙을 만날 때마다 즉시 조회하는 방식은 아닙니다.
- IPOnDemand: 규칙을 확인하는 도중 IP 정보가 필요하면 조회가 시작될 수 있습니다. 사용할지 결정하기 전에 DNS 연결 가능 여부, 조회 대기 시간, CDN이 반환하는 주소를 함께 고려하세요.
결론: 전체 요청에 적용되는 기본 규칙을 유지한다면 먼저 AsIs 사용
마지막의 tcp,udp 규칙은 도메인 확인 단계에서도 일치할 수 있습니다. 이 경우 IPIfNonMatch의 ‘일치하는 규칙이 없으면 조회’ 단계가 실행되지 않을 수 있습니다. IP를 이용해 분할해야 한다면 기본 규칙을 다시 설계하거나 IPOnDemand 사용을 검토하세요. 전략 이름만 바꾸고 적용됐다고 판단해서는 안 됩니다.
라우팅의 도메인 전략과 DNS 요청이 어떤 아웃바운드를 통과하는지는 서로 다른 문제입니다. AsIs를 선택해도 시스템에서 DNS 조회가 사라지는 것은 아니며, 모든 조회가 프록시를 통과한다는 뜻도 아닙니다. 앱이 미리 도메인을 IP로 바꾸는 경우, 프록시 프로토콜이 도메인을 원격 서버로 전달하는 경우, 코어가 직접 연결 대상의 주소를 조회하는 경우는 각각 조회 경로가 다릅니다. 먼저 요청이 코어에 들어올 때 도메인과 IP 중 무엇을 포함하는지 확인한 다음 도메인 규칙이 일치하지 않는 이유를 살펴보세요.
5. 아웃바운드 주소만 보지 말고 규칙별로 확인
규칙 세트를 저장하고 활성화한 뒤 코어가 정상적으로 시작되는지 먼저 확인하세요. 도메인 분류를 찾지 못하거나 geo 데이터 파일을 읽지 못한다는 오류가 발생하면 클라이언트의 데이터 업데이트 기능으로 현재 코어와 호환되는 파일을 업데이트한 다음 코어를 재시작하세요. 코어가 시작되지 않았는데도 브라우저 캐시나 남아 있는 시스템 프록시 설정 때문에 일부 기능이 되는 것처럼 보일 수 있습니다.
- 프록시 확인: 아래 명령으로 예시 도메인에 요청을 보내고 접속 로그에 프록시 아웃바운드 태그가 표시되는지 확인하세요. 포트가 10808이 아니라면 인터페이스에서 확인한 실제 HTTP 또는 혼합 포트로 바꾸세요.
- 직접 연결 확인: 현재
geosite:cn데이터에 포함된 도메인을 선택하고 도메인, 시간, 아웃바운드 태그를 기록하세요. 웹사이트가 열린다는 사실만으로 직접 연결을 사용했다고 단정할 수는 없습니다. - 차단 확인: 현재 광고 분류에서 알려진 항목을 선택하고 로그에
block이 표시되는지 확인하세요. 차단 기능을 시험하려면full:example.com전용 규칙을 임시로 맨 위로 옮겨 차단으로 설정할 수 있습니다. 확인이 끝나면 원래 상태로 되돌리세요. - 기본 경로 확인: 앞선 규칙에 포함되지 않는 대상을 사용해 프록시로 연결되는지 확인하세요. UDP 서비스가 작동하지 않는다면 노드와 전송 방식이 해당 UDP 전달을 지원하는지도 확인해야 합니다.
curl --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/
명령의 10초는 연결 제한 시간이며 20초는 요청 전체에 허용되는 시간입니다. 실제 지연 시간을 뜻하지는 않습니다. HTTP 상태 코드가 반환되면 요청에 응답이 온 것이지만, 연결이 종료됐다고 해서 반드시 차단 규칙에 일치한 것은 아닙니다. 로그와 함께 판단하세요. 일부 웹사이트는 HEAD 요청을 지원하지 않으므로 이 경우 일반 GET 요청으로 바꿔 라우팅 결과를 비교할 수 있습니다.
- 일반 로그에 접속 기록이 없다면 ‘설정’ → ‘매개변수 설정’의 로그 관련 항목에서 접속 로그 설정을 확인하세요. 짧은 시간 동안 로그 상세도를 높여 확인한 뒤 원래 설정으로 되돌리세요.
- 한 번에 규칙 하나만 변경하고 ‘대상, 예상 아웃바운드, 실제 아웃바운드’를 기록하세요. DNS, 노드, 라우팅을 동시에 변경하지 마세요.
- 규칙을 변경한 뒤 새 연결을 시작하세요. 브라우저의 기존 장기 연결은 이전 경로를 계속 사용할 수 있으므로 필요한 경우 해당 탭을 닫고 다시 시도하세요.
6. 자주 발생하는 트래픽 분할 문제와 해결 방법
중국 사이트가 여전히 프록시를 사용한다면 무엇을 확인해야 하나요?
먼저 방금 편집한 규칙 세트가 활성화되어 있는지 확인하고, 프록시 기본 규칙이 중국 규칙보다 위에 있지 않은지 살펴보세요. 순서가 올바르다면 코어가 도메인과 IP 중 무엇을 받았는지 확인하고 현재 geosite 데이터에 해당 도메인이 포함되어 있는지 점검하세요. 직접 연결이 꼭 필요하다면 domain: 도메인 예외를 기본 규칙보다 위에 추가하세요. 알 수 없는 모든 요청을 직접 연결하도록 바꾸면 안 됩니다.
광고 차단을 켠 뒤 로그인 페이지가 제대로 표시되지 않으면 어떻게 하나요?
광고 분류 규칙을 잠시 비활성화하고 다시 시도해 문제가 사라지는지 확인하세요. 오차단이 맞다면 로그에서 로그인, 인증 코드 또는 정적 리소스 도메인을 찾아 직접 연결이나 프록시 예외를 추가한 뒤 광고 차단 규칙보다 위로 옮기세요. 페이지가 비어 있다는 이유만으로 도메인 접미사 전체를 광범위하게 허용하지 마세요.
브라우저에는 트래픽 분할이 적용되는데 다른 프로그램에서는 적용되지 않는 이유는 무엇인가요?
해당 프로그램이 시스템 프록시 설정을 따르는지 확인하세요. 수동 설정을 지원한다면 127.0.0.1과 실제 리슨 포트를 입력하고 HTTP 또는 SOCKS 중 알맞은 유형을 선택하세요. 프록시 설정을 따르지 않는 트래픽까지 가로채야 할 때만 Tun을 별도로 확인하세요. 활성화하기 전에 시스템 권한과 내부망 접속 요구 사항을 먼저 점검하세요.
구독을 업데이트하면 직접 작성한 분할 규칙도 덮어써지나요?
노드 구독과 로컬 라우팅 규칙 세트는 서로 다른 설정 항목이므로 일반적인 노드 업데이트가 별도로 저장된 라우팅 규칙을 바꾸지는 않습니다. 다만 클라이언트 전체 설정을 가져오거나 원격 라우팅 규칙 세트를 업데이트하면 규칙 내용이 바뀔 수 있습니다. 개인 예외는 관리 가능한 로컬 규칙 세트에 저장하고, 업데이트 후 활성 규칙 세트와 순서, 아웃바운드 태그를 다시 확인하세요.
관리하기 좋은 트래픽 분할 설정은 모든 규칙의 목적을 설명할 수 있어야 합니다. 먼저 차단할 항목을 처리하고, 조건에 따라 내부망과 중국 내 분류를 직접 연결하며, 특정 도메인은 별도로 예외 처리하고, 나머지 요청은 명시적으로 프록시에 보냅니다. 이 기본 구성을 충분히 검증한 다음 게임, 다운로드, 업무 서비스용 규칙을 추가하세요. 그래야 문제가 생겼을 때 어느 변경에서 비롯됐는지 찾을 수 있습니다.