구성 모델을 먼저 세운 뒤 옵션을 변경하세요
V2Ray 그래픽 클라이언트는 별도의 네트워크 프로토콜이 아닙니다. v2rayN, v2rayNG, v2flyNG는 구독 관리, 노드 선택, 시스템 연결 및 화면 조작을 담당하고, 실제 연결·라우팅·DNS 처리는 클라이언트가 호출하는 코어가 수행합니다. 완전한 연결은 보통 다섯 가지 객체를 거칩니다. 애플리케이션 트래픽이 로컬 인바운드로 들어오고, DNS 모듈이 도메인을 해석하며, 라우팅 모듈이 규칙에 따라 대상을 판단하고, 아웃바운드 모듈이 직접 연결·프록시·차단 중 하나를 선택한 다음, 해당 서버 또는 로컬 네트워크를 통해 데이터를 전송합니다. 고급 설정의 핵심은 옵션을 많이 켜는 것이 아니라 각 계층의 입력과 출력을 명확히 하는 데 있습니다.
문제를 해결할 때도 이 흐름을 따라가야 합니다. 브라우저에서 대상 사이트에 접속할 수 없다면 먼저 트래픽이 클라이언트로 들어오는지 확인합니다. 트래픽은 들어오지만 도메인 해석이 잘못되었다면 DNS를 점검하고, 해석은 정확하지만 잘못된 경로를 선택했다면 라우팅 적중 결과를 확인합니다. 라우팅이 올바르게 적중했는데도 연결에 실패할 때 노드 매개변수, 서버 상태 및 로컬 네트워크를 점검해야 합니다. 모든 문제를 노드 탓으로 돌리면 시스템 프록시, TUN 권한 또는 DNS 캐시가 만든 차이를 놓치기 쉽습니다. 계층별 진단 방법은 느린 속도를 계층별로 점검하는 방법에서 계속 확인할 수 있습니다.
변경 전에 정상 상태를 기록하세요
조정을 시작하기 전에 정상적으로 연결되는 기준 구성을 보존하세요. 현재 구독 그룹, 활성 서버, 시스템 프록시 상태, 라우팅 모드, DNS 모드 및 TUN 상태를 기록합니다. v2rayN 데스크톱에서는 먼저 TUN을 끄고 시스템 프록시와 기본 분할 라우팅만 사용하는 것이 좋습니다. 경로가 짧아 오류 원인을 찾기 쉽기 때문입니다. Android에서는 클라이언트가 제공하는 시스템 네트워크 연결 방식을 먼저 사용해 단일 노드 연결을 확인한 뒤 사용자 지정 라우팅과 FakeDNS를 추가하세요. 한 종류의 변경을 마칠 때마다 다시 연결해 확인하고, 구독·DNS·라우팅·TUN을 동시에 변경하지 마세요.
확인은 클라이언트 상태만 봐서는 부족합니다. 클라이언트에 실행 중이라고 표시되어도 로컬 서비스나 네트워크 인터페이스가 만들어졌다는 뜻일 뿐, 대상 애플리케이션이 반드시 해당 진입점을 사용하는 것은 아닙니다. 브라우저는 일반적으로 시스템 프록시를 따르지만 일부 터미널 프로그램은 별도로 프록시 환경 변수를 설정해야 하며, 어떤 애플리케이션은 TUN이 연결된 뒤에만 클라이언트로 들어옵니다. 브라우저 경로를 확인할 일반 웹페이지, 해석 결과를 확인할 DNS 조회, 명령줄 애플리케이션이 시스템 설정을 상속하는지 확인할 터미널 요청 등 세 가지 테스트를 준비하는 것이 좋습니다. 시스템 프록시가 적용되지 않을 때는 브라우저와 터미널을 나누어 점검하는 방법의 순서대로 처리하세요.
화면 설정과 생성된 구성의 관계 이해하기
그래픽 인터페이스의 ‘LAN 우회’, ‘전역’, ‘규칙’, ‘TUN’, ‘FakeDNS’는 구성 생성기의 상위 옵션입니다. 클라이언트는 구독 노드, 사용자 규칙 및 코어 템플릿을 실행 구성으로 병합하므로 화면의 한 항목을 바꾸는 것만으로 인바운드·DNS·라우팅이 함께 변경될 수 있습니다. 수동 구성 조각은 클라이언트가 허용한 확장 위치에 넣어야 적용되며, 임시 생성 파일을 직접 수정하면 재시작하거나 노드를 전환할 때 덮어써질 수 있습니다. 장기적으로 관리할 규칙은 클라이언트의 사용자 지정 라우팅, DNS 템플릿 또는 구성 파일 메뉴에 저장하세요.
| 구성 계층 | 주요 역할 | 일반적인 이상 증상 | 우선 확인할 항목 |
|---|---|---|---|
| 구독 및 노드 | 서버 주소, 포트, 프로토콜 및 전송 매개변수 제공 | 인증 실패, 연결 시간 초과 | 구독 업데이트 시간, 노드 매개변수, 네트워크 연결 가능 여부 |
| 인바운드 연결 | 시스템 프록시, 애플리케이션 프록시 또는 TUN 트래픽 수신 | 클라이언트는 실행되지만 애플리케이션이 직접 연결 | 시스템 프록시, 애플리케이션 설정, TUN 권한 |
| DNS | 도메인을 주소로 변환하고 라우팅에 도메인 정보 제공 | 해석 시간 초과, 예상과 다른 결과 | 조회 서버, 도메인 일치, 캐시 |
| 라우팅 | 요청을 프록시, 직접 연결 또는 차단 아웃바운드로 전달 | 대상이 잘못된 경로로 연결됨 | 규칙 순서, 도메인 정책, 적중 로그 |
| 아웃바운드 | 프록시 연결, 직접 연결 또는 로컬 전달 수행 | 핸드셰이크 실패, 업스트림 연결 불가 | 아웃바운드 태그, 서버 구성, 업스트림 포트 |
되돌릴 수 있는 변경 순서 만들기
조정은 ‘기준 저장, 한 항목 변경, 재연결, 확인, 결과 기록’의 다섯 단계로 나누는 것이 좋습니다. 규칙 파일에는 ‘기본 분할 라우팅’, ‘업무 네트워크 추가’, ‘TUN 전용 DNS’처럼 알아보기 쉬운 이름을 사용하고 식별하기 어려운 복사본을 많이 만들지 마세요. 문제가 생기면 먼저 기준 구성으로 돌아가 기본 연결이 여전히 되는지 확인한 뒤 고급 설정을 하나씩 복원합니다. 기준으로 돌아간 뒤에도 실패한다면 문제는 방금 작성한 라우팅 표현식보다 구독, 노드 또는 로컬 네트워크에 있을 가능성이 큽니다.
주의: 예시 구성은 구조를 설명하기 위한 것입니다. 가져오기 전에 클라이언트가 해당 필드를 지원하는지 확인하고 도메인, 포트 및 태그를 실제 설정에 맞게 바꾸세요. 여러 개의 완전한 구성을 그대로 이어 붙이면 상위 필드가 중복되어 구성을 불러오지 못할 수 있습니다.
구독 그룹 및 서버 필터
구독은 서버를 일괄 제공하지만 서버 수가 늘어나면 선택 비용과 오작동 가능성도 함께 커집니다. 효과적인 정리 방법은 모든 노드를 긴 목록 하나에 넣는 것이 아니라 먼저 출처별로 그룹을 나눈 다음 용도에 따라 필터링하는 것입니다. v2rayN에서는 기본 그룹, 외부 구독 및 직접 구축한 노드를 분리해 관리하는 것이 좋습니다. v2rayNG와 v2flyNG에서는 구독 설정과 메모 필드로 출처를 구분할 수 있습니다. 그룹의 경계는 안정적으로 유지하고 노드 메모는 바뀌더라도 출처·용도·관리 책임을 한데 섞지 마세요.
각 구독에는 ‘일상용 구독’, ‘테스트 경로’, ‘직접 구축한 서버’처럼 식별 가능한 이름을 사용하세요. 이름에는 출처만 표시하고 현재 노드 상태는 넣지 않는 것이 좋습니다. 상태는 시간이 지나면 바뀌기 때문입니다. 수동으로 추가한 서버는 별도로 보관하고 자동 업데이트되는 구독 그룹으로 옮기지 마세요. 업데이트 후 구독에 덮어쓰기되었는지 판단하기 어려워집니다. 더 이상 사용하지 않는 구독은 먼저 자동 업데이트를 중지하고 일정 기간 지켜본 뒤 그룹을 삭제하세요. 바로 비우면 기존 메모와 선택 기록도 함께 사라집니다.
필터는 어떤 문제를 해결해야 하나요?
서버 필터는 긴 목록에서 후보 범위를 줄이는 데 적합합니다. 흔히 사용하는 기준은 메모 키워드, 프로토콜 유형, 전송 방식 및 구독 출처입니다. 필터 조건은 먼저 설명 가능해야 합니다. 키워드 하나를 입력했을 때 왜 해당 서버가 일치하는지 메모에서 알 수 있어야 합니다. 복잡한 정규식은 유연하지만 구독의 이름 형식이 조금만 바뀌어도 누락될 수 있습니다. 안정적인 방법은 같은 구독의 메모 형식을 통일하고 지역, 용도 또는 경로 유형을 키워드로 사용하는 것입니다.
필터링과 라우팅은 서로 다른 기능입니다. 필터링은 화면에 표시하거나 일괄 테스트할 서버를 정하고, 라우팅은 연결 후 특정 요청이 어느 아웃바운드로 갈지 결정합니다. 서버 필터로 트래픽 분할을 대신하지 말고, 노드가 숨겨졌다고 해서 구성에서 완전히 삭제된 것으로 생각하지도 마세요. 일부 클라이언트의 필터는 목록 표시만 바꾸며 활성 노드는 계속 작동할 수 있습니다. 일괄 삭제하기 전에 현재 선택 항목과 그룹 범위를 확인하세요.
키워드와 정규식의 사용 범위
간단한 키워드는 메모의 ‘업무’, ‘직접 구축’ 또는 프로토콜명으로 필터링하는 일상적인 선택에 적합합니다. 여러 대체 단어를 표현하려면 정규식의 선택 연산자를 사용할 수 있고, 테스트 노드를 제외하려면 부정 조건을 사용할 수 있지만 먼저 작은 범위에서 검증해야 합니다. 클라이언트마다 필터 메뉴와 정규식 기능이 다를 수 있으므로 표현식을 복사하기 전에 메모, 주소 또는 전체 표시 이름 중 어디에 적용되는지 확인하세요. 아래 표현식은 특정 노드 수나 속도 데이터에 의존하지 않는 일반적인 방법만 보여줍니다.
업무|직접 구축
^(?!.*테스트).*
(VLESS|VMess|Trojan)
첫 번째 줄은 메모에 ‘업무’ 또는 ‘직접 구축’이 포함된 항목을 찾고, 두 번째 줄은 ‘테스트’가 포함된 이름을 제외하며, 세 번째 줄은 표시 이름에 포함된 프로토콜 단어로 필터링합니다. 구독마다 이름 지정 방식이 다르다면 먼저 실제 메모를 확인한 뒤 수정하세요. 필터 결과가 비어 있으면 먼저 경계 기호와 제외 조건을 제거해 기본 키워드가 일치하는지 확인하고 제약을 단계적으로 추가하세요. 처음부터 지나치게 긴 표현식을 만들면 어느 부분에서 일치가 끊겼는지 판단하기 어렵습니다.
업데이트, 중복 제거 및 만료 항목 처리
구독 업데이트는 먼저 하나의 그룹에서 실행하는 것이 좋습니다. 업데이트 후 항목이 정상적으로 해석되는지 확인한 다음 활성 노드로 전환하세요. 같은 서버가 메모만 달리해 중복될 수도 있고, 매개변수가 달라 주소만 같을 수도 있습니다. 중복을 제거할 때는 도메인과 포트만 보지 말고 사용자 식별자, 프로토콜, 전송 방식, TLS 및 경로 등 핵심 매개변수도 비교해야 합니다. 완전히 동일한 항목에는 자동 중복 제거가 적합하지만 매개변수에 차이가 있다면 유지한 뒤 이름을 다시 정하는 편이 안전합니다.
만료 항목은 일시적인 연결 불가, 매개변수 오류 및 구독 철회의 세 가지로 나눌 수 있습니다. 한 번 연결에 실패했다고 장기 만료로 판단하지 말고 먼저 로컬 네트워크를 바꾸거나 경로가 복구될 때까지 기다리세요. 프로토콜 해석 오류가 계속되면 현재 클라이언트가 인식하지 못하는 필드를 구독에서 사용하는지 확인합니다. 업데이트 후 구독에서 사라진 항목은 일반적으로 제공자가 철회한 것이므로 자동 그룹에 수동으로 다시 복사하지 않는 것이 좋습니다. 속도 측정은 현재 네트워크 조건에서 응답을 비교하는 용도일 뿐 영구적인 정렬 기준이 아닙니다.
정리 팁: 먼저 출처별로 그룹을 나누고, 키워드로 후보 서버를 필터링한 다음 활성 노드를 수동으로 선택하세요. 그룹은 관리 문제를, 필터는 검색 문제를, 라우팅 규칙은 트래픽 경로 문제를 해결하므로 서로 대신 사용하지 마세요.
세 클라이언트의 그룹 관리 포인트
v2rayN은 데스크톱 목록 공간이 넓어 여러 구독 관리, 일괄 업데이트 및 세밀한 필터링에 적합하며 데스크톱 플랫폼의 우선 선택지입니다. v2rayNG는 터치 기반 목록을 사용하므로 동시에 활성화하는 구독 수를 줄이고 이름을 짧게 쓰되 명확한 접두사를 유지하는 것이 좋습니다. v2flyNG의 관리 방식은 Android 사용 습관과 비슷하지만 코어 계열이 다르므로 같은 구독을 가져온 뒤에도 프로토콜과 전송 매개변수가 모두 인식되었는지 확인해야 합니다. 재설치하거나 플랫폼을 바꿀 때는 다운로드 페이지에서 운영체제에 맞는 클라이언트를 선택하세요.
정리를 마친 뒤에는 복구 가능성도 확인해야 합니다. 현재 활성 구독과 서버를 기억하고, 한 그룹만 수동으로 업데이트해 직접 구축한 노드가 바뀌지 않는지 확인한 다음 클라이언트를 재시작해 선택 상태가 유지되는지 테스트하세요. 업데이트 후 활성 항목이 바뀌었다면 자동 선택이 켜져 있는지 또는 현재 항목이 구독으로 교체되었는지 확인합니다. 구독 주소는 지속적으로 접근할 수 있는 인증 정보이므로 공개 스크린샷, 로그 또는 공유 규칙 파일에 기록하지 마세요. 문제 해결 시에는 구독 해석 결과와 오류 유형만 설명하면 됩니다.
V2Ray 라우팅 규칙 실전
라우팅 규칙은 도메인, IP, 포트, 네트워크 유형, 인바운드 태그 또는 프로토콜 특성에 따라 연결을 지정된 아웃바운드로 보냅니다. 가장 일반적인 아웃바운드는 프록시, 직접 연결 및 차단입니다. 규칙은 보통 순서대로 일치하므로 먼저 적중한 규칙이 실행됩니다. 하나의 대상이 여러 규칙을 동시에 만족할 때는 규칙 수보다 순서가 중요합니다. 규칙을 설계하기 전에 ‘LAN은 직접 연결, 지정한 업무 도메인은 전용 아웃바운드 사용, 나머지는 기본 규칙 적용’처럼 업무 목표를 먼저 적고 이를 일치 조건으로 바꾸세요.
관리하기 쉬운 순서는 대개 구체적인 대상에서 포괄적인 대상으로 이어집니다. 먼저 차단할 명확한 대상을 처리하고, 그다음 LAN과 사설 주소를 처리한 뒤 사용자 지정 도메인과 전용 아웃바운드를 배치합니다. 이어 지역 도메인 또는 IP 규칙을 두고 마지막에 기본값 규칙을 둡니다. 넓은 범위의 규칙을 위에 놓으면 뒤의 세부 규칙은 영원히 적중하지 않습니다. 변경 후에는 대상 웹페이지가 열리는지만 보지 말고 클라이언트 로그에서 라우팅 결과를 확인하세요.
도메인 일치와 도메인 정책
도메인 규칙은 완전한 도메인, 도메인 접미사 또는 사전 정의된 도메인 집합과 일치시킬 수 있습니다. 완전한 도메인은 하나의 서비스에 적합하고 접미사 일치는 모든 하위 도메인까지 포함하므로 범위를 검토해야 합니다. 예를 들어 example.com에 접미사 규칙을 적용하면 api.example.com과 static.example.com에도 영향을 줍니다. 하나의 서비스가 웹페이지, API 및 정적 리소스를 서로 다른 도메인에 배치했다면 기본 도메인만 추가할 경우 페이지 뼈대는 로드되지만 리소스가 실패할 수 있습니다.
domainStrategy는 라우팅 일치 과정에서 도메인을 IP로 해석할지 결정합니다. AsIs를 사용하면 라우팅은 원래 도메인을 우선 유지하고 IP 규칙을 위해 적극적으로 해석하지 않습니다. IPIfNonMatch는 도메인 규칙이 적중하지 않을 때 해석한 뒤 IP 규칙을 다시 시도합니다. IPOnDemand는 IP 일치가 필요할 가능성이 있을 때 더 일찍 해석을 시작합니다. 일반적으로는 도메인 규칙과 IP 규칙을 함께 활용하면서 모든 요청을 미리 해석하지 않는 IPIfNonMatch부터 사용하는 것이 좋습니다. DNS 설정이 불완전하면 IP 일치에 의존하는 정책에서 해석 실패가 늘어날 수 있으므로 라우팅과 DNS를 함께 확인해야 합니다.
기본 규칙 구조
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "direct"
},
{
"type": "field",
"domain": [
"full:intranet.example",
"domain:office.example"
],
"outboundTag": "direct"
},
{
"type": "field",
"domain": [
"domain:service.example"
],
"outboundTag": "proxy"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
예시에서는 먼저 사설 주소를 직접 연결로 보내고, 내부 도메인 두 개를 처리한 뒤, 특정 서비스 하나를 프록시로 보내고 마지막에 TCP 및 UDP 규칙으로 기본 처리합니다. full:은 완전한 도메인에만 일치하고 domain:은 해당 도메인과 하위 도메인에 일치합니다. 예시 도메인은 문법 설명용입니다. 실제로 사용할 때는 아웃바운드 태그가 구성의 tag와 완전히 일치해야 합니다. 태그 철자가 다르면 자동으로 연결되지 않으며, 일반적으로 구성 로드 실패나 대상 아웃바운드 검색 실패로 이어집니다.
포트, 네트워크 유형 및 인바운드 태그
포트 규칙은 특정 서비스를 지정된 아웃바운드로 보내는 데 적합하지만 포트가 곧 애플리케이션을 의미하지는 않습니다. 현대 애플리케이션 대부분은 범용 암호화 포트를 사용하므로 포트만으로 업무를 구분할 수 없습니다. network는 TCP와 UDP를 구분하며 TUN을 사용할 때는 특히 UDP를 주의해야 합니다. DNS, 실시간 통신 및 일부 전송이 UDP를 사용하기 때문입니다. 선택한 노드나 업스트림 아웃바운드가 UDP를 처리하지 못한다면 필요한 UDP 트래픽을 직접 연결로 보내거나 DNS 전송 방식을 조정할 수 있지만, UDP를 끄면 애플리케이션에 영향이 없다고 단정해서는 안 됩니다.
inboundTag는 서로 다른 로컬 진입점을 구분하는 데 사용할 수 있습니다. 예를 들어 브라우저 전용 인바운드를 하나 만들고 시스템 트래픽용 인바운드를 별도로 둔 뒤 라우팅으로 서로 다른 아웃바운드에 보낼 수 있습니다. 이 방식은 테스트와 격리에 적합하지만 그래픽 클라이언트가 여러 인바운드를 노출하는지는 구성 모드에 따라 다릅니다. 클라이언트가 생성한 구성을 사용할 때는 실제 인바운드 태그를 먼저 확인하고 다른 환경의 이름을 그대로 복사하지 마세요. 태그는 맞는데 규칙이 적중하지 않는다면 트래픽이 시스템 프록시와 TUN 중 어느 인바운드로 들어오는지 확인합니다.
규칙 적중 여부 확인
확인은 세 단계로 진행합니다. 첫째, 대상 규칙을 임시로 포괄적인 규칙보다 앞에 배치해 먼저 가로채이지 않도록 합니다. 둘째, 클라이언트 로그 표시 수준을 높이고 다시 연결한 뒤 테스트 대상 하나만 방문합니다. 셋째, 대상 도메인, 해석된 주소 및 최종 아웃바운드 태그를 확인합니다. 로그에 도메인 없이 IP만 표시된다면 애플리케이션이 직접 해석하거나 DNS 요청이 클라이언트를 거치지 않을 수 있습니다. 이 경우 도메인 규칙이 작동하지 않을 수 있으므로 TUN을 사용하거나 DNS 연결 범위를 조정하고 IP 규칙을 보완해야 합니다.
규칙을 바꾼 뒤에도 이전 경로를 사용한다면 연결 재사용과 캐시도 확인해야 합니다. 브라우저가 기존 연결을 유지하거나 시스템이 DNS 결과를 보존하거나 코어가 기존 세션을 재사용할 수 있습니다. 대상 애플리케이션의 기존 연결을 닫고 필요한 캐시를 정리한 뒤 클라이언트를 다시 연결하여 확인하세요. 이미 연결된 세션을 계속 새로 고치는 방식으로 새 규칙을 판단하지 마세요. 더 많은 일반 문제는 도움말 센터에서 ‘사용 팁’과 ‘문제 해결’ 분류로 검색할 수 있습니다.
규칙의 경계: 넓은 범위의 기본 규칙은 반드시 마지막에 배치해야 합니다. 규칙을 하나 추가할 때마다 일치 대상, 목표 아웃바운드 및 확인 방법을 명확히 적으세요. 용도를 설명할 수 없는 기존 규칙은 계속 예외를 추가하기보다 먼저 비활성화하는 것이 좋습니다.
DNS 설정 최적화와 분할 해석
DNS 설정은 도메인이 주소를 얻는 방식을 결정하고 도메인 규칙과 IP 규칙 사이의 연결에도 영향을 줍니다. 시스템 DNS, 클라이언트 내장 DNS, 브라우저의 암호화 DNS 및 애플리케이션 자체 해석이 동시에 존재할 수 있습니다. 조회가 예상한 경로를 거치지 않으면 ‘라우팅은 맞지만 여전히 잘못된 아웃바운드로 연결되는’ 현상이 발생합니다. 최적화하기 전에 조회 출처를 확인하세요. 시스템 프록시는 일반적으로 모든 DNS를 자동으로 연결하지 않으며, TUN 모드가 시스템 조회를 클라이언트로 통합하기에는 더 적합하지만 브라우저나 애플리케이션이 직접 시작하는 암호화 조회도 처리해야 합니다.
DNS 분할의 기본 목표는 서로 다른 도메인이 적절한 해석 서버를 사용하게 하고, 조회 자체도 올바른 아웃바운드를 통해 전송되게 하는 것입니다. 도메인 분류, 조회 서버 및 라우팅 아웃바운드는 서로 독립적인 세 가지 결정입니다. 특정 도메인을 특정 DNS 서버에 할당했다고 해서 업무 연결도 반드시 같은 아웃바운드를 사용하는 것은 아닙니다. 이에 맞는 라우팅 규칙이 필요합니다. 반대로 업무 라우팅만 작성하고 해석 경로를 처리하지 않으면 애플리케이션이 부적절한 주소를 먼저 받아 잘못된 IP 규칙을 실행할 수 있습니다.
서버 순서와 일치 범위
코어 DNS에는 여러 서버를 설정할 수 있으며 각 서버에 도메인 일치 목록을 추가할 수 있습니다. 전용 일치 항목은 일반 서버보다 앞에 배치해야 합니다. 내부 도메인은 LAN DNS로 보내고, 지정한 외부 도메인은 암호화 조회를 사용하며, 나머지는 기본 서버로 보낼 수 있습니다. 클라이언트가 skipFallback과 같은 제어 항목을 지원한다면 이미 일치한 도메인이 대체 서버로 계속 조회되지 않게 할 수 있습니다. 다만 전용 서버가 안정적인지 확인한 뒤 사용해야 합니다. 그렇지 않으면 일치한 도메인에 사용 가능한 결과가 없어도 대체 응답을 자동으로 얻지 못합니다.
{
"dns": {
"queryStrategy": "UseIP",
"servers": [
{
"address": "192.168.1.1",
"domains": [
"full:intranet.example",
"domain:office.example"
],
"skipFallback": true
},
{
"address": "https://dns.example/dns-query",
"domains": [
"domain:service.example"
]
},
"localhost"
]
}
}
예시에서는 내부 도메인을 LAN 해석 서버로 보내고, 지정한 서비스는 예시 암호화 조회 주소로 보내며, 나머지는 로컬 해석을 사용합니다. 실제 구성에서는 암호화 조회 도메인 자체도 해석되어 연결을 만들어야 하므로, 부트스트랩 해석이 아직 사용할 수 없는 동일한 암호화 채널에 의존해서는 안 됩니다. 시스템 또는 기본 DNS로 조회 서버 도메인을 먼저 해석하거나 클라이언트가 지원하는 부트스트랩 기능을 사용하세요. 로그에 조회 서버 도메인 해석 실패가 계속 표시되면 먼저 이 의존 관계를 해결해야 합니다.
조회 정책과 주소 체계
queryStrategy는 어떤 유형의 주소를 반환할지 제어합니다. UseIP는 사용 가능한 주소 체계를 활용하고, UseIPv4는 IPv4만 요청하며, UseIPv6는 IPv6만 요청합니다. 선택 기준은 로컬 네트워크와 아웃바운드 경로가 해당 주소 체계를 완전히 지원하는지 여부입니다. 시스템이 IPv6 주소를 받았지만 프록시 경로에서 IPv6 연결을 만들 수 없으면 애플리케이션이 실패를 기다린 뒤 폴백하여 첫 접속이 눈에 띄게 느려질 수 있습니다. 이때는 IPv4 정책을 임시로 사용해 확인할 수 있지만, 장기적으로는 로컬 네트워크, 노드 아웃바운드 및 라우팅 규칙이 IPv6를 처리하는지 점검해야 합니다.
모든 해석 문제를 고정된 주소 체계로 덮어서는 안 됩니다. 일부 서비스는 주소 체계에 따라 서로 다른 접속 경로를 제공하며, LAN 내부 서비스도 특정 주소 체계에서만 작동할 수 있습니다. 변경 후 내부 도메인, 일반적인 공용 도메인 및 순수 IP 연결을 각각 테스트해 다른 경로가 손상되지 않았는지 확인하세요. 하나의 애플리케이션만 이상하다면 독립 DNS나 연결 최적화 기능을 사용하는지 확인해야 합니다. 해당 조회가 클라이언트로 들어오지 않았을 수 있기 때문입니다.
DNS와 라우팅의 연동 방식
DNS 조회 자체도 네트워크 요청이므로 직접 연결할지 프록시로 보낼지 라우팅이 결정해야 합니다. 암호화 DNS가 일반 TCP 또는 HTTPS 연결을 사용한다면 서버 도메인이나 IP를 기준으로 아웃바운드를 지정할 수 있습니다. 조회를 프록시로 보낼 때는 해석이 시작되기 전에 프록시 아웃바운드가 연결 가능한 서버 주소를 확보했는지 확인하세요. 구독 노드가 서버 주소로 도메인을 사용하는 경우 시작 단계의 해석 의존성을 특히 주의해야 합니다. 가장 안정적인 시작 경로는 기본 DNS로 노드 서버 도메인을 먼저 해석한 뒤, 연결된 프록시가 이후 전용 조회를 처리하게 하는 것입니다.
라우팅에서 IPIfNonMatch를 사용하면 도메인 규칙이 적중하지 않을 때 DNS 해석을 실행한 다음 IP 규칙을 적용합니다. 이때 DNS 서버가 반환하는 주소가 라우팅 결과에 직접 영향을 줍니다. 하나의 도메인에 여러 주소가 있으면 캐시 결과가 바뀔 때 트래픽이 서로 다른 규칙에 적중할 수 있습니다. 안정적인 도메인 규칙을 우선 사용하고, IP 규칙은 지역 집합·사설 주소 및 주소 기준 판단이 꼭 필요한 대상에만 사용하세요. 모든 도메인의 주소를 수동으로 관리하는 방식은 피하는 것이 좋습니다.
캐시, 누출 경로 및 확인 방법
DNS를 확인할 때는 먼저 브라우저의 독립 해석 옵션을 끄거나 테스트 범위에 명시적으로 포함하세요. 클라이언트를 다시 연결한 뒤 시스템과 브라우저의 관련 캐시를 정리하고 새로운 조회를 한 번 실행합니다. 로그에는 도메인, 선택된 DNS 서버, 반환 주소 및 이후 업무 연결의 라우팅 결과가 표시되어야 합니다. 웹페이지 기반 검사 도구만으로는 모든 시스템 조회 경로를 확인할 수 없습니다. 해당 도구가 보는 것은 현재 브라우저뿐이며 터미널, 백그라운드 서비스 및 다른 애플리케이션은 관찰하지 못하기 때문입니다.
일반 시스템 프록시에서 DNS가 여전히 로컬 네트워크를 통해 처리된다면 이는 연결 범위의 차이이지 반드시 구성 오류는 아닙니다. 더 많은 애플리케이션을 통합하려면 TUN을 활성화하고 DNS에 명확한 인바운드와 라우팅을 설정하세요. TUN을 켠 뒤 해석 루프가 발생하면 DNS 요청이 다시 TUN으로 들어가는지, 조회 서버에 필요한 직접 연결 또는 프록시 예외가 있는지, FakeDNS가 실제 해석 규칙과 겹치지 않는지 확인합니다. 전체 분할 해석 사례는 V2Ray DNS 분할 해석 설정 자세히 보기에서 확인할 수 있습니다.
구성 순서: 먼저 기본 DNS 하나를 안정적으로 작동시킨 다음 도메인 그룹과 암호화 조회를 추가하고, 마지막으로 TUN 및 FakeDNS와 연동하세요. 각 단계에서 조회 서버, 반환 주소 및 업무 아웃바운드를 기록해 단순히 ‘웹페이지가 열리는지’만 보지 않도록 합니다.
v2rayN TUN 모드의 연결 범위와 설정 순서
TUN 모드는 가상 네트워크 인터페이스를 통해 더 많은 시스템 트래픽을 수신하므로 시스템 프록시를 읽지 않거나 별도로 프록시를 설정할 수 없거나 UDP를 처리해야 하는 애플리케이션에 적합합니다. 시스템 프록시보다 강하거나 약한 관계가 아니라 연결 계층이 다릅니다. 시스템 프록시는 애플리케이션이 프록시 설정을 자발적으로 따르는 방식이라 경로가 명확하고 문제 해결이 쉽습니다. TUN은 네트워크 계층에서 트래픽을 가로채 적용 범위가 넓지만 라우팅 테이블, 가상 인터페이스, DNS 연결 및 시스템 권한이라는 변수가 추가됩니다. 처음 설정할 때는 먼저 시스템 프록시가 작동하는지 확인한 뒤 TUN을 활성화하세요.
v2rayN은 데스크톱 플랫폼의 우선 선택지입니다. TUN을 켜기 전에 클라이언트 설치 위치에 쓸 수 있는지, 시스템에서 가상 인터페이스 생성을 허용하는지 확인하고 시스템 라우팅이나 네트워크 인터페이스를 변경하는 유사 도구를 종료하세요. Windows, macOS, Linux는 권한 부여 방식이 다르며 관리자 권한이나 시스템 네트워크 권한을 요구할 수 있습니다. 권한이 거부되어도 클라이언트의 로컬 프록시는 정상적으로 시작될 수 있지만 TUN 인터페이스는 만들어지지 않습니다. 따라서 주 창의 연결 상태만 보지 말고 인터페이스와 라우팅을 확인해야 합니다.
권장 활성화 순서
첫째, 이미 확인된 정상 노드 하나를 남기고 기본 규칙 라우팅과 신뢰할 수 있는 단일 DNS 구성을 사용합니다. 둘째, 충돌 가능성이 있는 네트워크 도구를 종료하고 현재 시스템 프록시 상태를 기록합니다. 셋째, TUN을 활성화하고 가상 인터페이스와 라우팅이 생성될 때까지 기다립니다. 넷째, 브라우저·터미널·기존에 시스템 프록시를 따르지 않던 애플리케이션 하나를 각각 테스트합니다. 다섯째, DNS 분할, FakeDNS 및 사용자 지정 라우팅을 하나씩 복원합니다. 활성화 후 모든 네트워크가 끊기면 즉시 TUN을 끄고 시스템 라우팅이 복구되는지 확인한 다음 권한, 스택 유형 및 DNS를 점검하세요.
일부 구성에서는 시스템 프록시와 TUN을 동시에 켤 수 있지만 테스트 단계에서는 같은 애플리케이션을 두 방식이 동시에 담당하게 하지 않는 것이 좋습니다. 브라우저는 시스템 프록시로 클라이언트에 들어오고 다른 애플리케이션은 TUN으로 들어올 수 있습니다. 인바운드 태그로 라우팅을 구분한다면 두 경로에서 서로 다른 결과가 나올 수 있습니다. 문제의 출처를 분명히 하려면 먼저 시스템 프록시를 끄고 TUN만 테스트하세요. 완료한 뒤 일상적인 사용 방식에 따라 시스템 프록시 진입점을 유지할지 결정합니다.
엄격한 라우팅과 우회 규칙
TUN의 일반적인 설정에는 자동 라우팅, 엄격한 라우팅, 인터페이스 선택 및 LAN 우회가 있습니다. 자동 라우팅은 시스템 라우팅을 추가하고, 엄격한 라우팅은 트래픽이 가상 인터페이스를 우회하는 것을 강하게 제한합니다. 일관된 연결이 필요한 환경에 적합하지만 가상 머신, 컨테이너, 기업 네트워크 또는 로컬 공유 서비스와 충돌하기도 쉽습니다. 먼저 자동 라우팅으로 확인한 뒤 실제 누출 경로를 기준으로 엄격한 라우팅을 검토하세요. 기존 라우팅 테이블을 이해하지 못한 상태에서 여러 강제 옵션을 동시에 켜지 마세요.
LAN과 사설 주소는 일반적으로 직접 연결해야 프린터, 라우터 관리 페이지, 파일 공유 및 내부 서비스에 접근할 수 있습니다. 여기에는 두 계층이 있습니다. 시스템 라우팅이 사설 주소를 TUN에서 우회시키는지, 그리고 코어에 들어온 뒤 라우팅이 사설 주소를 직접 연결 아웃바운드로 보내는지입니다. 두 계층이 모두 올바라야 안정적으로 접속됩니다. 기업 네트워크에서는 내부 주소가 흔한 사설 대역만 사용하지 않고 내부 DNS와 특정 라우팅에 의존할 수도 있으므로, 기본 사설 주소 규칙 외에 명확한 내부 도메인과 네트워크 대역을 추가해야 합니다.
MTU, 프로토콜 스택 및 성능
MTU는 가상 인터페이스에서 하나의 패킷이 가질 수 있는 최대 크기를 결정합니다. 너무 크면 일부 경로에서 제대로 전달되지 않아 작은 웹페이지는 열리지만 대용량 파일이나 특정 요청이 멈출 수 있고, 너무 작으면 단편화와 처리 오버헤드가 늘어납니다. 뚜렷한 증상이 없다면 클라이언트 기본값을 사용하세요. 경로 MTU 문제가 확인된 경우에만 단계적으로 낮추고 매번 웹페이지, 파일 전송 및 실시간 연결을 테스트합니다. 다른 네트워크 환경의 값을 그대로 복사하지 마세요.
TUN 스택마다 호환성, UDP 처리 및 시스템 통합 방식이 다릅니다. 클라이언트의 기본 옵션은 일반적인 환경을 대상으로 합니다. 스택 변경은 특정 문제를 해결하기 위한 단계로만 사용하세요. 변경 후 DNS는 정상인데 특정 연결 유형만 실패한다면 TCP와 UDP 로그를 비교합니다. 모든 애플리케이션이 연결되지 않는다면 인터페이스에 주소가 할당되었는지, 기본 라우팅이 TUN을 가리키는지, 노드 서버 주소가 프록시로 되돌아가 순환을 만들고 있지 않은지 확인하세요.
플랫폼별 차이와 충돌 원인
| 플랫폼 | 중점 확인 항목 | 일반적인 충돌 | 확인 방법 |
|---|---|---|---|
| Windows | 가상 인터페이스, 관리자 권한, 시스템 라우팅 | 다른 가상 네트워크 카드, 기업 보안 정책 | 어댑터와 라우팅 테이블을 확인한 뒤 여러 애플리케이션 테스트 |
| macOS | 네트워크 확장 권한, 현재 네트워크 서비스 | 이전 권한 잔여, 다른 네트워크 확장 | 시스템 권한을 확인하고 연결을 다시 설정 |
| Android | 시스템 네트워크 연결 권한, 백그라운드 제한 | 배터리 절전 정책, 항상 활성화된 다른 연결 | 클라이언트를 전면에 유지한 상태로 테스트한 뒤 백그라운드 확인 |
| Linux | TUN 장치 권한, 라우팅 및 DNS 관리 서비스 | 컨테이너 브리지, 방화벽 규칙 | 인터페이스, 정책 라우팅 및 해석 서비스 확인 |
Android의 v2rayNG와 v2flyNG는 시스템이 제공하는 네트워크 연결 방식을 사용하므로 권한, 백그라운드 실행 및 배터리 제한을 중점적으로 점검해야 합니다. 데스크톱의 v2rayN은 라우팅 테이블과 DNS 서비스를 자세히 확인하기에 더 적합합니다. 여러 플랫폼에서 구성을 동기화할 때 TUN 매개변수를 완전히 복사할 수 있다고 가정하지 마세요. 규칙의 목적을 동기화한 뒤 플랫폼에 맞게 인터페이스, 권한 및 스택 구현을 다시 선택해야 합니다.
종료 후 시스템 네트워크 복구
비정상 종료로 시스템 프록시, DNS 또는 라우팅 상태가 남을 수 있습니다. 정상적인 처리 순서는 클라이언트를 다시 시작하고 TUN과 시스템 프록시를 먼저 끈 다음 클라이언트를 종료하는 것입니다. 이후 시스템 네트워크 설정이 자동으로 복구되었는지 확인하세요. 도메인만 접속되지 않고 IP는 연결된다면 DNS 복구를 우선 확인하고, 모든 대상에 접근할 수 없다면 기본 라우팅과 가상 인터페이스를 점검합니다. 브라우저만 이상하다면 브라우저의 프록시 출처를 확인하세요. 클라이언트를 반복해서 재설치해도 시스템 계층에 남은 상태가 해결되지는 않으므로 어느 계층이 복구되지 않았는지 먼저 확인하는 편이 효과적입니다.
문제 해결 원칙: TUN에 문제가 생기면 먼저 시스템 프록시 기준 상태로 돌아가세요. 노드, 구독 및 기본 라우팅이 정상인지 확인한 뒤 인터페이스, 권한, DNS 및 엄격한 라우팅을 점검해 작동하지 않는 상태에 규칙을 계속 추가하지 않도록 합니다.
FakeDNS의 작동 방식과 적용 범위
FakeDNS는 도메인에 주소 풀에서 임시 주소를 반환하고 코어 내부에 도메인과 해당 주소의 매핑을 저장합니다. 애플리케이션이 이 임시 주소로 연결하면 코어가 매핑을 통해 원래 도메인을 복원한 뒤 라우팅과 실제 연결을 수행합니다. 주로 해결하는 문제는 일부 애플리케이션이 먼저 자체 DNS 조회를 실행한 다음 IP 연결만 TUN에 넘겨 코어가 원래 도메인을 잃고 도메인 규칙이 적중하지 못하는 상황입니다. FakeDNS는 이후 연결 단계까지 도메인 정보를 보존해 분할 라우팅 판단을 안정적으로 만듭니다.
FakeDNS는 일반 DNS 서버의 대체품이 아니며 모든 해석을 자동으로 개선하지도 않습니다. 코어가 도메인을 복원한 뒤 실제 연결을 만들 때는 여전히 구성에 따라 해석을 완료하거나 해당 아웃바운드에 맡겨야 합니다. 라우팅, 실제 DNS 또는 아웃바운드 구성이 잘못되면 FakeDNS가 문제를 더 알아보기 어렵게 만들 뿐입니다. 따라서 TUN 기본 경로와 일반 DNS가 안정된 뒤 활성화하고, 어떤 조회가 FakeDNS로 들어가며 어떤 내부 도메인이 실제 주소를 반환해야 하는지 명확히 정해야 합니다.
주소 풀과 매핑 용량
FakeDNS 구성에는 주소 풀과 매핑 용량이 포함됩니다. 주소 풀은 전용 예약 범위를 사용해야 하며 LAN, 기업 네트워크, 컨테이너 네트워크 또는 기존 가상 인터페이스와 겹치면 안 됩니다. 겹치면 시스템이 임시 주소를 실제 네트워크로 보내거나 실제 내부 주소를 FakeDNS로 잘못 전달할 수 있습니다. 용량은 동시에 저장할 수 있는 도메인 매핑 수를 결정합니다. 용량이 부족하면 오래된 매핑이 제거되고 애플리케이션이 이전 주소를 계속 보유할 때 도메인을 복원하지 못할 수 있습니다. 일상적인 사용에서는 클라이언트 기본값을 유지하고, 동시 도메인이 많으며 로그에 매핑 제거가 표시될 때만 조정하세요.
{
"fakedns": [
{
"ipPool": "198.18.0.0/15",
"poolSize": 65535
}
]
}
198.18.0.0/15는 일반적인 벤치마크용 예약 주소 범위이며 많은 구현에서 가상 매핑에 사용합니다. 사용하기 전에 로컬 네트워크와 다른 도구가 이 범위를 사용하지 않는지 확인하세요. 구성 조각은 코어 내부의 FakeDNS 객체만 나타냅니다. 조회가 실제로 이 객체에 들어가려면 해당 DNS 설정, 인바운드 스니핑 및 TUN 연결이 추가로 필요합니다. 객체만 단독으로 추가해도 시스템 조회 경로가 자동으로 바뀌지는 않습니다.
스니핑과 대상 덮어쓰기
인바운드 스니핑은 연결에서 도메인이나 프로토콜 정보를 식별하는 기능입니다. FakeDNS와 함께 사용할 때 일반적인 대상 덮어쓰기 범위에는 HTTP, TLS 및 FakeDNS 매핑이 포함됩니다. 대상 덮어쓰기를 켤지는 클라이언트 템플릿에 따라 결정해야 합니다. 복원된 도메인으로 라우팅할 수 있지만 일부 특수 연결의 대상 처리가 바뀔 수도 있습니다. 먼저 클라이언트가 제공하는 표준 FakeDNS 모드를 사용해 생성된 구성을 확인한 뒤 사용자 지정하세요. 모든 프로토콜 식별 옵션을 한꺼번에 켜지 마세요.
{
"inbounds": [
{
"tag": "tun-in",
"protocol": "tun",
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"fakedns"
],
"routeOnly": true
}
}
]
}
routeOnly는 식별 결과를 주로 라우팅 판단에 사용하고 최종 연결 대상을 직접 바꾸지는 않는다는 뜻입니다. 대상 변경의 영향을 줄이고 싶은 환경에 적합합니다. 구체적인 필드를 현재 코어와 클라이언트 구성 방식이 지원하는지는 클라이언트가 생성한 결과를 기준으로 확인해야 합니다. 구성 로드 시 알 수 없는 필드 오류가 발생하면 사용자 지정 조각을 먼저 되돌리고 화면의 FakeDNS 옵션을 사용한 뒤 코어 계열과 구성 형식이 일치하는지 확인하세요.
FakeDNS에 맡기지 않는 것이 좋은 대상
LAN 도메인, 기업 내부 도메인, 인쇄 및 검색 서비스는 일반적으로 실제 주소가 필요하므로 FakeDNS를 우회해 내부 DNS로 보내야 합니다. 로컬 주소 판단, 인증서 바인딩 또는 특수한 해석 결과에 의존하는 애플리케이션도 가상 매핑에 적합하지 않을 수 있습니다. 제외 규칙은 최대한 구체적으로 작성하세요. 명확한 내부 도메인과 예약 접미사를 먼저 제외한 뒤 추가 문제가 있는지 관찰합니다. 광범위한 도메인을 통째로 제외하면 FakeDNS가 도메인을 보존한다는 의미가 사라집니다.
일부 애플리케이션은 DNS 반환 주소를 검증하거나 시스템 해석을 우회하거나 자체 암호화 조회를 사용합니다. 앞의 두 경우에는 FakeDNS가 적용되지 않을 수 있고, 마지막 경우에는 조회가 일반 HTTPS 연결로 TUN에 들어올 수 있습니다. 이때 코어는 연결 특성으로 도메인 복원을 시도할 수 있을 뿐입니다. 로그에 FakeDNS 조회가 보이지 않는다면 주소 풀을 반복해서 바꾸지 말고 애플리케이션의 조회가 클라이언트로 들어오는지 먼저 확인하세요.
일반적인 장애 판단 순서
활성화 후 전혀 해석되지 않는다면 먼저 DNS가 조회를 FakeDNS로 보내는지 확인합니다. 임시 주소는 반환되지만 연결에 실패한다면 TUN이 해당 주소 범위를 연결하는지와 인바운드가 도메인을 복원할 수 있는지 점검합니다. 내부 서비스만 실패한다면 내부 도메인 제외 규칙과 LAN DNS를 확인하고, 일정 시간 사용한 뒤 간헐적으로 실패한다면 매핑 용량, 애플리케이션 캐시 및 절전 모드 복구를 확인하세요. 증상마다 원인이 되는 계층이 다르므로 DNS 서버 교체만으로 모든 문제를 해결할 수는 없습니다.
확인할 때 조회가 예약 주소를 반환하는지 관찰한 뒤 코어 로그에서 같은 주소가 원래 도메인으로 매핑되는지와 최종 아웃바운드를 확인할 수 있습니다. 임시 주소는 실제 서버를 나타내지 않으므로 시스템 도구로 임시 주소에 직접 연결해 서버 도달 가능성을 판단하지 마세요. FakeDNS를 끈 뒤에는 애플리케이션과 시스템의 관련 DNS 캐시를 정리해 이미 무효화된 임시 주소로 계속 연결하지 않도록 합니다.
적용 조건: FakeDNS는 TUN이 안정적으로 작동하고 도메인 규칙이 많으며 애플리케이션이 IP 연결만 제출하는 환경에 가장 적합합니다. 일반 시스템 프록시가 대상 도메인을 이미 보존하고 있다면 FakeDNS를 추가해도 뚜렷한 이점이 없는 경우가 많습니다.
실제 DNS 분할과 함께 사용하기
성숙한 구성에서는 FakeDNS와 실제 DNS를 함께 사용합니다. 일반 공용 도메인은 먼저 임시 주소를 반환해 도메인을 보존하고, 내부 도메인은 LAN DNS에 직접 조회해 실제 주소를 얻으며, 노드 서버 도메인은 기본 DNS로 시작 단계에서 해석하고, 일부 지정 서비스만 전용 암호화 조회를 사용합니다. 각 도메인 그룹에는 명확한 우선순위를 부여해 같은 대상이 내부 DNS와 FakeDNS에 동시에 일치하지 않도록 하세요. 변경 후에는 공용 웹페이지, 내부 서비스, 노드 재연결 및 시스템 절전 복구를 각각 테스트해 수명 주기가 바뀌어도 매핑을 다시 만들 수 있는지 확인합니다.
다중 구독 관리, 업데이트 및 마이그레이션
다중 구독 관리의 어려움은 주소를 많이 가져오는 데 있지 않고 출처의 경계, 업데이트 책임 및 장애 격리를 명확히 하는 데 있습니다. 각 구독에는 독립적인 이름, 그룹 및 업데이트 주기를 지정하고 직접 구축한 서버는 별도 그룹에 두며 임시 테스트 구독은 기본적으로 자동 업데이트를 끄는 것이 좋습니다. 이렇게 하면 업데이트로 노드가 사라지거나 메모가 바뀌거나 매개변수를 해석하지 못했을 때 혼합 목록을 하나씩 대조하지 않고도 영향 범위를 빠르게 파악할 수 있습니다.
구독 이름은 장기간 안정적으로 유지하고 노드 이름은 출처 업데이트에 맡기세요. ‘용도—출처’ 형식의 짧은 이름을 사용하고 현재 날짜, 속도 또는 온라인 상태를 구독 이름에 넣지 않는 것이 좋습니다. 같은 출처의 예비 구독 주소가 있다면 주 진입점 하나만 활성화하고 예비 주소는 기록에만 남겨 동시에 업데이트하지 마세요. 그렇지 않으면 중복 노드가 대량으로 가져와질 수 있습니다. 여러 기기에서 사용할 때 그룹 이름을 같게 유지하면 비교하기 쉽지만, 활성 노드와 자동 업데이트 주기는 각 기기의 네트워크 환경에 맞게 따로 설정해야 합니다.
자동 업데이트 시간과 실패 정책
자동 업데이트는 안정적인 구독에 적합하지만 지나치게 자주 실행해서는 안 됩니다. 구독 내용은 보통 분 단위로 바뀌지 않으므로 업데이트가 너무 잦으면 실패 로그가 늘고 네트워크가 막 복구된 시점에 현재 목록을 반복해서 덮어쓸 수 있습니다. 데스크톱에서는 일정한 간격으로 업데이트하되 수동 업데이트 메뉴를 남겨두세요. 모바일에서는 백그라운드 제한을 고려해야 하며 클라이언트가 전면 실행 중이거나 시스템에서 백그라운드 실행을 허용할 때만 업데이트를 완료할 수 있습니다. ‘업데이트 성공’이 표시된 뒤에도 요청 완료 여부만 보지 말고 항목 수와 해석 상태를 확인하세요.
업데이트 실패는 네트워크 요청 실패, 콘텐츠 형식 오류 및 일부 항목 해석 실패로 나눌 수 있습니다. 요청에 실패하면 기존 목록을 보존하는 것이 가장 중요하므로 즉시 그룹을 삭제하고 다시 만들지 마세요. 형식 오류가 발생하면 구독이 예상한 콘텐츠를 반환하는지 확인하고, 일부 해석에 실패하면 클라이언트가 지원하지 않는 프로토콜이나 필드가 있는지 점검합니다. 나머지 정상 항목은 계속 사용할 수 있습니다. 실패가 이어지면 같은 네트워크에서 기본 연결을 확인한 뒤 네트워크를 바꾸어 구독 입구에 접근할 수 없는 것인지 클라이언트 해석 문제인지 구분하세요.
병합 정책과 중복 노드
여러 구독을 출처를 추적할 수 없는 하나의 그룹으로 영구 병합하는 것은 권장하지 않습니다. 병합한 목록은 단기적으로 편하지만 나중에 어느 출처를 업데이트하거나 삭제해야 하는지 판단할 수 없습니다. 더 나은 방법은 출처별 그룹을 유지하고 필터로 임시 후보 목록을 만드는 것입니다. 클라이언트가 그룹 간 필터를 제공한다면 프로토콜, 용도 또는 메모 키워드로 결과를 표시하세요. 제공하지 않는다면 각 그룹에서 일관된 접두사를 유지해 전환 비용을 줄입니다.
중복 노드를 판단할 때는 전체 연결 식별 정보를 비교해야 합니다. 주소와 포트가 같아도 사용자 식별자, TLS 서버 이름, 전송 경로 및 프로토콜이 다를 수 있으므로 반드시 중복이라고 할 수 없습니다. 메모가 같아도 매개변수가 같다는 뜻은 아닙니다. 핵심 필드가 완전히 같은 경우에만 중복 삭제가 적합합니다. 두 구독이 같은 서버를 장기간 제공한다면 하나를 주 출처로 선택하고 다른 하나는 독립적인 예비 그룹으로 남겨 자동 업데이트로 시각적 중복이 계속 생기지 않게 하세요.
구독 덮어쓰기와 로컬 수정
자동 구독의 노드 매개변수는 일반적으로 제공자가 관리합니다. 로컬에서 메모를 바꾸면 업데이트 후 유지될 수도 있고 덮어써질 수도 있으며, 서버 매개변수 수정은 다음 업데이트에서 사라질 가능성이 더 큽니다. 장기간 사용자 지정할 항목은 ‘직접 구축한 노드’ 또는 ‘로컬 수정’ 그룹으로 복사하고 이름에 용도를 표시하세요. 복사한 항목은 더 이상 출처 업데이트를 자동으로 받지 않으므로 서버 매개변수가 바뀌면 수동으로 관리해야 합니다. 구독 원본과 복사본을 동시에 수정하면 장애 시 어느 항목을 사용 중인지 확인하기 어려워집니다.
라우팅, DNS 및 TUN 설정은 특정 노드와 최대한 독립적으로 유지해야 합니다. 아웃바운드 태그와 클라이언트 생성 로직이 안정적이라면 구독을 바꿀 때 전체 라우팅을 다시 작성할 필요가 없어야 합니다. 특정 노드 유형이 특정 네트워크 유형을 지원하지 않는다면 공통 라우팅에 노드 이름 조건을 대량으로 추가하기보다 별도 구성 파일이나 그룹 정책으로 처리하세요. 구성 의존성이 적을수록 마이그레이션과 복구가 쉬워집니다.
기기 간 마이그레이션에 필요한 최소 항목
마이그레이션할 때는 구독 출처, 수동 노드, 사용자 라우팅, DNS 규칙 및 필요한 클라이언트 설정을 우선 가져오고 실행 중 캐시, 로그 또는 임시 생성 구성은 복사하지 마세요. v2rayN, v2rayNG 및 v2flyNG는 화면과 코어 계열이 다르므로 전체 구성을 다른 클라이언트에 바로 가져올 수 있다고 보장할 수 없습니다. 먼저 구독을 옮겨 단일 노드 연결을 확인한 뒤 ‘라우팅, DNS, TUN, FakeDNS’ 순서로 고급 설정을 다시 구성하세요.
민감한 필드는 공개 백업, 스크린샷 또는 공유 문서에 포함하지 않아야 합니다. 문제 해결 정보를 공유할 때는 프로토콜 유형, 전송 방식, 규칙 구조 및 오류 범주는 남기되 서버 주소, 사용자 식별자, 구독 주소 및 인증 정보는 숨기세요. 두 기기를 비교해야 한다면 클라이언트 이름, 플랫폼, 연결 모드, DNS 정책 및 규칙 적중 결과를 기록하면 됩니다. 이러한 정보만으로도 대개 차이를 찾을 수 있습니다.
업데이트 후 검수 목록
중요한 업데이트 후 다음을 순서대로 확인하세요. 구독 이름이 올바른 출처를 계속 가리키는지, 직접 구축한 그룹이 덮어써지지 않았는지, 현재 활성 노드가 남아 있는지, 새 항목이 클라이언트에서 인식되는지, 필터가 메모와 계속 일치하는지, 라우팅과 DNS가 삭제된 아웃바운드 태그에 의존하지 않는지, 자동 업데이트 실패 시 기존 목록을 사용할 수 있는지 확인합니다. 마지막으로 클라이언트를 재시작하고 새 연결을 한 번 수행해 메모리에 남은 이전 구성만 확인하지 않도록 합니다.
마이그레이션 팁: 클라이언트 간에는 임시로 생성된 완전한 파일을 그대로 옮기기보다 ‘구성 의도’를 우선 이전하세요. 기본 연결을 먼저 복구한 뒤 고급 설정을 계층별로 되살려야 문제가 발생했을 때 정확히 되돌릴 수 있습니다.
업데이트 후 많은 항목을 인식하지 못한다면 먼저 사용 중인 클라이언트와 대상 플랫폼이 올바른지 확인하세요. 데스크톱에서는 v2rayN을 선택하고, Android에서는 코어 요구 사항에 따라 v2rayNG 또는 v2flyNG를 선택할 수 있습니다. 설치 메뉴는 V2Ray 클라이언트 다운로드 페이지에 모아 두었으며 Windows, macOS, Android 및 Linux별로 분류되어 있습니다.
사용자 지정 아웃바운드, 체인 포워딩 및 체계적인 문제 해결
아웃바운드는 라우팅 결정의 최종 목적지입니다. 일반적인 아웃바운드에는 프록시 노드, 직접 연결, 차단 및 로컬 또는 업스트림 SOCKS 서비스로의 전달이 있습니다. 사용자 지정 아웃바운드는 특정 업무를 독립된 출구로 보내거나 로컬의 기존 서비스를 재사용하거나 명확한 테스트 경로를 만들 때 유용합니다. 핵심은 태그가 고유하고 프로토콜 매개변수가 완전하며 의존 관계에 순환이 없는 것입니다. 라우팅은 태그로만 아웃바운드를 참조하므로 이름을 바꾼 뒤에는 모든 규칙도 함께 업데이트해야 합니다.
그래픽 클라이언트는 일반적으로 현재 노드에 따라 주요 프록시 아웃바운드를 생성하고 직접 연결 및 차단 아웃바운드도 추가합니다. 수동으로 확장할 때는 클라이언트의 병합 방식을 확인하지 않은 상태에서 이러한 기본 객체를 덮어쓰지 마세요. 더 안전한 방법은 클라이언트가 제공하는 사용자 지정 구성, 사전 구성 또는 템플릿 메뉴를 사용해 고유 태그를 새로 만들고 구체적인 규칙 하나로 테스트하는 것입니다. 실행 중인 파일을 직접 수정하면 노드 전환이나 재시작 후 사라질 수 있고 화면 상태와 실제 구성이 달라질 수도 있습니다.
로컬 SOCKS 업스트림 추가
{
"outbounds": [
{
"tag": "local-socks",
"protocol": "socks",
"settings": {
"servers": [
{
"address": "127.0.0.1",
"port": 1081
}
]
}
}
]
}
예시는 local-socks라는 아웃바운드를 만들고 연결을 로컬 1081 포트의 SOCKS 서비스로 전달합니다. 사용하기 전에 해당 포트가 실제로 수신 중인지 확인하고, 업스트림 트래픽이 같은 TUN에 다시 포착되어 자기 자신으로 돌아가지 않도록 주의하세요. 업스트림에 인증이 필요하다면 클라이언트가 지원하는 구성 구조에 실제 자격 증명을 추가하고 로컬에만 보관합니다. 테스트할 때는 먼저 명확한 도메인 하나를 이 아웃바운드로 지정하고 전체 트래픽을 바로 전환하지 마세요.
{
"routing": {
"rules": [
{
"type": "field",
"domain": [
"domain:service.example"
],
"outboundTag": "local-socks"
}
]
}
}
규칙의 태그는 아웃바운드 태그와 철자까지 완전히 같아야 합니다. 구성 로드에 실패하면 먼저 JSON 구조, 중복 쉼표 및 필드 위치를 확인하고, 로드는 성공했지만 업스트림으로 가지 않으면 규칙 순서와 도메인 적중 여부를 확인합니다. 적중은 되었지만 연결에 실패할 때 로컬 포트, 업스트림 인증 및 순환 라우팅을 점검하세요. 계층별 점검이 노드를 계속 바꾸는 것보다 빠릅니다.
체인 포워딩의 위험 관리
체인 포워딩은 하나의 아웃바운드가 다른 아웃바운드를 통해 연결을 만들도록 합니다. 명확한 네트워크 토폴로지가 있는 환경에는 적합하지만 해석 의존성, 연결 계층 및 장애 지점이 늘어납니다. 시작하기 전에 경로를 그려 보세요. 애플리케이션이 어느 인바운드로 들어오는지, 라우팅이 어느 업무 아웃바운드를 선택하는지, 해당 아웃바운드가 어느 선행 아웃바운드를 통해 연결하는지, 노드 서버 도메인을 누가 해석하는지 적습니다. 경로의 어느 한 지점이라도 앞선 진입점으로 되돌아가면 순환이 발생할 수 있습니다.
체인 구조를 모호한 전역 규칙으로 구현해서는 안 됩니다. 선행 아웃바운드와 업무 아웃바운드에 명확한 태그를 사용하고 업스트림 서버 주소에는 필요한 직접 연결 또는 지정 라우팅을 추가하세요. 체인을 거치지 않는 기본 연결도 하나 남겨 복구에 사용합니다. 시간 초과가 발생하면 먼저 각 단계를 따로 확인한 뒤 조합 테스트를 진행하세요. 단독으로는 작동하지만 조합에서 실패한다면 DNS 시작 의존성, UDP 지원 및 TUN이 업스트림 연결을 다시 포착하는지 중점적으로 확인합니다.
직접 연결 및 차단 아웃바운드
직접 연결 아웃바운드는 LAN, 내부 서비스 및 프록시가 필요 없는 대상에 사용합니다. 차단 아웃바운드는 연결을 명확히 거부할 때 사용합니다. 차단 규칙은 구체적으로 작성하고 포괄적인 프록시 규칙보다 앞에 배치하세요. 넓은 범위의 분류를 직접 사용하면 로그인, 결제, 업데이트 또는 삽입 리소스에 영향을 줄 수 있으므로 추가 후 페이지의 기본 도메인과 리소스 도메인을 확인해야 합니다. 특정 애플리케이션만 프록시를 사용하지 않게 하려면 프로세스 규칙이나 인바운드 격리를 우선 사용하세요. 클라이언트와 코어가 안정적인 프로세스 식별을 지원하지 않을 때만 설명 가능한 도메인 및 IP 조건을 사용합니다.
직접 연결이라고 해서 모든 클라이언트 처리를 우회하는 것은 아닙니다. 트래픽이 먼저 TUN으로 들어온 뒤 코어가 직접 연결 아웃바운드를 선택할 수도 있고, 시스템 라우팅 계층에서 바로 TUN을 우회할 수도 있습니다. 두 방식은 로그, DNS 및 로컬 서비스 호환성에 서로 다른 영향을 줍니다. 기록과 통합 라우팅이 필요하다면 트래픽을 코어로 들여보낸 뒤 직접 연결할 수 있고, LAN 검색이나 장치 접근처럼 로컬 네트워크에 민감한 트래픽은 일반적으로 시스템 라우팅 계층에서 우회하면서 사설 주소 직접 연결 규칙도 유지하는 편이 적합합니다.
로그로 문제 해결 매트릭스 만들기
고급 설정 문제 해결에서는 네 가지 질문에 답해야 합니다. 트래픽이 클라이언트로 들어오는가, 도메인을 누가 해석하는가, 어떤 라우팅 규칙이 적중했는가, 최종 아웃바운드가 연결을 설정했는가입니다. 로그 수준은 문제 해결 중에만 높이고 완료 후에는 일반 수준으로 되돌려 많은 기록 때문에 검색이 어려워지지 않게 하세요. 로그에 대상 요청이 없으면 시스템 프록시, 애플리케이션 프록시 또는 TUN을 확인합니다. 요청은 있지만 도메인이 없으면 DNS 연결과 스니핑을 확인하고, 라우팅 태그가 잘못되었으면 규칙 순서를 조정합니다. 아웃바운드 연결에 실패하면 해당 서버와 업스트림을 점검하세요.
| 증상 | 가능한 계층 | 첫 번째 확인 항목 | 다음 단계 |
|---|---|---|---|
| 클라이언트는 실행되지만 애플리케이션이 직접 연결 | 인바운드 연결 | 애플리케이션이 시스템 프록시를 따르는지 여부 | 애플리케이션 프록시를 별도로 설정하거나 TUN 테스트 |
| 도메인은 실패하지만 IP는 연결됨 | DNS | 조회가 예상한 서버로 들어가는지 여부 | 캐시, 주소 체계 및 조회 라우팅 확인 |
| 대상이 잘못된 경로로 연결됨 | 라우팅 | 첫 번째 적중 규칙 | 구체적인 규칙과 기본 규칙의 순서 조정 |
| 올바르게 적중했지만 연결 시간 초과 | 아웃바운드 또는 업스트림 | 아웃바운드 태그에 대응하는 객체 | 노드, 로컬 포트 및 네트워크를 각각 테스트 |
| TUN을 켠 뒤 모든 연결이 끊김 | 인터페이스와 시스템 라우팅 | 가상 인터페이스와 기본 라우팅 | 엄격한 라우팅을 끄고 DNS 확인 |
| FakeDNS는 주소를 반환하지만 연결 실패 | 매핑과 인바운드 | TUN이 주소 풀을 연결하는지 여부 | 도메인 복원과 스니핑 설정 확인 |
장기간 유지할 수 있는 구성 만들기
유지 관리가 쉬운 구성은 노드 이름, 임시 주소 및 화면 정렬에 대한 의존성을 최대한 줄여야 합니다. 라우팅은 안정적인 아웃바운드 태그를 참조하고 DNS는 명확한 도메인 그룹을 사용하며 구독은 출처의 경계를 유지해야 합니다. TUN과 FakeDNS는 필요할 때만 활성화하세요. 각 사용자 지정 객체에 용도를 적고 정상적으로 작동하는 기본 구성도 보존합니다. 장애가 발생하면 최근에 추가한 객체부터 비활성화해 기준 상태가 복구되는지 확인한 뒤 문제를 규칙 하나 또는 아웃바운드 하나로 좁혀 가세요.
구성을 완료한 뒤 네 차례 검수하세요. 클라이언트를 재시작해 구성을 불러올 수 있는지 확인하고, 노드를 전환해 라우팅이 이전 노드에 의존하지 않는지 확인합니다. 구독을 업데이트해 사용자 지정 그룹과 태그가 덮어써지지 않았는지 확인하고, 시스템을 재시작해 TUN·DNS·시스템 프록시가 올바르게 연결되고 복구되는지 확인하세요. 웹페이지 한 번 접속한 것만으로는 완료로 볼 수 없습니다. 내부 네트워크를 사용한다면 LAN 서비스, 내부 도메인 및 시스템 절전 복구도 추가로 확인합니다.
마무리 확인: 구독은 노드를 제공하고, 필터는 후보를 줄이며, DNS는 해석을 담당하고, 라우팅은 아웃바운드를 선택합니다. TUN은 연결 범위를 넓히고, FakeDNS는 도메인을 보존하며, 사용자 지정 아웃바운드는 특정 경로를 완성합니다. 계층별로 기록해 두면 복잡한 구성도 되돌리고 재현할 수 있습니다.
문제를 계속 찾지 못한다면 먼저 빠른 시작 기본 흐름으로 돌아가 최소 연결을 확인한 뒤 도움말 센터에서 설치 설정과 문제 해결 항목을 확인하세요. 시스템 프록시, DNS 또는 속도 차이가 관련된 경우 사이트의 기술 노트에 있는 계층별 사례를 함께 참고할 수 있습니다.