설정大全

V2Ray 설정 파일 참고大全

JSON 구조 총괄부터 inbounds 인바운드, outbounds 아웃바운드, routing 라우팅 규칙, dns 설정, policy 정책까지 항목별로 자세히 설명하고, 실제 사용 가능한 설정 예제를 통해 v2rayN 및 v2rayNG의 내부 설정 메커니즘을 체계적으로 이해할 수 있도록 돕습니다.

JSON 구조 설정 상세 해설 실제 예제

JSON 구조 총괄: 설정 파일은 어떻게 구성되는가

V2Ray의 핵심 설정 파일은 JSON 형식을 사용합니다. 이는 구조가 명확하고 기계가 파싱하기 쉬운 텍스트 형식입니다. v2rayN이든 v2rayNG이든 내부적으로는 V2Ray 코어가 이 설정을 파싱합니다. JSON 구조를 이해하는 것은 문제 해결과 동작 변경의 기초입니다. 설정 파일은 일반적으로 config.json이라는 이름을 가지며 클라이언트의 설정 디렉터리에 저장됩니다.

V2Ray 설정 파일의 최상위 필드는 총 6개입니다: log 로그 설정, inbounds 인바운드 설정, outbounds 아웃바운드 설정, routing 라우팅 설정, dns 도메인 해석 설정, policy 정책 설정. 이 중 inboundsoutbounds는 필수 필드이며 나머지는 모두 선택 사항입니다. 또한 원격 제어를 위한 api 필드도 있지만 자주 사용되지는 않습니다.

최상위 필드 목록

아래 표는 V2Ray 설정 파일의 모든 최상위 필드와 그 역할을 정리한 것입니다. 이 필드들 간의 관계를 이해하는 것이 설정을 읽는 첫걸음입니다.

필드명 필수 여부 역할
log 아니요 로그 출력 레벨, 로그 파일 경로 제어
inbounds 로컬 또는 원격 인바운드 연결 진입점 정의
outbounds 트래픽 아웃바운드 채널 정의, 즉 프록시 서버 또는 직접 연결
routing 아니요 트래픽 분기 규칙 정의, 트래픽이 어떤 아웃바운드로 갈지 결정
dns 아니요 도메인 해석 서버와 해석 전략 정의
policy 아니요 연결 시간 초과, 연결 수 제한 등의 동작 정책 정의

설정 파일 로딩 메커니즘

코어가 시작될 때 config.json을 읽고 순서대로 각 필드를 파싱합니다. 특정 필드가 없으면 코어는 기본값을 사용합니다. 예를 들어 dns 필드가 없으면 코어는 시스템 기본 DNS 해석 방식을 사용하고, routing 필드가 없으면 모든 트래픽이 첫 번째 아웃바운드로 향합니다. v2rayN에서는 노드를 전환하거나 설정을 변경할 때마다 프로그램이 백그라운드에서 새로운 config.json을 생성하고 코어를 재시작합니다.

따라서 사용자가 설정 파일을 수동으로 편집한 후 인터페이스 설정이 변경되면 수동으로 수정한 내용이 덮어써집니다. v2rayN은 '설정 디렉터리 열기' 기능을 제공하여 사용자가 설정 파일을 직접 편집할 수 있게 하지만, 편집 전에 코어를 먼저 중지해야 합니다. v2rayN의 '설정' → '매개변수 설정'에서 '설정 디렉터리' 관련 항목을 찾을 수 있습니다.

JSON 문법 주의사항

JSON 표준 자체는 주석을 지원하지 않지만 V2Ray 코어는 파싱할 때 ///* */ 주석을 무시합니다. 따라서 설정 파일에 주석을 포함하여 가독성을 높일 수 있습니다. 그러나 v2rayN이 자동 생성한 설정에서는 주석이 제거됩니다. 설정을 수동으로 편집할 때는 주석을 유지하되 주석을 기능 로직의 일부로 의존하지 않는 것이 좋습니다.

흔한 실수는 쉼표 누락이나 따옴표 불일치입니다. JSON은 객체와 배열 내부에서 쉼표로 요소를 구분하고 마지막 요소 뒤에는 쉼표를 둘 수 없습니다. 설정을 수동으로 편집할 때는 JSON 문법 하이라이팅을 지원하는 편집기(예: VS Code)를 사용하는 것이 좋습니다. 이렇게 하면 문법 문제를 빠르게 발견할 수 있습니다.

문법 외에도 필드의 값 타입도 실수하기 쉽습니다. 예를 들어 port는 문자열이 아니라 숫자여야 하고 udp는 문자열이 아니라 불리언이어야 합니다. 타입이 잘못되면 코어는 JSON을 파싱할 수는 있지만 실행 중에 오류를 발생시킵니다. 따라서 설정을 수동으로 편집할 때는 문법뿐만 아니라 각 필드의 타입이 코어 요구 사항에 맞는지도 확인해야 합니다.

또한 V2Ray 코어는 설정을 파싱할 때 알 수 없는 필드에 대해 관대하여 인식하지 못하는 필드는 무시합니다. 이는 설정에 어떤 필드를 추가로 작성해도 코어가 오류를 내지 않지만 해당 필드는 적용되지 않는다는 뜻입니다. 어떤 설정이 작동하지 않는다면 먼저 필드명 철자가 맞는지 확인한 다음 해당 필드가 현재 코어 버전에서 지원되는지 확인하세요.

inbounds 인바운드 설정: 트래픽 진입점을 어떻게 여는가

인바운드(inbounds)는 V2Ray 코어가 외부에 서비스를 제공하는 진입점입니다. v2rayN은 기본적으로 SOCKS 인바운드와 HTTP 인바운드 두 개를 생성하여 서로 다른 유형의 클라이언트 연결을 지원합니다. '매개변수 설정'에서 사용자는 이 두 인바운드의 리스닝 포트를 수정할 수 있습니다. 인바운드 설정의 핵심 필드는 port 리스닝 포트, listen 리스닝 주소, protocol 인바운드 프로토콜, settings 프로토콜 설정입니다.

일반적인 인바운드 프로토콜로는 socks, http, vmess, trojan 등이 있습니다. 로컬 프록시 시나리오에서는 sockshttp가 가장 많이 사용됩니다. v2rayN은 기본적으로 SOCKS 인바운드를 주 진입점으로 사용하고 HTTP 인바운드를 호환 진입점으로 사용하며, 둘 다 로컬 루프백 주소를 동시에 리스닝합니다.

{
  "inbounds": [
    {
      "port": 10808,
      "listen": "127.0.0.1",
      "protocol": "socks",
      "settings": {
        "udp": true,
        "auth": "noauth"
      }
    },
    {
      "port": 10809,
      "listen": "127.0.0.1",
      "protocol": "http",
      "settings": {
        "timeout": 300
      }
    }
  ]
}

SOCKS 인바운드 상세 해설

SOCKS 인바운드의 settings에서 udp 필드는 UDP 포워딩 지원 여부를 제어합니다. UDP를 활성화하면 코어가 SOCKS 프로토콜을 통해 UDP 트래픽을 포워딩합니다. 이는 게임, 화상 통화 등 UDP 기반 애플리케이션에 필요합니다. auth 필드는 인증 방식을 제어하며 noauth는 인증이 필요 없음을 의미하여 로컬 프록시에 적합합니다. 로컬 네트워크의 다른 장치가 허가 없이 프록시를 사용하는 것을 방지하려면 password로 설정하고 사용자 이름과 비밀번호를 구성할 수 있습니다.

HTTP 인바운드 상세 해설

HTTP 인바운드의 settings에서 timeout 필드를 구성할 수 있으며 이는 연결 시간 초과(초)를 나타냅니다. HTTP 인바운드는 일반적으로 SOCKS 프로토콜을 지원하지 않는 애플리케이션과의 호환을 위해 사용됩니다. v2rayN에서는 두 인바운드가 기본적으로 127.0.0.1을 리스닝하며, 즉 로컬 머신에서만 연결할 수 있습니다.

다중 인바운드 설정과 로컬 네트워크 공유

설정 파일에서 inbounds는 배열이며 여러 인바운드를 동시에 구성할 수 있습니다. 각 인바운드는 독립적인 포트와 프로토콜을 가집니다. v2rayN의 '매개변수 설정'에는 '로컬 네트워크에서의 연결 허용' 옵션이 있으며, 이를 활성화하면 인바운드의 listen 주소가 127.0.0.1에서 0.0.0.0으로 변경되어 로컬 네트워크의 다른 장치가 연결할 수 있게 됩니다. 이 기능은 휴대폰, TV 등 장치에 프록시를 공유해야 할 때 매우 유용합니다.

포트 충돌 문제 해결

구성된 포트를 다른 프로그램이 이미 사용 중이면 코어 시작이 실패합니다. v2rayN은 '포트가 사용 중입니다' 오류를 표시합니다. 이 경우 인바운드 포트를 변경하거나 해당 포트를 사용 중인 프로그램을 종료해야 합니다. Windows에서는 netstat -ano | findstr 10808 명령으로 포트 사용 현황을 확인한 다음 작업 관리자에서 해당 프로세스를 종료할 수 있습니다. 포트를 변경할 때는 브라우저 확장 프로그램 등 시스템의 다른 소프트웨어 프록시 설정도 함께 업데이트해야 합니다.

포트가 사용 중인 것 외에도 포트가 시스템에 의해 예약된 경우가 있습니다. Windows의 '제외된 포트 범위' 기능은 일정 범위의 포트를 예약하며, 구성된 포트가 예약 범위에 속하면 코어는 리스닝할 수 없습니다. 이 경우 다른 포트로 변경하거나 관리자 명령 프롬프트에서 netsh int ipv4 show excludedportrange protocol=tcp를 실행하여 예약된 포트 범위를 확인할 수 있습니다.

v2rayN에서 인바운드 포트를 변경한 후에는 시스템 프록시 설정도 함께 업데이트되었는지 확인하는 것이 좋습니다. 시스템 프록시가 여전히 이전 포트를 가리키면 브라우저가 정상적으로 인터넷에 접속할 수 없습니다. v2rayN은 노드를 전환하거나 설정을 변경할 때 일반적으로 시스템 프록시를 함께 업데이트하지만, 설정 파일을 수동으로 수정한 후에는 직접 확인해야 합니다.

outbounds 아웃바운드 설정: 트래픽 출구를 어떻게 정하는가

아웃바운드(outbounds)는 V2Ray 코어가 외부로 연결을 시작하는 채널입니다. v2rayN은 노드를 전환할 때 선택한 노드 프로토콜에 따라 해당 아웃바운드 설정을 생성합니다. 아웃바운드 프로토콜은 원격 서버와 통신하는 방식을 결정합니다. 일반적인 아웃바운드 프로토콜로는 vmess, vless, trojan, shadowsocks, freedom(직접 연결), blackhole(폐기)가 있습니다. vmessvless는 V2Ray 생태계 고유의 프로토콜이고 trojanshadowsocks는 범용 프록시 프로토콜입니다.

아웃바운드 설정에는 protocol 프로토콜 타입, settings 프로토콜 설정, streamSettings 전송 설정, mux 다중화가 포함됩니다. streamSettings는 전송 방식(tcp, ws, grpc 등)과 보안 설정(tls, reality)을 정의합니다. WebSocket을 사용할 때는 pathheaders를 지정해야 하고, TLS를 사용할 때는 serverNameallowInsecure를 지정해야 합니다.

vmess 아웃바운드 설정

{
  "outbounds": [
    {
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "example.com",
            "port": 443,
            "users": [
              {
                "id": "your-uuid-here",
                "alterId": 0,
                "security": "auto"
              }
            ]
          }
        ]
      }
    }
  ]
}

vmess 아웃바운드의 settings에는 vnext 배열이 포함되며 각 vnext 객체는 하나의 서버를 나타냅니다. address는 서버 주소, port는 서버 포트, users는 사용자 목록입니다. 각 사용자는 id(UUID), alterId(추가 ID), security(암호화 방식)를 가집니다. alterId는 새 버전 코어에서는 보안을 위해 0으로 설정하는 것이 좋습니다.

vless 아웃바운드 설정

vless 아웃바운드는 vmess와 유사하지만 vless 프로토콜 자체는 암호화를 제공하지 않으며 TLS 또는 REALITY 전송 보안에 의존해야 합니다. vless 아웃바운드의 settings에서 users 배열의 각 사용자는 id, encryption(암호화 방식, vless에서는 none으로 고정), flow(흐름 제어, 예: xtls-rprx-vision)를 포함합니다. 흐름 제어 필드는 vless 프로토콜 고유의 고급 기능으로 TCP 전송 성능을 최적화할 수 있습니다.

streamSettings 전송 설정

streamSettings는 아웃바운드 설정에서 가장 중요한 부분 중 하나입니다. 전송 방식(network)은 데이터가 어떻게 캡슐화되는지를 결정합니다. 일반적인 전송 방식으로는 tcp, ws(WebSocket), grpc, http/2 등이 있습니다. ws를 사용할 때는 pathheaders를 지정해야 하고, grpc를 사용할 때는 serviceName을 지정해야 합니다. 보안 설정(security)은 none, tls 또는 reality가 될 수 있습니다. TLS를 사용할 때 serverName은 서버의 인증서 도메인과 일치해야 합니다.

mux 다중화

mux 필드는 다중화 활성화 여부를 제어합니다. 활성화하면 하나의 TCP 연결이 여러 동시 요청을 전달할 수 있어 연결 설정 오버헤드를 줄이고 약한 네트워크 환경에서 연결 안정성에 도움이 됩니다. muxenabled 필드는 기본적으로 꺼져 있으며 v2rayN에서는 '매개변수 설정' → '다중화'에서 활성화할 수 있습니다. 다중화는 많은 단기 연결 시나리오에 적합하지만 모든 서버가 지원하는 것은 아니므로 활성화하기 전에 테스트하는 것이 좋습니다.

다중화의 핵심 매개변수는 concurrency이며, 이는 단일 연결에서 동시에 처리할 수 있는 최대 요청 수를 나타냅니다. 기본값은 8이며 필요에 따라 조정할 수 있습니다. 특정 서버가 동시 연결 수에 제한이 있는 경우 너무 큰 concurrency는 오히려 서버 측에서 연결이 거부될 수 있습니다. 따라서 다중화를 활성화한 후에는 먼저 일정 기간 관찰하여 연결이 안정적인지 확인한 다음 매개변수를 조정하는 것이 좋습니다.

다중화와 일부 프로토콜(예: REALITY)의 호환성은 테스트가 필요합니다. 일부 서버는 다중화를 활성화하면 연결 이상이 발생할 수 있습니다. 이 경우 다중화를 끄거나 concurrency 값을 낮추는 것을 시도할 수 있습니다.

routing 라우팅 규칙: 트래픽을 어떻게 분기하는가

라우팅 규칙(routing)은 V2Ray의 핵심 기능 중 하나로 트래픽을 어떻게 분기할지 결정합니다. routing 필드에는 rules 규칙 목록과 strategy 전략이 포함됩니다. 각 규칙은 일치 조건과 해당 아웃바운드를 정의합니다. 규칙 일치 조건에는 domain 도메인 일치, ip IP 주소 일치, port 포트 일치, network 네트워크 유형 일치, inboundTag 인바운드 태그 일치가 있습니다.

규칙 일치는 위에서 아래로 순서대로 진행되며 첫 번째로 일치하는 규칙이 적용됩니다. 모든 규칙이 일치하지 않으면 트래픽은 첫 번째 아웃바운드(일반적으로 프록시)로 향합니다. 따라서 라우팅 규칙을 구성할 때는 규칙의 배열 순서에 주의해야 합니다. v2rayN이 기본 생성하는 라우팅 규칙은 '로컬 네트워크 우회'와 '중국 본토 우회'를 앞에 배치하여 이러한 트래픽이 먼저 직접 연결되도록 합니다.

일반적인 규칙 예제

{
  "routing": {
    "rules": [
      {
        "type": "field",
        "ip": [
          "10.0.0.0/8",
          "192.168.0.0/16",
          "172.16.0.0/12"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": [
          "geosite:cn"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": [
          "geosite:geolocation-!cn"
        ],
        "outboundTag": "proxy"
      }
    ]
  }
}

위 예제에서 첫 번째 규칙은 사설 IP 주소 대역과 일치하여 직접 연결로 보내고, 두 번째 규칙은 중국 본토 도메인과 일치하여 직접 연결로 보내며, 세 번째 규칙은 중국 본토가 아닌 도메인과 일치하여 프록시로 보냅니다. 여기서는 geosite:cngeosite:geolocation-!cn 같은 사전 정의된 도메인 집합을 사용하며, 이는 V2Ray 코어에 내장되어 있어 수동으로 유지 관리할 필요가 없습니다.

도메인 일치 방식

v2rayN에서 라우팅 규칙은 '설정' → '라우팅 설정'에서 구성할 수 있습니다. v2rayN은 '도메인 전략' 옵션을 제공하여 도메인 일치 방식을 제어합니다: as-is는 도메인을 그대로 사용하여 일치시키고, ip-if-non-match는 도메인이 어떤 규칙과도 일치하지 않으면 도메인을 해석하여 IP로 일치시키며, ip-on-demand는 필요할 때 도메인을 해석하여 IP 규칙과 일치시킵니다. ip-on-demand는 IP 규칙으로 분기해야 하는 시나리오에 적합하지만 DNS 해석 횟수가 증가합니다.

분기 전략

라우팅 규칙의 분기 전략에는 일반적으로 직접 연결(direct), 프록시(proxy), 거부(block) 세 가지가 있습니다. 직접 연결은 트래픽이 프록시 서버를 거치지 않고 대상 주소에 직접 연결됨을 의미하고, 프록시는 트래픽이 프록시 서버를 통해 전달됨을 의미하며, 거부는 트래픽을 직접 폐기함을 의미하며 광고 및 악성 웹사이트 차단에 자주 사용됩니다. v2rayN에서 directblock은 내장 아웃바운드 태그이므로 추가 구성이 필요 없습니다.

라우팅 규칙과 인바운드 태그

여러 인바운드를 구성한 경우 inboundTag 필드를 통해 특정 인바운드의 트래픽을 다른 아웃바운드로 분기할 수 있습니다. 예를 들어 로컬 네트워크 공유 인바운드에서 오는 트래픽은 직접 연결로, 로컬 SOCKS 인바운드에서 오는 트래픽은 프록시로 보낼 수 있습니다. 이 구성은 서로 다른 출처의 트래픽을 세밀하게 제어해야 할 때 매우 유용합니다.

inboundTag를 사용하기 전에 먼저 인바운드에 tag 필드를 구성해야 합니다. 예를 들어 inbounds에서 SOCKS 인바운드에 "tag": "socks-in"을 설정한 다음 라우팅 규칙에 "inboundTag": ["socks-in"]을 작성합니다. 이렇게 하면 해당 인바운드에서 오는 트래픽만 이 규칙과 일치합니다.

v2rayN에서 인바운드 태그는 일반적으로 프로그램이 자동 생성하므로 사용자가 직접 구성할 필요가 없습니다. 하지만 서로 다른 출처의 트래픽 흐름을 세밀하게 제어해야 한다면 이 메커니즘을 이해하는 것이 큰 도움이 됩니다.

dns 설정: 도메인 해석을 어떻게 처리하는가

DNS 설정(dns)은 V2Ray가 도메인을 어떻게 해석할지 결정합니다. dns 필드에는 servers 목록이 포함됩니다. 각 서버는 address(주소), port(포트), domains(도메인 목록)를 지정할 수 있습니다. V2Ray는 UDP, TCP, DoH(DNS over HTTPS), DoT(DNS over TLS)를 포함한 다양한 DNS 프로토콜을 지원합니다.

v2rayN에서 DNS 설정은 '매개변수 설정' → 'DNS'에 있습니다. v2rayN은 기본적으로 공용 DNS(예: 1.1.1.1)와 로컬 DNS(예: 223.5.5.5)를 포함한 DNS 서버 집합을 생성합니다. V2Ray는 목록 순서대로 DNS 서버를 차례로 시도하며 첫 번째 서버가 응답하지 않으면 다음 서버를 사용합니다.

{
  "dns": {
    "servers": [
      {
        "address": "1.1.1.1",
        "port": 53,
        "domains": [
          "geosite:geolocation-!cn"
        ]
      },
      {
        "address": "223.5.5.5",
        "port": 53,
        "domains": [
          "geosite:cn"
        ]
      },
      {
        "address": "localhost",
        "port": 53
      }
    ]
  }
}

위 예제에서 1.1.1.1은 중국 본토가 아닌 도메인을 해석하고 223.5.5.5는 중국 본토 도메인을 해석하며 마지막 localhost는 폴백 역할을 합니다. 이러한 분기 전략은 국내 접속 속도를 높이고 해외 도메인 해석이 오염되지 않도록 보장합니다.

FakeDNS 원리와 구성

FakeDNS는 V2Ray의 특수 DNS 모드입니다. 활성화하면 DNS 쿼리를 받았을 때 V2Ray는 실제 DNS 해석을 기다리지 않고 예약된 네트워크의 가짜 IP(예: 198.18.0.0/15)를 즉시 반환합니다. 트래픽이 라우팅 규칙을 통과할 때 V2Ray는 대상 도메인을 기준으로 라우팅을 다시 일치시키고 아웃바운드에서 실제 도메인을 복원합니다. FakeDNS는 DNS 해석 지연을 크게 줄일 수 있어 특히 TUN 모드와 함께 사용하기에 적합합니다.

v2rayN에서 FakeDNS 모드는 '매개변수 설정' → 'DNS'에서 활성화해야 합니다. 활성화하면 v2rayN은 생성된 설정에 자동으로 fake-dns 서버를 추가합니다. FakeDNS와 일부 라우팅 규칙 조합은 충돌을 일으킬 수 있습니다. 예를 들어 IP 일치 규칙은 가짜 IP를 올바르게 일치시키지 못할 수 있습니다. 따라서 FakeDNS를 사용할 때는 IP 규칙보다 도메인 규칙을 우선 사용하는 것이 좋습니다.

DNS와 라우팅 규칙의 연동

DNS 설정과 라우팅 규칙은 긴밀하게 연동됩니다. 라우팅 규칙에서 geosite:cn 같은 도메인 집합을 사용하면 V2Ray는 일치시키기 전에 도메인을 해석해야 합니다. 이때 DNS 설정의 domains 필드는 V2Ray가 어떤 도메인에 어떤 DNS 서버를 사용할지 결정하는 데 도움이 됩니다. 합리적인 DNS 분기 전략은 DNS 오염의 영향을 줄이고 접속 속도를 향상시킬 수 있습니다.

FakeDNS를 사용하면 DNS 해석이 아웃바운드 단계로 지연되며 라우팅 규칙의 도메인 일치는 여전히 유효하지만 IP 일치는 실패할 수 있습니다. 따라서 FakeDNS와 라우팅 규칙을 동시에 사용한다면 도메인 규칙을 가장 앞에 배치하고 IP 규칙에 의존하지 않는 것이 좋습니다. 이렇게 하면 FakeDNS의 낮은 지연 시간을 누리면서도 정확한 분기를 보장할 수 있습니다.

또한 DNS 설정의 queryStrategy 필드는 쿼리할 IP 유형(IPv4, IPv6 또는 둘 다)을 제어할 수 있습니다. IPv6 환경이 불안정한 경우 UseIPv4로 설정하여 IPv6 해석 실패로 인한 연결 문제를 피할 수 있습니다.

policy 정책: 연결 동작을 어떻게 제어하는가

policy 정책 필드는 연결 동작을 제어하는 데 사용됩니다. levels 레벨 설정과 system 시스템 설정이 포함됩니다. system에서는 전역 연결 제한을 구성하며 connectionTimeout 연결 시간 초과, handshakeTimeout 핸드셰이크 시간 초과, maxConnections 최대 연결 수 등이 포함됩니다.

v2rayN에서는 '설정' → '매개변수 설정' → '정책'을 통해 이러한 값을 조정할 수 있습니다. 기본적으로 V2Ray는 시스템 기본값을 사용합니다. 대부분의 시나리오에서는 기본값으로 충분합니다. 그러나 높은 동시성이나 특수한 네트워크 환경에서는 시간 초과 값을 조정해야 할 수 있습니다.

system 시스템 설정 상세 해설

{
  "policy": {
    "system": {
      "connectionTimeout": 300,
      "handshakeTimeout": 60,
      "maxConnections": 0,
      "minPort": 0,
      "maxPort": 0
    },
    "levels": {
      "0": {
        "connIdle": 300,
        "uplinkOnly": 0,
        "downlinkOnly": 0,
        "statsUserUplink": false,
        "statsUserDownlink": false
      }
    }
  }
}

연결 시간 초과(connectionTimeout)는 TCP 연결을 설정하는 최대 대기 시간을 제어합니다. 연결 시간이 초과되면 코어는 오류를 반환하고 연결을 닫습니다. 핸드셰이크 시간 초과(handshakeTimeout)는 TLS 핸드셰이크의 최대 대기 시간을 제어합니다. 약한 네트워크 환경에서는 시간 초과 값을 적절히 늘리면 연결 안정성이 향상됩니다. maxConnections가 0이면 연결 수 제한이 없음을 의미합니다.

levels 레벨 설정

levels 레벨 설정은 사용자 레벨별로 다른 정책을 구성할 수 있게 합니다. 각 사용자는 level 필드를 가질 수 있으며 정책에서 레벨별로 연결 제한과 속도 제한을 구성할 수 있습니다. connIdle은 유휴 연결의 시간 초과(초)를 나타내며 이 시간을 초과하면 데이터 교환이 없는 연결이 닫힙니다. uplinkOnlydownlinkOnly는 연결에서 허용되는 업링크/다운링크 지속 시간을 나타내며 0이면 제한이 없음을 의미합니다.

v2rayN에서 사용자 레벨은 일반적으로 직접 노출되지 않지만 이 메커니즘을 이해하면 고급 설정을 이해하는 데 도움이 됩니다. 예를 들어 특정 노드에서 연결이 서버 측에 의해 자주 끊긴다면 서버가 connIdle 정책을 구성했고 클라이언트가 제때 하트비트 패킷을 보내지 않았을 수 있습니다.

정책과 연결 안정성

합리적인 policy 구성은 연결 안정성을 향상시킬 수 있습니다. 네트워크 환경이 좋지 않다면 connectionTimeout 값을 적절히 늘릴 수 있습니다. 연결이 서버 측에서 자주 조기에 종료된다면 connIdle 값을 늘릴 수 있습니다. 그러나 너무 큰 시간 초과 값은 더 많은 시스템 리소스를 차지하므로 실제 네트워크 환경에 따라 균형을 맞춰야 합니다.

v2rayN에서 policy 정책은 일반적으로 사용자가 수동으로 조정할 필요가 없으며 기본값이 대부분의 시나리오를 충족합니다. 하지만 약한 네트워크 환경에서 사용하거나 연결이 서버 측에서 자주 끊긴다면 '매개변수 설정' → '정책'에서 시간 초과 값을 적절히 늘려볼 수 있습니다. 조정 후에는 코어를 재시작하여 새 정책이 적용되도록 해야 합니다.

또한 levelsstatsUserUplinkstatsUserDownlink 필드는 사용자의 업링크/다운링크 트래픽 통계 여부를 제어합니다. 활성화하면 코어가 각 사용자의 트래픽 데이터를 기록하며 api 필드와 함께 조회할 수 있습니다. 그러나 통계 기능은 일정한 성능 오버헤드를 발생시키므로 트래픽 통계가 필요하지 않으면 꺼두는 것이 좋습니다.

종합 설정 예제: 실제로 사용 가능한 완전한 구성

아래에 SOCKS 인바운드 하나, HTTP 인바운드 하나, vmess 아웃바운드 하나, freedom 직접 연결 아웃바운드 하나, 라우팅 규칙과 DNS 설정을 포함한 완전한 설정 예제를 제공합니다. 이 구성은 V2Ray 코어에 직접 사용할 수 있으며 v2rayN이 생성하는 설정의 참고 자료로도 활용할 수 있습니다.

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "port": 10808,
      "listen": "127.0.0.1",
      "protocol": "socks",
      "settings": {
        "udp": true,
        "auth": "noauth"
      },
      "tag": "socks-in"
    },
    {
      "port": 10809,
      "listen": "127.0.0.1",
      "protocol": "http",
      "settings": {
        "timeout": 300
      },
      "tag": "http-in"
    }
  ],
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "example.com",
            "port": 443,
            "users": [
              {
                "id": "your-uuid-here",
                "alterId": 0,
                "security": "auto"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls",
        "tlsSettings": {
          "serverName": "example.com"
        }
      }
    },
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {}
    }
  ],
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": [
          "10.0.0.0/8",
          "192.168.0.0/16",
          "172.16.0.0/12"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": [
          "geosite:cn"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": [
          "geosite:geolocation-!cn"
        ],
        "outboundTag": "proxy"
      }
    ]
  },
  "dns": {
    "servers": [
      {
        "address": "1.1.1.1",
        "port": 53,
        "domains": [
          "geosite:geolocation-!cn"
        ]
      },
      {
        "address": "223.5.5.5",
        "port": 53,
        "domains": [
          "geosite:cn"
        ]
      },
      {
        "address": "localhost",
        "port": 53
      }
    ]
  }
}

구성 핵심 사항 항목별 해설

이 구성의 첫 번째 부분은 로그 레벨을 warning으로 정의하여 경고 및 오류 정보만 출력하고 잦은 로그 출력을 피합니다. 두 인바운드는 각각 10808 및 10809 포트를 리스닝하며 모두 로컬 루프백 주소에 바인딩되어 로컬 머신에서만 접근할 수 있도록 합니다.

아웃바운드 부분에는 세 개의 태그가 포함됩니다: proxy는 vmess 프로토콜로 원격 서버에 연결하며, 구성에서 TLS 암호화를 전송 보안으로 사용합니다; direct는 freedom 프로토콜로 직접 연결을 구현합니다; block은 blackhole 프로토콜로 트래픽을 폐기합니다. 라우팅 규칙은 사설 IP 대역과 중국 본토 도메인을 직접 연결로, 중국 본토 외 도메인을 프록시로 보냅니다.

DNS 설정에서 1.1.1.1은 중국 본토가 아닌 도메인을 해석하고 223.5.5.5는 중국 본토 도메인을 해석하며 localhost는 폴백 역할을 합니다. 이러한 구성은 DNS 오염의 영향을 효과적으로 줄이면서 국내 접속 속도를 보장합니다.

그래픽 클라이언트와 설정 파일: v2rayN / v2rayNG가 설정을 관리하는 방법

v2rayN과 v2rayNG는 모두 V2Ray 코어를 사용하지만 설정 파일을 관리하는 방식은 다릅니다. v2rayN은 Windows에서 실행되며 설정 파일은 사용자 디렉터리에 저장되고 노드를 전환할 때마다 config.json을 다시 생성합니다. v2rayNG는 Android에서 실행되며 설정은 앱 전용 디렉터리에 저장되고 여러 설정 파일을 지원합니다.

v2rayN의 설정 관리

v2rayN의 인터페이스 조작은 설정 파일의 각 필드를 생성합니다. 사용자가 '서버' 패널에서 노드를 추가하면 v2rayN은 노드를 전환할 때 해당 outbounds 설정을 생성합니다. 사용자는 '설정' → '라우팅 설정'에서 라우팅 규칙을 조정할 수 있으며 v2rayN은 이러한 설정을 routing 필드에 기록합니다. '매개변수 설정'에서는 인바운드 포트 변경, FakeDNS 활성화, 다중화 조정 등을 할 수 있으며 이러한 작업은 모두 생성된 설정 파일에 반영됩니다.

v2rayN은 '설정 디렉터리 열기' 기능을 제공하여 사용자가 설정 파일을 직접 편집할 수 있게 합니다. 그러나 사용자가 설정 파일을 수동으로 수정한 후 인터페이스에서 어떤 작업을 수행하면 v2rayN이 설정 파일을 다시 생성하여 수동으로 수정한 내용을 덮어씁니다. 따라서 설정을 수동으로 편집하기 전에 코어를 중지하고 편집이 끝난 후 다시 시작하는 것이 좋습니다.

v2rayNG의 설정 관리

v2rayNG의 설정은 Android 앱 전용 디렉터리에 저장되며 사용자는 '설정' → '설정 가져오기'를 통해 파일이나 구독에서 가져올 수 있습니다. v2rayNG는 여러 설정 파일을 지원하며 각 설정 파일은 서로 다른 노드와 설정을 포함할 수 있습니다. 설정 파일을 전환하면 v2rayNG는 해당 config.json을 다시 로드합니다.

v2rayNG에서 사용자는 '설정' → 'DNS' 및 '설정' → '라우팅'을 통해 DNS 및 라우팅 설정을 조정할 수 있습니다. v2rayNG도 FakeDNS 모드를 지원하며 활성화하면 생성된 설정에 fake-dns 서버가 추가됩니다. 고급 사용자를 위해 v2rayNG는 '설정 파일 편집' 기능을 제공하여 JSON 설정을 직접 수정할 수 있게 합니다.

구독과 설정 파일

두 클라이언트 모두 구독을 지원하며 구독 링크는 노드 목록을 자동으로 업데이트합니다. 구독 링크는 본질적으로 원격 JSON 목록이며 v2rayN과 v2rayNG는 주기적으로 이를 가져와 파싱합니다. 구독이 업데이트되면 클라이언트는 설정을 다시 생성합니다. 구독 링크 자체에는 라우팅 규칙과 DNS 설정이 포함되지 않으며 이러한 설정은 여전히 사용자가 클라이언트에서 수동으로 구성해야 합니다.

v2flyNG 사용자의 경우 설정 관리는 v2rayNG와 기본적으로 동일하지만 내부적으로 Xray 코어가 아닌 v2fly 코어를 사용합니다. 세 클라이언트는 설정 파일의 필드 구조가 동일하므로 동일한 config.json이 이론적으로 상호 교환되어 사용될 수 있지만 코어 버전 차이로 인한 필드 호환성 문제에 주의해야 합니다.

구독 링크에는 일반적으로 암호화된 정보가 포함되어 있으므로 다른 사람과 함부로 공유하지 마세요. 구독 링크가 유출되면 노드를 다른 사람이 사용하여 트래픽이 소모될 수 있습니다. 구독 링크를 주기적으로 교체하고 클라이언트에서 '구독 업데이트 알림'을 활성화하여 노드 변경 사항을 timely 파악하는 것이 좋습니다. 또한 구독 업데이트는 노드 목록을 덮어쓰므로 수동으로 노드를 추가한 적이 있다면 먼저 백업하는 것이 좋습니다.

일반적인 설정 오류와 문제 해결 방법

설정 오류는 V2Ray 사용에서 가장 흔한 문제 중 하나입니다. 일반적인 오류 유형과 해결 방법을 이해하면 문제 해결 시간을 크게 줄일 수 있습니다. 아래에 빈도가 높은 몇 가지 오류와 그에 해당하는 해결 방법을 나열합니다.

포트가 사용 중입니다

구성된 인바운드 포트를 다른 프로그램이 이미 사용 중이면 코어 시작이 실패합니다. v2rayN은 '포트가 사용 중입니다' 오류를 표시합니다. 해결 방법: 인바운드 포트를 변경하거나 해당 포트를 사용 중인 프로그램을 종료합니다. Windows에서는 netstat -ano | findstr 10808 명령으로 포트 사용 현황을 확인한 다음 작업 관리자에서 해당 프로세스를 종료할 수 있습니다.

포트를 변경했다면 시스템 프록시 설정도 함께 업데이트해야 합니다. Windows에서 시스템 프록시 설정은 '설정' → '네트워크 및 인터넷' → '프록시'에 있습니다. macOS에서 시스템 프록시 설정은 '시스템 환경설정' → '네트워크' → '고급' → '프록시'에 있습니다. SOCKS 포트와 HTTP 포트가 구성과 일치하는지 확인하세요.

JSON 문법 오류

설정 파일에 문법 오류가 있으면 코어 시작이 실패합니다. 일반적인 문법 오류로는 쉼표 누락, 따옴표 불일치, 괄호 비대칭이 있습니다. v2rayN에서는 '설정' → '설정 디렉터리 열기'를 통해 config.json을 찾아 텍스트 편집기로 문법을 확인할 수 있습니다. JSON 문법 하이라이팅을 지원하는 편집기를 사용하면 오류 위치를 빠르게 찾을 수 있습니다.

JSON 문법 오류를 찾는 팁

설정 파일이 길다면 설정 내용을 온라인 JSON 검증 도구에 붙여넣어 확인할 수 있습니다. 단, 실제 서버 정보를 설정에 남긴 채 제3자 도구에 업로드하지 않도록 주의하세요.

인증서 설정 오류

TLS 또는 REALITY를 사용할 때 인증서 설정 오류는 연결 실패를 초래합니다. 일반적인 오류로는 serverName이 인증서와 일치하지 않음, 인증서 만료, allowInsecure 설정 부적절 등이 있습니다. v2rayN에서는 '노드 설정' → '전송 보안'에서 인증서 설정을 확인할 수 있습니다. 자체 서명 인증서를 사용하는 경우 allowInsecuretrue로 설정해야 하지만 이는 보안을 저하시킵니다.

라우팅 규칙 오구성

라우팅 규칙을 잘못 구성하면 트래픽이 잘못된 채널로 이동합니다. 예를 들어 중국 본토 도메인을 실수로 프록시에 일치시키면 접속이 느려질 수 있습니다. 해결 방법: 로그에서 트래픽 흐름을 확인하고 라우팅 규칙의 배열 순서를 검사합니다. v2rayN에서는 '설정' → '라우팅 설정'에서 현재 적용 중인 라우팅 규칙을 확인할 수 있습니다. 규칙 순서가不合理하면 규칙의 배열을 조정할 수 있습니다.

또 다른 흔한 문제는 FakeDNS와 IP 규칙의 충돌입니다. FakeDNS를 활성화하면 V2Ray는 가짜 IP를 반환하며 이때 라우팅 규칙에 IP 일치 규칙이 포함되어 있으면 올바르게 일치하지 못할 수 있습니다. 해결 방법은 도메인 규칙을 우선 사용하거나 FakeDNS를 끄는 것입니다.

코어 시작 실패의 기타 원인

위의 원인 외에도 코어 시작 실패는 설정 파일 경로 오류, 권한 부족, 시스템에 필요한 런타임 라이브러리 부족 등으로 인해 발생할 수 있습니다. v2rayN에서는 '설정' → '코어 설정'에서 코어 경로가 올바른지 확인할 수 있습니다. 휴대용 버전을 사용하는 경우 코어 파일과 설정 파일의 경로 관계가 올바른지 확인해야 합니다.

로그에 코어 파일을 찾을 수 없다고 표시되면 v2rayN의 설정 디렉터리에 xray.exe 또는 v2ray.exe가 없다는 뜻입니다. 이 경우 클라이언트를 다시 다운로드하고 코어 파일이 완전한지 확인해야 합니다. 또한 백신 소프트웨어가 코어 파일을 실수로 삭제할 수 있으므로 코어가 반복적으로 '사라진다면' v2rayN 디렉터리를 백신 소프트웨어의 화이트리스트에 추가하세요.

또 다른 경우는 코어 파일은 존재하지만 버전이 클라이언트와 일치하지 않는 경우입니다. 예를 들어 v2rayN이 업데이트된 후 이전 코어가 새 설정 형식과 호환되지 않을 수 있습니다. 이 경우 '코어 설정'에서 '코어 업데이트'를 클릭하거나 해당 버전의 코어를 다시 다운로드하면 됩니다.

빠른 시작: 설치부터 연결까지

V2Ray를 처음 사용한다면 먼저 사용 가이드를 읽고 설치부터 연결까지의 기본 흐름을 이해하는 것이 좋습니다. 설정大全 페이지는 설정 파일 세부 사항에 중점을 두고 있어 문제가 발생했을 때 참고하기에 적합합니다.