핵심 개념: 클라이언트, 코어, 연결 경로
설정 화면과 실제 동작
설정을 시작하기 전에 그래픽 클라이언트, 프록시 코어, 원격 서버를 구분해야 합니다. 클라이언트는 노드를 표시하고 구독을 저장하며 설정을 생성하고 시스템 연동을 관리합니다. 코어는 설정을 읽어 로컬 요청을 받고, 라우팅 규칙에 따라 출구를 선택합니다. 원격 서버는 프로토콜 연결을 받아 목적지에 대한 요청을 처리합니다. 화면이 열렸다는 사실은 클라이언트가 실행 중임을 뜻할 뿐, 코어가 시작됐거나 원격 서버 설정이 올바르다는 의미는 아닙니다.
Project V는 이 생태계를 이해하는 출발점이며, V2Fly와 Xray는 관련 코어 계열입니다. v2rayN, v2rayNG, v2flyNG는 그래픽 클라이언트이지 프로토콜 이름이 아닙니다. 클라이언트에서 지원하는 설정 항목은 인터페이스 구현과 실제 사용하는 코어의 기능에 따라 달라집니다. 구독을 가져올 수 있지만 시작되지 않는다면 현재 실행 중인 코어와 생성된 설정을 확인하세요. 클라이언트 이름만으로 모든 기능의 지원 여부를 판단할 수는 없습니다.
입구, 라우팅, 출구
연결은 입구, 라우팅, 출구로 나눠 살펴볼 수 있습니다. 입구는 브라우저나 다른 앱의 트래픽을 받으며, 보통 로컬 HTTP 또는 SOCKS 리스너를 사용합니다. 라우팅은 대상 도메인, 주소, 포트 등의 조건에 따라 출구를 선택합니다. 출구는 프록시, 직접 연결 또는 차단일 수 있습니다. 원격 연결 실패와 로컬 입구에 요청이 들어오지 않는 문제는 서로 다릅니다. 전자는 노드와 네트워크를 확인하고, 후자는 앱이 해당 입구를 사용 중인지 먼저 확인하세요.
설정의 태그는 모듈을 서로 연결하기 위한 값이지, 임의로 붙이는 메모가 아닙니다. 규칙에서 특정 출구 태그를 지정했다면 출구 목록에 같은 이름의 항목이 있어야 하며 대소문자도 일치해야 합니다. 클라이언트 화면은 이런 연결 관계를 숨기고 태그를 자동 생성할 수 있습니다. 따라서 코어 설정 예시를 볼 때는 구조부터 파악하고, 아무 입력란에나 일부 내용을 붙여 넣지 마세요. 사용자 지정 설정과 그래픽 설정이 각각 무엇을 관리하는지도 미리 확인해야 합니다.
{
"inbounds": [
{
"tag": "local-socks",
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": { "udp": true }
}
],
"outbounds": [
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
}
],
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"inboundTag": ["local-socks"],
"outboundTag": "direct"
}
]
}
}
프로토콜과 전송 방식의 역할
VMess, VLESS, Trojan은 프록시 연결에 사용하는 프로토콜 방식입니다. 전송 계층은 연결이 네트워크에서 전달되는 방식을 정하고, TLS와 REALITY는 연결 보안 및 핸드셰이크 조건과 관련됩니다. 이 요소들을 임의로 조합할 수는 없습니다. 노드를 가져올 때 주소, 포트, 인증 정보, 전송 유형, 보안 설정을 하나의 구성으로 확인하세요. 항목 하나라도 서버 설정과 다르면 연결이 실패할 수 있으며, 프로토콜 이름만 바꿔서는 대개 해결되지 않습니다.
DNS도 연결 경로와 무관한 부가 설정이 아닙니다. 앱이 먼저 도메인을 해석한 뒤 주소를 프록시에 전달할 수도 있고, 도메인을 그대로 두어 코어나 원격 서버가 처리하게 할 수도 있습니다. 라우팅에서 원래 도메인을 확인할 수 있는지는 요청 형식, 프록시 프로토콜, 관련 설정에 따라 달라집니다. 대상이 주소로 표시되더라도 도메인 규칙이 잘못됐다고 단정하지 마세요. 먼저 어느 단계에서 이름이 해석됐는지, 요청에 규칙 매칭에 사용할 도메인 정보가 남아 있는지 확인하세요.
학습 단계에서는 한 앱으로 이미 알고 있는 대상 하나에 접속해 테스트하세요. 사용한 입구, 현재 노드, 활성 모드와 결과를 기록한 뒤 요청이 어느 단계에서 멈췄는지 판단합니다. 위 설정은 직접 연결만 보여주는 구조 예시로, 원격 프록시 기능이 포함된 구성은 아닙니다. 실제 서버의 인증 정보는 신뢰할 수 있는 출처에서 받아야 합니다. 다른 가이드에서 가져온, 그럴듯하지만 자신의 서버와 맞지 않는 설정값을 복사하지 마세요.
클라이언트 선택: 플랫폼, 코어, 관리 방식
기기부터 선택하고 필요한 기능을 확인하세요
데스크톱에서는 v2rayN을 우선 고려하고, 운영체제와 프로세서에 맞는 설치 파일을 선택하세요. 구독을 한곳에서 관리하고 연결 로그를 확인하며 라우팅을 조정하기에 적합합니다. Android 기기에서는 Xray 코어를 사용하는 v2rayNG를 먼저 고려하세요. V2Fly 생태계에 맞는 설정이 필요하다면 v2flyNG도 검토할 수 있습니다. 화면 디자인이나 클라이언트 이름만 비교하기보다 사용 중인 노드의 기능, 시스템 조건, 평소 사용 방식을 기준으로 선택하세요.
설치 전에 노드에서 실제로 필요한 프로토콜과 보안 설정을 확인하세요. 가져오기에 성공했다고 해서 클라이언트가 모든 확장 항목을 제대로 인식한 것은 아닙니다. 특히 REALITY, 공개 키, 서버 이름, 지문, 흐름 제어 설정을 확인해야 합니다. 먼저 설정 제공자에게 대상 클라이언트와 코어의 요구 사항을 문의한 뒤 가져온 설정 화면과 대조하세요. 화면에 해당 항목이 없다면 관련 없는 입력란에 대신 넣거나 항목을 삭제한 채 계속 사용하지 마세요.
| 클라이언트 | 지원 플랫폼 | 우선 확인할 항목 |
|---|---|---|
| v2rayN | Windows、macOS、Linux | 프로세서 아키텍처, 인터페이스 종류, 시스템 연동 권한 |
| v2rayNG | Android | Xray 기능, VPN 권한, 백그라운드 제한 |
| v2flyNG | Android | V2Fly 설정 호환성, 구독 항목 |
데스크톱 설치 방식과 프로세서 아키텍처
Windows 다운로드 항목에는 Desktop 버전과 클래식 WPF 버전이 있습니다. Desktop은 새 크로스 플랫폼 인터페이스를 사용하고, WPF는 기존 인터페이스를 유지합니다. 메뉴 위치와 조작 방식은 다를 수 있습니다. 처음 설정할 때는 한 버전만 실행해 기본 연결을 확인하세요. 두 프로그램을 동시에 실행하면 로컬 포트를 두고 충돌할 수 있습니다. 다른 버전으로 옮길 때는 구독, 라우팅, 시스템 프록시 설정을 하나씩 확인하세요. 프로그램 폴더를 복사하는 것만으로 설정 이전이 끝났다고 볼 수는 없습니다.
macOS에서는 Apple Silicon과 Intel을 구분해야 합니다. 시스템의 기기 정보를 확인해 칩 종류에 맞는 설치 파일을 선택하고, 기기를 구매한 연도만으로 판단하지 마세요. Linux는 프로세서 아키텍처뿐 아니라 배포판의 패키지 관리 방식도 확인해야 하며, 보통 deb 또는 rpm 형식을 선택합니다. 아키텍처와 설치 패키지 형식은 별개의 조건입니다. 패키지 관리자가 파일을 인식하더라도 실행 파일이 현재 프로세서에서 동작한다는 보장은 없습니다.
Android용 arm64 설치 파일은 비교적 최신인 대부분의 일반 기기에 적합합니다. 아키텍처를 확인하기 어렵거나 더 다양한 기기를 지원해야 한다면 범용 패키지를 선택하세요. 최종적으로는 시스템 호환 여부를 확인해야 합니다. 설치가 거부되면 여러 파일을 무작정 내려받기보다 아키텍처, 저장 공간, 기존 앱과 서명 충돌 여부를 먼저 확인하세요. 서명 충돌로 덮어쓰기가 안 된다면 설정을 내보내고 백업을 사용할 수 있는지 확인한 다음 기존 앱을 삭제할지 결정하세요.
설정 관리 방식도 선택에 영향을 줍니다
여러 기기에서 같은 구독을 사용하려면 구독 출처와 필요한 설정을 동기화하세요. 클라이언트 데이터베이스가 플랫폼 간에 그대로 호환될 것으로 기대해서는 안 됩니다. 시스템 프록시, 가상 네트워크 인터페이스, 앱 제외 목록, 파일 경로는 플랫폼마다 다릅니다. 데스크톱에서 사용하는 사용자 지정 스크립트나 경로를 휴대폰에 그대로 옮길 수 없습니다. 이전할 때는 먼저 노드를 가져와 단일 노드 연결을 확인한 다음 해당 기기에 맞게 프록시 모드와 라우팅을 다시 설정하세요. 이렇게 하면 환경에 숨은 의존성을 줄일 수 있습니다.
클라이언트와 코어가 항상 함께 업데이트되는 것은 아닙니다. 화면에 특정 스위치가 있다고 해서 현재 실행 중인 코어가 해당 기능을 지원한다는 뜻은 아닙니다. 반대로 코어에서 지원하는 항목이 모두 클라이언트 화면에 노출되는 것도 아닙니다. 고급 기능을 사용하기 전에 현재 클라이언트의 설정 안내를 읽고, 시작 로그에서 실행 환경을 확인하세요. 확실하지 않으면 기본값을 유지하고 이미 검증된 프로토콜 조합을 기준으로 삼으세요. 선택지를 모두 갖추려고 프로그램을 자주 바꾸지는 마세요.
플랫폼별 설치 파일은 클라이언트 다운로드에서 확인하고, 클라이언트별 장단점은 클라이언트 비교를 참고하세요. 다운로드 전에 운영체제, 프로세서 아키텍처, 필요한 코어 기능, 설정 출처를 기록해 두면 설치 후 같은 항목을 확인하기 쉽습니다. 현재 클라이언트에 꼭 필요한 기능이 없을 때만 교체를 고려하세요. 문제가 포트, 구독, 시스템 권한에 있다면 클라이언트를 바꿔도 같은 설정 오류가 반복될 수 있습니다.
설치와 기본 연결: 먼저 로컬 환경 확인
설치 전 환경 기록
설치 전에 현재 네트워크가 정상인지, 시스템에 기존 프록시 설정이 있는지, 가상 인터페이스를 만드는 다른 프로그램이 실행 중인지 기록하세요. 필요하지 않은 이전 클라이언트는 종료하되 네트워크 어댑터를 임의로 삭제하거나 시스템 서비스를 변경하지 마세요. 문제가 생겼을 때 복구할 수 있도록 기존 프록시 주소, 포트, 자동 설정 상태를 남겨 두세요. 조직 정책으로 관리되는 기기라면 허용된 설치 및 네트워크 설정 방식을 먼저 확인하고 권한을 반복해서 높여 제한을 우회하지 마세요.
다운로드 페이지에서 플랫폼별 항목을 선택해 설치한 다음, 처음에는 클라이언트 하나만 실행하세요. 프로그램, 사용자 설정, 캐시가 서로 다른 디렉터리에 저장될 수 있으므로 업그레이드하거나 프로그램을 옮기기 전에 실제 데이터 위치를 확인해야 합니다. 구독 및 인증 정보가 포함된 설정 폴더를 공개 공유 위치에 두지 마세요. 데스크톱 동기화 도구가 폴더 전체를 자동 업로드하면 원래 로컬에만 보관해야 할 연결 정보까지 전송될 수 있습니다.
첫 실행과 권한 구분
처음 실행할 때는 메인 창이 정상적으로 표시되는지 확인한 다음 코어가 시작되는지 살펴보세요. 일반적인 로컬 프록시를 매일 사용하기 위해 계속 최고 권한으로 실행할 필요는 없습니다. TUN이나 라우팅 변경에는 별도 권한 또는 보조 서비스가 필요할 수 있습니다. 기능별로 필요한 권한만 추가하고, 시작 실패를 모두 권한 부족 탓으로 돌리지 마세요. 시스템 권한 요청이 표시되면 요청한 기능을 읽고 현재 작업과 관련 있는지 확인한 뒤 허용하세요.
Windows에서는 다른 도구가 시스템 프록시 설정을 계속 덮어쓰는지 확인하세요. macOS에서는 앱 실행 허가와 네트워크 관련 권한을 구분해야 합니다. Linux에서는 그래픽 세션, 트레이 환경, 패키지 의존성이 요구 사항을 충족하는지 확인하세요. 이런 차이는 시스템 연동에 영향을 주지만 노드 설정 항목 자체를 바꾸지는 않습니다. 메인 창은 사용할 수 있는데 트레이 메뉴가 없다면 창에서 설정을 마칠 수 있습니다. 인터페이스 연동 문제를 원격 연결 문제로 오인하지 마세요.
Android에서 처음 연결할 때는 보통 시스템 VPN 권한을 확인해야 합니다. 권한을 허용하기 전에 노드를 저장하고, 허용한 뒤 앱이 실행 상태로 전환되는지 확인하세요. 이미 다른 VPN 연결이 있다면 시스템에서 기존 연결을 전환하라는 안내가 표시될 수 있습니다. 먼저 두 연결의 용도를 확인해 서로 차지하려고 하지 않도록 하세요. 백그라운드 실행 설정도 기록하되, 첫 테스트는 앱을 화면에 띄운 상태로 진행해 배터리 관리의 영향을 제외하세요. 기본 연결을 확인한 다음 화면 잠금과 백그라운드 동작을 점검하면 됩니다.
리스너 주소와 포트 사용 여부
로컬 리스너는 루프백 주소를 우선 사용해 이 기기의 요청만 받도록 설정하세요. 다른 기기에서도 연결해야 하는 경우에만 LAN 리스너, 인증, 방화벽 범위를 검토하세요. 포트 번호는 입구를 구분하는 값이지 노드 서버 포트를 복사하는 값이 아니므로 두 포트는 달라도 됩니다. 로그에 주소가 이미 사용 중이라고 표시되면 다른 클라이언트를 종료하거나 포트 사용 프로그램을 확인하세요. 그다음 로컬 리스너 포트를 바꾸고, 해당 포트를 수동으로 설정한 앱도 함께 수정하세요.
{
"inbounds": [
{
"tag": "local-http",
"listen": "127.0.0.1",
"port": 10809,
"protocol": "http",
"settings": {}
}
]
}
여기에 표시된 내용은 리스너 부분만 보여주는 예시이며 완전한 프록시 설정이 아닙니다. 리스닝 범위, 포트, 프로토콜, 태그의 관계를 설명하기 위한 것이며, 실제 사용 시에는 출구 등을 포함해 클라이언트가 전체 설정을 생성해야 합니다. HTTP 입구를 SOCKS만 지원하는 앱의 입력란에 넣지 마세요. 포트 번호가 서로 비슷하다는 이유로 바꿔 써도 되는 것은 아닙니다. 앱에서 프록시를 따로 설정한다면 프로토콜, 주소, 포트를 모두 확인해야 합니다.
기본 연결을 확인할 때는 복잡한 라우팅, 트래픽 감지, TUN을 사용하지 마세요. 로그에 시작 오류가 없는지 확인한 뒤 이미 작동이 확인된 노드 하나를 가져와 시스템 프록시를 사용하는 앱으로 테스트합니다. 연결에 성공한 설정을 기록하고 복구 방법을 남겨 두세요. 여러 항목을 바꿔야 실행된다면 변경 순서와 이유를 기록해야 합니다. 그래야 나중에 업그레이드하거나 옮길 때 꼭 필요한 설정과 문제 해결 중 임시로 바꾼 설정을 구분할 수 있습니다.
구독 가져오기: 출처, 형식, 노드 확인
구독 주소와 공유 링크 구분
구독 주소는 여러 노드 정보를 가져오는 경로이고, 공유 링크는 보통 노드 하나의 정보를 담습니다. 네이티브 JSON은 코어 설정 구조를 표현합니다. 세 형식은 서로 바꿔 쓸 수 없습니다. 전체 JSON을 구독 주소 입력란에 붙여 넣거나 공유 링크 하나를 정기 업데이트할 구독 주소로 사용하면 가져오기에 실패할 수 있습니다. 먼저 콘텐츠 형식을 확인한 다음 클라이언트의 구독 관리, 클립보드 가져오기, 사용자 지정 설정 중 맞는 기능을 사용하세요. 형식 오류를 네트워크 장애로 오인하지 않도록 주의해야 합니다.
구독 링크에는 계정을 식별할 수 있는 접근 정보가 포함되는 경우가 많으므로 민감한 자료로 취급하세요. 전체 주소를 공개 스크린샷, 로그 문의, 공유 문서에 넣거나 출처가 불분명한 변환 사이트에 올리지 마세요. 도움을 요청할 때는 프로토콜과 오류가 발생한 위치를 설명하고 인증 정보, 식별 가능한 도메인 부분, 쿼리 매개변수는 숨기세요. 인코딩된 문자열도 원래 내용으로 복원될 수 있으므로 인코딩을 접근 보호 수단으로 생각하지 마세요.
그룹을 만들고 처음 업데이트하기
클라이언트의 구독 관리에서 그룹을 추가하고 알아보기 쉬운 이름과 구독 주소를 입력한 뒤 업데이트하세요. 메뉴 이름은 화면마다 다를 수 있지만, 먼저 출처를 저장한 다음 콘텐츠를 가져와 파싱하는 과정은 같습니다. 업데이트 후에는 성공 알림만 보지 말고 노드가 예상한 그룹에 나타나는지 확인하세요. 그룹이 비어 있다면 출처에서 유효한 콘텐츠를 반환하는지 먼저 확인하고 파싱 로그를 살펴보세요. 당장 클라이언트를 재설치하거나 네트워크 설정 전체를 바꾸지 마세요.
구독 업데이트와 프록시 연결은 서로 다른 네트워크 요청입니다. 업데이트가 직접 연결을 사용하는지 현재 프록시를 거치는지는 클라이언트 설정과 시스템 환경에 따라 다릅니다. 이미 작동하지 않는 노드를 통해 업데이트하도록 설정되어 있으면 새 노드를 가져올 수 없는 상태가 반복될 수 있습니다. 업데이트 경로를 확인하고 허용된 네트워크 환경에서 업데이트 방식을 조정하되 기존 그룹은 유지하세요. 먼저 모든 노드를 지우면 문제 해결에 사용할 기준이 사라집니다.
파싱이 끝나면 노드 편집 화면을 열어 서버 주소, 포트, 프로토콜, 인증 정보, 전송 방식, 보안 설정을 확인하세요. 표시 이름은 노드를 식별하기 위한 값일 뿐 연결의 정확성에는 영향을 주지 않습니다. 특히 서버 이름과 연결 주소가 서로 다를 수 있고, 전송 경로와 요청 헤더도 각각 다른 역할을 합니다. 항목이 겹쳐 보인다고 삭제하지 마세요. 네트워크 주소 지정, 핸드셰이크 검증, 애플리케이션 요청에 각각 쓰이는 항목일 수 있습니다.
가져온 뒤 확인할 사항과 업데이트 범위
노드 하나를 활성 설정으로 지정한 뒤 코어를 다시 시작할 수 있는지 확인하고, 지정한 앱과 대상 하나로 테스트하세요. 목록에 표시되는 테스트 결과는 특정 테스트 방식의 결과일 뿐 모든 앱의 실제 동작을 보장하지는 않습니다. 클라이언트 테스트는 성공했지만 브라우저에서 연결되지 않는다면 브라우저의 입구 설정을 확인하세요. 시작 단계에서 오류가 발생했다면 먼저 항목 호환성을 살펴봐야 합니다. 노드만 계속 바꾸기보다 가져오기, 시작, 실제 접속을 나눠 관찰하는 편이 문제를 찾기 쉽습니다.
구독을 업데이트하면 구독에서 생성된 노드 항목의 수동 변경 내용이 덮어써질 수 있습니다. 노드를 직접 수정하기 전에 다음 업데이트 때 어떤 항목이 원래대로 돌아오는지 확인하세요. 장기간 사용할 사용자 지정 설정이 필요하다면 클라이언트가 제공하는 별도 설정이나 복사 기능을 사용하고 복사본에 알아보기 쉬운 이름을 붙이세요. 구독 원본과 로컬 복사본을 따로 관리하면 변경 내용이 잘못 덮어써지는 일을 줄일 수 있습니다. 그룹을 삭제하기 전에 활성 노드가 해당 그룹에 속하는지 확인해 업데이트 후 선택한 항목이 사라지지 않도록 하세요.
인증 실패, 빈 콘텐츠, 인식할 수 없는 형식은 각각 다르게 확인해야 합니다. 인증 실패는 구독 정보와 계정 상태를 점검하고, 빈 콘텐츠는 응답에 노드 정보가 실제로 포함됐는지 확인하세요. 형식 오류는 클라이언트가 지원하는 가져오기 방식을 확인해야 합니다. 전체 설정에는 로컬 경로나 특정 출구 태그가 포함될 수도 있어 단일 노드 링크처럼 그대로 재사용할 수 없습니다. 형식의 차이는 구독 링크 형식 해설에서 자세히 확인하고, 구조를 이해한 뒤 변환 여부를 결정하세요.
프록시 모드: 앱 연결과 코어 라우팅
시스템 프록시가 모든 트래픽을 처리하는 것은 아닙니다
시스템 프록시는 이 방식을 지원하는 앱에 프록시 주소를 제공합니다. 브라우저는 대체로 사용할 수 있지만, 별도 설정을 유지하는 프로그램도 있고 시스템 프록시를 전혀 읽지 않는 프로그램도 있습니다. 켠 뒤 일부 앱만 달라졌다면 노드를 바꾸기보다 각 앱의 연결 방식을 먼저 확인하세요. 로컬 프록시가 실행 중인지와 시스템이 해당 프록시를 가리키는지를 따로 살펴보세요. 코어가 정상적으로 실행 중이어도 시스템 프록시가 이전 포트를 가리키면 모든 연결이 끊긴 것처럼 보일 수 있습니다.
수동 프록시는 앱에 로컬 입구를 직접 입력하는 방식입니다. 문제를 분리해 테스트하거나 앱 하나만 연결할 때 유용합니다. 이 경우 시스템 프록시 설정은 그대로 둘 수 있지만, 앱의 프로토콜, 주소, 포트는 코어의 리스너 설정과 일치해야 합니다. 앱에 자동 설정, 프록시 확장 프로그램, 수동 설정이 함께 있다면 실제로 어느 설정이 적용되는지 확인하세요. 문제를 찾는 동안에는 분명한 입구 하나만 남겨 여러 설정이 겹쳐 화면 표시와 실제 동작이 달라지지 않도록 하세요.
연결 범위와 출구 선택은 따로 이해하세요
클라이언트 화면의 전체, 규칙, 직접 연결 같은 이름은 보통 출구 선택 정책을 가리킵니다. 시스템 프록시와 TUN은 주로 앱이 트래픽을 클라이언트에 전달하는 방식을 결정합니다. 두 설정은 서로 다른 차원입니다. 전체 프록시 모드라고 해서 모든 앱이 시스템 프록시를 사용하는 것은 아니며, TUN으로 트래픽을 가져오더라도 모든 목적지가 원격 프록시를 거쳐야 하는 것은 아닙니다. 먼저 연결할 앱을 정한 다음 해당 트래픽을 어떻게 분기할지 정하면 입구 문제를 라우팅 문제로 오인해 설정을 반복해서 바꾸지 않게 됩니다.
처음 확인할 때는 간단한 프록시 출구 정책을 사용해 연결된 테스트 앱이 선택한 노드로 대상에 접속하는지 확인하세요. 성공하면 일상적으로 사용할 분할 규칙으로 전환하고 같은 대상으로 로그 변화를 비교합니다. 단순 정책에서는 성공하지만 규칙 정책에서 실패한다면 규칙 순서, 기본 출구, DNS 조건을 우선 확인하세요. 두 정책 모두 실패하면 노드와 입구 설정으로 돌아가세요. 아직 해결되지 않은 기본 연결 문제를 가리려고 규칙을 계속 추가하지 마세요.
| 설정 항목 | 해결하려는 문제 | 흔한 오해 |
|---|---|---|
| 시스템 프록시 | 이 방식을 지원하는 앱이 사용할 로컬 입구 | 모든 프로그램이 따를 것이라고 생각함 |
| 앱 수동 프록시 | 앱 하나를 연결하는 방법 | 입구 프로토콜 또는 포트를 잘못 입력함 |
| 라우팅 정책 | 연결된 요청이 사용할 출구 | 규칙 모드를 시스템 전체 트래픽 처리로 오해함 |
| TUN | 가상 인터페이스로 가져온 트래픽 처리 | 사용 설정만 하면 DNS와 라우팅이 필요 없다고 생각함 |
실제 사용 환경을 포함해 결과 확인
테스트할 앱, 대상, 활성 노드를 고정하고 도메인 해석, 연결 수립, 실제 콘텐츠 로드가 각각 완료되는지 확인하세요. 페이지 하나가 열린다고 해서 다른 앱의 UDP 요청이나 장시간 연결까지 정상이라고 볼 수는 없습니다. 반대로 대상 하나에 연결되지 않았다고 모든 연결이 실패한 것도 아닙니다. 이미 접속 가능한 다른 대상을 비교 테스트에 사용하세요. 한 번에 모드나 노드 중 하나만 바꿔야 결과와 설정을 연결해 판단할 수 있습니다.
데스크톱 앱에 자체 프록시 기능이 있다면 도메인 해석을 프록시에 맡기는지 확인하세요. 요청 방식에 따라 코어에서 도메인을 확인할 수도 있고, 이미 해석된 주소만 확인할 수도 있습니다. 이는 이후 도메인 규칙에 영향을 줍니다. 앱 하나를 작동시키려고 곧바로 시스템 전체 DNS를 바꾸지 마세요. 앱의 프록시 및 이름 해석 방식을 먼저 확인하고, 필요하면 클라이언트 로그에서 요청이 로컬에 도착했는지와 대상이 어떤 형식으로 기록됐는지 살펴보세요.
LAN 접속도 별도로 테스트해야 합니다. 프린터, 파일 공유, 로컬 서비스는 사설 주소나 로컬 도메인을 사용할 수 있습니다. 이런 요청이 원격 출구로 전달되면 외부 페이지는 열리지만 로컬 리소스에 접근할 수 없는 경우가 생깁니다. 먼저 프록시에 연결하지 않은 상태에서 리소스가 작동하는지 확인한 다음 명확한 로컬 범위에 직접 연결 규칙을 설정하세요. 알 수 없는 주소를 모두 직접 연결에 넣거나 광범위한 규칙으로 특정 기기 하나의 문제를 해결하지 마세요. 다른 대상의 예상 경로까지 바뀔 수 있습니다.
클라이언트를 종료하기 전에 시스템 프록시를 원래대로 돌리거나 설정을 해제한 뒤 코어를 중지하면, 시스템이 작동하지 않는 포트를 계속 가리킬 가능성을 줄일 수 있습니다. 프로그램이 갑자기 종료됐다면 다시 시작한 뒤 프록시 상태를 확인하고, 필요한 경우 시스템 설정에서 이전 값으로 복구하세요. 이 장을 마치면 앱이 연결되어 있는지, 어떤 입구를 사용하는지, 최종적으로 어떤 출구를 이용하는지 설명할 수 있어야 합니다. 하나라도 확인할 수 없다면 관찰 정보를 먼저 보완하고 더 복잡한 트래픽 처리 기능은 나중에 설정하세요.
라우팅: 규칙 순서와 DNS 조건
설명할 수 있는 순서로 규칙 작성
라우팅 규칙은 보통 순서대로 확인하며 조건에 맞으면 해당 출구를 선택합니다. 따라서 구체적인 예외 규칙은 광범위한 규칙보다 앞에 둬야 합니다. 규칙을 계획할 때는 로컬 리소스는 직접 연결, 지정한 도메인은 특정 출구, 나머지 요청은 기본 정책으로 처리한다는 식으로 원하는 동작부터 정하세요. 규칙을 잔뜩 모은 뒤 결과를 추측하지 마세요. 각 규칙에 매칭 대상, 선택할 출구, 필요한 이유를 설명할 수 있어야 합니다. 두 규칙이 같은 대상을 처리한다면 앞선 규칙을 우선하는 이유도 분명해야 합니다.
아래 설정은 라우팅 구조를 살펴보기 위한 직접 연결 전용 예시이며 원격 프록시 노드는 포함하지 않습니다. 첫 번째 규칙은 사설 주소, 두 번째 규칙은 분류된 도메인을 처리하고 마지막 규칙은 해당 입구로 들어온 나머지 요청을 처리합니다. 실제로 직접 연결과 프록시를 분기하려면 클라이언트에서 유효한 프록시 출구를 만들고 관련 규칙이 실제 태그를 가리키도록 설정해야 합니다. 출구를 정의하지 않은 채 태그만 작성하거나 태그 이름이 모든 클라이언트에서 같을 것이라고 가정하지 마세요.
{
"inbounds": [
{
"tag": "local-socks",
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": { "udp": true }
}
],
"outbounds": [
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
}
],
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"inboundTag": ["local-socks"],
"outboundTag": "direct"
}
]
}
}
도메인 정책은 DNS 서버 설정이 아닙니다
domainStrategy는 routing 객체에 속하며 개별 규칙에 지정하는 값이 아닙니다. 라우팅 매칭 과정에서 주소 규칙을 확인하기 위해 도메인을 언제 해석할지 제어합니다. AsIs는 기존 대상 형식을 유지합니다. IPIfNonMatch는 도메인 규칙에서 결과를 찾지 못했을 때 주소 규칙 매칭을 시도합니다. IPOnDemand는 주소 정보가 필요한 규칙을 만나면 이름 해석을 수행할 수 있습니다. 정확한 동작은 사용 중인 코어와 전체 규칙을 함께 확인해야 합니다.
라우팅의 도메인 정책은 어떤 DNS 서버에 질의할지 따로 지정하지 않으며 앱의 이름 해석 설정과도 다릅니다. 앱이 도메인을 주소로 이미 해석했다면 코어가 원래 이름을 자동으로 복원하지 못할 수 있습니다. 반대로 코어가 주소 규칙 매칭을 위해 도메인을 해석한다고 해서 실제 연결에서도 같은 해석 경로를 사용하는 것은 아닙니다. DNS 문제를 확인할 때는 질의를 시작한 주체, 질의 출구, 반환 결과, 최종 연결 대상을 따로 살펴보세요. 여러 단계를 하나의 모호한 결론으로 묶지 않는 것이 중요합니다.
geosite와 geoip는 관련 데이터 파일과 분류 항목에 의존합니다. 분류 항목을 찾을 수 없거나 데이터를 불러오지 못한다면 클라이언트의 데이터 경로, 파일이 모두 있는지, 코어가 해당 형식을 인식하는지 먼저 확인하세요. 분류 데이터는 변경될 수 있고 새 도메인이 모두 포함된다는 보장도 없습니다. 명확한 처리가 필요한 도메인은 범위를 좁힌 규칙으로 직접 지정할 수 있습니다. 예외를 추가한 이유를 기록하고 정기적으로 검토해 임시 규칙이 쌓이거나 서로 가리지 않도록 하세요.
웹페이지가 아니라 로그로 규칙 확인
테스트할 때 로컬 주소, 지정 도메인, 어떤 규칙에도 해당하지 않는 대상을 각각 준비하고 요청이 선택한 출구 태그를 확인하세요. 웹페이지 하나를 열어도 여러 도메인에 요청할 수 있으며 각 리소스가 다른 규칙에 매칭될 수 있습니다. 페이지가 표시된다고 해서 모든 요청의 경로가 같다는 뜻은 아닙니다. 규칙 하나를 확인할 때는 범위가 분명한 대상으로 먼저 테스트한 뒤 실제 페이지를 다시 확인하세요. 체감 속도만 비교하기보다 규칙 변경 전후의 로그를 기록하는 편이 실제 적용 여부를 파악하기 좋습니다.
기본 출구 처리 방식도 확인해야 합니다. 일부 코어 설정은 어떤 규칙에도 매칭되지 않을 때 출구 목록의 첫 번째 항목을 사용하며, 클라이언트가 기본 규칙을 추가로 생성할 수도 있습니다. 화면에서 보이는 순서가 최종 설정의 순서와 다를 수 있으므로 사전 설정 규칙을 사용하는 경우 생성 결과를 확인하세요. 기본 경로를 바꾸려고 모든 출구의 순서를 임의로 바꾸지 마세요. 먼저 클라이언트의 기본 정책 설정을 사용하고 재시작 후 예상대로 동작하는지 확인하세요.
설정이 예상대로 동작하지 않으면 규칙을 최소화하세요. 로컬 리소스에 필요한 규칙과 명확한 기본 출구만 남긴 뒤 예외를 하나씩 추가합니다. 특정 규칙을 추가한 뒤 문제가 다시 생기면 해당 규칙의 조건과 순서를 집중적으로 확인하세요. 도메인 분류, 주소 분류, 기본 프록시 출구를 조합하는 방법은 라우팅 규칙 설정 실전 가이드에서 더 자세히 볼 수 있습니다. 규칙을 늘리기 전에 각 단계의 동작을 확인하고 되돌릴 방법을 마련하세요.
TUN과 플랫폼별 설정: 트래픽 범위와 복구 방법
사용 전에 실제 필요 확인
TUN은 가상 네트워크 인터페이스를 통해 시스템 라우팅으로 전달된 트래픽을 처리합니다. 앱에서 직접 프록시를 설정할 수 없는 경우에 적합합니다. 인터페이스, 라우팅, DNS, 권한 간의 의존성이 늘어나므로 첫 연결 문제를 해결하기 위한 기본 수단으로 사용하지 마세요. 먼저 일반 입구로 노드가 작동하는지 확인한 뒤 실제로 어떤 앱의 트래픽을 가져와야 하는지 결정하세요. 문제가 시스템 프록시 포트 입력 오류라면 TUN을 켜도 오류가 해결되지 않고 변숫값만 늘어납니다.
사용 전에 현재 기본 네트워크와 DNS 설정, 다른 가상 인터페이스의 용도를 기록하고 불필요한 유사 프로그램은 종료하세요. 여러 프로그램이 기본 라우팅을 바꾸려고 하면 설정이 서로 덮어쓰이거나 순환할 수 있습니다. 함께 사용해야 한다면 어느 프로그램이 입구와 DNS를 담당하고 어떤 대상은 트래픽 처리에서 제외할지 명확히 정해야 합니다. 역할을 나누기 어렵다면 한 프로그램만 실행해 먼저 검증한 뒤 함께 사용할 조건을 하나씩 확인하세요.
권한, 라우팅, 연결 루프
데스크톱 환경에서는 클라이언트 구현과 시스템 조건에 따라 관리자 권한, 보조 서비스, 가상 인터페이스 구성 요소가 필요할 수 있습니다. 실행에 실패하면 로그에서 어느 단계가 실패했는지 먼저 확인하세요. 인터페이스 생성 실패는 권한과 구성 요소를, 라우팅 적용 실패는 권한이나 충돌을, 인터페이스는 만들어졌지만 트래픽이 없는 경우에는 라우팅과 제외 조건을 살펴보세요. 권한 요청을 완료하지 못했다고 프로그램을 반복 설치하지 말고 관련 스위치를 여러 개 켜 오류를 가리지 마세요.
프록시 코어가 원격 서버에 연결할 때 사용하는 트래픽은 자신의 트래픽 처리 규칙에 다시 들어가 입구로 무한히 되돌아오지 않도록 해야 합니다. 클라이언트가 필요한 우회 처리를 담당하는 경우가 많지만, 사용자 지정 라우팅이나 인터페이스 연결, 다른 네트워크 도구가 이를 방해할 수 있습니다. 일반 프록시는 정상인데 TUN을 켠 직후 시간 초과가 발생하면 루프백, 출구 네트워크, 원격 주소의 처리 경로를 우선 확인하세요. 테스트 조건과 트래픽 처리 대상이 동시에 바뀌므로 모든 트래픽을 직접 연결로 바꿔 확인하지 마세요.
DNS와 LAN을 별도로 확인
TUN이 작동한 뒤에도 DNS 질의가 어디로 전달되는지 확인해야 합니다. 환경에 따라 시스템 DNS 질의가 트래픽 처리 대상이 될 수도 있고, 특정 DNS 모드나 클라이언트 설정이 필요할 수도 있습니다. 주소를 직접 사용하면 연결되지만 도메인을 해석하지 못한다면 원격 노드보다 이름 해석을 먼저 확인하세요. 합성 주소 기능을 사용하는 경우 주소 매핑, 제외 도메인, 라우팅이 서로 맞는지도 확인해야 합니다. 해당 기능에서 반환한 주소를 실제 목적지 서버의 주소로 오인해 다른 규칙에 그대로 넣지 마세요.
LAN 기기, 로컬 서비스, 원격 관리 연결은 별도로 확인해야 합니다. 트래픽 처리를 시작하기 전에 필요한 작업을 저장하고 로컬에서 복구할 수 있는 경로를 확보하세요. 기본 라우팅을 바꿀 수 있는 설정을 유일한 원격 연결에서 바로 테스트하지 마세요. 사설 주소를 우회할 때는 다른 사람의 제외 목록을 그대로 복사하지 말고 실제 네트워크 범위를 확인하세요. 외부 대상뿐 아니라 로컬 공유, 기기 관리 페이지, 유지해야 할 시스템 네트워크 기능도 테스트하세요.
Android와 데스크톱의 확인 항목 차이
Android 클라이언트는 보통 시스템 VPN 인터페이스로 앱 트래픽을 연결하므로 데스크톱의 독립된 TUN 스위치와 항목별로 일대일 대응하지 않습니다. 시스템 권한, 앱별 범위, 백그라운드 제한을 중점적으로 확인하세요. 앱 범위를 설정할 때 선택한 앱만 포함하는지, 선택한 앱을 제외하는지 화면 설명을 확인합니다. 저장한 뒤 연결을 다시 설정해 테스트하세요. 목록의 체크 상태만 보고 의미를 추측하지 말고 안내와 실제 요청 로그를 함께 확인하세요.
화면을 잠근 뒤 연결이 끊긴다면 노드를 바꾸기 전에 전면과 백그라운드 상태를 비교하고 배터리 관리, 백그라운드 제한, 네트워크 전환 여부를 확인하세요. 데스크톱도 유선에서 무선으로 전환하거나 절전 모드에서 복귀한 뒤 가상 인터페이스와 라우팅을 다시 설정해야 할 수 있습니다. 한 번에 환경 변화 하나만 테스트하고 연결이 복구되는지 기록하세요. 네트워크를 전환한 뒤에만 문제가 생긴다면 인터페이스 상태와 출구 네트워크 변화를 우선 확인하세요. 이미 검증된 인증 항목을 반복해서 수정하지 마세요.
유지 관리: 백업, 업데이트, 문제 해결
복구할 수 있는 기본 설정 보관
유지 관리의 첫 번째 목표는 설정을 계속 추가하는 것이 아니라, 작동 상태를 설명하고 복구할 수 있는 구성을 보관하는 것입니다. 구독 그룹, 수동 노드, 사용자 지정 라우팅, DNS 선택, 필요한 인터페이스 설정을 백업하고 클라이언트가 자동 생성하는 항목도 기록하세요. 내보낸 파일에는 접근 정보가 포함될 수 있으므로 접근을 제한할 수 있는 안전한 위치에 보관하세요. 백업 형식과 사용할 클라이언트를 확인해 실제로 복구할 수 있는지 점검해야 합니다. 복원할 수 없는 파일을 백업 완료로 간주하지 마세요.
업데이트 전에 현재 정상 동작 상태와 주요 설정을 기록하고 중요한 연결을 종료한 다음 클라이언트나 관련 구성 요소를 업데이트하세요. 업데이트 뒤에는 기존과 같은 기본 테스트를 먼저 진행해 시작, 구독, 입구, 라우팅이 정상인지 확인한 다음 새 기능을 사용하세요. 화면 구성이 바뀌어 이전 메뉴를 찾기 어렵다면 설정 구조가 바뀌었는지 먼저 살펴보고 모든 항목을 바로 다시 입력하지 마세요. 업그레이드 후 문제가 생기면 로그와 설정 차이를 보관하고 미리 준비한 복구 방법을 따르세요.
오류가 발생한 단계에 따라 로그 확인
문제를 찾을 때는 시간 순서대로 확인하세요. 프로그램이 시작됐는지, 설정이 생성됐는지, 코어가 실행됐는지, 요청이 들어왔는지, 원격 연결이 수립됐는지, 대상에서 콘텐츠를 받았는지 살펴봅니다. 로그에서는 뒤따라 발생한 오류보다 관련된 최초 오류가 더 유용한 경우가 많습니다. 빨간 단어 하나만 잘라내지 말고 오류 앞뒤의 맥락을 함께 확인하세요. 로그 상세 수준을 높여야 한다면 문제를 재현하는 동안에만 사용하고 작업이 끝난 뒤 평소 수준으로 되돌리세요. 민감한 요청 정보가 장기간 쌓이지 않도록 주의해야 합니다.
코어가 시작되지 않을 때는 JSON 문법, 항목 위치, 출구 태그, 데이터 파일, 로컬 포트를 먼저 확인하세요. 아직 네트워크가 정상 처리 단계에 들어가지 않았으므로 원격 노드를 바꿔도 해결되지 않을 수 있습니다. 포트 사용 문제는 같은 기기에서 실행 중인 프로그램을 찾고, 분류 파일 누락은 데이터 경로를 확인하세요. 코어에서 지원하지 않는 항목이라면 기능 지원 여부를 점검해야 합니다. 구체적인 로그별 해결 방법은 코어 시작 실패 문제 해결에서 확인하세요. 확실한 오류를 하나씩 수정하고 다시 시작해 결과를 살펴보세요.
| 증상 | 우선 확인할 항목 | 나중으로 미룰 작업 |
|---|---|---|
| 코어가 시작되지 않음 | 설정 문법, 포트, 파일 경로, 항목 호환성 | 원격 노드를 계속 바꾸기 |
| 실행 중인데 요청 기록이 없음 | 앱 입구, 프록시 포트, 트래픽 처리 범위 | 라우팅 규칙 추가 |
| 도메인은 실패하지만 주소 테스트는 응답함 | 이름 해석 경로, DNS 응답, 도메인 매칭 조건 | 클라이언트 재설치 |
| 백그라운드에서만 또는 네트워크 전환 후 끊김 | 배터리 제한, 인터페이스 상태, 출구 네트워크 변경 | 인증 정보 다시 작성 |
속도 문제는 단계별로 비교
연결은 되지만 속도가 느리다면 노드 부하, 전송 경로, 로컬 설정을 나눠 확인하세요. 앱과 대상을 고정하고 비슷한 조건에서 노드를 바꿔 비교한 다음 특정 시간대나 네트워크 환경에서만 문제가 생기는지 살펴보세요. 노드, 전송 설정, DNS를 동시에 바꾸지 마세요. 문제가 해결되더라도 원인을 파악하기 어려워집니다. 테스트 결과는 해당 방법과 당시 환경에만 적용되며 모든 앱의 장기적인 사용 경험을 그대로 보여주지는 않습니다.
로컬 환경에서는 다른 다운로드 작업, 시스템 자원 사용량, 중복된 프록시부터 확인한 다음 연결 재사용 같은 고급 옵션을 검토하세요. 연결 재사용이 모든 프로토콜과 앱에 더 적합한 것은 아니며, 무작정 켜면 문제 양상이 달라질 수 있습니다. 단계별 점검 순서는 연결 속도 저하 단계별 확인을 참고하세요. 매일 모든 노드를 한꺼번에 테스트할 필요는 없습니다. 자주 쓰는 설정을 안정적으로 유지하고 실제 문제가 생겼을 때 목적에 맞게 비교하세요.
문제 자료를 공유할 때는 클라이언트 이름, 운영체제, 발생 단계, 민감한 정보를 가린 오류 내용을 남기고 구독 주소, 인증 정보, 불필요한 접속 기록은 삭제하세요. 스크린샷에는 그룹 이름, 서버 주소, 계정 관련 정보가 들어 있을 수 있으므로 전송 전에 항목별로 확인해야 합니다. 입구와 모드 정보 없이 시간 초과 메시지만 전달하면 정확한 판단이 어렵습니다. 정리되지 않은 스크린샷을 많이 보내기보다 재현 절차를 간결하고 체계적으로 설명하는 편이 도움이 됩니다.
유지 관리 기록은 일반 텍스트만으로도 충분합니다. 변경 항목, 변경 이유, 테스트 대상, 확인 결과, 복구 방법을 적어 두세요. 임시 설정이 더는 필요하지 않으면 바로 제거해 몇 년 뒤 아무도 이해하지 못하는 예외 규칙에 의존하지 않도록 하세요. 가끔 구독 그룹이 여전히 필요한지, 백업을 복원할 수 있는지, 시스템 프록시가 현재 클라이언트 설정과 맞는지 확인하세요. 유지 관리의 목표는 설정 수를 늘리는 것이 아니라 문제 범위를 좁히고 변경 내용을 설명할 수 있게 하는 것입니다.
고급 설정: 문제에 맞춰 복잡도 높이기
작동하는 연결에서 검증 가능한 설정으로
앞선 장을 마친 뒤에는 실제 필요를 중심으로 고급 설정을 익히세요. 서비스별 경로를 세밀하게 제어해야 한다면 라우팅과 DNS를 더 살펴보고, 여러 기기를 관리해야 한다면 설정 이전의 한계를 확인하세요. 특수 프로토콜 매개변수가 필요하다면 먼저 코어 지원 여부를 확인해야 합니다. 고급 스위치를 모두 켜는 것을 학습 완료의 기준으로 삼지 마세요. 각 규칙의 역할을 설명하고 테스트를 재현하며 언제든 되돌릴 수 있는 간결한 설정이 검증되지 않은 옵션을 많이 넣은 구성보다 장기 관리에 적합합니다.
실험할 때마다 네 가지를 기록하세요. 현재 기준 설정, 검증할 가설, 유일한 변경 사항, 예상 결과입니다. 예를 들어 도메인 규칙의 우선순위를 확인하려면 노드와 입구를 그대로 둔 채 범위가 분명한 규칙 하나만 추가하고 출구 로그를 확인하세요. 실제 결과가 예상과 다르면 원인을 먼저 설명하고 두 번째 변경을 이어서 추가하지 마세요. 이렇게 하면 학습 내용을 재현 가능한 실험으로 만들 수 있고 여러 항목을 동시에 바꾼 뒤 특정 변경 하나의 효과로 잘못 판단하는 일을 줄일 수 있습니다.
프로토콜 기능과 코어별 차이
VLESS, XTLS Vision, REALITY를 자세히 알아볼 때는 각 항목이 어느 계층에 속하는지 이해한 다음 클라이언트와 현재 코어의 지원 여부를 확인하세요. 서버 주소, 서버 이름, 흐름 제어, 공개 키, 짧은 ID는 이름이 비슷하다고 서로 바꿔 쓸 수 없습니다. 프로토콜 이름만으로 노드의 사용 가능 여부를 판단할 수는 없습니다. 전송 방식 조합과 서버 설정도 함께 고려해야 합니다. 기존 서버가 정상 작동한다면 새로운 용어를 시험해 보려고 검증된 설정을 통째로 바꾸지 마세요.
V2Fly와 Xray의 관계 및 기능 차이는 두 코어의 기능 비교에서 더 살펴볼 수 있습니다. 학습의 목표는 코어의 우열을 단정하는 것이 아니라 각 기능을 어떤 코어가 구현하는지, 설정 구조가 어떻게 다른지, 현재 클라이언트에서 해당 기능을 어떻게 사용하는지 파악하는 것입니다. 코어를 바꾸기 전에 호환성 확인 목록을 준비하고, 변경한 뒤에는 시작, 핸드셰이크, 라우팅, DNS를 다시 검증하세요. 이전 코어에서 성공했다고 해서 새 환경에서도 반드시 작동하는 것은 아닙니다.
사용자 지정 설정과 그래픽 인터페이스의 경계
사용자 지정 JSON을 사용하기 전에 그래픽 설정 전체를 대체하는 것인지, 일부 항목만 병합하는 것인지 확인하세요. 설정을 불러오는 위치에 따라 처리 방식이 다를 수 있으며 입구, 출구, 태그를 중복 정의하면 충돌이 생깁니다. 직접 연결만 포함된 최소 예시로 구조를 익힌 다음 실제 노드와 규칙을 하나씩 추가하세요. 다른 사람의 로컬 경로와 특정 태그가 들어간 전체 설정을 그대로 가져오지 마세요. 병합 순서를 알 수 없다면 서로 덮어쓰는 설정 두 가지를 함께 관리하지 마세요.
그래픽 인터페이스에서 생성된 설정은 실제 결과를 확인할 때 유용하지만 장기간 직접 수정할 파일로 적합하지 않을 수 있습니다. 클라이언트가 저장되거나 노드를 전환할 때 파일을 다시 생성해 변경 내용을 덮어쓸 수 있습니다. 고급 설정을 계속 유지해야 한다면 클라이언트가 공식적으로 지원하는 사용자 지정 설정 기능을 사용하세요. 해당 기능이 없다면 매번 시작한 뒤 파일을 수동으로 수정하기보다 유지 비용부터 검토하세요. 데이터 출처, 생성 과정, 최종 설정의 관계를 기록하면 저장한 줄 알았던 변경이 실제로 적용되지 않는 상황을 줄일 수 있습니다.
소규모 회귀 테스트 준비
설정이 복잡해지면 몇 가지 기준 테스트를 유지하세요. 일반 도메인 접속, 로컬 리소스 직접 연결, 지정 규칙의 예상 출구 선택, 미매칭 대상의 기본 처리, 절전이나 네트워크 전환 후 복구를 확인합니다. 업데이트하거나 규칙을 변경할 때마다 같은 테스트로 결과를 비교하세요. 모든 웹사이트를 검사할 필요는 없습니다. 자신의 주요 사용 사례를 대표하고 실패했을 때 문제 모듈을 좁힐 수 있는 테스트라면 실용적인 가치가 있습니다.
자동화도 안정적인 절차를 마련한 뒤 도입해야 합니다. 구독 예약 업데이트, 자동 시작, 백그라운드 트래픽 처리는 반복 작업을 줄이지만 지켜보지 않는 동안 노드나 시스템 상태를 바꿀 수 있습니다. 사용 전에 실패 시 동작을 확인하세요. 업데이트 실패 후 이전 내용을 유지하는지, 시작할 때 시스템 프록시를 덮어쓰는지, 비정상 종료 후 복구할 수 있는지 살펴봐야 합니다. 먼저 전체 절차를 수동으로 완료하고 복구 방법을 테스트한 다음 자동화를 켜세요. 해결되지 않은 문제가 반복적인 백그라운드 장애로 이어지지 않도록 주의해야 합니다.
이 가이드의 목표는 환경 확인, 입구 검증, 노드 점검, 라우팅 확인, 이름 해석 점검, 트래픽 처리와 고급 설정 검토의 순서로 스스로 문제를 찾는 것입니다. 최소 연결을 다시 설정하려면 빠른 시작으로 돌아가세요. 기기에 맞는 설치 파일은 클라이언트 다운로드에서 확인하고, 추가 사례는 사용 팁에서 주제별로 살펴보세요. 새 설정은 명확한 문제를 해결하기 위해 추가하고 검증 근거를 남겨야 지속적으로 관리하기 쉽습니다.