Xray 라우팅 규칙 완벽 분석: JSON 고급 분기 설정 가이드

Xray-core의 routing과 rules가 적용되는 순서, domainStrategy, geosite, geoip 활용법을 단계별로 설명합니다. 프록시·직접 연결·차단·DNS 분기용 JSON 예제를 제공하고, 사용자 정의 규칙 관리와 DNS 유출 방지, 로그 기반 장애 분석까…

Xray의 라우팅은 모든 트래픽을 하나의 프록시로 보내는 기능이 아니라, 도메인·IP·포트·네트워크 유형과 애플리케이션이 전달한 목적지 정보를 기준으로 연결을 여러 아웃바운드에 나누는 규칙 엔진입니다. v2rayN, v2rayNG, NekoBox 같은 그래픽 클라이언트의 기본 모드만으로도 간단한 직접 연결과 프록시 분기는 가능하지만, 업무용 도메인만 직접 연결하거나 특정 국가의 IP 대역을 별도로 처리하려면 Xray JSON의 routing 구조를 직접 이해해야 합니다.

이 글에서는 Xray 계열 코어에서 자주 사용하는 routing.rules, domainStrategy, balancers, DNS와 사용자 정의 규칙셋의 관계를 단계별로 설명합니다. 예시는 구조를 이해하기 위한 템플릿이므로 실제 서버 주소, UUID, 규칙셋 URL과 사용 중인 클라이언트의 코어 버전에 맞춰 검증해야 합니다. 규칙을 많이 추가하는 것보다 처리 순서와 예외 조건을 명확하게 만드는 것이 안정적인 라우팅의 핵심입니다.

本文速览

라우팅 규칙의 평가 순서와 도메인·IP 매칭 방식을 이해한 뒤, v2rayN과 v2rayNG에서 JSON을 적용하고 로그로 검증하는 방법을 다룹니다. 국내 직접 연결, 해외 프록시, 광고 차단, 사용자 정의 규칙셋을 안전하게 조합하려는 사용자에게 적합합니다.

Xray 라우팅의 기본 구조와 처리 순서

Xray는 먼저 인바운드로 들어온 연결에서 목적지 도메인, IP 주소, 포트와 프로토콜 관련 정보를 확인한 뒤 routing.rules를 위에서 아래로 검사합니다. 조건을 만족하는 첫 번째 규칙이 선택되면 해당 규칙의 outboundTag로 연결을 넘깁니다. 따라서 아래쪽에 있는 포괄적인 규칙은 위쪽의 세부 규칙에 도달할 기회를 빼앗을 수 있습니다. 예를 들어 마지막에 network: "tcp,udp"outboundTag: "proxy"를 넣었다면, 그 앞에 배치한 차단·직접 연결 규칙만 예외로 동작합니다.

앱 연결 요청인바운드 수신규칙 조건 검사아웃바운드 선택서버 연결

라우팅에서 자주 사용하는 대상 태그는 보통 direct, proxy, block 세 가지입니다. 이 태그는 이름 자체가 특별한 기능을 제공하는 것이 아니라, outbounds에 정의된 실제 출구를 가리키는 식별자입니다. 태그 이름이 서로 다르거나 오탈자가 있으면 규칙은 매칭되더라도 목적지를 찾지 못해 연결이 실패할 수 있습니다.

구성 요소 역할 확인할 부분
inbounds 클라이언트의 로컬 연결을 수신 HTTP, SOCKS, TUN 포트와 프로토콜
outbounds 직접 연결·프록시·차단 출구 정의 tag의 중복과 오탈자
routing.rules 목적지에 맞는 출구 선택 위에서 아래로 평가되는 순서
domainStrategy 도메인과 IP 조건을 판단하는 방식 결정 DNS 조회 시점과 IPv4·IPv6 정책

결론: 마지막 규칙은 가장 신중하게 작성하기

광범위한 프록시 규칙은 반드시 마지막에 두고, 차단·직접 연결·DNS 예외처럼 더 구체적인 조건을 먼저 배치하세요. 순서만 바꿔도 같은 JSON의 결과가 완전히 달라집니다.

도메인·IP·포트 조건을 조합하는 방법

domain 조건은 문자열을 단순 비교하는 방식이 아니라 Xray가 지원하는 여러 표현을 사용할 수 있습니다. domain:example.com은 해당 도메인과 하위 도메인을 대상으로 하고, full:example.com은 전체 도메인이 정확히 일치할 때 사용합니다. keyword:video는 도메인 이름에 특정 문자열이 포함된 경우를 찾으며, regexp:는 정규 표현식으로 세밀한 패턴을 지정합니다. 일반적인 분기에서는 관리가 쉬운 domain:과 규칙셋 기반 표현을 먼저 선택하는 편이 좋습니다.

ip에는 개별 주소, CIDR 대역과 내장 데이터베이스 표현을 넣을 수 있습니다. 예를 들어 geoip:private는 사설 네트워크 대역을 대상으로 하며, 환경에 따라 geoip:cn 같은 국가별 데이터베이스 규칙을 사용할 수 있습니다. 단, IP 조건을 사용하려면 Xray가 도메인을 실제 IP로 해석해야 할 수 있습니다. 이때 domainStrategyAsIs로 고정되어 있으면 도메인 기반 조건은 동작해도 IP 기반 조건은 기대와 다르게 동작할 수 있습니다.

국내 직접 연결

도메인
geosite:cn
IP
geoip:cn
출구
direct

도메인 조건을 IP 조건보다 먼저 두면 불필요한 DNS 조회를 줄일 수 있습니다.

나머지 프록시

네트워크
tcp,udp
포트
80,443
출구
proxy

포괄 규칙은 반드시 앞선 예외 규칙을 확인한 뒤 마지막에 추가하세요.

포트 조건은 문자열 또는 범위 형식으로 작성할 수 있으며, 웹 트래픽만 별도로 처리하려면 port: "80,443"처럼 지정할 수 있습니다. network 조건은 tcpudp를 구분합니다. 여러 조건이 하나의 규칙에 함께 들어가면 모든 조건을 만족해야 매칭됩니다. 즉, 특정 도메인과 특정 포트를 동시에 요구하면 대상 도메인이 맞더라도 다른 포트의 연결은 해당 규칙을 통과합니다.

JSON 규칙을 직접 작성하고 클라이언트에 적용하기

그래픽 클라이언트가 제공하는 기본 라우팅 모드는 내부적으로 JSON 설정을 생성합니다. 직접 편집할 때는 기존 설정 전체를 무작정 교체하지 말고, 먼저 현재 프로필을 복사해 백업한 뒤 routing과 필요한 DNS 항목만 비교하는 방식이 안전합니다. Xray 코어의 설정 형식은 버전에 따라 지원 필드가 달라질 수 있으므로, 적용 전에 v2rayN의 선택된 코어가 Xray인지, v2rayNG의 코어 메뉴에서 Xray가 활성화되어 있는지 확인하세요.

  1. 프로필 백업

    현재 사용하는 설정을 복사하고 노드 주소, 포트, 사용자 식별자와 전송 매개변수가 보존되었는지 확인합니다.

  2. 라우팅 열기

    v2rayN에서는 설정 편집 또는 JSON 전체 설정 메뉴를 열고, v2rayNG에서는 설정 프로필의 사용자 정의 JSON 편집 화면으로 이동합니다.

  3. 출구 태그 확인

    outboundsdirect, proxy, block이 실제로 존재하는지 확인합니다.

  4. 규칙 추가

    국내 도메인과 사설 IP 규칙을 위쪽에 배치하고, 해외 기본 출구 규칙은 마지막에 둡니다.

  5. 저장 후 검증

    JSON 형식 검사를 통과시킨 뒤 코어를 다시 시작하고, 로그와 실제 접속 결과를 함께 확인합니다.

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": [
          "geoip:private"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": [
          "geosite:cn"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": [
          "domain:example-work.net"
        ],
        "outboundTag": "proxy"
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "proxy"
      }
    ]
  }
}

위 예시에서 사설 IP를 먼저 직접 연결하도록 한 이유는 로컬 공유기, 프린터와 사내 장비 접근을 외부 프록시로 보내지 않기 위해서입니다. 그다음 국내 도메인을 직접 연결하고, 특정 업무 도메인은 프록시로 고정합니다. 마지막 규칙은 그 밖의 TCP·UDP 연결을 모두 프록시로 보내는 기본값입니다. 실제로 국내 IP를 직접 연결해야 하는 정책이라면 geoip:cn 조건을 별도 규칙으로 추가하되, DNS 응답과 데이터베이스의 최신성도 함께 점검해야 합니다.

DNS와 사용자 정의 규칙셋의 연결

라우팅과 DNS는 서로 다른 기능이지만 domainStrategy에 의해 함께 작동합니다. AsIs는 애플리케이션이 전달한 도메인을 우선 유지하므로 도메인 규칙 중심의 구성에 적합합니다. IPIfNonMatch는 도메인 조건에 매칭되지 않을 때 IP를 조회해 IP 규칙을 계속 검사합니다. IPOnDemand는 IP 판단이 필요한 시점에 더 적극적으로 주소를 조회할 수 있어, 규칙이 복잡하거나 조회량이 많은 환경에서는 DNS 요청과 지연 시간이 늘어날 수 있습니다.

국내 DNS와 원격 DNS를 나누려면 dns.servers의 조건부 서버와 라우팅 규칙을 함께 설계해야 합니다. DNS 서버를 직접 연결로 보낼지 프록시로 보낼지 결정하지 않으면, DNS는 정상 응답을 하더라도 실제 목적지 연결은 다른 출구를 사용할 수 있습니다. 특히 원격 DoH 주소를 도메인으로 입력하면서 그 도메인 해석도 같은 원격 경로에 의존하면 순환 문제가 생길 수 있으므로, 초기 연결에 필요한 주소는 고정 매핑이나 사용 가능한 로컬 해석 경로로 준비해야 합니다.

사용자 정의 규칙셋은 수십 개의 도메인을 JSON에 직접 나열하지 않고 외부 또는 로컬 파일로 관리하는 방법입니다. Xray 코어에서 지원하는 규칙셋 형식과 클라이언트 버전을 먼저 확인하고, 파일 변경 후 코어가 새 내용을 읽는 시점도 확인해야 합니다. 규칙셋이 너무 크거나 중복 항목이 많으면 시작 시간과 메모리 사용량이 늘어날 수 있습니다. 업무 서비스처럼 반드시 연결되어야 하는 도메인은 거대한 목록에 의존하기보다 별도의 짧은 예외 규칙으로 위쪽에 두는 편이 장애 원인을 찾기 쉽습니다.

추천 운영 방식: 기본 규칙과 예외 규칙 분리

기본 규칙
  • 사설 IP는 직접 연결
  • 국내 도메인은 직접 연결
  • 나머지는 프록시
예외 규칙
  • 업무 도메인은 별도 출구
  • 광고 도메인은 차단
  • DNS 필수 주소는 먼저 허용

예외를 위쪽에 모으면 규칙셋을 업데이트해도 핵심 서비스의 동작을 추적하기 쉽습니다.

적용 후 로그로 문제를 좁히는 방법

라우팅 변경 후 인터넷이 전혀 되지 않는다면 규칙을 더 추가하기 전에 JSON 문법과 태그 연결부터 확인하세요. 쉼표 누락, 중괄호 위치 오류, 존재하지 않는 outboundTag는 코어 시작 자체를 막는 대표적인 원인입니다. 코어가 시작되지만 일부 사이트만 실패한다면 도메인 매칭 방식, DNS 해석 결과, 포트와 네트워크 조건을 순서대로 점검해야 합니다.

报错: failed to find an available destination

원인과 해결: 목적지 또는 출구 태그를 찾지 못한 상태입니다. 대상 도메인 철자와 outboundstag가 정확히 일치하는지 확인하세요.

报错: unknown rule type

원인과 해결: 현재 코어가 해당 규칙 형식을 지원하지 않을 수 있습니다. 코어 버전을 확인하고 기본 field 규칙으로 단순화해 재시험하세요.

报错: lookup failed

원인과 해결: DNS 조회 또는 DNS 서버까지의 연결이 실패한 것입니다. queryStrategy, DNS 주소와 DNS 요청의 출구를 확인하세요.

报错: connection refused

원인과 해결: 선택된 서버 포트가 닫혀 있거나 잘못된 출구를 사용하고 있습니다. 노드 주소·포트와 마지막 매칭 규칙을 함께 확인하세요.

검증할 때는 한 번에 하나의 조건만 바꾸는 것이 중요합니다. 먼저 모든 트래픽을 direct로 보내 인바운드와 로컬 포트가 정상인지 확인한 뒤, 특정 도메인 하나만 proxy로 보내 출구를 검증합니다. 이후 국내 도메인, 사설 IP, UDP 순서로 규칙을 추가하면 어느 단계에서 문제가 생겼는지 쉽게 좁힐 수 있습니다. v2rayN과 v2rayNG 모두 코어 로그에서 연결 대상과 실패 원인을 확인할 수 있으므로, 브라우저의 “페이지를 표시할 수 없음”만으로 판단하지 마세요.

자주 묻는 질문

규칙을 추가했는데 국내 사이트도 프록시로 갑니다?

국내 도메인 규칙이 기본 프록시 규칙보다 아래에 있는지 확인하세요. 규칙은 위에서 아래로 평가되므로 geosite:cn을 포괄 규칙보다 위로 올리고 코어를 다시 시작합니다.

domainStrategy는 무엇으로 시작해야 하나요?

도메인 규칙을 우선 사용하고 매칭되지 않은 대상만 IP로 확인하려면 IPIfNonMatch가 이해하기 쉬운 출발점입니다. IPv6 연결이 불안정하면 DNS의 주소 조회 전략도 함께 확인하세요.

규칙셋을 많이 넣을수록 분기가 정확해지나요?

그렇지 않습니다. 중복과 오래된 항목은 예외를 가리고 관리 비용을 높입니다. 핵심 서비스는 짧은 수동 규칙으로 우선 처리하고, 넓은 범주의 목록만 규칙셋으로 관리하세요.

JSON을 수정한 뒤 연결이 모두 끊겼습니다?

백업한 프로필로 되돌려 코어가 시작되는지 먼저 확인하세요. 이후 태그, 쉼표, 괄호를 검사하고 규칙을 한 개씩 다시 추가하면 전체 설정을 새로 작성하는 것보다 안전합니다.

v2rayN 다운로드