이 글의 핵심

노드를 가져와 프록시로 웹사이트에 접속할 수 있지만, 직접 연결과 프록시 트래픽을 세분화하려는 사용자에게 적합합니다. 중국 본토 우회 규칙으로 기본 설정을 만든 뒤 사이트별 예외와 광고 차단 규칙을 추가하고, 출구 태그로 결과를 확인합니다. 예제 코드는 Xray 라우팅 문법을 사용합니다. 클라이언트 화면에서는 규칙을 항목별로 입력해야 하며, JSON 전체를 도메인 입력란에 붙여 넣으면 안 됩니다.

1. 시스템 프록시와 라우팅 분기의 차이

시스템 프록시는 ‘앱이 연결을 v2rayN에 전달하는지’를 결정하고, 라우팅 분기는 ‘코어가 연결을 받은 뒤 어떤 출구를 선택하는지’를 결정합니다. ‘시스템 프록시 자동 설정’을 켜도 모든 연결이 원격 노드를 거치는 것은 아닙니다. direct 규칙에 일치하면 연결은 이 기기에서 직접 이루어집니다. 반대로 시스템 프록시를 사용하지 않는 앱은 라우팅 모드를 바꿔도 자동으로 코어를 거치지 않습니다.

앱 요청 로컬 인바운드 규칙 일치 출구 선택 대상에 연결

먼저 ‘설정’ → ‘매개변수 설정’에서 로컬 수신 포트를 확인한 다음, 메인 창 하단에서 시스템 프록시와 라우팅 모드를 확인합니다. 아래 포트 번호는 설명을 위한 예시이며 버전별 기본값이 아닙니다. 이 기기에 다른 포트가 표시된다면 명령에 쓰는 숫자도 함께 바꾸세요. 테스트 중에는 TUN을 꺼 두어 두 가지 연결 경로가 동시에 작동해 결과를 혼동하지 않도록 합니다.

10808
SOCKS 인바운드 포트 예시
10809
HTTP 인바운드 포트 예시
3가지
직접 연결·프록시·차단 출구

2. 되돌릴 수 있는 중국 본토 우회 기본 설정 만들기

메인 창의 라우팅 선택에서 이름에 ‘중국 본토 우회’가 포함된 프리셋을 사용합니다. 버전이나 가져온 규칙에 따라 표시 이름이 다를 수 있으므로, 이름만 믿지 말고 ‘설정’ → ‘라우팅 설정’에서 실제 내용을 확인하세요. 먼저 현재 라우팅 설정을 백업한 뒤 테스트용 사본을 만들어 원래 프리셋을 복구용으로 보관합니다.

  1. 연결이 확인된 노드를 하나 선택하고 테스트가 끝날 때까지 변경하지 않습니다.
  2. ‘설정’ → ‘라우팅 설정’을 열어 현재 설정에 중국 본토 도메인, 중국 본토 IP, 로컬 네트워크 직접 연결 규칙이 포함되어 있는지 확인합니다.
  3. 프록시 기본 규칙을 확인합니다. 앞선 규칙에 일치하지 않은 TCP·UDP 연결은 프록시 출구로 전달되어야 합니다.
  4. 테스트 설정을 저장하고 전환해 코어를 다시 불러옵니다. 로그에 설정 로드 오류가 없는지 확인한 뒤 접속 테스트를 시작합니다.

직접 연결 기본 규칙

도메인 목록
geosite:cn
IP 목록
geoip:cn
로컬 네트워크 IP
geoip:private
대상 태그
direct

목록을 사용할 수 있는지는 현재 불러온 geosite.dat 및 geoip.dat 파일에 따라 달라집니다.

프록시 기본 규칙

네트워크 유형
tcp,udp
대상 태그
proxy
규칙 위치
모든 예외 규칙 뒤
프록시 노드
현재 활성 서버

태그는 실제 출구와 일치해야 합니다. 태그만 입력한다고 프록시 서버가 만들어지는 것은 아닙니다.

direct, proxy, block은 이 글에서 사용하는 태그 이름이며, 코어가 자동으로 인식하는 예약어가 아닙니다. 일반적인 설정에서는 각각 직접 연결, 노드 연결, 차단 출구를 가리킵니다. 실제 생성된 설정에서 다른 태그를 사용한다면 라우팅 규칙도 그에 맞춰야 합니다. 특히 차단 규칙에는 대응하는 blackhole 출구가 있어야 합니다. block이라는 규칙만 추가해서는 차단되지 않습니다.

3. direct·proxy·block 규칙 순서

Xray는 규칙을 위에서 아래로 확인하고, 처음 일치한 규칙의 출구를 선택합니다. 더 ‘정확한’ 다음 규칙을 계속 찾지는 않습니다. 특정 사이트를 프록시로 보내는 규칙을 중국 본토 IP 직접 연결 규칙보다 아래에 두면, 도메인이 IP로 확인된 뒤 IP 규칙에 먼저 일치해 의도대로 작동하지 않을 수 있습니다. 명시적인 도메인 예외를 범위가 넓은 목록보다 위에 두고, 기본 규칙은 항상 맨 마지막에 배치하는 것이 안전합니다.

순서일치 조건출구목적
1지정한 도메인 예외direct 또는 proxy뒤에 나오는 일반 규칙보다 우선 적용
2광고 도메인 목록block일치하는 광고 연결 차단
3중국 본토 도메인 목록direct도메인 기준으로 우선 직접 연결
4로컬 네트워크·중국 본토 IPdirectIP 대상 및 DNS 확인 결과 처리
5그 외 TCP·UDPproxy해외 및 알 수 없는 대상의 기본 프록시 경로

다음은 기본 Xray 설정의 routing 부분을 보여 주는 예시이며, 단독으로 실행할 수 있는 전체 설정이 아닙니다. 세 출구 태그가 이미 존재하고 데이터 파일에 참조하는 목록이 포함되어 있다고 가정합니다. v2rayN 그래픽 인터페이스에서는 각 항목을 해당 규칙으로 변환해 입력하세요. 전체 사용자 지정 설정을 사용하는 경우에만 이 내용을 최상위 설정에 병합합니다.

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "domain": ["full:example.com"],
        "outboundTag": "proxy"
      },
      {
        "type": "field",
        "domain": ["geosite:category-ads-all"],
        "outboundTag": "block"
      },
      {
        "type": "field",
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": ["geoip:private", "geoip:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "proxy"
      }
    ]
  }
}

4. 사이트 직접 연결 예외와 광고 차단 설정

규칙을 추가하기 전에 전체 호스트 이름과 도메인 접미사 규칙을 구분하세요. 메인 호스트만 직접 연결하려면 full:을 사용합니다. 해당 도메인과 하위 도메인까지 함께 처리하려면 domain:을 사용하세요. 웹페이지는 로그인, 이미지, API 등 여러 호스트에서 콘텐츠를 불러올 수 있습니다. 따라서 ‘메인 페이지는 열리지만 로그인이 안 되는’ 경우에는 모든 트래픽을 직접 연결로 바꾸기보다 요청 도메인을 확인하는 것이 좋습니다.

예를 들어 Tencent 관련 도메인을 명시적으로 직접 연결하려면 일반 목록보다 앞에 다음 규칙을 추가할 수 있습니다. 이 규칙은 일치 범위를 보여 주는 예시일 뿐, 모든 사용자에게 필요한 것은 아닙니다. 기존 목록에 이미 포함되어 있다면 같은 규칙을 중복으로 추가해도 관리 부담만 늘어납니다.

{
  "type": "field",
  "domain": ["domain:qq.com"],
  "outboundTag": "direct"
}

광고 차단에는 geosite:category-ads-all을 사용할 수 있습니다. 다만 코어를 거치고 해당 목록에 일치하는 연결만 처리할 수 있으며, 웹페이지 요소를 필터링하듯 광고 자리의 여백까지 제거하지는 못합니다. 데이터 파일에 이 목록이 없으면 코어가 로드 오류를 낼 수 있습니다. 먼저 로그와 데이터 파일 출처를 확인한 뒤 데이터를 갱신할지 규칙을 제거할지 결정하세요.

오차단 시에는 정확한 예외부터 추가

광고 차단을 켠 뒤 결제나 로그인에 문제가 생기면 먼저 실패한 호스트를 찾아 full: 규칙으로 해당 연결의 direct 또는 proxy 예외를 추가하고 광고 규칙보다 앞에 배치하세요. 곧바로 상위 도메인 전체를 허용하지 마세요. 일치 범위를 넓히기 전에 업무 흐름 하나를 처음부터 끝까지 확인합니다.

5. 요청과 로그로 출구 확인하기

‘웹페이지가 열렸다’는 것은 연결 가능한 경로가 있다는 뜻일 뿐, 규칙이 올바르게 적용됐다는 증거는 아닙니다. 요청 대상, 실제 연결 포트, 로그에 기록된 출구 태그를 함께 확인하세요. 클라이언트 속도 테스트는 보통 노드를 검사하는 기능이며, 브라우저의 현재 요청이 의도한 대로 분기됐다는 뜻은 아닙니다.

  1. 라우팅 설정을 저장하고 코어를 다시 불러온 뒤 설정 오류가 없는지 확인합니다. 필요한 경우 ‘설정’ → ‘매개변수 설정’에서 로그 상세도를 일시적으로 높입니다.
  2. 브라우저 캐시, 백그라운드 연결, 프록시 확장의 간섭을 피하도록 프록시를 명시한 명령으로 대상에 접속합니다.
  3. 중국 본토 도메인, 프록시 기본 경로에 해당하는 도메인, 현재 광고 목록에 포함된 것으로 확인된 테스트 도메인을 각각 점검합니다.
  4. 요청 시각을 기준으로 코어 액세스 로그의 출구 태그를 확인합니다. 현재 로그 수준에서 액세스 기록이 남지 않는다면 테스트 전에 로그 설정을 조정하세요.
curl --proxy http://127.0.0.1:10809 --connect-timeout 10 -I https://www.qq.com/
curl --proxy http://127.0.0.1:10809 --connect-timeout 10 -I https://example.com/
curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 -I https://example.com/

Windows 터미널에서 curl이 다른 명령으로 해석되면 curl.exe를 사용하세요. HTTP 프록시를 통한 HTTPS 접속은 보통 CONNECT로 대상 호스트를 전달합니다. socks5h도 도메인 확인을 프록시 서버에 맡깁니다. 따라서 도메인 규칙을 더 정확히 테스트하고, 이 기기에서 먼저 IP를 확인해 테스트 대상이 바뀌는 문제를 피할 수 있습니다. 명령 결과가 403 또는 405라고 해서 반드시 연결 실패를 뜻하지는 않습니다. 대상 서버의 응답과 출구 로그를 함께 확인하세요.

테스트 대상예상 태그문제 발생 시 우선 확인할 항목
www.qq.comdirect도메인 목록, 앞선 프록시 규칙
example.comproxy이 글의 전체 호스트 이름 규칙과 프록시 출구
광고 목록에 포함된 것으로 확인된 호스트block목록 내용, 허용 목록, 규칙 위치

위 표는 설정에 따른 예상 결과이며 이 사이트에서 측정한 네트워크 성능 결과가 아닙니다. 브라우저가 기존 연결을 재사용하면 규칙을 바꾼 뒤에도 새 결과가 바로 보이지 않을 수 있습니다. 기존 연결을 종료하거나 새 명령으로 요청을 보내세요. 테스트를 마치면 액세스 대상이 상세히 기록되지 않도록 평소 로그 수준으로 되돌립니다.

6. DNS·IP 규칙과 자주 발생하는 분기 문제

라우팅 판단과 DNS 조회는 서로 연관되어 있지만 같은 설정은 아닙니다. domainStrategy는 라우팅 규칙을 확인할 때 도메인을 언제 조회할지를 제어합니다. 사용할 DNS 서버를 직접 지정하거나 DNS 요청이 프록시를 거치도록 보장하지는 않습니다. 특히 필요할 때 IP를 기준으로 일치시키도록 설정한 경우, 잘못된 DNS 응답 때문에 원래 프록시를 사용해야 할 도메인이 중국 본토 IP 직접 연결 규칙에 걸릴 수 있습니다.

중국 본토 우회를 선택했는데 왜 중국 본토 사이트가 프록시로 연결되나요?

먼저 로그의 대상이 도메인인지 IP인지 확인한 다음, ‘설정’ → ‘라우팅 설정’에서 geosite:cn이 있는지, 앞선 프록시 규칙이 우선 적용되고 있지는 않은지 확인하세요. IP만 전달됐다면 도메인 규칙이 직접 일치할 수 없으므로 IP 규칙과 앱의 연결 방식을 점검합니다.

geoip:cn을 추가했는데 왜 도메인에는 적용되지 않나요?

domainStrategy를 확인하세요. AsIs는 라우팅을 위해 도메인을 직접 조회하지 않습니다. IPIfNonMatch를 사용하더라도 앞선 규칙이나 마지막의 일반 규칙이 이미 일치했을 수 있습니다. IP 기준 판별이 필요하다면 IPOnDemand를 검토하고 DNS 응답이 신뢰할 수 있는지도 확인하세요.

광고 규칙을 추가한 뒤 코어가 시작되지 않으면 어떻게 해야 하나요?

로그에서 목록을 찾을 수 없다는 오류나 출구 태그를 찾을 수 없다는 오류가 있는지 확인합니다. 먼저 새 규칙을 되돌려 연결을 복구한 다음, 현재 geosite.dat에 category-ads-all이 있는지, block이 실제 차단 출구에 연결되어 있는지 확인하세요.

브라우저는 잘 되는데 다른 앱에는 규칙이 전혀 적용되지 않나요?

먼저 127.0.0.1:10809을 명시한 명령으로 비교 테스트를 합니다. 명령이 정상이라면 라우팅 경로는 작동하는 것이므로, 해당 앱이 시스템 프록시를 지원하는지 확인하거나 앱 내부에 SOCKS를 설정하세요. 연결 방식 문제를 해결하려고 라우팅 순서를 반복해서 바꾸지는 마세요.

7. 규칙 저장 및 유지 관리

구독 노드와 라우팅 설정은 서로 다른 역할을 합니다. 노드는 원격 연결 정보를 제공하고 라우팅은 어떤 연결이 해당 정보를 사용할지 결정합니다. 구독을 갱신해도 geosite 및 geoip 데이터가 업데이트되는 것은 아니며, 라우팅 순서를 바로잡는 방법도 아닙니다. 코어를 바꾼 뒤에는 기존 설정이 그대로 작동한다고 가정하지 말고 규칙 문법, 데이터 파일, 출구 태그를 다시 확인하세요.

최종적으로는 근거를 따라 확인할 수 있는 판단 흐름이 필요합니다. 앱이 실제로 클라이언트에 연결됐는지, 규칙 순서가 의도한 대로인지, 대상에 명확한 태그가 적용됐는지, 해당 출구에서 연결할 수 있는지를 확인하세요. 이 네 가지를 설정과 로그에서 모두 확인해야 라우팅 오류, DNS 문제, 노드 연결 문제를 구분할 수 있습니다.