설정 계층 / 매칭 순서 / 검증 및 롤백

V2Ray 고급 설정 가이드

데스크톱 설정은 v2rayN을 중심으로 설명하고, v2rayNG와 v2flyNG의 모바일 설정 범위도 다룹니다.

이 페이지는 필요한 내용을 찾아보는 참고 자료이며, 최초 연결 과정을 대신하지 않습니다. 아직 설치, 구독 가져오기, 연결 확인을 마치지 않았다면 먼저 빠른 시작 가이드를 읽어 보세요. 기본 연결을 확인한 다음 이 페이지를 참고해 그룹, 분할 라우팅, 네트워크 트래픽 가로채기를 설정하면 됩니다. 가이드의 고급 설정은 해당 항목에 맞춰 이 페이지에서 확인할 수 있습니다.

클라이언트 버전에 따라 메뉴 이름이 달라질 수 있습니다. 먼저 사용 중인 코어, 설정 유형, 실제 설정 메뉴를 확인한 뒤 해당 예시를 적용하세요. 서로 다른 코어의 설정 항목을 한 파일에 섞지 마세요.

설정 계층과 검증 기준

클라이언트 인터페이스, 프록시 코어, 운영체제 네트워크 설정은 서로 다른 계층입니다. v2rayN은 서버, 구독, 라우팅을 관리한 뒤 코어 실행 설정을 생성하거나 코어를 호출합니다. 시스템 프록시는 일부 앱이 로컬 프록시를 사용하도록 설정하며, TUN은 가상 네트워크 인터페이스를 통해 해당 조건에 맞는 트래픽을 가로챕니다. 인터페이스에 실행 중이라고 표시되어도 특정 시작 작업이 완료됐다는 뜻일 뿐입니다. DNS 조회, 라우팅, 원격 연결은 각각 따로 검증해야 합니다.

인터페이스 설정과 네이티브 설정 구분하기

일반 서버 항목은 보통 클라이언트가 설정을 생성하므로 인터페이스에서 조정할 수 있습니다. 사용자 지정 설정은 지정한 코어에 직접 전달될 수 있어 클라이언트의 라우팅, DNS, 포트 옵션이 더 이상 반영되지 않을 수도 있습니다. 수정하기 전에 현재 항목이 어느 유형인지 확인하세요. 이를 놓치면 인터페이스에서 저장했더라도 실제 실행 파일에는 변경 사항이 반영되지 않을 수 있습니다. 임시로 생성된 파일을 직접 수정하지 마세요. 서버를 바꾸거나 클라이언트를 다시 시작하면 임시 파일이 새로 생성될 수 있습니다.

이 가이드의 JSON 예시는 주로 Xray 스타일의 필드를 사용하며, ‘병합용 조각’은 단독 실행 설정이 아닙니다. v2rayNG는 주로 Xray 코어를 사용하고, v2flyNG는 V2Fly 코어 계열을 사용합니다. 필드 이름이 비슷하다고 해서 전체 설정을 서로 바꿔 쓸 수 있는 것은 아닙니다. v2rayN의 TUN 트래픽 가로채기 구성 요소와 프록시 코어는 별도로 실행될 수도 있습니다. 가로채기 측의 DNS 및 라우팅 문법은 현재 구성 요소를 확인하고 적용해야 하며, 프록시 코어의 필드를 그대로 가져다 쓰면 안 됩니다.

계층주요 역할먼저 확인할 항목
클라이언트 관리 계층구독, 항목, 설정 생성현재 항목 및 선택한 설정
프록시 코어 계층프로토콜, DNS, 라우팅 및 아웃바운드시작 오류 및 실제 아웃바운드 태그
시스템 네트워크 계층시스템 프록시, 가상 인터페이스, 라우팅프록시 진입점 및 인터페이스 연결 상태

재현 가능한 기본 연결 만들기

시작하기 전에 작동하는 설정을 백업하고 선택한 서버, 시스템 프록시 모드, 로컬 리스닝 포트, 라우팅 방식을 기록하세요. 구독 주소와 인증 정보는 공개 기록에 포함하지 마세요. 먼저 TUN을 끄고 시스템 프록시를 따르는 앱 하나로 대상에 접속한 다음, 클라이언트 로그에 해당 연결이 나타나는지 확인합니다. 기본 프록시가 정상 작동하지 않는 상태에서 FakeDNS, 사용자 지정 아웃바운드, 복잡한 분할 라우팅을 추가하면 원인을 구분하기 어려워집니다.

웹페이지 하나만 열어 보고 검증을 끝내지 마세요. 직접 연결해야 하는 사이트, 프록시를 통해 연결해야 하는 사이트, 로컬 또는 LAN 서비스를 각각 준비하는 것이 좋습니다. DNS 조회 여부, 연결 성공 여부, 로그에 표시된 아웃바운드를 각각 기록하세요. 브라우저 캐시가 DNS 변경 결과를 가릴 수 있고, 기존 연결이 이전 경로를 계속 사용할 수도 있습니다. 라우팅을 수정한 뒤에는 새 연결을 만들고, 필요하면 테스트 앱을 완전히 종료한 후 같은 조건에서 비교하세요.

한 번에 한 계층만 조정하기

구독을 정리한 다음 라우팅을 설정하고, 이어서 DNS를 조정한 뒤 마지막으로 TUN과 FakeDNS를 활성화하는 순서를 권장합니다. 변경 사항을 저장할 때마다 시작 로그를 확인하고 같은 접속 테스트를 반복하세요. 문제가 생기면 여러 설정을 한꺼번에 끄지 말고 방금 변경한 항목부터 되돌립니다. 그래야 규칙이 경로를 바꾼 것인지, DNS 결과가 달라진 것인지, 시스템 트래픽 가로채기 범위가 달라진 것인지 판단할 수 있습니다.

문제 해결 기록에는 클라이언트 이름, 사용 중인 코어, 설정 유형, 문제가 발생한 작업, 민감 정보를 가린 로그만 포함하면 됩니다. 클라이언트를 업데이트하려면 시스템에 맞는 설치 경로를 다운로드 센터에서 확인하세요. 기본 연결에서 계속 시간 초과가 발생한다면 먼저 문제 해결을 참고하세요. 업데이트가 문제 원인 파악을 대신하지는 않습니다. 특히 업데이트 전에 유일하게 작동하는 설정과 롤백 기록을 삭제하지 마세요.

구독 그룹 및 서버 필터링

구독 그룹의 가장 중요한 역할은 연결 프로토콜을 바꾸는 것이 아니라 출처를 분리하는 것입니다. 구독 출처마다 그룹을 따로 만들면 업데이트 범위, 항목 소속, 비활성화 범위를 명확하게 관리할 수 있습니다. v2rayN에서는 보통 ‘구독 그룹’ 관련 메뉴에서 이름과 주소를 추가하고, v2rayNG와 v2flyNG에서는 구독 설정에서 출처를 관리합니다. 클라이언트마다 메뉴 이름은 다를 수 있지만, 출처를 등록하고 해당 출처를 업데이트한 뒤 가져온 결과를 확인하는 순서는 같습니다.

출처별로 그룹을 만들고 표시 범위 정하기

그룹 이름은 ‘일상용 출처’, ‘예비 출처’, ‘수동 설정’처럼 용도를 나타내는 것이 좋습니다. 인증 정보, 전체 구독 주소, 결제 정보는 이름에 넣지 마세요. 비슷한 항목을 제공하는 출처라도 그룹은 분리해 두세요. 특정 출처의 업데이트가 중단되면 여러 출처가 섞인 목록에서 항목을 일일이 찾지 않고 해당 그룹만 비활성화할 수 있습니다. 수동 항목은 구독에서 생성된 항목과 섞이지 않도록 별도 그룹에 두는 편이 좋습니다.

구독 주소를 입력할 때는 전체 쿼리 매개변수를 그대로 유지하세요. 일부 구독은 주소에 포함된 토큰으로 계정을 식별하므로 물음표 뒤의 내용을 임의로 삭제하면 업데이트에 실패할 수 있습니다. QR 코드나 클립보드에서 가져오는 경우 앞뒤 공백, 줄바꿈, 전각 문자가 없는지 확인하세요. 인증 정보가 포함된 주소를 공개 변환 서비스에 입력하지 마세요. 형식 변환은 신뢰할 수 있는 로컬 방식으로 처리하고, 자세한 구조는 구독 링크 형식 안내를 참고하세요.

필터가 적용되는 단계 이해하기

‘검색’, ‘표시 필터링’, ‘가져오기 필터링’은 서로 다릅니다. 검색은 보통 목록에 표시되는 항목만 바꾸며 서버를 삭제하지 않습니다. 가져오기 필터링은 조건에 맞지 않는 항목을 현재 그룹에 아예 추가하지 않을 수 있습니다. 삭제는 로컬 항목 목록을 변경합니다. 조정하기 전에 옵션 설명을 읽고 다음 구독 업데이트에도 필터가 적용되는지 확인하세요. 확실하지 않다면 목록 검색을 사용하고, 구독 설정에 복잡한 표현식을 바로 입력하지 마세요.

현재 클라이언트가 정규식을 지원한다면 간단하고 범위가 분명한 규칙으로 이름을 필터링할 수 있습니다. 먼저 적은 수의 항목에서 확인한 뒤 전체 출처에 적용하세요. 구독 이름은 제공업체가 정하므로 접두사, 공백, 다양한 언어가 포함될 수 있습니다. 따라서 이름으로 필터링해도 실제 지리적 위치를 판별할 수는 없습니다. 필터 결과가 비어 있다면 먼저 필터를 해제하고 다시 업데이트해 원래 구독에 항목이 있는지 확인한 뒤 대소문자, 구분 기호, 표현식 문법을 점검하세요.

^(일상|예비)-
^(?!.*테스트).*$

위 두 줄은 서로 독립적인 정규식 예시입니다. 첫 번째는 ‘일상-’ 또는 ‘예비-’로 시작하는 이름을 찾고, 두 번째는 이름에 ‘테스트’가 포함된 항목을 제외합니다. 정규식 지원이 명시된 필드에서만 사용하세요. 일반 검색창에서는 이러한 기호가 정규식으로 처리되지 않을 수 있습니다. 이름 필터링은 목록 관리에만 쓰이며 프로토콜 호환성, 서비스 작동 여부, 예상한 경로를 보장하지 않습니다.

업데이트 후 항목 변경 사항 확인하기

지정한 그룹을 업데이트한 뒤에는 프로토콜 유형, 주소, 포트, 전송 방식이 제대로 해석됐는지 먼저 확인하세요. 항목 수가 달라진 것은 출처 변경, 필터 규칙, 형식 인식 차이 때문일 수 있으며 클라이언트가 설정을 잃었다는 뜻은 아닙니다. 그룹 전체가 사라지거나 비어 있다면 업데이트 응답과 파싱 오류를 먼저 확인한 뒤 이전 필터 조건을 복원하세요. 업데이트 버튼을 반복해서 눌러도 형식 호환성 문제는 해결되지 않으며, 출처 측 요청 제한이 걸릴 수 있습니다.

구독 항목의 이름이나 전송 매개변수를 직접 수정해 장기적인 변경 사항을 유지하려 하지 마세요. 다음 업데이트에서 수정 사항이 덮어써지거나 항목이 다시 생성될 수 있습니다. 임시 수정이 꼭 필요하다면 항목을 수동 그룹으로 복사하고 용도를 분명히 표시한 뒤 원본과 달라진 점을 기록하세요. 원본 구독은 그대로 유지해야 문제가 출처 데이터에서 비롯됐는지 로컬 수정에서 비롯됐는지 확인할 수 있습니다.

그룹을 바꿔도 현재 사용 중인 서버가 바뀌는 것은 아닐 수 있습니다. 업데이트 후에는 현재 선택된 항목을 다시 확인하세요. 특히 기존 항목이 삭제되거나 새로 생성된 경우에는 반드시 확인해야 합니다. 모바일에서는 변경 사항을 적용하기 위해 서비스를 다시 시작해야 할 수도 있습니다. 목록에서 선택 항목이 강조 표시되는 것만 믿지 말고 시작 로그의 실제 대상과 아웃바운드를 확인하세요. 목록 정리를 마친 뒤 라우팅을 설정해야 출처 관리 문제를 분할 라우팅 오류로 오인하지 않습니다.

라우팅 규칙 활용 및 매칭 순서

라우팅은 트래픽을 지정된 아웃바운드로 보내는 기능이지, 서버 프로토콜 매개변수를 수정하는 기능이 아닙니다. Xray 스타일 설정의 규칙은 보통 순서대로 확인하며 먼저 일치한 규칙이 경로를 결정합니다. 구체적인 도메인 규칙은 포괄적인 분류 규칙보다 앞에 두고, LAN 보호 규칙이 모든 트래픽을 프록시로 보내는 규칙에 가려지지 않도록 하세요. 일치하는 규칙이 없을 때의 기본 경로도 정해야 합니다. 네이티브 설정에서는 보통 첫 번째 아웃바운드가 기본 경로이며, 클라이언트가 생성한 설정은 실제 동작을 확인해야 합니다.

의도를 먼저 정하고 매칭 조건 작성하기

시작하기 전에 어떤 대상은 반드시 직접 연결하고, 어떤 대상은 반드시 프록시를 사용하며, 어떤 대상은 차단할지 세 가지로 나눠 자연어로 적어 두세요. 많은 규칙부터 넣고 결과를 보고 의도를 추측하지 마세요. v2rayN에서는 ‘라우팅 설정’에서 방식을 선택하고 규칙을 편집할 수 있습니다. 모바일의 기본 라우팅은 일반적인 분할 라우팅에 적합하며, 사용자 지정 규칙을 설정할 수 있는 메뉴는 클라이언트마다 다릅니다. 네이티브 설정 전체를 가져온다면 인터페이스의 라우팅 설정이 계속 반영되는지도 확인하세요.

도메인 매칭에서 full:은 전체 도메인을, domain:은 도메인과 하위 도메인을 매칭합니다. keyword:는 키워드를 확인하고 regexp:는 정규식을 사용합니다. 대상이 명확한 서비스에는 앞의 두 방식을 우선 사용해 무관한 도메인까지 키워드로 잘못 매칭하지 않도록 하세요. geosite:는 도메인 분류를, geoip:는 IP 주소 분류를 참조합니다. 해당 데이터 파일이 있고 참조하려는 분류가 포함되어 있어야 합니다.

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": ["full:example.com"],
        "outboundTag": "proxy"
      },
      {
        "type": "field",
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": ["geoip:cn"],
        "outboundTag": "direct"
      }
    ]
  }
}

이 라우팅 조각은 전체 설정에 병합해서 사용하며, direct와 proxy 두 아웃바운드가 이미 있다고 가정합니다. 예시에서는 전체 도메인 예외를 지역 분류보다 앞에 두어 뒤의 포괄적인 규칙이 해당 대상을 덮어쓰지 않도록 했습니다. 기본 아웃바운드를 정의하지 않으며 프록시 서버도 생성하지 않습니다. 단독 파일로 저장해도 실행할 수 없습니다. 사용할 때는 예시 도메인을 실제로 처리할 대상으로 바꾸고 기존 규칙과의 순서를 확인하세요.

도메인 조건과 IP 조건의 적용 범위

한 규칙 안에 여러 도메인이 있으면 보통 그중 하나만 일치해도 적용되지만, 서로 다른 유형의 조건은 일반적으로 모두 충족해야 합니다. 도메인과 IP를 한 규칙에 넣었다고 해서 ‘도메인 또는 IP 중 하나만 충족하면 된다’는 뜻은 아닙니다. 각각 따로 매칭하려면 규칙을 두 개로 나누세요. 도메인 정보가 실제로 존재하는지도 고려해야 합니다. 앱이 IP 주소에 직접 접속하면 도메인 규칙만으로 원래 도메인을 알아낼 수 없습니다. 스니핑도 모든 프로토콜에서 작동하지 않습니다.

AsIs는 라우팅을 위해 도메인을 별도로 조회하지 않습니다. IPIfNonMatch는 도메인 규칙이 일치하지 않을 때 IP 매칭을 위해 조회를 시도하며, IPOnDemand는 더 일찍 조회합니다. 여기서 제어하는 것은 라우팅 매칭에 필요한 조회 시점이지, 전체 DNS 프록시를 켜고 끄는 설정이 아닙니다. IP 분류 규칙을 사용한다면 DNS 요청이 어떤 경로로 나가는지도 점검하세요. 규칙이 올바르더라도 DNS 요청에 도달할 수 없으면 매칭 단계까지 진행되지 않을 수 있습니다.

로그에서 예외 규칙 적용 여부 확인하기

규칙을 저장한 뒤 새 연결을 만들고 대상 도메인, 매칭 결과, 아웃바운드 태그를 확인하세요. 특정 앱에서만 예상과 다르게 동작한다면 먼저 앱이 도메인과 IP 중 무엇을 프록시에 전달하는지, 자체 암호화 DNS를 사용하는지 살펴보세요. 모든 예외 규칙이 적용되지 않는다면 규칙 순서, 올바른 라우팅 방식이 로드됐는지, 태그 표기를 우선 확인하세요. 아웃바운드 태그는 문자열이 정확히 일치해야 하며, 설정에 없는 태그를 참조하면 유효한 경로를 만들 수 없습니다.

지역별 분할 라우팅에도 한계가 있습니다. 도메인 분류와 현재 조회된 IP 주소의 지역이 일치하지 않을 수 있고, 콘텐츠 전송 서비스가 연결마다 동적으로 경로를 선택할 수도 있습니다. 분류 데이터가 매번 연결의 실제 용도를 모두 반영한다고 가정하지 말고, 필요성이 분명한 대상에는 명시적인 예외를 설정하세요. 접두어와 규칙 우선순위에 대한 자세한 내용은 라우팅 문법과 우선순위 안내를 참고하세요. 설정 후 접속이 느려지면 먼저 기존 방식으로 되돌려 비교한 뒤 규칙을 추가할지 판단하세요.

DNS 설정 및 조회 경로

DNS 문제는 세 가지로 나눠 살펴봐야 합니다. 누가 조회를 시작하는지, 누가 조회를 처리하는지, 요청이 어떤 경로로 상위 DNS 서버에 도달하는지 확인하세요. 브라우저, 운영체제, 프록시 코어, TUN 트래픽 가로채기 구성 요소가 각각 DNS를 처리할 수 있습니다. 클라이언트에서 DNS 주소를 바꿔도 모든 앱이 즉시 해당 주소를 사용하는 것은 아닙니다. 앱 자체의 암호화 DNS, 시스템 캐시, 기존 연결이 관찰 결과에 계속 영향을 줄 수 있습니다.

내장 DNS의 역할부터 확인하기

프록시 코어의 내장 DNS는 보통 내부 도메인 조회, 라우팅 판단, 특정 아웃바운드 동작에 사용되며 시스템의 기본 DNS 서버로 자동 지정되는 것은 아닙니다. 시스템 프록시 모드에서는 일부 앱이 시스템 DNS로 먼저 조회한 뒤 IP를 프록시에 전달하고, 다른 앱은 도메인을 프록시 진입점에 전달합니다. 두 경로의 DNS 동작은 서로 다릅니다. 시스템 DNS 조회를 가로채려면 보통 TUN 측의 DNS 하이재킹이나 이에 해당하는 시스템 설정이 추가로 필요합니다.

v2rayN의 DNS 화면은 사용하는 코어에 따라 설정 항목이 나뉠 수 있습니다. v2rayNG의 원격 DNS, 로컬 DNS, 관련 라우팅 옵션도 현재 모드를 함께 고려해 해석해야 합니다. ‘원격’이라는 표현만 보고 트래픽이 반드시 프록시를 통과한다고 판단하지 마세요. 먼저 클라이언트 기본 설정을 유지한 채 일반 연결이 작동하는지 확인한 다음 상위 DNS 주소와 도메인별 라우팅을 조정하세요. DNS 설정을 전부 바꾸기 전에 기존 규칙과 보조 DNS 서버의 용도를 기록해 두세요.

{
  "dns": {
    "servers": [
      {
        "address": "223.5.5.5",
        "domains": ["geosite:cn"],
        "skipFallback": true
      },
      "1.1.1.1"
    ],
    "queryStrategy": "UseIP"
  }
}

이 Xray 스타일 DNS 조각은 도메인별 조회 서버와 대체 DNS 서버 설정을 보여 주며 모든 네트워크에 적합하다고 보장하지 않습니다. domains는 해당 도메인에 사용할 서버를 선택하고, skipFallback은 그 서버가 다른 도메인의 일반적인 폴백에 참여하지 않도록 합니다. 선택된 도메인이 다른 서버를 절대 시도하지 않는다는 뜻은 아닙니다. 전체 폴백 동작은 다른 옵션의 영향도 받습니다. 실제 설정에서 상위 DNS 서버에 연결할 수 있는지, 어떤 아웃바운드 경로를 쓰는지 확인해야 합니다.

암호화 DNS와 부트스트랩 조회

도메인 이름으로 지정된 암호화 DNS 서비스를 사용하려면 암호화 연결을 만들기 전에 먼저 해당 서비스 주소를 알아야 합니다. 이를 부트스트랩 조회 문제라고 합니다. 부트스트랩 조회가 아직 연결되지 않은 동일한 서비스를 거쳐야 한다면 순환 의존성이 생깁니다. 명확하게 도달할 수 있는 부트스트랩 경로를 사용하거나 현재 코어가 지원하는 정적 매핑 방식을 적용하세요. 일반 DNS 주소를 암호화 DNS 주소로 바꾸기만 하면 조회 경로가 완성된다고 가정하지 마세요.

원격 프록시 서버의 도메인도 이 경로에 포함됩니다. 서버 주소를 프록시를 통해서만 조회할 수 있고 프록시는 서버에 먼저 연결해야 한다면, 시작 과정이 선행 DNS 조회에서 멈출 수 있습니다. 문제를 해결할 때는 서비스가 시작되기 전에 서버 도메인을 조회할 수 있는지, 상위 연결이 자기 자신으로 잘못 되돌아오지 않는지 먼저 확인하세요. 암호화 DNS는 조회 전송을 보호할 뿐 라우팅, 서버 인증서, 잘못된 시스템 시간을 자동으로 바로잡지는 않습니다.

IPv4, IPv6 및 캐시의 영향

UseIP는 두 유형의 주소 결과를 모두 사용할 수 있게 하지만 시스템의 IPv6 연결이 정상이라는 뜻은 아닙니다. 네트워크가 IPv6 주소를 제공해도 외부 연결이 불가능하다면 앱이 연결 실패를 기다린 뒤 폴백하면서 첫 접속이 느려질 수 있습니다. IPv4와 IPv6의 실제 경로를 비교한 다음 IPv4 전용 조회 방식을 사용할지 결정하세요. 특정 조회 유형을 끄더라도 앱이 자체 조회를 하거나 IP를 직접 사용하는 동작까지 모두 막을 수는 없습니다.

DNS를 검증할 때 시스템 조회 도구로 확인한 결과는 시스템이 사용하는 DNS 서버의 동작만 보여 줄 수 있으며, 프록시 코어의 내장 DNS가 정상이라는 뜻은 아닙니다. 클라이언트 로그와 앱의 연결 기록도 함께 확인하세요. 설정을 바꾼 뒤에는 시스템, 브라우저, 코어의 캐시를 고려해야 합니다. 상위 DNS 서버를 계속 바꾸기보다 테스트 대상의 캐시를 하나씩 지우거나 재시작하는 편이 결과를 해석하기 쉽습니다. 캐시가 만료되지 않았다면 한 번 접속에 성공해도 새 DNS 서버가 조회에 참여했다고 볼 수 없습니다.

도메인 조회는 되지만 접속할 수 없다면 반환된 주소와 라우팅 아웃바운드가 일치하는지 계속 확인하세요. DNS 단계에만 머물러서는 안 됩니다. LAN의 짧은 호스트 이름만 작동하지 않는다면 검색 도메인과 로컬 DNS 서비스가 가로채기 대상인지 확인하세요. 사내 도메인, 프린터 이름, 가정용 네트워크 장치는 로컬 DNS에 의존할 수 있으므로 모두 공용 DNS 서버로 보내기보다 명확한 로컬 조회 예외를 설정하는 편이 좋습니다.

TUN 모드와 시스템 트래픽 가로채기

시스템 프록시는 프록시 설정을 따르는 프로그램에서만 작동합니다. TUN은 가상 네트워크 인터페이스를 만들고 시스템 라우팅과 함께 작동해 조건에 맞는 IP 트래픽을 가로채므로 시스템 프록시 설정을 읽지 않는 일부 앱도 처리할 수 있습니다. 그렇다고 모든 연결이 원격 서버로 강제 전송되는 것은 아닙니다. 트래픽을 가로챈 뒤에도 DNS, 규칙, 아웃바운드 선택을 거치며 최종적으로 직접 연결, 프록시 연결, 차단 중 하나로 처리됩니다.

활성화 전 기본 경로 확인하기

시스템 프록시 모드에서 같은 서버가 정상 작동하는지 먼저 확인한 뒤 기본 라우팅을 놓고 경쟁할 수 있는 다른 네트워크 가로채기 도구를 끄세요. v2rayN에서는 보통 메인 화면에서 TUN 설정으로 들어가 해당 스위치를 켭니다. 권한이 부족하다면 클라이언트 안내에 따라 다시 시작해야 합니다. 데스크톱 운영체제마다 가상 인터페이스, 라우팅 테이블, 방화벽의 권한 처리 방식이 다르므로 한 운영체제의 관리자 설정을 모든 플랫폼에 그대로 적용하지 마세요.

Android에서는 시스템 VPN 권한을 허용해 트래픽을 가로챕니다. v2rayNG와 v2flyNG는 서비스를 처음 시작할 때 필요한 권한을 요청합니다. 일반적으로 동일한 사용자 환경에서는 VPN 서비스를 한 번에 하나만 해당 위치에 사용할 수 있습니다. 시스템 권한을 사용하는 방식과 데스크톱 TUN의 구현 방식은 다르므로 데스크톱 가상 인터페이스 매개변수를 휴대폰에 그대로 가져오면 안 됩니다. 앱별 프록시를 설정했다면 허용하거나 제외한 앱 목록도 따로 확인하세요.

점검 항목시스템 프록시TUN 또는 시스템 VPN 가로채기
앱의 프록시 설정 준수 여부대체로 필요주로 가로채기 범위에 따라 결정
DNS 조회 처리 주체주로 앱 또는 시스템에서 처리DNS 가로채기 설정에 따라 다름
LAN 접속프록시 우회 설정의 영향을 받음시스템 라우팅 및 분할 라우팅 규칙의 영향을 받음
실행 권한보통 프록시 설정만 변경하면 됨인터페이스 또는 시스템 VPN 권한 필요

트래픽 루프와 LAN 오가로채기 방지

프록시 서버 자체의 연결은 실제 네트워크 인터페이스를 통해 나가야 하며, 같은 가로채기 진입점으로 다시 들어가서는 안 됩니다. 그러면 트래픽 루프가 생깁니다. 클라이언트가 필요한 우회 설정과 인터페이스 바인딩을 처리하는 경우가 많지만 사용자 지정 라우팅, 수동 게이트웨이 설정, 여러 트래픽 가로채기 프로그램이 이 조건을 깨뜨릴 수 있습니다. 활성화 직후 모든 연결이 끊기면 먼저 TUN을 종료하고 기본 프록시가 복구되는지 확인한 뒤 기본 라우팅, 서버 주소 우회, 실제 출구 인터페이스를 점검하세요.

LAN 직접 연결에는 두 가지 조건이 있습니다. 시스템 라우팅이 트래픽을 로컬 인터페이스로 보낼 수 있어야 하고, 프록시 규칙이 사설 주소를 직접 연결 아웃바운드로 지정해야 합니다. 두 번째 조건만 충족해도 첫 번째 조건의 경로가 바뀌면 프린터나 게이트웨이에 접속하지 못할 수 있습니다. 로컬 장치의 IP 주소로 먼저 테스트한 뒤 장치 이름으로도 접속해 보세요. IP로는 접속되지만 이름으로는 실패한다면 전체 라우팅을 더 수정하지 말고 로컬 DNS부터 확인하세요.

트래픽 가로채기 효과를 항목별로 확인하기

활성화한 뒤 브라우저, 원래 시스템 프록시를 따르지 않던 앱, LAN 서비스를 차례로 테스트하세요. 브라우저가 정상이라고 해서 모든 앱의 트래픽이 가로채졌다고 볼 수는 없습니다. 브라우저가 여전히 시스템 프록시를 사용할 수도 있기 때문입니다. 경로를 구분해야 한다면 통제된 테스트에서 시스템 프록시를 일시적으로 끄고 TUN만 확인하세요. 테스트가 끝나면 평소 사용할 설정으로 복원합니다. 두 진입점을 동시에 켜는 것이 항상 잘못된 것은 아니지만, 앱의 실제 경로를 판단하기 어려워집니다.

UDP 앱의 정상 작동은 서버 프로토콜, 원격 지원 여부, 로컬 방화벽에도 달려 있습니다. TUN만으로 이러한 기능이 추가되지는 않습니다. 일부 연결만 정상이고 나머지는 오래 응답하지 않는다면 먼저 문제가 UDP, IPv6, 큰 패킷 중 어디에 집중되는지 확인한 뒤 MTU를 점검할지 결정하세요. 비교 테스트 없이 MTU를 지나치게 낮추지 마세요. 분할과 처리 비용이 늘고 실제 원인은 해결되지 않을 수 있습니다.

TUN을 종료한 뒤에도 네트워크가 복구되지 않으면 먼저 클라이언트에서 서비스를 정상적으로 중지한 다음 시스템 프록시 설정, 남아 있는 가상 인터페이스, 잘못된 라우팅이 있는지 확인하세요. 모든 네트워크 인터페이스를 바로 삭제하거나 방화벽을 장기간 끄지 마세요. 자세한 활성화 절차는 v2rayN TUN 가상 네트워크 어댑터 설정을 참고하고, 모바일에서 시간 초과가 발생한다면 연결 시간 초과 점검 순서를 따라가며 원인을 찾을 수 있습니다.

FakeDNS 및 도메인 매핑

FakeDNS는 조회된 도메인에 합성 IP를 할당하고 내부적으로 도메인과 주소의 매핑을 관리합니다. 앱이 해당 주소로 연결하면 트래픽 가로채기 구성 요소가 원래 도메인을 복원한 뒤 도메인별 라우팅을 적용하거나 프록시 아웃바운드에 넘겨 조회하도록 할 수 있습니다. 합성 주소는 대상 서버의 실제 주소가 아니며 새로운 원격 서버도 아닙니다. 앱이 먼저 실제 IP를 조회해 도메인 정보를 잃는 상황을 줄이고 도메인 정보를 유지하는 데 도움이 됩니다.

매핑 경로 전체가 갖춰져야 활성화 가능

FakeDNS가 작동하려면 최소 세 가지가 함께 구성되어야 합니다. 조회가 지정된 DNS 서버에 전달되고, 합성 주소로 연결되는 트래픽이 같은 가로채기 경로에 포착되며, 연결 처리 단계에서 도메인을 복원할 수 있어야 합니다. DNS 서버 목록에 이름만 추가하고 해당 트래픽을 가로채지 않으면 앱이 합성 IP를 일반 게이트웨이로 직접 보낼 수 있습니다. 반대로 스니핑만 설정해도 시스템 DNS 조회가 자동으로 FakeDNS에 전달되지는 않습니다.

먼저 합성 주소를 담당할 구성 요소를 정하세요. v2rayN의 TUN 트래픽 가로채기 구성 요소에 자체 가짜 IP 기능이 있다면 Xray FakeDNS를 무작정 추가로 켜지 마세요. 두 구성 요소가 각각 주소를 할당하고 캐시를 관리하면 도메인을 복원할 때 매핑을 찾지 못할 수 있습니다. v2rayNG와 v2flyNG도 메뉴와 지원 범위가 다르므로 현재 코어와 클라이언트 기능을 확인해야 합니다. 설정 이름이 비슷하다고 구현 방식도 같다고 추정하지 마세요.

{
  "fakedns": [
    {
      "ipPool": "198.18.0.0/15",
      "poolSize": 65535
    }
  ],
  "dns": {
    "servers": ["fakedns"]
  }
}

이 Xray 스타일 기능 조각은 전체 DNS 가로채기 설정이 아닙니다. 주소 풀은 테스트 전용 주소 범위를 사용하지만 현재 환경에서 충돌이 발생하지 않는다는 뜻은 아닙니다. LAN, 기업 네트워크 또는 다른 가상 인터페이스가 이미 해당 범위를 사용한다면 먼저 설정을 조정하세요. 주소 풀 크기는 매핑 용량을 결정하며 동시 연결 수의 상한과는 다릅니다. 용량을 늘려도 DNS 조회를 가로채지 못하거나 매핑을 복원하지 못하는 문제는 해결되지 않습니다.

인바운드 복원 및 스니핑의 한계

Xray가 해당 트래픽을 직접 처리하는 방식이라면 관련 인바운드에서도 FakeDNS에 맞는 복원 기능을 활성화해야 합니다. 설정은 합성 주소 연결을 수신하는 인바운드에 적용해야 하며 아무 리스닝 진입점에나 설정해서는 안 됩니다. 아래는 일반적인 스니핑 조각입니다. 실제 인바운드 구조에 맞춰 사용해야 합니다. 상위 단계에서 트래픽 가로채기 구성 요소가 이미 도메인을 복원한다면 해당 구성 요소의 설정 방법을 따르세요.

{
  "sniffing": {
    "enabled": true,
    "destOverride": ["fakedns"]
  }
}

일반 HTTP 또는 TLS 스니핑과 FakeDNS 매핑은 서로 다른 출처의 정보입니다. 전자는 앱 프로토콜에서 도메인을 추출하려 하고, 후자는 이전 조회 기록에 의존합니다. 일부 프로토콜, 암호화 핸드셰이크 방식, IP 직접 요청에서는 사용할 수 있는 도메인을 얻지 못할 수 있습니다. 스니핑이 모든 대상의 이름을 반드시 복원한다고 생각해서는 안 됩니다. 스니핑이 라우팅에만 영향을 주는지 연결 대상을 바꾸는지도 현재 코어의 옵션에 맞춰 이해해야 합니다.

캐시, 설정 전환 및 호환성 처리

활성화한 뒤 아직 캐시되지 않은 도메인을 조회해 앱이 합성 주소를 받는지 확인하고, 연결 시 해당 도메인이 복원되는지 살펴보세요. 서비스를 중지하거나 트래픽 가로채기 구성 요소를 바꾸면 앱에 이전 합성 IP가 남아 있을 수 있습니다. 새 서비스에는 그 매핑이 없어 일부 사이트에 갑자기 접속할 수 없는 현상이 생길 수 있습니다. 이때는 주소 풀을 늘리거나 원격 서버를 계속 바꾸지 말고 관련 DNS 캐시를 지운 뒤 앱을 다시 시작하세요.

LAN 서비스 검색, 조회 결과의 주소를 검사하는 프로그램, 실제 주소에 의존하는 진단 도구는 합성 주소와 맞지 않을 수 있습니다. 이런 대상에는 실제 주소를 반환하는 명시적인 조회 예외를 우선 설정하고, DNS와 연결 경로 양쪽에 예외가 적용되는지 확인하세요. 브라우저에 내장된 암호화 DNS가 가로채기 DNS를 우회하면 같은 앱의 요청끼리도 서로 다른 경로를 사용할 수 있으므로 문제를 확인할 때 해당 설정 상태를 기록하세요.

활성화 전후로 분명한 이점이 없다면 일반 DNS 설정을 유지하는 편이 관리하기 쉽습니다. 되돌릴 때는 트래픽 가로채기를 중지하고 DNS 설정을 복원한 다음 캐시를 지우고 앱을 다시 시작하세요. 이후 직접 연결과 프록시 대상 모두를 검증합니다. FakeDNS 필드만 지운 채 시스템에 합성 주소가 남도록 두지 마세요. 신뢰할 수 있는 비교 결과를 얻으려면 설정과 캐시를 함께 복원해야 합니다.

다중 구독 관리 및 업데이트 전략

구독 그룹은 출처를 분리하고, 다중 구독 관리는 출처별 업데이트 일정, 중복 항목, 현재 선택, 장애 전환을 다룹니다. 여러 출처를 사용하더라도 목표는 항목이 계속 늘어나는 하나의 긴 목록을 만드는 것이 아닙니다. 매번 업데이트할 때마다 어떤 출처를 갱신했는지, 어떤 항목이 바뀌었는지, 현재 서버가 여전히 있는지, 실패했을 때 어떤 설정을 보존할지 파악할 수 있어야 합니다.

출처별로 안정적인 관리 범위 만들기

일상용, 예비용, 테스트용 출처를 용도에 따라 나누고 수동 설정은 별도로 보관하세요. 예비 출처가 있다고 자동 장애 전환이 되는 것은 아닙니다. 구독은 서버 데이터를 가져오는 방식일 뿐, 자동 가용성 검사나 전환 기능을 기본으로 제공하지 않습니다. 클라이언트에서 서버를 바꾸면 보통 새로 생성되는 연결의 경로가 바뀌며 이미 연결된 세션은 그대로일 수 있습니다. 예비 출처를 테스트할 때는 새 연결을 만들어 기존 세션의 영향을 피하세요.

두 출처에 같은 이름의 서버가 있어도 이름만으로 중복 항목을 제거하지 마세요. 이름은 표시용일 뿐이며 실제 연결 설정은 프로토콜, 주소, 포트, 사용자 식별자, TLS, 전송 매개변수에 따라 달라집니다. 주소가 같더라도 인증 정보나 용도가 다를 수 있습니다. 반대로 같은 서비스도 이름이 바뀌면 완전히 새로운 항목처럼 보일 수 있습니다. 민감 정보를 가린 연결 매개변수를 비교한 뒤 중복 항목을 숨기거나 삭제하세요.

상태를 확인할 수 있는 시간에 업데이트 예약하기

자동 업데이트 간격은 출처의 요구 사항과 사용 빈도를 고려해 설정하세요. 자주 새로 고칠 필요는 없습니다. 업데이트는 현재 네트워크 상태에 따라 달라지며 직접 요청할 수도 있고 클라이언트의 기존 프록시를 사용할 수도 있습니다. 구체적인 동작은 설정에 따라 다릅니다. 프록시가 아직 연결되지 않은 최초 가져오기에서 출처 주소가 프록시를 통해서만 접속된다면, 먼저 사용 가능한 기본 연결을 만들거나 신뢰할 수 있는 오프라인 가져오기 방식을 사용하세요. 구독 업데이트와 프록시 시작이 서로를 기다리는 상황을 피해야 합니다.

일괄 업데이트에 실패하면 먼저 출처 하나만 따로 업데이트해 전체 네트워크 문제인지 특정 출처의 응답 문제인지 구분하세요. 요청 오류, 응답이 인식 가능한 형식인지, 어느 단계에서 파싱이 이뤄졌는지 기록합니다. 요청에 성공해도 올바른 구독 데이터가 반환됐다는 뜻은 아닙니다. 인증이 만료되면 출처에서 웹페이지나 안내 문구를 반환할 수 있습니다. 이런 경우 로컬 프로토콜 항목을 계속 수정해도 소용없으므로 주소, 권한, 출처 서비스 상태부터 확인하세요.

증상먼저 확인할 항목보존할 롤백 대상
모든 출처 업데이트 실패로컬 네트워크 및 업데이트 요청 경로현재 사용 가능한 서버
특정 출처를 파싱했지만 결과가 비어 있음응답 형식 및 가져오기 필터해당 그룹의 기존 설정 및 필터 조건
업데이트 후 현재 항목이 작동하지 않음항목이 교체되거나 삭제됐는지검증된 예비 출처

업데이트 실패가 곧 서비스 중단을 뜻하지는 않음

구독 업데이트와 서버 연결은 서로 다른 요청 경로를 사용합니다. 출처에 일시적으로 접속할 수 없어도 로컬에 있는 항목으로는 계속 연결될 수 있습니다. 반대로 구독 업데이트에 성공했다고 모든 서버가 작동한다는 뜻은 아닙니다. 한 번 업데이트에 실패했다고 그룹 전체를 삭제하지 말고, 업데이트 성공을 연결 검증으로 간주하지 마세요. 마지막으로 작동했던 데이터를 보관하고 구독 요청과 서버 연결 결과를 각각 기록해야 어느 계층의 문제인지 확인할 수 있습니다.

출처 주소가 바뀌면 기존 그룹의 주소를 먼저 수정하고 필터와 업데이트 옵션이 여전히 적합한지 확인하세요. 새 그룹을 만들어야 한다면 새 출처에서 가져오기를 완료하고 연결까지 검증한 다음 기존 출처를 비활성화합니다. 새 주소를 테스트하기 전에 기존 그룹부터 삭제하지 마세요. 새 형식을 파싱할 수 없으면 비교할 원본과 롤백 경로를 모두 잃을 수 있습니다. 비활성화한 기존 그룹에는 상태를 분명히 표시해 실수로 선택하거나 불필요한 요청을 보내지 않도록 하세요.

백업, 마이그레이션 및 권한 범위

기기를 옮길 때는 구독 주소, 수동 서버, 로컬 라우팅을 각각 따로 처리하세요. 구독으로 서버 목록을 다시 가져올 수는 있지만 로컬 DNS, 그룹 필터, 앱 제외 설정, 사용자 지정 아웃바운드까지 함께 가져오지 않을 수 있습니다. 내보내기 기능이 어디까지 포함하는지는 클라이언트마다 다르므로 복원한 뒤 항목별로 확인하세요. 데스크톱 설정 폴더가 모바일에서 바로 가져올 수 있는 형식이라고 가정하지 마세요. 특히 다른 코어의 문법이 포함된 경우 주의해야 합니다.

백업에 접근 자격 증명이 포함될 수 있으므로 접근 제어가 되는 위치에 보관하고 공개 가이드 자료와 섞지 마세요. 문제 해결 정보를 공유할 때는 구조와 민감 정보를 가린 항목만 보여 주고 계정 구독 전체를 업로드하지 마세요. 다중 구독 관리가 끝나면 일상용 출처와 예비 출처를 각각 하나 이상 검증하고 전환 후 로컬 포트, 라우팅 방식, DNS 설정이 유지되는지 기록하세요. 출처를 바꿀 때 확인하지 않은 전역 설정까지 함께 변경해서는 안 됩니다.

사용자 지정 아웃바운드 및 설정 롤백

아웃바운드는 프록시 코어에서 연결이 최종적으로 나가는 방식을 정의하며 라우팅은 태그로 해당 아웃바운드를 참조합니다. 일반적인 용도는 직접 연결, 프록시, 차단이며 이미 실행 중인 로컬 프록시 진입점에 연결할 수도 있습니다. 사용자 지정 아웃바운드는 명확한 경로 요구를 해결할 때 적합하며 일반 서버를 가져오는 대신 사용하면 안 됩니다. 시작 전에 각 태그가 어떤 서비스와 연결되는지, 어디에서 리스닝하는지, 해당 서비스가 중지되면 어떻게 되는지 파악하세요.

태그는 설정 내부의 참조 관계입니다

tag는 직접 지정하는 식별자이며 프로토콜 기능을 자동으로 생성하지 않습니다. 라우팅에 proxy를 썼다면 설정에도 같은 이름의 아웃바운드가 있어야 합니다. 이름이 비슷해도 서로 같은 것으로 취급되지 않습니다. 네이티브 Xray 설정에서는 첫 번째 아웃바운드가 보통 규칙에 일치하지 않는 트래픽의 기본 경로가 되므로 순서도 중요합니다. 클라이언트가 생성하는 설정에는 기본 규칙이 추가될 수 있으므로 편집 창의 일부만 보지 말고 실제 실행 구조를 확인하세요.

다음은 로컬 경로를 테스트할 수 있는 완전한 Xray 스타일 설정입니다. 로컬 앱이 SOCKS 인바운드에 연결하면 일반 대상은 로컬의 다른 SOCKS 서비스로 전달하고 사설 주소는 직접 연결합니다. 원격 서버 인증 정보는 포함되어 있지 않습니다. 참조한 상위 서비스가 해당 포트에서 실제로 실행 중이어야 합니다. 상위 서비스가 현재 인바운드로 다시 연결되지 않도록 하세요. 순환 전달이 발생할 수 있습니다.

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "local-in",
      "listen": "127.0.0.1",
      "port": 10810,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": false
      }
    }
  ],
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "socks",
      "settings": {
        "servers": [
          {
            "address": "127.0.0.1",
            "port": 10809
          }
        ]
      }
    },
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {}
    }
  ],
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "direct"
      }
    ]
  }
}

규칙보다 프로토콜과 포트를 먼저 확인하기

사용하기 전에 10810이 다른 프로그램에서 사용 중이지 않은지, 10809에서 SOCKS 서비스가 제공되는지 확인하세요. 포트 이름이 ‘프록시 포트’라고 해서 HTTP 프록시 포트를 SOCKS 아웃바운드에 넣을 수 있는 것은 아닙니다. 여기의 포트는 테스트를 위한 별도 값이며 클라이언트 기본값을 의미하지 않습니다. 인증되지 않은 진입점이 실수로 LAN에 노출되지 않도록 리스닝 주소를 로컬 루프백으로 제한하세요. 원격 접속이 필요하다면 인증, 방화벽, 접근 범위를 별도로 설계해야 합니다.

이 예시에서는 TCP 경로 테스트만을 위해 인바운드 UDP를 비활성화했습니다. 이 설정으로 모든 UDP 앱을 처리할 수 있다고 추론해서는 안 됩니다. UDP를 추가하려면 인바운드, 상위 SOCKS 서비스, 이후 연결 경로가 모두 UDP를 지원하는지 확인해야 합니다. 직접 연결과 차단 아웃바운드는 정의만으로 작동하지 않습니다. 라우팅 규칙에 일치하거나 기본 경로가 되어야 사용됩니다. block이라는 아웃바운드를 추가해도 대상이 자동으로 차단되지는 않습니다.

사용자 지정 설정을 적용할 수 있는 범위

v2rayN에서 사용자 지정 설정 메뉴를 사용할 때는 파일 문법에 맞는 코어를 선택하고 클라이언트가 로컬 리스닝 포트를 어떻게 인식하는지 확인하세요. 일부 관리 옵션은 해당 파일을 더 이상 수정하지 않을 수 있으며 시스템 프록시가 이전 포트를 계속 가리킬 수도 있습니다. 모바일 클라이언트는 데스크톱과 가져오기 기능이 다르므로 현재 클라이언트가 지원하는 설정 유형을 사용하세요. 파일을 저장할 수 있다는 사실만으로 서비스가 예상대로 시작된다고 볼 수 없습니다.

여러 프록시를 연결하면 의존성과 문제 해결 비용이 늘어납니다. 두 프록시를 연결하기 전에 상위와 하위 프록시를 각각 검증하고 어느 단계에서 다른 단계의 출구 트래픽을 다시 가로채는지 확인하세요. 소수의 도메인에 서로 다른 경로를 지정하려는 목적이라면 불필요한 프록시 계층을 추가하지 말고 명확한 라우팅과 개별 아웃바운드를 우선 사용하세요. 프로토콜 선택은 주요 프로토콜 비교를 참고할 수 있지만 실제 전송 성능은 연결 경로에 따라 달라집니다.

설정한 역순으로 되돌리기

시작에 실패하면 첫 번째로 표시되는 명확한 오류부터 확인하세요. JSON 문법 오류, 알 수 없는 필드, 포트 충돌, 아웃바운드 참조 누락은 각각 다르게 처리해야 합니다. 시작은 성공했지만 연결할 수 없다면 상위 서비스가 리스닝 중인지, 프로토콜이 일치하는지, 기본 아웃바운드가 올바른지 확인하세요. 로그 상세도를 일시적으로 높인 경우 필요한 요청만 재현하고 문제 해결 후에는 평소 수준으로 복원하세요. 접속 대상이 기록에 계속 저장되지 않도록 주의해야 합니다.

되돌릴 때는 새로 추가한 트래픽 가로채기와 사용자 지정 항목을 먼저 비활성화하고, 기존 라우팅과 DNS를 복원한 다음 검증된 서버를 다시 선택해 새 연결을 만드세요. 시스템 프록시 포트를 수정했다면 함께 복원해야 합니다. 이번 변경 사항을 ‘목적, 변경 내용, 검증, 롤백’ 네 가지로 기록하면 출처를 알 수 없는 큰 설정 파일을 보관하는 것보다 관리하기 쉽습니다. 처음 설정할 때는 빠른 시작 가이드를 따르고, 구체적인 증상은 문제 해결에서 계속 확인하세요.