FOUNDATION
올바른 데이터 흐름 개념부터 세우기
클라이언트, 코어와 설정 파일의 역할
일반적으로 V2Ray 클라이언트는 그래픽 인터페이스, 프록시 코어, 설정 데이터의 세 부분으로 구성됩니다. 그래픽 인터페이스는 구독 수신, 노드 관리, 모드 전환과 로그 표시를 담당하고, 코어는 로컬 포트 수신, 아웃바운드 연결 수립과 라우팅 규칙 실행을 맡습니다. 설정 데이터는 인바운드, 아웃바운드, DNS와 라우팅 사이의 관계를 정의합니다. 문제가 발생하면 무작정 재설치하기보다 어느 계층의 문제인지 먼저 판단하는 편이 효과적입니다. 인터페이스가 열린다는 사실은 관리 계층이 정상이라는 뜻일 뿐이며, 노드가 “선택됨”으로 표시되어도 아웃바운드 핸드셰이크가 성공했다는 의미는 아닙니다. 실제 연결 결과는 테스트 요청과 실행 로그를 함께 확인해야 합니다.
v2rayN은 Windows, macOS와 Linux 데스크톱 환경에서 우선적으로 사용하는 그래픽 클라이언트로, Xray와 V2Fly 등 코어에 맞는 설정을 관리할 수 있습니다. v2rayNG는 Android용이며 일반적으로 Xray 코어를 사용합니다. v2flyNG 역시 Android용이지만 V2Fly 코어를 사용하므로, 해당 설정을 이미 사용하거나 V2Fly 설정 의미를 유지하려는 사용자에게 적합합니다. 세 이름에서 “클라이언트”와 “코어”는 서로 바꿔 이해하면 안 됩니다. 구독에 포함된 특정 프로토콜은 현재 코어가 지원해야 연결할 수 있으며, 인터페이스에 노드가 표시되는지는 최종 판단 기준이 아닙니다.
웹페이지 접속은 어떤 과정을 거치는가
브라우저로 웹페이지에 접속하는 경우, 애플리케이션은 먼저 도메인을 DNS에 전달해 해석합니다. 이후 시스템 프록시, 애플리케이션 프록시 또는 TUN 인계 상태에 따라 요청이 로컬 프록시 진입점으로 들어갈지 결정됩니다. 클라이언트에 들어온 요청은 라우팅 모듈이 도메인, 대상 주소, 포트, 네트워크 유형이나 프로세스 정보를 기준으로 아웃바운드를 선택합니다. 그다음 프록시 아웃바운드가 노드 매개변수를 사용해 원격 서비스와 연결을 수립하고 응답을 되돌려 보냅니다. 어느 한 단계의 설정이 잘못되어도 “웹페이지가 열리지 않음”으로 나타날 수 있지만, 실제 오류 위치는 서로 다릅니다. DNS 실패는 사용 가능한 대상 주소가 없다는 뜻인 경우가 많고, 시스템 프록시가 적용되지 않으면 요청이 코어에 들어오지 않습니다. 라우팅 오판은 대상을 잘못된 아웃바운드로 보낼 수 있으며, 노드 핸드셰이크 실패는 오류 로그에 연결 또는 인증 정보로 남습니다.
따라서 문제를 해결할 때는 데이터 흐름을 가까운 곳부터 먼 곳으로 따라가야 합니다. 먼저 코어가 시작되어 로컬 포트를 수신 중인지 확인하고, 대상 애플리케이션이 실제로 해당 진입점을 사용하는지 확인한 뒤 DNS와 라우팅 결정을 점검합니다. 노드와 회선은 마지막에 평가합니다. 연결성 확인을 속도 테스트로 대신하면 문제를 혼동하기 쉽습니다. 노드 하나가 TCP 테스트를 통과했다는 것은 특정 포트에 도달할 수 있다는 뜻일 뿐입니다. 프로토콜 핸드셰이크가 완료되는지, DNS가 올바른지, 대상 사이트가 예상대로 분기되는지는 실제 요청과 로그를 함께 확인해야 합니다.
프로토콜, 전송 계층과 보안 계층을 하나로 보지 않기
VMess, VLESS, Trojan 등은 주로 프록시 프로토콜과 인증 방식을 설명하고, TCP, WebSocket, gRPC 등은 데이터 운반 방식을 설명합니다. TLS와 REALITY 등은 핸드셰이크와 암호화 계층에 영향을 줍니다. 구독은 이러한 매개변수를 노드로 조합하며, 클라이언트로 가져온 뒤에는 서버가 요구하는 대응 관계를 유지해야 합니다. 수동으로 편집할 때 주소, 포트, 사용자 식별자, 전송 방식, 호스트명, 경로와 보안 계층 중 하나라도 맞지 않으면 시간 초과, 핸드셰이크 실패 또는 인증 거부가 발생할 수 있습니다. 프로토콜 이름만 보고 전송 매개변수를 추측하거나 “최적화”를 위해 여러 필드를 동시에 바꾸지 마세요.
“구독 관리”와 “개별 노드 설정”도 구분해야 합니다. 구독은 서비스 제공자가 관리하는 노드 설명 모음이며, 구독을 업데이트하면 노드가 추가·삭제되거나 조정될 수 있습니다. 개별 노드는 현재 클라이언트에서 선택할 수 있는 특정 아웃바운드입니다. 구독 노드의 이름을 수동으로 바꾸는 것은 대체로 문제가 없지만, 주소·포트·프로토콜 매개변수를 직접 수정하면 다음 업데이트 때 덮어써질 수 있습니다. 장기간 유지해야 하는 로컬 라우팅, DNS와 프록시 모드는 구독 내용에 섞지 말고 클라이언트의 별도 설정 영역에 저장해야 합니다. 이렇게 계층을 나누어 이해하면 이후 각 작업의 위치가 분명해집니다. 다운로드 페이지는 소프트웨어 출처를, 구독은 아웃바운드 정보를, 시스템 프록시나 TUN은 트래픽 진입점을, 라우팅 규칙은 목적지를, 로그는 전체 경로를 복원하는 역할을 담당합니다.
CLIENT SETUP
클라이언트를 선택하고 되돌릴 수 있게 설치하기
플랫폼과 코어 요구 사항에 따라 선택하기
데스크톱 환경에서는 v2rayN을 우선 선택합니다. Windows 사용자는 데스크톱 버전과 클래식 WPF 버전 중에서 고를 수 있습니다. 데스크톱 버전은 새로운 크로스 플랫폼 인터페이스를 사용하므로 여러 데스크톱 시스템에서 비슷한 조작 방식을 원하는 사용자에게 적합합니다. 클래식 WPF 버전은 전통적인 Windows 인터페이스와 기존 사용 흐름에 익숙한 사용자에게 알맞습니다. macOS에서는 Apple Silicon 또는 Intel 칩에 맞는 설치 패키지를 선택하고, Linux에서는 배포판의 패키지 체계에 따라 deb 또는 rpm을 고른 뒤 x64와 arm64 아키텍처도 확인해야 합니다. 모든 다운로드 경로는 클라이언트 다운로드 페이지에 모여 있으며, 다른 플랫폼의 설치 패키지 이름을 바꿔 강제로 실행해서는 안 됩니다.
Android에서는 v2rayNG를 우선 선택합니다. 특히 구독에 Xray 기능을 사용하는 노드가 포함된 경우 적합합니다. v2flyNG는 V2Fly 코어를 사용하는 대안입니다. 대부분의 최신 기기는 arm64 패키지를 사용하며, 아키텍처를 확인할 수 없거나 설치에 실패할 때만 범용 버전을 고려하세요. 두 클라이언트 모두 일반적인 구독과 공유 링크를 읽을 수 있지만 코어 지원 범위가 완전히 같지는 않습니다. 선택할 때는 인터페이스 이름보다 구독에 실제로 포함된 프로토콜과 전송 방식을 먼저 확인하세요.
| 사용 환경 | 우선 사용할 클라이언트 | 설치 시 확인할 항목 | 첫 설정의 핵심 |
|---|---|---|---|
| Windows | v2rayN | 데스크톱 버전 또는 클래식 WPF 버전, x64 아키텍처 | 코어 시작 후 시스템 프록시 상태 확인 |
| macOS | v2rayN | Apple Silicon과 Intel을 구분해 선택 | 필요한 네트워크 설정 변경 허용 |
| Android | v2rayNG | arm64 우선, 호환성에는 범용 버전 사용 | 시스템 연결 권한과 백그라운드 정책 확인 |
| Linux | v2rayN | deb 또는 rpm 선택 후 프로세서 아키텍처 확인 | 데스크톱 환경과 시스템 프록시 지원 확인 |
설치 전에 시스템 아키텍처 확인
Windows에서는 “설정—시스템—시스템 정보”에서 시스템 종류를 확인할 수 있습니다. macOS에서는 시스템 정보에서 칩 이름을 확인하고, Linux에서는 터미널로 아키텍처를 읽을 수 있습니다. 아키텍처를 확인하는 목적은 더 복잡한 패키지를 고르는 것이 아니라 설치 프로그램이 실행되지 않거나 실행 후 필요한 구성 요소를 찾지 못하는 문제를 피하는 데 있습니다. Linux에서 자주 사용하는 명령은 다음과 같습니다. 출력이 x86_64이면 x64를, aarch64 또는 arm64이면 arm64를 선택하세요.
uname -m
# Debian, Ubuntu 등 시스템에서 패키지 아키텍처 확인
dpkg --print-architecture
# rpm 패키지 체계에서 시스템 아키텍처 확인
rpm --eval '%{_arch}'
설치하거나 압축을 풀 디렉터리는 안정적이고 쓰기 가능해야 하며 자주 이동하지 않는 것이 좋습니다. 클라이언트는 보통 구독, 로그, 라우팅 규칙과 인터페이스 설정도 저장합니다. 업데이트할 때마다 새 디렉터리로 옮기면서 설정을 이전하지 않으면 “노드가 갑자기 사라졌다”는 착각이 생깁니다. 데스크톱 클라이언트를 처음 실행한 뒤에는 인터페이스에 코어 상태와 로그 메뉴가 표시되는지 먼저 확인하고, 곧바로 여러 구독을 가져오거나 TUN을 활성화하지 마세요. 모바일에서 처음 연결할 때는 시스템 수준의 네트워크 연결 권한 요청이 나타납니다. 이는 시스템 트래픽을 클라이언트에 전달하는 데 필요한 단계입니다. 권한을 허용한 뒤에는 배터리 관리 설정도 확인해 백그라운드 실행이 너무 일찍 중단되지 않도록 하세요.
첫 실행을 세 가지 확인 단계로 나누기
첫 번째 확인 지점은 “클라이언트가 정상적으로 열리는가”이며, 아키텍처·실행 환경·권한 문제를 찾는 단계입니다. 두 번째는 “코어가 시작되는가”입니다. 이때는 노드가 없어도 포트 충돌, 설정 분석 실패 또는 구성 요소 누락이 발생해서는 안 됩니다. 세 번째에야 “노드를 가져온 뒤 연결되는가”를 확인합니다. 이렇게 나누면 두 번째 단계에서 오류가 발생했을 때 구독 내용을 의심할 필요가 없습니다. 데스크톱에서는 로컬 수신 포트가 다른 프록시 프로그램과 충돌하지 않는지도 확인하세요. 네트워크 도구를 여러 개 동시에 실행하면 동일한 포트가 점유되는 일이 특히 흔합니다.
클라이언트를 업그레이드하기 전에 실행 중인 코어를 종료하고 클라이언트 설정 디렉터리의 백업을 보관하세요. 업그레이드 후에는 기존 구독과 라우팅이 남아 있는지 먼저 확인한 다음 일반 프록시 모드에서 연결을 테스트합니다. 업그레이드 당일에 클라이언트 교체, 코어 전환, DNS 재작성과 TUN 활성화를 동시에 진행하지 마세요. 문제가 생겼을 때 원인 관계를 파악하기 어렵습니다. 시스템 정책이 설치를 막으면 먼저 다운로드한 플랫폼과 아키텍처가 올바른지 확인한 뒤 운영 체제의 정상적인 소프트웨어 권한 절차를 따르세요. 알 수 없는 시스템 파일을 수정해 오류를 우회해서는 안 됩니다.
설치 단계의 최종 확인 기준은 간단합니다. 클라이언트가 안정적으로 시작되고, 코어 로그에 시작 오류가 계속 반복되지 않으며, 로컬 프록시 포트가 수신 중이고, 설정 디렉터리 위치가 분명하며, 클라이언트를 완전히 종료하는 방법을 알고 있어야 합니다. 이 기본 작업을 마친 뒤 구독 단계로 넘어가면 소프트웨어 설치 문제를 노드 문제로 오해하는 일을 줄일 수 있습니다. 우선 한 번의 연결만 완료하려면 빠른 시작 과정으로 이동하세요. 여러 구독을 장기간 관리하려면 다음 장에서 이름 지정, 업데이트와 복귀 규칙을 세우세요.
SUBSCRIPTION
구독을 가져오고 노드 관리 방식 세우기
구독 가져오기의 올바른 순서
구독 주소는 본질적으로 클라이언트가 주기적으로 읽는 설정 출처입니다. 가져올 때는 먼저 클라이언트의 구독 관리 영역에서 주소를 추가하고, 출처와 용도를 알아볼 수 있는 로컬 메모를 입력한 뒤 한 번 업데이트합니다. 업데이트에 성공하면 노드가 해당 그룹에 들어갑니다. 그때 노드 하나를 현재 서버로 선택하고 연결을 시작하세요. 구독 주소를 브라우저 주소창에 직접 붙여 넣지 말고, 공개 페이지나 스크린샷에 전체 주소를 노출하지도 마세요. 주소에 구독 식별용 매개변수가 포함될 수 있습니다.
하나의 클라이언트에서 여러 구독을 관리할 수 있지만, 첫 설정부터 많은 출처를 한꺼번에 가져오는 것은 권장하지 않습니다. 먼저 하나의 구독으로 연결 과정을 완성하고 업데이트·선택·시작·확인 절차가 정상인지 확인한 뒤 업무, 일상 또는 테스트 용도별로 그룹을 추가하세요. 이름은 “구독 1”, “구독 2”가 아니라 용도를 설명해야 합니다. 그렇지 않으면 몇 달 뒤 어떤 규칙과 노드가 관련되어 있는지 판단하기 어렵습니다. 구독 업데이트는 서비스 제공자가 제공하는 노드를 동기화할 뿐, 모든 노드가 현재 네트워크 환경에 적합하다는 것을 자동으로 증명하지는 않습니다.
업데이트, 덮어쓰기와 로컬 설정 이해하기
구독을 업데이트하면 클라이언트는 보통 새 구독 내용에 따라 해당 그룹의 노드를 다시 구성합니다. 서비스 제공자가 삭제한 노드는 사라질 수 있고, 매개변수가 변경된 노드는 교체되며, 구독 노드를 로컬에서 수동 편집한 내용도 원격 값으로 돌아갈 수 있습니다. 따라서 장기간 유지할 라우팅 전략이나 중요한 설명을 특정 구독 노드 안에만 기록해서는 안 됩니다. 계속 보존해야 하는 내용은 클라이언트의 독립적인 라우팅 설정, DNS 설정 또는 백업 기록에 저장하세요. 노드를 임시로 조정해야 한다면 먼저 로컬 설정으로 복사하고 용도를 명확히 적어 다음 업데이트로 덮어쓴 뒤에도 변경 출처를 알 수 있게 하세요.
업데이트 후 노드 수가 변하지 않았다고 해서 업데이트가 실패한 것은 아닙니다. 서비스 제공자가 주소, 포트 또는 전송 매개변수만 수정했을 수 있습니다. 업데이트 결과는 클라이언트 알림과 구독 업데이트 로그를 확인하고, 노드의 업데이트 시간이나 주요 필드를 일부 점검해 판단해야 합니다. 로그에 네트워크 요청 실패가 표시되면 현재 네트워크에서 구독 출처에 접근할 수 있는지 먼저 확인한 뒤 시스템 시간, 프록시 상태와 주소가 완전한지 점검하세요. 구독 업데이트에 기존 프록시가 필요하다면 현재 노드가 여전히 사용 가능해야 합니다. 그렇지 않으면 “연결하려면 업데이트가 필요하고, 업데이트하려면 연결이 필요한” 순환이 생깁니다. 이때는 알려진 로컬 노드로 잠시 전환한 뒤 업데이트할 수 있습니다.
노드 속도 테스트는 목적을 구분하기
클라이언트에서 흔히 제공하는 테스트에는 포트 연결성, 프로토콜 지연 시간, 실제 요청과 속도 테스트가 있습니다. 포트 연결성은 원격 포트에 기본 연결을 수립할 수 있는지만 확인하므로 빠르지만 정보가 제한적입니다. 프로토콜 지연 시간은 더 많은 핸드셰이크 단계를 거쳐 일상적인 사용에 가깝고, 실제 요청은 DNS, 대상 사이트와 라우팅 규칙의 영향도 받습니다. 한 번의 결과는 당시 환경만 보여 주므로 몇 밀리초 차이를 장기적인 품질 판단으로 삼아서는 안 됩니다. 안정성, 패킷 손실, 피크 시간대 혼잡과 프로토콜 오버헤드가 한 번의 지연 수치보다 중요할 수 있습니다.
올바른 선택 방법은 지속적으로 실패하는 노드를 먼저 제외한 뒤, 사용 가능한 노드 몇 개를 골라 실제 접속 결과를 비교하는 것입니다. 테스트할 때마다 같은 프록시 모드, 같은 대상과 비슷한 시간을 유지하고 DNS는 함께 바꾸지 마세요. 속도가 이상하면 노드·회선·로컬 설정의 세 단계 진단을 참고해 노드 부하, 네트워크 경로와 로컬 설정을 나누어 확인하세요. 속도 측정 중에는 대량 다운로드를 동시에 실행하지 마세요. 테스트 자체가 대역폭을 차지할 수 있습니다.
수동 가져오기와 공유 링크의 용도 구분
개별 공유 링크는 노드 하나를 임시로 가져올 때, QR 코드는 신뢰할 수 있는 기기 사이에서 짧은 설정을 옮길 때, 구독은 여러 노드를 지속적으로 동기화할 때 적합합니다. 수동으로 입력할 때는 주소, 포트, 사용자 식별자, 전송 방식, TLS 또는 REALITY 매개변수, 호스트명과 경로를 하나씩 대조하세요. 텍스트가 비슷해 보여도 의미가 같지는 않습니다. 전송 경로의 슬래시, 서비스 이름의 대소문자, 서버 이름 표시 필드가 핸드셰이크에 영향을 줄 수 있습니다. 가져온 직후 설정 분석 오류가 발생하면 형식을 먼저 확인하고, 시작은 되지만 연결 시간이 초과되면 주소·포트와 네트워크를 점검하세요. 로그에 인증 거부가 나타나면 사용자 식별자와 보안 매개변수로 돌아가 확인합니다.
노드 관리의 목표는 항목을 최대한 많이 쌓는 것이 아니라 출처를 분명히 하고, 그룹을 명확히 나누며, 업데이트를 통제하는 것입니다. 장기간 실패한 로컬 테스트 노드는 정기적으로 삭제하고 필요한 메모는 남겨 두세요. 여러 클라이언트에서 같은 설정을 동시에 수동 수정하는 일도 피해야 합니다. 여러 기기에서 사용할 때는 각 기기에서 구독을 독립적으로 업데이트하고 로컬 라우팅과 프록시 모드는 기기별로 관리하는 편이 전체 클라이언트 데이터 디렉터리를 복사하는 것보다 안정적입니다. 이 장을 마치면 다음 세 가지에 답할 수 있어야 합니다. 현재 노드는 어느 구독 그룹에서 왔는가, 마지막 업데이트는 성공했는가, 노드 실패는 구독 읽기 단계에서 발생했는가 프로토콜 연결 단계에서 발생했는가.
PROXY ENTRY
시스템 프록시, 애플리케이션 프록시와 프록시 모드 이해하기
먼저 트래픽 진입점과 라우팅 결과를 구분하기
“시스템 프록시”와 “글로벌 프록시”는 자주 혼용되지만 서로 다른 계층에 속합니다. 시스템 프록시는 운영 체제의 프록시 설정을 따르는 애플리케이션이 요청을 클라이언트로 보낼지 결정합니다. 반면 라우팅의 글로벌 모드는 이미 클라이언트에 들어온 요청이 프록시 아웃바운드를 일괄 사용할지 결정합니다. 전자는 진입점이고 후자는 목적지입니다. 글로벌 라우팅만 켜고 애플리케이션을 클라이언트로 들어오게 하지 않으면 요청은 직접 접속합니다. 시스템 프록시만 활성화했는데 라우팅이 대상을 직접 연결로 판단하면 원격 노드를 거치지 않습니다. 문제를 해결할 때는 두 상태를 따로 확인해야 합니다.
브라우저, 데스크톱 소프트웨어와 명령줄 프로그램은 시스템 프록시를 따르는 정도가 서로 다릅니다. 일부 애플리케이션은 시스템 설정을 읽고, 일부는 자체 네트워크 설정에서 HTTP 또는 SOCKS 포트를 지정해야 하며, 일부는 시작할 때 읽은 이전 설정을 계속 사용합니다. 시스템 프록시를 바꾼 뒤 특정 애플리케이션의 동작이 달라지지 않는다면 먼저 완전히 종료한 후 다시 시작하고, 독립적인 프록시 옵션이 있는지 확인하세요. 한 브라우저의 결과만으로 모든 프로그램이 인계되었다고 판단하지 마세요.
자주 사용하는 세 가지 실행 방식
규칙 모드는 일상적인 기본값으로 적합합니다. 클라이언트에 들어온 요청을 도메인, 주소 또는 기타 조건에 따라 프록시, 직접 연결이나 차단 아웃바운드로 분기합니다. 불필요한 원격 연결을 줄일 수 있지만 규칙 품질과 DNS 연동에 따라 결과가 달라집니다. 글로벌 모드는 짧은 진단에 적합합니다. 규칙이 잘못 판단했다고 의심될 때 모든 인계 요청을 일시적으로 프록시 아웃바운드로 보낼 수 있습니다. 글로벌 모드는 정상인데 규칙 모드가 실패한다면 대개 문제는 노드 자체가 아니라 규칙이나 DNS 분류에 있습니다. 직접 연결 모드는 프록시를 끈 로컬 네트워크를 확인하거나 유지 관리 중 원격 아웃바운드를 잠시 중단할 때 사용합니다.
모드 전환은 원인 파악을 위한 수단이어야 하며 영구적인 시행착오가 되어서는 안 됩니다. 권장 순서는 기본적으로 규칙 모드를 사용하고, 특정 대상에서 문제가 생기면 글로벌 모드로 잠시 전환하는 것입니다. 글로벌 모드에서도 실패하면 노드와 DNS를 확인하고, 판단이 끝나면 규칙 모드로 돌아갑니다. 글로벌 모드를 계속 사용하면 잘못된 규칙을 가릴 수 있고, 원래 직접 연결해야 하는 로컬 네트워크나 로컬 서비스가 원격으로 전송될 수 있습니다. 직접 연결 모드도 클라이언트가 완전히 종료된 상태를 뜻하지는 않습니다. 로컬 포트와 일부 인계 기능이 계속 실행 중일 수 있습니다.
| 방식 | 트래픽 진입 방식 | 적합한 상황 | 흔한 오해 |
|---|---|---|---|
| 시스템 프록시 | 애플리케이션이 운영 체제의 프록시 설정을 읽음 | 브라우저와 일반적인 데스크톱 애플리케이션 | 모든 애플리케이션이 따르는 것은 아님 |
| 애플리케이션 내 프록시 | 애플리케이션이 로컬 HTTP 또는 SOCKS 포트에 직접 연결 | 명령줄 도구, 개발 소프트웨어, 독립 네트워크 애플리케이션 | 포트 유형 또는 주소를 잘못 입력함 |
| TUN | 시스템 네트워크 계층이 더 많은 트래픽을 가상 인터페이스로 전달 | 시스템 프록시를 읽지 않는 애플리케이션 | 너무 일찍 활성화하면 문제 해결 계층이 늘어남 |
로컬 포트와 환경 변수
클라이언트가 시작되면 일반적으로 로컬 루프백 주소에서 HTTP, SOCKS 또는 혼합 포트를 수신합니다. 정확한 값은 인터페이스에 표시된 내용을 기준으로 하세요. 명령줄 프로그램에서 프록시를 사용하려면 현재 터미널 세션에 환경 변수를 설정할 수 있습니다. 아래에서는 일반적인 예시 포트 10809를 사용하지만, 실제로는 반드시 클라이언트의 현재 HTTP 포트로 바꿔야 합니다.
# Linux 및 macOS의 현재 터미널 세션
export HTTP_PROXY=http://127.0.0.1:10809
export HTTPS_PROXY=http://127.0.0.1:10809
# 테스트 완료 후 삭제
unset HTTP_PROXY
unset HTTPS_PROXY
환경 변수는 해당 변수를 읽는 프로그램과 그 자식 프로세스에만 영향을 주며 시스템 전체를 바꾸지는 않습니다. SOCKS 주소와 HTTP 주소도 임의로 바꿔 사용할 수 없습니다. 프로그램이 HTTP 프록시를 요구하면 HTTP 또는 혼합 포트를 입력하고, SOCKS5를 지원할 때만 해당 SOCKS 포트를 사용하세요. 포트를 다른 프로세스가 점유하면 코어가 수신을 시작하지 못하고 로그에 바인딩 실패가 표시되는 경우가 많습니다. 이때는 충돌하는 프로그램을 종료하거나 클라이언트에서 사용하지 않는 포트로 바꾼 뒤 설정을 다시 불러오세요.
프록시 경로가 실제로 적용되었음을 확인하는 방법
클라이언트 트레이 아이콘만 보고 판단해서는 안 됩니다. 먼저 코어 로그에 대상 요청이 나타나는지 확인하고, 일반 웹페이지 하나와 명령줄 요청 하나로 각각 테스트하세요. 브라우저는 정상인데 명령줄만 실패한다면 두 프로그램의 진입점이 다른 경우가 많습니다. 로그에 새 요청이 전혀 없다면 트래픽이 아직 클라이언트에 들어오지 않은 것입니다. 로그에 요청은 있지만 failed to dial, 연결 거부 또는 시간 초과가 나타난다면 노드와 아웃바운드를 계속 확인하세요. 자주 나타나는 로그 필드는 V2Ray 실행 로그로 위치 찾기에서 확인할 수 있습니다.
클라이언트에 연결됨으로 표시되는데 웹페이지가 열리지 않을 때는 “연결됨”을 모든 과정이 완료되었다는 뜻으로 해석하지 마세요. 이 상태는 코어가 실행 중이거나 노드가 선택되었다는 의미에 그칠 수 있습니다. 시스템 프록시, 노드 사용 가능 여부, DNS, 라우팅과 시스템 시간을 차례로 확인하세요. 자세한 목록은 연결은 성공했지만 웹페이지에 접속할 수 없을 때의 진단 순서를 참고하세요. 진입점과 목적지의 차이를 이해하면 다음 장의 라우팅 분기가 규칙을 무작정 쌓는 작업이 되지 않습니다.
ROUTING
설명 가능한 규칙으로 라우팅 분기 완성하기
라우팅 규칙은 어떻게 매칭되는가
라우팅 모듈은 클라이언트에 들어온 연결을 받아 규칙에 따라 프록시, 직접 연결 또는 차단 등의 아웃바운드를 선택합니다. 일반적인 조건에는 도메인, 대상 주소 범위, 포트, 네트워크 유형과 프로세스 정보가 있습니다. 규칙은 대개 순서대로 판단하며 먼저 일치한 규칙이 먼저 실행되고, 일치하는 규칙이 없으면 기본 아웃바운드로 이동합니다. 따라서 같은 조건도 배치 순서가 다르면 결과가 완전히 달라질 수 있습니다. 포괄적인 규칙은 더 구체적인 규칙 뒤에 배치해야 합니다. 앞의 와일드카드 조건이 요청을 먼저 가로채면 뒤의 규칙은 영원히 적용되지 않기 때문입니다.
도메인 규칙은 웹사이트와 서비스의 소속을 표현하는 데 적합하고, 주소 규칙은 로컬 네트워크, 예약 주소와 명확한 네트워크 범위에 적합합니다. 포트 규칙은 서비스 포트만 설명할 뿐 업무 유형을 단독으로 나타낼 수 없습니다. 프로세스 규칙은 클라이언트와 플랫폼 지원에 의존하므로 애플리케이션 업데이트나 경로 변경 후 작동하지 않을 수 있습니다. 규칙을 설계할 때는 안정적이고 읽기 쉬운 조건을 우선 사용하고 사용자 지정 규칙에는 용도를 명확히 적으세요. 임시 테스트 규칙을 목록 상단에 장기간 남겨 두지 마세요.
큰 목록을 한꺼번에 가져오지 말고 세 계층 규칙부터 시작하기
관리하기 쉬운 출발점은 세 계층으로 나눌 수 있습니다. 첫 번째 계층은 로컬 호스트, 로컬 네트워크와 예약 주소를 처리해 직접 연결로 보냅니다. 두 번째 계층은 특정 아웃바운드가 필요한 업무 도메인을 처리합니다. 세 번째 계층은 기본 규칙으로서 나머지 트래픽을 맡습니다. 이렇게 하면 문제가 발생했을 때 요청이 어느 계층에서 일치했는지 분명히 판단할 수 있습니다. 로컬 네트워크 장치, 라우터 관리 페이지와 로컬 개발 서비스는 직접 연결 규칙을 앞에 두어야 원격으로 전송된 뒤 응답하지 않는 문제를 피할 수 있습니다.
규칙을 추가하기 전에 “어떤 구체적인 문제를 해결하려는가”에 답하세요. 규칙 모드에서 특정 도메인만 실패하고 글로벌 모드가 정상이라면 로그의 대상 도메인, 해석된 주소와 현재 일치한 아웃바운드를 확인한 뒤 도메인 규칙을 추가할지 DNS를 조정할지 결정합니다. 도메인이 라우팅에 들어오기 전에 이미 주소로 해석되었는데 규칙은 도메인만 매칭한다면 실제 동작이 예상과 달라질 수 있습니다. 이때는 동일한 도메인을 반복해서 추가하기보다 스니핑, 도메인 정책과 DNS 설정의 관계를 점검해야 합니다.
{
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "direct"
},
{
"type": "field",
"domain": [
"domain:example.com",
"full:service.example.net"
],
"outboundTag": "proxy"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
이 설정은 구조적 관계를 보여 주기 위한 예시이며 클라이언트가 생성한 전체 설정을 그대로 덮어쓰면 안 됩니다. domain:example.com은 해당 도메인과 하위 도메인에 매칭되고, full:service.example.net은 완전한 도메인에만 매칭됩니다. geoip:private는 사설 주소 범위를 식별하는 데 사용됩니다. 마지막 규칙은 남은 TCP와 UDP 트래픽을 처리하므로 구체적인 규칙 뒤에 배치해야 합니다. 실제 클라이언트는 그래픽 규칙 모음, 사전 정의된 태그 또는 다른 설정 생성 방식을 사용할 수 있습니다. 인터페이스에서 동일한 설정을 완료한 뒤 최종 실행 설정이나 로그로 결과를 확인하세요.
DNS와 라우팅은 함께 관찰해야 하기
도메인 접속에는 해석과 연결이라는 두 단계가 있습니다. DNS 조회 자체에도 독립적인 라우팅이 적용될 수 있으며, 해석 결과는 이후 주소 규칙에 사용됩니다. DNS는 직접 연결인데 연결은 프록시를 통하거나, 해석된 주소가 원격 환경과 다르면 웹페이지 시간 초과, 일부 리소스 실패 또는 규칙 매칭 이상으로 나타날 수 있습니다. DNS를 조정할 때는 먼저 목적을 분명히 하세요. 해석 실패를 해결하려는 것인지, 로컬 해석 차이를 피하려는 것인지, 특정 도메인을 특정 서버가 응답하게 하려는 것인지 확인해야 합니다. 용도가 겹치는 DNS 방식을 여러 개 동시에 활성화하지 마세요.
AsIs는 일반적으로 도메인을 매칭에 최대한 그대로 사용하고 라우팅 규칙을 위해 별도로 해석하지 않는다는 뜻입니다. 다른 도메인 정책은 특정 조건에서 도메인을 주소로 해석한 뒤 IP 규칙에 참여시킬 수 있습니다. 어떤 정책을 선택할지는 어느 쪽이 “더 빠른가”가 아니라 규칙 구조에 따라 결정해야 합니다. 도메인 규칙을 중심으로 사용할 때는 도메인 정보가 유지되는지 확인하고, 주소 규칙에 많이 의존할 때는 해석 출처가 안정적인지 확인하세요. 변경 후에는 알고 있는 대상 몇 개로 테스트하고 로그에서 실제로 일치한 규칙과 아웃바운드 태그를 관찰하세요.
| 조건 유형 | 적합한 용도 | 주요 한계 |
|---|---|---|
| 도메인 | 웹사이트, API와 서비스 그룹화 | 도메인 정보를 유지하고 하위 도메인 매칭에 유의 |
| IP 주소 | 로컬 네트워크, 예약 주소와 명확한 주소 범위 | 주소는 바뀔 수 있으며 해석 결과가 판단에 영향을 줌 |
| 포트 | 고정 서비스 포트의 보조 조건 | 같은 포트가 서로 다른 업무를 전달할 수 있음 |
| 프로세스 | 데스크톱 애플리케이션별 아웃바운드 구분 | 플랫폼, 권한과 프로그램 경로의 영향을 받음 |
규칙 변경 기록 만들기
변경할 때마다 하나의 명확한 목표만 처리하고, 추가한 조건·예상 아웃바운드와 확인 결과를 기록하세요. 문제가 생기면 목록 상단에 규칙을 계속 추가하지 말고 최근에 추가한 규칙을 잠시 비활성화한 뒤 복구 여부를 판단합니다. 규칙 모음이 업데이트된 뒤에는 회귀 테스트도 진행해야 합니다. 로컬 네트워크 접속, 일반 웹페이지, 프록시가 필요한 대상과 UDP 애플리케이션에서 각각 하나씩 선택하세요. 웹페이지 하나만 테스트해서는 전체 라우팅을 확인할 수 없습니다.
라우팅 분기가 성숙했다는 기준은 규칙 수가 많은 것이 아니라 모든 규칙의 출처, 순서와 결과를 설명할 수 있는지입니다. 설명할 수 없는 오래된 규칙은 바로 삭제하지 말고 먼저 비활성 영역으로 옮겨 의존 여부를 관찰하세요. 의존성이 없음을 확인한 뒤 정리합니다. 단순한 기본 설정 하나를 복귀용으로 유지하고 복잡한 실험은 복사본에서 진행하세요. 이렇게 하면 규칙 업데이트로 연결 문제가 생겨도 노드 장애인지 의사 결정 계층의 변화인지 빠르게 판단할 수 있습니다.
TUN MODE
기본 프록시가 안정된 후 TUN 설정하기
TUN이 해결하는 것은 트래픽 인계 범위 문제
TUN 모드는 가상 네트워크 인터페이스를 통해 더 많은 시스템 트래픽을 클라이언트가 처리하도록 하며, 시스템 프록시를 읽지 않는 애플리케이션, 일부 UDP 트래픽과 라우팅 규칙을 일관되게 적용해야 하는 환경에 적합합니다. TUN은 새로운 프록시 프로토콜이 아니며, 원래 사용할 수 없는 노드를 개선해 주지도 않습니다. 시스템 프록시만으로 브라우저와 일반 소프트웨어를 처리할 수 있다면 “더 완전하게” 만들기 위해 바로 TUN을 켤 필요는 없습니다. 인계 범위가 넓어질수록 DNS, 로컬 네트워크, 다른 네트워크 도구와 시스템 라우팅 사이의 관계를 명확히 해야 합니다.
TUN을 활성화하기 전에 세 가지 기준 테스트를 완료해야 합니다. 일반 시스템 프록시 모드에서 노드를 사용할 수 있어야 하고, 규칙 모드에서 주요 대상의 분기가 정상이어야 하며, 클라이언트를 종료했을 때 시스템 네트워크가 복구되어야 합니다. 이 세 가지가 아직 성립하지 않았다면 TUN은 기존 문제를 더 복잡한 데이터 경로 안에 감춰 버립니다. 기준 상태가 안정된 뒤 TUN을 활성화하고 기존 노드, DNS와 규칙은 그대로 유지해야 가상 인터페이스로 인한 변화인지 판단할 수 있습니다.
처음 활성화하는 순서
먼저 가상 네트워크 카드를 만들거나 기본 라우팅을 수정할 수 있는 다른 네트워크 도구를 종료합니다. 그런 다음 클라이언트에서 TUN에 필요한 구성 요소와 시스템 권한을 활성화하세요. 시작 후 클라이언트 로그에 인터페이스 생성 실패, 라우팅 기록 실패 또는 권한 부족이 없는지 확인하고, 일반 웹페이지·로컬 네트워크 주소·시스템 프록시를 읽지 않는 애플리케이션을 각각 테스트합니다. 트레이 상태만으로 성공 여부를 판단하지 마세요. 일반 웹페이지는 정상인데 로컬 네트워크가 작동하지 않으면 사설 주소 직접 연결 규칙과 엄격한 라우팅 옵션을 확인하고, 모든 도메인이 실패하지만 주소 직접 접속은 응답한다면 DNS 인계를 먼저 점검하세요.
Android에서 시스템 네트워크 연결을 클라이언트가 인계한 뒤에는 의도한 설정이 활성화되어 있는지 확인하고 앱별 프록시 설정도 점검하세요. 앱별 프록시는 선택한 앱만 인계하거나 클라이언트를 거치지 않을 앱을 제외할 수 있습니다. 어떤 방식을 선택할지는 사용 목적에 따라 달라집니다. 규칙이 많다면 소수의 앱으로 먼저 확인한 뒤 범위를 단계적으로 넓히세요. 백그라운드 실행은 시스템 배터리 정책의 영향도 받습니다. 화면을 잠근 뒤 연결이 끊긴다면 노드가 고장 났다고 판단하기 전에 클라이언트가 종료되지 않았는지 먼저 확인하세요. 자세한 내용은 v2rayNG 권한, 배터리 절약과 앱별 프록시 설정을 참고하세요.
DNS 인계와 가상 주소 매핑
TUN 환경에서는 클라이언트가 DNS 조회를 함께 인계하고 가상 주소로 도메인을 매핑할 수 있습니다. 이를 통해 이후 연결에서도 원래 도메인을 복원해 라우팅에 사용할 수 있습니다. 이 방식은 주소 연결 정보만 제공하는 애플리케이션에 도움이 되지만 DNS 조회와 연결이 동일한 데이터 경로를 거쳐야 합니다. 애플리케이션이 이전 해석 결과를 캐시하고 있다면 설정을 바꾼 뒤에도 이전 주소에 계속 접속할 수 있습니다. 테스트할 때는 애플리케이션을 다시 시작하고 필요한 경우 캐시가 만료될 때까지 기다리세요. 여러 DNS 모드를 연달아 바꾼 뒤 즉시 한 번만 비교하지 마세요.
“일부 웹사이트는 열리지만 일부는 시간 초과”가 발생하면 실패한 요청에 도메인, 해석 결과와 라우팅 매칭 기록이 있는지 확인하세요. 로그에 주소만 있고 원래 도메인이 없다면 도메인 규칙이 예상대로 작동하지 않을 수 있습니다. DNS 조회가 클라이언트에 들어오지 않는다면 시스템이 여전히 다른 해석 경로를 사용하는지 확인하세요. 조회는 성공했지만 잘못된 아웃바운드로 연결되었다면 라우팅 순서를 다시 점검합니다. DNS 문제와 노드 문제의 차이는 전자는 대상이나 적절한 주소를 얻지 못하는 경우가 많고, 후자는 명확한 대상이 있는데도 핸드셰이크가 실패하는 경우가 많다는 점입니다.
| 현상 | 우선 확인할 항목 | 복귀 조치 |
|---|---|---|
| 활성화 후 모든 네트워크가 끊김 | 인터페이스 생성, 권한, 기본 라우팅과 포트 상태 | TUN을 끄고 시스템 프록시 기준 상태로 복구 |
| 도메인은 실패하지만 일부 주소는 접속 가능 | DNS 인계, 해석 경로와 캐시 | 이전의 사용 가능한 DNS 설정으로 복구 |
| 로컬 네트워크 장치에 접속할 수 없음 | 사설 주소 직접 연결 규칙, 엄격한 라우팅 | 최근 추가한 인계 옵션을 일시적으로 비활성화 |
| 화면을 잠그면 모바일 연결이 끊김 | 백그라운드 실행, 배터리 정책과 시스템 연결 상태 | 클라이언트에 필요한 백그라운드 활동 허용 |
충돌 처리와 안전한 종료
시스템 라우팅, DNS 또는 가상 네트워크 카드를 수정하는 도구를 여러 개 동시에 실행하면 기본 라우팅이 반복해서 바뀌기 쉽습니다. 문제를 해결할 때는 인계 주체를 하나만 남기고 다른 도구를 끈 뒤 클라이언트를 다시 시작하세요. 절전 모드에서 복귀한 뒤 네트워크가 이상하면 먼저 TUN을 끄고 코어를 중지한 다음, 코어를 시작하고 TUN을 활성화하는 순서로 다시 구성할 수 있습니다. 프로세스를 강제 종료하면 복구되지 않은 프록시나 라우팅 상태가 남을 수 있으므로 클라이언트의 정상 종료 절차를 우선 사용하세요.
TUN 설정 완료 후의 검수는 “애플리케이션이 인터넷에 연결되는가”만으로 끝나지 않습니다. 로컬 네트워크에 계속 접근할 수 있는지, 규칙 모드의 매칭이 예상과 맞는지, DNS 로그에 지속적인 오류가 없는지, 시스템 절전 후 다시 연결되는지, 클라이언트를 정상 종료한 뒤 네트워크가 복구되는지도 확인해야 합니다. 하나라도 불안정하다면 일반 시스템 프록시로 돌아가 사용하면서 문제를 하나씩 해결하세요. 설정에 예외 규칙을 더 추가하는 방식으로 대응해서는 안 됩니다. TUN의 가치는 제어 가능한 트래픽 범위를 넓히는 데 있으며, 전체 경로를 계속 설명하고 되돌릴 수 있어야 합니다.
MAINTENANCE
일상적인 업데이트, 백업과 문제 해결 절차 세우기
업데이트를 세 가지 독립된 대상으로 나누기
일상적인 유지 관리에서 “업데이트”에는 최소한 클라이언트 업데이트, 코어 업데이트와 구독 업데이트가 포함됩니다. 클라이언트 업데이트는 인터페이스와 설정 생성 로직을 바꾸고, 코어 업데이트는 프로토콜 지원과 실행 동작을 바꿀 수 있으며, 구독 업데이트는 노드 데이터만 동기화합니다. 세 가지를 동시에 진행하면 연결 문제가 생겼을 때 원인을 판단하기 어렵습니다. 더 안정적인 방법은 나누어 처리하는 것입니다. 현재 사용 가능한 상태를 먼저 기록하고, 한 대상을 업데이트한 뒤 시작·연결·라우팅·종료 테스트를 완료하고 다음 대상을 처리하세요.
클라이언트에 업데이트 알림이 표시되었다고 해서 현재 작업을 즉시 중단해야 하는 것은 아닙니다. 먼저 인터페이스의 변경 사항을 읽고 현재 사용하는 기능과 관련이 있는지 확인한 뒤 유지 관리 시간을 정하세요. 구독 업데이트는 더 자주 진행해도 되지만, 복귀용으로 사용 가능한 노드 하나는 계속 보관해야 합니다. 코어 전환은 특히 신중해야 합니다. 같은 노드 매개변수라도 코어에 따라 지원 범위와 기본 동작이 다를 수 있습니다. Xray와 V2Fly의 차이는 Xray 코어와 V2Fly 코어의 차이에서 확인할 수 있습니다.
무엇을 백업하고, 어떤 순서로 복구할 것인가
가치 있는 백업에는 구독 그룹 정보, 로컬 노드, 사용자 지정 라우팅, DNS 설정, 프록시 포트, 인터페이스 환경설정과 필요한 로그 조각이 포함됩니다. 구독 주소에는 식별용 매개변수가 들어 있을 수 있으므로 백업 파일은 관리되는 기기에만 보관하고 공개 공간에 직접 업로드하지 마세요. 설치 프로그램만 복사해서는 사용 상태를 복구할 수 없습니다. 실제 동작을 결정하는 것은 설정 데이터입니다. 클라이언트에 내보내기 기능이 있다면 우선 사용하고, 내보낼 당시의 클라이언트 유형과 운영 체제도 기록하세요.
복구할 때는 먼저 플랫폼과 아키텍처에 맞는 클라이언트를 설치하고 기본 설정을 가져와 코어가 시작되는지 확인합니다. 그다음 구독을 복구하고 노드를 업데이트한 뒤 사용자 지정 라우팅, DNS와 TUN을 마지막으로 복구하세요. 처음부터 모든 이전 파일을 새 환경에 덮어쓰지 마세요. 경로, 권한 또는 설정 구조가 달라졌을 수 있습니다. 계층별로 복구하면 단계가 조금 늘어나지만 어느 계층에서 오류가 생겼는지 정확히 찾을 수 있습니다. 복구 후에는 로컬 포트가 새 시스템의 다른 프로그램과 충돌하지 않는지도 확인해야 합니다.
로그는 “시간—진입점—결정—아웃바운드” 순서로 읽기
로그로 위치를 찾을 때는 먼저 시간 범위를 확인합니다. 현재 로그를 지우거나 기준점을 표시한 뒤 문제를 안정적으로 재현하는 작업을 한 번만 실행해 오래된 오류와 백그라운드 요청이 섞이지 않게 하세요. 다음으로 요청이 로컬 진입점에 들어왔는지 확인합니다. 진입점 기록이 없으면 시스템 프록시, 애플리케이션 프록시 또는 TUN을 점검해야 합니다. 들어온 뒤에는 라우팅이 선택한 아웃바운드 태그를 확인하고, 아웃바운드가 예상과 맞을 때 연결·핸드셰이크·인증 결과를 살펴봅니다. 이 순서가 전체 로그에서 “error”만 검색하는 것보다 신뢰할 수 있습니다.
failed to dial은 일반적으로 아웃바운드 연결 수립에 실패했다는 뜻이며, 뒤에 나오는 시간 초과·거부·네트워크 연결 불가 정보를 함께 확인해야 합니다. connection rejected는 원격 서버의 거부, 라우팅 차단 또는 서비스가 수신 중이지 않은 상태에서 발생할 수 있습니다. 인증 관련 메시지가 나오면 사용자 식별자, 시간과 보안 매개변수를 대조하세요. 오류 한 줄만으로 전체 맥락을 판단할 수 없으므로 앞뒤의 요청 대상, 사용한 아웃바운드와 재시도 동작도 함께 확인해야 합니다. 자세한 필드 설명은 자주 발생하는 V2Ray 로그 오류 진단에서 이어서 확인할 수 있습니다.
최소 변수법으로 흔한 장애 처리하기
연결에 실패하면 먼저 알려진 사용 가능 노드와 일반 시스템 프록시로 돌아가 사용자 지정 DNS, 복잡한 라우팅과 TUN을 끄고 가장 짧은 경로만 남기세요. 기본 경로가 복구되면 라우팅, DNS, TUN 순서로 하나씩 활성화합니다. 기본 경로도 실패한다면 구독 매개변수, 노드 상태, 로컬 시간과 네트워크 환경을 확인하세요. 매번 하나의 변수만 바꾸고 결과를 기록합니다. 로그를 보지 않은 채 십여 개 노드를 계속 바꿔 보는 것은 문제가 여전히 있다는 사실만 보여 줄 뿐, 어느 계층에서 발생했는지는 알려 주지 못합니다.
속도가 느릴 때도 핸드셰이크 시간, 첫 응답 대기, 지속 처리량과 특정 대상의 제한을 구분해야 합니다. 먼저 같은 노드를 서로 다른 시간에 테스트하고, 그다음 같은 시간에 여러 노드를 비교하세요. 이후 오버헤드를 늘릴 수 있는 실험 옵션을 끄고 로컬 다운로드, 무선 네트워크와 시스템 리소스를 확인합니다. 지연 시간이 가장 짧다고 지속 속도도 가장 빠르다고 단정하지 마세요. 전체적인 계층별 방법은 V2Ray 속도 저하 단계별 진단을 참고하세요.
자주 초기화하지 말고 정기적으로 정리하기
유지 관리 기간에는 장기간 실패한 노드, 중복 구독, 폐기한 라우팅 복사본과 오래된 로그를 정리할 수 있습니다. 단, 먼저 복귀 용도로 사용되고 있지 않은지 확인하세요. 클라이언트를 자주 초기화하면 문제 상황이 사라지고 같은 설정 오류가 반복될 수 있습니다. 특정 장애가 안정적으로 재현된다면 필요한 설정과 로그를 먼저 내보낸 뒤 최소 구성으로 테스트하세요. 설정을 더 이상 복구할 수 없다는 사실을 확인했을 때만 환경을 새로 구축하는 것이 좋습니다.
건강한 설정은 다음 조건을 만족해야 합니다. 구독 출처가 분명하고, 현재 노드를 추적할 수 있으며, 프록시 진입점이 명확하고, 규칙을 설명할 수 있고, TUN을 독립적으로 끌 수 있으며, 클라이언트 종료 후 시스템 네트워크가 정상이어야 합니다. 일상적인 유지 관리의 핵심은 계속 조정하는 것이 아니라 알 수 없는 상태를 줄이는 데 있습니다. 기준 상태, 변경과 복귀를 모두 기록할 수 있다면 대부분의 장애를 제한된 단계 안에서 찾을 수 있습니다.
NEXT LEVEL
사용에서 검증 가능한 고급 설정으로 나아가기
1단계: 현재 설정을 설명할 수 있게 하기
고급 설정은 규칙 수를 늘리는 데서 시작하지 않고 현재 설정을 설명하는 데서 시작합니다. 어떤 종류의 코어를 사용하는지, 노드 매개변수의 출처가 어디인지, 로컬에서 어떤 진입점을 수신하는지, 시스템 프록시나 TUN이 트래픽을 어떻게 전달하는지, 기본 라우팅이 어떤 아웃바운드를 선택하는지, DNS 조회를 누가 처리하는지 설명할 수 있어야 합니다. 간단한 데이터 흐름도로 관계를 기록할 수 있습니다. 애플리케이션이 요청을 만들고, 진입점이 수신하며, DNS가 주소를 제공하고, 라우팅이 아웃바운드를 결정하고, 노드가 원격 연결을 완료합니다. 이 흐름에 넣을 수 없는 설정은 활성화하기 전에 용도를 먼저 확인하세요.
이 단계의 연습은 사용 가능한 노드 하나, 기본 DNS와 세 계층 라우팅만 남긴 최소 설정 복사본을 만드는 것입니다. 복사본에서 시스템 프록시, 애플리케이션 내부 프록시와 TUN을 각각 테스트하고 로그 차이를 기록하세요. 목표는 복잡한 기능을 추구하는 것이 아니라 전환마다 관찰 가능한 결과를 얻는 데 있습니다. 완료하면 다른 기기로 옮겨도 기존 인터페이스 위치를 기억하는 대신 데이터 흐름에 따라 환경을 다시 구성할 수 있습니다.
2단계: 라우팅과 DNS를 테스트 대상으로 만들기
고정 테스트 대상을 몇 개 선택해 로컬 네트워크, 직접 연결 업무, 프록시 업무, TCP와 UDP를 각각 대표하게 하세요. 규칙을 조정할 때마다 같은 테스트 묶음을 실행하고 실제로 매칭된 아웃바운드를 기록합니다. 도메인 규칙은 도메인을 유지한 경우와 먼저 주소로 해석한 경우의 차이를 비교하고, 주소 규칙은 해석 결과의 변화가 결과에 영향을 주는지 관찰하세요. 프로세스 규칙은 프로그램 업데이트나 경로 변경 후의 동작을 테스트합니다. 이렇게 하면 “분기가 이상한 것 같다”는 감각을 재현 가능한 조건으로 바꿀 수 있습니다.
DNS 고급 설정의 핵심은 서버를 많이 추가하는 것이 아니라 조회 경로, 캐시와 도메인 복원을 이해하는 데 있습니다. 먼저 시스템 조회가 클라이언트에 들어오는지 확인하고, 클라이언트가 어떤 해석 경로를 선택하는지 확인한 뒤 결과가 라우팅에 어떻게 참여하는지 살펴보세요. 문제가 생기면 도메인 해석과 대상 연결을 나누어 테스트해 두 종류의 오류를 혼동하지 않도록 합니다. DNS를 조정할 때마다 명확한 목적을 세우고 기본 설정으로 복구할 방법을 남겨야 합니다.
3단계: 코어 차이와 프로토콜 경계 이해하기
Xray와 V2Fly는 모두 Project V 생태계에서 출발했지만 프로토콜 확장, 기능 개발과 설정 지원에서 각각 중점을 두는 부분이 다릅니다. 모든 내부 구현을 외울 필요는 없지만, 일부 노드 기능이 특정 코어에 의존하며 클라이언트 이름만으로 코어 호환성을 판단할 수 없다는 점은 알아야 합니다. v2rayN은 데스크톱 환경에서 해당 코어 설정을 관리할 수 있고, v2rayNG는 Xray 방향에, v2flyNG는 V2Fly 방향에 주로 사용됩니다. 전환할 때는 구독의 프로토콜과 전송 계층이 지원되는지 먼저 확인하세요.
설정을 읽을 때는 “주소와 포트—인증—프로토콜—전송—보안 계층—라우팅” 순서로 나누어 살펴보세요. 주소와 포트는 원격 위치를 정하고, 인증 필드는 사용자를 식별하며, 프로토콜은 메시지 의미를 결정합니다. 전송은 운반 형식을, 보안 계층은 해당 핸드셰이크를, 라우팅은 언제 해당 아웃바운드를 사용할지를 설명합니다. 오류가 발생하면 이 계층 순서대로 대조하는 편이 다른 설정 전체를 복사하는 것보다 차이를 찾기 쉽습니다.
| 고급 단계 | 학습 목표 | 검수 방법 |
|---|---|---|
| 설정 설명 | 진입점, DNS, 라우팅과 아웃바운드의 관계 설명 | 현재 요청 경로를 그리고 복귀 지점 제시 |
| 규칙 검증 | 고정 대상에 매번 규칙 변경 테스트 | 로그의 매칭 결과가 예상과 일치 |
| 코어 이해 | 노드 기능에 맞는 코어 방향 선택 | 무작정 전환하지 않고 호환성 설명 |
| 장애 재현 | 최소 조건과 전체 시간 기록 보존 | 안정적으로 재현하고 단일 변수로 복구 |
4단계: 나만의 문제 해결 매뉴얼 만들기
실제로 겪은 문제를 “현상, 환경, 최소 재현, 로그, 원인, 해결, 복귀”의 일곱 항목으로 정리하세요. 현상은 “브라우저 요청이 로그에 나타나지 않음”처럼 관찰 가능한 결과로 적고 “프록시가 고장 남”이라고 쓰지 않습니다. 환경에는 플랫폼, 클라이언트와 현재 모드를 기록하되 관련 없는 정보를 쌓지 마세요. 최소 재현에는 문제를 일으키는 단계만 남기고, 원인은 진입점·해석·라우팅·아웃바운드 중 구체적인 단계까지 좁혀야 합니다. 이런 기록이 흩어진 튜토리얼을 많이 저장해 두는 것보다 장기간 사용하기에 적합합니다.
문제를 즉시 해결할 수 없다면 먼저 작업 가능한 상태로 복구한 뒤 계속 분석하세요. 예를 들어 규칙 모드는 이상하지만 글로벌 모드는 작동한다면 임시 해결책을 유지하고 문제 해결용으로 설정을 복사할 수 있습니다. TUN에 문제가 있으면 시스템 프록시로 돌아가고, 새 코어에 문제가 있으면 기존 코어 방향으로 복귀하세요. 복귀는 진단을 포기하는 것이 아니라 기준 상태를 보호하는 방법입니다. 안정적인 기준 상태가 있어야 실험 결과를 비교할 수 있습니다.
지속적으로 학습할 내용의 순서
먼저 클라이언트 로그와 라우팅 매칭을 익힌 다음 DNS, TUN과 프로토콜 세부 사항으로 들어가는 것을 권장합니다. 로그는 사실을 제공하고, 라우팅은 동작을 결정하며, DNS와 TUN은 변수 범위를 넓힙니다. 순서를 거꾸로 하면 기본 요청 경로를 이해하기도 전에 여러 시스템 계층을 동시에 다루게 됩니다. 일상적인 문제는 정보 및 문제 해결 글에서 주제별로 찾아보고, 최단 연결을 다시 구성해야 할 때는 입문 가이드로 돌아가세요. 플랫폼을 바꾸거나 재설치할 때는 클라이언트 다운로드 페이지에서 설치 패키지 유형을 확인하세요.
초보자에서 고급 사용자로 나아가며 최종적으로 갖추게 되는 것은 안정적인 엔지니어링 방식입니다. 먼저 기본 경로를 세우고 기능을 계층별로 추가하며, 먼저 로그를 관찰한 뒤 원인을 추정하고, 먼저 기준 상태를 저장한 뒤 실험하며, 매번 하나의 핵심 변수만 변경합니다. 이 순서를 따르면 클라이언트 교체, 구독 변경 또는 네트워크 환경 변화가 생겨도 설정을 처음부터 추측할 필요가 없습니다. 애플리케이션에서 시작한 요청을 아웃바운드까지 추적하고 어느 단계에서든 알려진 상태로 복귀할 수 있다면 V2Ray 클라이언트 환경을 독립적으로 관리할 핵심 역량을 갖춘 것입니다.