노드는 선택했는데 웹페이지가 열리지 않거나 로그에 오류가 계속 표시되는 v2rayN 사용자에게 적합합니다. 먼저 로그를 설정한 뒤 동일한 요청으로 로컬 인바운드, 라우팅, 원격 아웃바운드를 차례로 확인하세요. 오류에 표시된 주소·포트·시간을 바탕으로 포트 충돌, DNS 조회 실패, 연결 시간 초과, 핸드셰이크 설정 불일치를 구분하고 한 번에 여러 설정을 바꾸지 않는 것이 중요합니다.
화면 알림과 코어 로그 구분하기
v2rayN은 클라이언트를 관리하는 인터페이스이며, 실제로 로컬 연결을 받고 라우팅한 뒤 서버에 연결하는 것은 선택한 코어입니다. 구독 업데이트 실패, 속도 측정 실패, 코어 시작 실패는 서로 다른 작업의 결과입니다. 빨간색 알림 하나만 보고 노드를 사용할 수 없다고 단정하지 마세요. 이 글은 Xray 코어를 사용하는 설정을 기준으로 설명합니다. 다른 코어에서는 오류 문구와 로그 항목이 다를 수 있습니다.
메인 화면의 정보 또는 로그 영역에서는 시작 과정과 실시간 오류를 확인할 수 있습니다. 특정 요청이 어떤 인바운드를 거쳐 어떤 아웃바운드로 연결됐는지 추적하려면 잠시 info 레벨을 사용하세요. 더 자세한 맥락이 필요할 때만 debug로 설정하면 됩니다. 로그에 표시되는 warning은 경고이며, 코어가 종료됐다는 뜻은 아닙니다.
-
현재 상태 기록하기
v2rayN과 코어 버전, 현재 노드, 로컬 수신 포트, 라우팅 모드를 기록하세요. 버전 정보는 「도움말」→「정보」 또는 시작 로그에서 확인할 수 있습니다. 현재 설정은 보관하고, 일단 구독을 업데이트하거나 여러 노드를 한꺼번에 수정하지 마세요.
-
로그 켜기
일반적인 데스크톱 인터페이스에서 「설정」→「매개변수 설정」으로 이동해 로그 관련 옵션을 찾으세요. 로그 기록을 켜고 로그 레벨을
info로 설정한 다음 저장하고 코어를 다시 시작합니다. 버전에 따라 탭 이름이나 중국어 메뉴명이 다를 수 있으므로 실제 로그 스위치와 레벨 항목을 확인하세요. -
한 번만 재현하기
현재 로그 표시 영역을 지우거나 시작 시간을 기록한 뒤, 정해 둔 주소 하나만 방문하세요. 한 번 성공하거나 실패하면 반복 새로고침을 멈추고 오류 전후 약 20줄을 보관합니다. 마지막 한 줄만 캡처하지 마세요.
-
로그 레벨 되돌리기
문제를 해결한 뒤에는
warning또는 기존 로그 레벨로 복원하세요. 로그를 공유하기 전에는 구독 주소, 노드 인증 정보, UUID, 공인 IP 주소와 방문 기록을 가리고 설정 파일 전체를 그대로 공개하지 마세요.
사용자 지정 Xray 설정을 관리 중이라면 로그 부분을 다음과 같이 작성할 수 있습니다. 이 예시는 log 객체만 보여 주며 완전한 config.json이 아닙니다. 전체 설정을 이 내용으로 덮어쓰지 마세요. 일반 노드의 경우 v2rayN이 생성한 실행 설정은 노드를 바꾸면 다시 작성될 수 있으므로 클라이언트에서 제공하는 옵션을 우선 사용하세요.
{
"log": {
"loglevel": "info"
}
}
인바운드·라우팅·아웃바운드 순서로 로그 읽기
문제를 확인할 때는 먼저 요청이 어느 단계까지 도달했는지 살펴보세요. 브라우저가 로컬 프록시에 연결하는 단계가 인바운드, 코어가 직접 연결·프록시·차단 여부를 판단하는 단계가 라우팅, 코어가 노드에 연결해 프로토콜을 협상하는 단계가 아웃바운드입니다. 노드 이름이 선택되어 있다는 것은 인터페이스에서 설정을 선택했다는 뜻일 뿐, 세 단계가 모두 정상이라는 의미는 아닙니다.
| 확인 단계 | 로그 또는 시스템에서 확인할 단서 | 다음 점검 항목 |
|---|---|---|
| 로컬 인바운드 | 수신 대기 실패 또는 테스트 요청 후 새 접속 기록이 없음 | 프로세스, 로컬 포트, 시스템 프록시와 앱의 프록시 사용 여부 확인 |
| 라우팅 선택 | 접속 기록의 아웃바운드 태그가 예상과 다름 | 규칙 순서와 outboundTag 대상 확인 |
| 노드 연결 | 노드 주소에 연결할 때 거부 또는 시간 초과 발생 | 서버 주소, 포트, 네트워크 경로, 서비스 상태 확인 |
| 프로토콜 핸드셰이크 | TCP 연결 후 인증서·인증·프로토콜 오류 발생 | TLS, 전송 방식, 서버 측 설정 확인 |
아래는 로그 형식을 단순화한 예시이며 모든 버전에서 문구가 똑같이 표시되는 것은 아닙니다. 대괄호 안의 태그는 설정에 따라 달라지므로 아웃바운드 이름이 항상 proxy라고 가정하지 마세요. accepted는 로컬 요청을 받아 처리 단계에 진입했다는 뜻이지, 원격 웹페이지가 성공적으로 응답했다는 뜻은 아닙니다.
from tcp:127.0.0.1:53124 accepted tcp:example.com:443 [socks-in -> proxy-out]
먼저 대상 주소 example.com:443을 확인하고, 라우팅 태그를 읽은 다음 비슷한 시각 또는 동일한 연결 식별자가 있는 후속 오류를 찾으세요. 오류에 노드 서버 주소가 표시되면 아웃바운드 연결을 중점적으로 확인합니다. 반대로 직접 연결 아웃바운드에서 웹사이트 주소를 대상으로 오류가 발생했다면 노드 비밀번호부터 바꿀 필요는 없습니다.
자주 발생하는 오류의 의미와 첫 점검 방법
상세 오류에는 여러 단계의 맥락이 포함됩니다. 예를 들어 바깥쪽에는 '연결 처리 실패'가 표시되고 안쪽에 구체적인 원인인 connection refused가 나올 수 있습니다. 오류 체인의 마지막에 있는 구체적인 원인부터 읽고, 상위 메시지로 돌아가 로컬·노드·대상 사이트 중 어디에서 실패했는지 확인하세요. 아래 문구는 자주 보이는 오류 예시이며 운영체제와 코어 버전에 따라 앞뒤 문구가 다를 수 있습니다.
오류: connection refused
원인: 대상 포트가 연결을 명시적으로 거부했습니다. 서비스가 수신 대기 중이지 않거나 포트를 잘못 입력했거나 방화벽이 연결을 차단할 때 주로 발생합니다.
해결 방법: 먼저 대상 주소가 127.0.0.1인지 확인하세요. 로컬 주소라면 코어와 수신 포트를 점검하고, 원격 주소라면 노드 포트와 서버 상태를 확인하세요. DNS 문제로 바로 단정하지 마세요.
오류: i/o timeout
원인: 제한 시간 안에 네트워크 작업이 완료되지 않았습니다. 연결, 데이터 읽기 또는 핸드셰이크 단계에서 지연됐을 수 있으며 노드 장애만을 의미하지는 않습니다.
해결 방법: 앞부분에 표시된 대상 주소를 기준으로 실패 단계를 파악하세요. 동일한 요청을 다른 네트워크나 정상 작동이 확인된 노드에서 시험하고, 한 번에 조건 하나만 바꾸세요.
오류: address already in use
원인: 코어가 사용하려는 로컬 수신 주소와 포트를 다른 프로세스가 이미 사용 중이거나, 다른 클라이언트 인스턴스가 계속 실행 중일 수 있습니다.
해결 방법: 포트를 점유한 프로세스를 찾아 정체를 확인한 뒤 중복 인스턴스를 종료하세요. 포트를 변경한다면 앱의 프록시 주소도 함께 바꿔야 합니다.
오류: no such host
원인: 현재 DNS 조회 경로에서 유효한 주소를 찾지 못했습니다. 도메인 오타, DNS 응답 또는 네트워크 연결 문제가 원인일 수 있습니다.
해결 방법: 로그에서 조회에 실패한 도메인이 노드 도메인인지 대상 도메인인지 먼저 확인하고 해당 DNS 경로를 점검하세요. 시스템 DNS 조회가 성공해도 코어 내장 DNS까지 정상이라는 뜻은 아닙니다.
오류: tls: failed to verify certificate
원인: 인증서 검증에 실패했습니다. 인증서 유효 기간, 신뢰 체인 또는 서버 이름이 일치하지 않는 문제일 수 있습니다.
해결 방법: 시스템 시간과 TLS 서버 이름을 확인하고 서버 관리자에게 인증서 체인 전체를 점검해 달라고 요청하세요. 인증서 검증을 건너뛰는 방법을 일반적인 해결책으로 사용하지 마세요.
오류: EOF / connection reset by peer
원인: 상대방이 연결을 종료하거나 초기화했습니다. 서버, 전송 설정 불일치 또는 중간 네트워크 장비의 개입이 원인일 수 있습니다.
해결 방법: 서버 설정과 전송 유형, 경로, 핸드셰이크 매개변수를 대조하고 다른 네트워크에서도 다시 테스트하세요. 이 한 줄만으로 인증 정보가 잘못됐다고 단정할 수는 없습니다.
로컬 포트로 요청이 코어에 전달되는지 확인하기
다음은 Windows에서 확인하는 예시입니다. SOCKS 수신 포트가 10808이고 노드 서버 포트가 443이라고 가정합니다. 이 숫자는 설명을 위한 예시일 뿐 모든 설치의 기본값이 아닙니다. 실행 전에 인터페이스나 실행 설정에서 실제로 사용 중인 포트로 바꾸세요.
PowerShell에서 먼저 수신 포트를 확인한 뒤 프록시를 명시해 요청을 보냅니다. 두 번째 명령은 도메인 조회를 SOCKS 프록시에 맡겨 브라우저가 시스템 프록시를 올바르게 사용하는지 여부를 변수에서 제외합니다. 테스트 URL은 문제 재현용이며 모든 사이트의 접속 가능성을 판단하는 기준은 아닙니다.
Get-NetTCPConnection -State Listen -LocalPort 10808
curl.exe --noproxy "" --proxy socks5h://127.0.0.1:10808 --connect-timeout 5 --max-time 15 -I https://example.com/
- 수신 대기 기록이 없음: 코어 시작 오류를 확인하세요. 포트 충돌 메시지가 나오면
netstat -ano | findstr :10808로 PID를 확인한 다음 작업 관리자에서 어떤 프로세스인지 살펴보세요. 정체를 모르는 시스템 프로세스를 바로 종료하지 마세요. - 로컬 프록시 연결이 거부됨: 수신 주소와 포트를 확인하세요. 루프백 주소만 수신하도록 설정했다면 같은 기기에서 테스트해야 합니다. 다른 기기의 연결 결과로 노드 상태를 판단하지 마세요.
- 명령은 성공하지만 브라우저에서는 연결되지 않음: 시스템 프록시, 브라우저별 설정, 확장 프로그램을 먼저 확인하세요. 일반적인 v2rayN 인터페이스에서는 트레이 메뉴의 「시스템 프록시」→「시스템 프록시 자동 설정」에서 구성할 수 있습니다. 프록시를 명시한 명령은 이 옵션과 무관하게 실행됩니다.
- 명령도 실패함: 명령 실행 시간과 코어 로그를 대조해 라우팅과 아웃바운드를 계속 추적하세요. 명령의 15초 시간 초과는 이번 테스트에만 적용되는 제한이며 코어나 서버의 고정 시간 초과 값이 아닙니다.
정리: 앱의 프록시 설정 차이부터 배제하기
SOCKS를 명시한 요청이 성공하면 노드 설정은 그대로 두고 앱에서 로컬 프록시까지의 연결을 먼저 수정하세요. 명시적 요청도 실패하면 로그를 따라 라우팅과 원격 연결을 확인해, 정상인 노드를 불필요하게 계속 바꾸지 않도록 합니다.
라우팅·DNS·핸드셰이크 설정을 하나씩 확인하기
로컬 포트에서 요청을 받았다면 다음으로 라우팅이 예상대로 작동하는지 확인하세요. Xray 라우팅 규칙은 일반적으로 순서대로 적용되며, 앞쪽의 포괄적인 규칙이 뒤쪽의 구체적인 규칙보다 먼저 일치할 수 있습니다. 현재 생성된 설정의 실제 태그를 확인하고 인터페이스에 표시된 노드 이름만으로 아웃바운드를 판단하지 마세요.
- 아웃바운드 태그 확인: 규칙의
outboundTag는 대상 아웃바운드의tag와 일치해야 합니다. 로그에서 차단 아웃바운드로 연결된 것으로 나오면 TLS를 바꾸기보다 라우팅 규칙부터 확인하세요. - 두 종류의 도메인 조회 구분: 노드 도메인 조회에 실패하면 서버 연결이 차단됩니다. 대상 도메인 조회에 실패하면 직접 연결이나 IP 일치 규칙에 영향을 줄 수 있습니다.
Resolve-DnsName example.com은 시스템 DNS 확인에만 사용할 수 있으며 코어의 DNS 조회 테스트를 대신하지 않습니다. - 시간 확인: Windows의 「설정」→「시간 및 언어」→「날짜 및 시간」에서 자동 시간 설정을 켜고 동기화를 실행하세요. 시간 오차는 인증서 유효 기간 확인에 영향을 주며 시간에 민감한 인증에도 문제를 일으킬 수 있습니다.
- 전송 설정 확인: WebSocket 경로와 Host, TLS 서버 이름, 노드 포트, 암호화 설정이 서버 측 설정과 일치해야 합니다. 같은 IP에 연결한다고 해서 같은 가상 호스트에 연결되는 것은 아닙니다.
- 코어 지원 여부 확인: v2rayN은 관리 프로그램이며 프로토콜 지원 여부는 실제 사용하는 코어에 따라 달라집니다. 특히 REALITY와 XTLS Vision은 공유 링크를 가져오는 데 성공했다는 이유만으로 실행 설정까지 호환된다고 볼 수 없습니다.
클라이언트에서 제공하는 전역 프록시 라우팅을 잠시 적용해 비교할 수 있습니다. 먼저 기존 모드를 기록하고 테스트가 끝나면 바로 복원하세요. 전역 모드에서는 성공하고 기존 분할 라우팅에서는 실패한다면 규칙과 DNS 정책을 집중적으로 비교합니다. 단, 두 요청이 서로 다른 DNS 조회 경로를 사용했을 수도 있으므로 모든 오류가 라우팅 때문이라고 단정할 수는 없습니다.
로그 문제 해결 FAQ
warning만 표시되고 접속 기록이 없다면 요청이 코어에 전달되지 않은 건가요?
반드시 그렇지는 않습니다. 로그 레벨을 잠시 info로 바꾸고 코어를 다시 시작한 다음 프록시를 명시해 요청을 보내세요. 접속 로그와 오류 로그가 따로 기록될 수 있으므로 구독 업데이트 메시지만 확인하지 말고 현재 코어의 출력을 보고 있는지도 확인해야 합니다.
지연 시간 측정은 되는데 웹페이지가 열리지 않는 이유는 무엇인가요?
TCP 지연 시간과 실제 프록시 요청 테스트를 구분하세요. TCP 연결에 성공해도 해당 시점에 포트에 도달했다는 뜻일 뿐 인증, TLS, 라우팅까지 정상이라는 의미는 아닙니다. 위에서 정한 URL로 다시 요청하고 핸드셰이크나 데이터 읽기 단계에서 실패하는지 확인하세요.
구독 업데이트가 시간 초과되면 노드 설정도 바꿔야 하나요?
먼저 실패한 요청이 구독 URL 요청인지 노드 아웃바운드인지 확인하세요. 구독이 만료됐는지, 현재 업데이트 방식으로 구독 도메인에 접속할 수 있는지 점검합니다. 인터페이스에 프록시를 통한 업데이트 옵션이 있다면 먼저 사용 가능한 노드가 있는지 확인한 뒤 시도하세요. 구독을 가져오지 못했다고 저장된 노드까지 사용할 수 없는 것은 아닙니다.
같은 노드가 v2rayNG에서는 작동하는데 데스크톱에서는 실패하는 이유는 무엇인가요?
먼저 두 기기에서 같은 네트워크와 동일한 설정을 사용해 비교하세요. v2rayNG에서 Xray 코어를 사용한다면 코어 버전, TLS 및 REALITY 항목, DNS, 분할 라우팅 규칙도 비교해야 합니다. v2flyNG는 v2fly 코어를 사용하므로 두 Android 클라이언트가 같은 프로토콜을 지원한다고 가정할 수 없습니다.
문제 해결을 요청할 때 어떤 정보를 보내야 하나요?
운영체제, v2rayN 및 코어 버전, 프로토콜과 전송 유형, 재현 시각, 실제 수신 포트, 민감한 정보를 가린 오류 전후 약 20줄의 로그를 제공하세요. 연결 시간 초과 화면만 보내는 것보다 프록시를 명시한 테스트가 성공했는지 실패했는지 알려 주는 편이 훨씬 유용합니다.
문제 해결의 목표는 로그에서 경고를 완전히 없애는 것이 아니라 동일한 요청이 안정적으로 성공하고, 원래 어느 단계에서 실패했는지 설명할 수 있는 상태를 만드는 것입니다. 해결을 확인한 후에는 일반 로그 레벨과 기존 분할 라우팅 모드로 복원하세요. 임시 테스트 설정이 남지 않도록 원래 직접 연결되어야 하는 대상 하나와 프록시를 거쳐야 하는 대상 하나를 각각 테스트합니다.
v2rayN 다운로드 및 설정 가이드
클라이언트를 다시 선택해야 한다면 먼저 운영체제에 맞는 다운로드 페이지를 확인하세요. 처음 설정할 때는 가이드에 따라 노드 가져오기, 로컬 포트, 시스템 프록시를 점검한 뒤 로그 문제를 확인하면 됩니다.