v2rayN 연결 문제는 커널이 실행 중인지 확인한 다음, 연결이 로컬 수신 대기, 도메인 조회, 원격 포트, 프로토콜 핸드셰이크 중 어디에서 멈추는지 살펴보세요. 구독을 가져왔지만 웹페이지가 열리지 않는 경우, 자주 나오는 영문 오류 문구와 Windows 점검 명령, 한 번에 한 가지씩 바꿔 재시험하는 방법으로 문제 범위를 좁힐 수 있습니다.
마지막 줄만 보지 말고 오류 전체 흐름을 확인하세요
v2rayN은 설정, 구독, 프록시 옵션을 관리하는 클라이언트이며 실제 연결은 선택한 커널이 처리합니다. 메인 창의 안내와 커널 로그는 서로 다른 단계에서 나온 내용일 수 있습니다. 구독 업데이트 성공은 설정을 가져왔다는 뜻일 뿐이며, 커널이 정상적으로 시작됐다고 해서 원격 서버까지 연결된 것은 아닙니다.
메인 창 아래쪽의 로그 또는 정보 영역에서 실패가 발생한 시각을 확인하고, 같은 오류의 앞뒤 내용을 펼쳐 보세요. 버전에 따라 메뉴 위치나 표현이 다를 수 있습니다. 이 글은 Windows 데스크톱 환경을 기준으로 설명합니다. 설정을 확인할 때는 화면 위치를 추측하지 말고 「설정」→「매개변수 설정」에서 실제 구성을 확인하세요.
-
테스트 조건 고정하기
서버 하나와 테스트할 웹페이지 하나를 정하고, 다른 앱의 반복 재시도는 잠시 중단하세요. 시스템 프록시와 TUN의 현재 상태를 기록하고, 점검하는 동안 두 설정을 동시에 바꾸지 마세요.
-
처음 실패한 지점 찾기
현재 시각을 기록한 뒤 대상 웹페이지를 한 번 새로 여세요. 이번 시도 전후의 오류만 확인해 시작 전의 오래된 로그를 새 문제로 착각하지 않도록 합니다.
-
오류 앞뒤 내용 보존하기
오류 전후의 몇 줄을 함께 보관하고, 대상 주소와 포트, 가장 안쪽에 표시된 원인을 확인하세요. 내용을 공유하기 전에는 구독 주소, 사용자 식별 정보, 인증 정보를 가리세요.
-
한 번에 하나씩 변경하기
포트, DNS, 서버, 전송 설정 중 한 번에 하나만 변경하세요. 저장한 뒤 커널을 다시 시작하고 같은 대상으로 재시험해 오류가 달라졌는지 기록합니다.
로컬 수신 대기 실패: 프록시 포트부터 확인하기
커널이 시작하자마자 종료된다면 먼저 노드를 바꾸지 마세요. 앱은 원격 서버에 접속하기 전에 로컬 프록시 포트에 연결할 수 있어야 합니다. 로그의 127.0.0.1은 로컬 루프백 주소입니다. 같은 연결 거부 오류라도 로컬 포트에서 발생했는지 서버에서 발생했는지에 따라 점검 방향은 완전히 달라집니다.
오류: address already in use
원인: 커널이 수신 대기하려는 주소와 포트가 이미 사용 중입니다. 클라이언트가 중복 실행 중이거나 다른 프로그램이 해당 포트를 사용하고 있을 수 있습니다.
해결 방법: 해당 포트를 사용하는 프로세스를 확인하고, 중복 실행이 확인된 인스턴스를 종료하세요. 또는 「설정」→「매개변수 설정」에서 로컬 수신 포트를 변경하세요. 프록시를 수동으로 설정한 앱의 포트도 함께 바꿔야 합니다.
오류: Only one usage of each socket address
원인: Windows에서 자주 보이는 소켓 점유 오류입니다. 같은 주소와 포트에 중복으로 연결을 바인딩하려 할 때 주로 발생합니다.
해결 방법: 먼저 포트를 사용하는 프로그램을 확인하세요. 정체를 모르는 시스템 프로세스를 바로 종료하지 마세요. 중복 실행 중인 프로그램을 닫은 뒤 커널을 다시 시작합니다.
PowerShell에서 아래 읽기 전용 명령을 실행하세요. 예시는 10808 포트를 확인합니다. 로컬 포트가 다르면 숫자를 먼저 바꾸세요. 첫 번째 명령에서 출력이 없으면 해당 시점에 TCP 수신 항목을 찾지 못했다는 뜻입니다. UDP 상태나 원격 연결 여부를 확인하는 명령은 아닙니다.
Get-NetTCPConnection -LocalPort 10808 -State Listen -ErrorAction SilentlyContinue |
Select-Object LocalAddress, LocalPort, OwningProcess
Get-NetTCPConnection -LocalPort 10808 -State Listen -ErrorAction SilentlyContinue |
ForEach-Object { Get-Process -Id $_.OwningProcess }
연결 거부와 시간 초과: 즉시 거부와 무응답 구분하기
로컬 수신 대기가 정상이라면 로그에서 연결을 시도한 원격 주소와 포트를 확인하세요. 연결 거부는 거부 응답을 받은 경우가 많고, 시간 초과는 제한 시간 안에 작업을 마치지 못했다는 뜻입니다. 이 두 오류만으로 계정이 만료됐다고 볼 수 없으며, 모든 시간 초과를 DNS 문제로 돌려서도 안 됩니다.
오류: connection refused
원인: 대상 포트에서 서비스가 수신 대기 중이지 않거나 중간 장비가 연결을 거부한 경우입니다. Windows에서는 No connection could be made because the target machine actively refused it라는 메시지가 표시될 수도 있습니다.
해결 방법: 먼저 오류에 표시된 대상이 로컬 기기인지 확인한 뒤 구독에 등록된 서버 포트를 확인하세요. 원격 설정이 올바른데도 거부된다면 서비스 제공자에게 수신 대기 상태와 방화벽을 점검해 달라고 요청하세요.
오류: i/o timeout
원인: 네트워크 읽기 또는 쓰기 작업이 제한 시간 안에 완료되지 않았습니다. 서버 연결, 핸드셰이크, 데이터 전달 중 어느 단계에서든 발생할 수 있습니다.
해결 방법: 앞뒤에 표시된 dial tcp, TLS, 읽기 관련 메시지를 함께 살펴 어느 단계에서 멈췄는지 확인하세요. 같은 노드로 네트워크를 바꿔 재시험하고, 시간 초과 설정만 무작정 늘리지는 마세요.
오류: context deadline exceeded
원인: 작업이 제한 시간을 초과했습니다. 구독 가져오기, DNS 요청, 연결 테스트 등 다양한 작업에서 발생할 수 있습니다.
해결 방법: 먼저 오류를 일으킨 작업이 무엇인지 확인하고, 해당 작업이 직접 연결을 사용하는지 프록시를 사용하는지 살펴보세요. 구독 요청 실패만으로 모든 노드를 사용할 수 없다고 판단하지 마세요.
| 확인된 현상 | 우선 점검할 항목 | 이 오류만으로는 판단할 수 없는 항목 |
|---|---|---|
| 로컬 프록시 포트 연결 거부 | 커널 실행 여부, 앱에 입력한 포트가 맞는지 | 원격 서버의 사용 가능 여부 |
| 원격 TCP 포트 연결 시간 초과 | 주소, 포트, 네트워크 경로, 서버 방화벽 | 사용자 식별 정보의 정확성 |
| TCP 연결은 되지만 TLS 오류 발생 | 서버 이름, 인증서, 시스템 시간, TLS 설정 | 프록시 프로토콜 인증 성공 여부 |
결론: 포트 연결을 확인한 뒤 프로토콜 설정 점검하기
TCP 연결 시도 단계에서 계속 시간 초과가 발생한다면 먼저 네트워크 경로와 원격 서버의 수신 상태를 확인하세요. 핸드셰이크 단계까지 진행한 뒤에야 SNI, 전송 경로, 사용자 식별 정보를 변경하는 것이 효과적입니다.
도메인 조회 실패: 어떤 도메인에서 실패했는지 확인하기
DNS는 도메인 이름을 IP 주소로 변환합니다. 로그에서 조회에 실패한 대상은 노드 서버일 수도, 접속하려는 웹사이트일 수도, DNS 서버 자체의 도메인일 수도 있습니다. 먼저 어떤 도메인인지 확인해야 웹페이지가 열리지 않는다는 이유만으로 DNS 설정을 전부 바꾸는 일을 피할 수 있습니다.
오류: no such host
원인: 현재 조회 경로에서 해당 호스트 이름에 대한 유효한 결과를 얻지 못했습니다. 도메인 오타, DNS 레코드 상태, 사용 중인 DNS 서버가 원인일 수 있습니다.
해결 방법: 오류에 나온 전체 도메인을 확인하고, 구독에 공백이나 만료된 주소가 들어 있지 않은지 살펴보세요. 그런 다음 시스템 DNS 조회와 커널 DNS 설정을 각각 점검합니다.
오류: failed to lookup ip
원인: 도메인 조회에서 필요한 IP 주소를 반환하지 못했습니다. 정확한 원인은 뒤이어 나오는 시간 초과나 DNS 오류 메시지를 확인해야 합니다.
해결 방법: 커널에서 사용하는 DNS 주소와 해당 주소로 가는 라우팅을 확인하세요. 특히 DNS 요청이 아직 연결되지 않은 프록시 아웃바운드에 의존하지 않는지 살펴봐야 합니다.
- 시스템 측 점검: PowerShell에서
Resolve-DnsName -Name example.com을 실행해 시스템 DNS 조회가 정상인지 확인하세요. 노드 문제를 점검할 때는 해당 노드에서 실제 사용하는 호스트 이름을 조회해야 합니다. - 커널 측 점검: 현재 DNS 및 라우팅 설정을 확인하세요. 시스템에서 도메인이 조회되더라도 커널에 지정된 원격 DNS 서버에 연결할 수 있다는 뜻은 아닙니다.
- 주소를 임의로 바꾸지 마세요: 조회된 IP 주소를 TLS 노드의 여러 항목에 무작정 입력하지 마세요. 서버 주소, SNI, HTTP Host는 각기 다른 역할을 할 수 있으므로 서비스 측 설정에 따라야 합니다.
특정 웹사이트만 접속되지 않고 노드 서버에는 연결할 수 있다면 해당 웹사이트의 DNS 조회 결과, 적용된 라우팅 규칙, 대상 서비스 쪽을 점검하세요. 라우팅 규칙은 연결을 어느 출구로 보낼지 정하는 기능이지, 모든 도메인이 자동으로 조회되게 하는 기능은 아닙니다.
TLS 핸드셰이크 실패: 시간, 서버 이름, 전송 설정 확인하기
TCP 연결에 성공한 뒤에도 TLS 핸드셰이크는 실패할 수 있습니다. TLS는 보안 연결을 설정하며, VMess와 VLESS 같은 프록시 프로토콜에는 별도의 설정 조건이 있습니다. 포트에 연결할 수 있다고 해서 TLS, 전송 계층, 프록시 인증까지 모두 성공한 것은 아닙니다.
오류: x509: certificate has expired or is not yet valid
원인: 인증서 유효 기간과 현재 검증 시각이 맞지 않습니다. 서버 인증서가 만료됐거나 로컬 기기의 날짜와 시간이 잘못됐을 수 있습니다.
해결 방법: Windows의 「설정」→「시간 및 언어」→「날짜 및 시간」에서 시간을 확인하고 동기화하세요. 시간이 정확한데도 오류가 계속되면 서비스 제공자에게 인증서 문제를 문의하세요.
오류: x509: certificate signed by unknown authority
원인: 현재 신뢰 체계에서 인증서 체인을 검증하지 못했습니다. 서버 인증서 체인이 불완전하거나 네트워크에서 인증서가 교체됐을 수 있습니다.
해결 방법: 별도 인증서가 필요한 네트워크 환경을 거치는지 확인하고 서비스 제공자에게 전체 인증서 체인을 점검해 달라고 요청하세요. 인증서 검증을 끄는 방법을 일반적인 해결책으로 사용하지 마세요.
오류: tls: handshake failure
원인: 상대방과 TLS 협상이 완료되지 않았습니다. 서버 이름, 프로토콜 설정이 맞지 않거나 잘못된 서버 포트에 연결했을 수 있습니다.
해결 방법: 유효한 구독 정보와 TLS 사용 여부, SNI, 포트를 대조하세요. REALITY를 사용하는 경우 공개 키, shortId, 서버 이름 등 함께 사용하는 설정도 확인합니다.
EOF와 connection reset by peer는 연결이 종료됐다는 결과를 나타내는 경우가 많으며, 특정 인증 오류를 뜻하지는 않습니다. 전송 유형 불일치, WebSocket 경로 오류, 리버스 프록시 설정 문제, 대상 서비스의 연결 종료 등 여러 원인이 비슷한 오류를 일으킬 수 있습니다. EOF가 보인다는 이유만으로 클라이언트를 다시 설치하지 말고 어느 단계에서 발생했는지 함께 확인하세요.
- WebSocket을 사용하는 경우 서버 설정과 경로 및 Host를 대조하세요. 경로의 대소문자와 문자를 임의로 바꾸면 안 됩니다.
- gRPC를 사용하는 경우 서비스 이름과 서버 설정을 확인하세요. WebSocket 경로를 그대로 가져다 쓸 수 없습니다.
- VLESS 또는 VMess를 사용하는 경우 프로토콜 유형, 사용자 식별 정보, 관련 설정이 서로 일치하는지 확인하세요. 구독을 업데이트하기 전에 필요한 사용자 지정 설정을 저장해 두세요.
- 현재 설정을 선택한 커널이 지원하는지 확인하세요. v2rayN 인터페이스, 커널 프로그램, 구독 내용은 서로 다른 구성 요소입니다. 한 항목을 업데이트해도 나머지 항목이 함께 바뀌지는 않습니다.
요청이 로그에 보이지 않을 때: 시스템 프록시와 라우팅 진입점 확인하기
웹페이지를 열어도 커널에 해당 요청이 나타나지 않는다면 앱에서 트래픽을 클라이언트로 보내지 않았을 수 있습니다. 현재 로그 수준에서 접속 세부 정보가 기록되지 않는 경우도 있습니다. 따라서 로그가 보이지 않는다고 노드가 정상이라고 단정하거나 트래픽이 프록시를 우회한다고 결론 내릴 수는 없습니다.
-
프록시 진입점 확인하기
v2rayN 메인 창이나 트레이 메뉴의 「시스템 프록시」에서 현재 상태를 확인하세요. 시스템 프록시가 필요하면 「시스템 프록시 자동 설정」을 선택한 뒤 Windows에 등록된 주소와 포트가 로컬 수신 설정과 일치하는지 확인합니다.
-
앱 설정 확인하기
브라우저나 대상 앱에 직접 연결, 다른 프록시 포트, 프록시 확장 프로그램이 별도로 설정되어 있는지 확인하세요. 앱 자체 설정은 시스템 프록시를 따르지 않을 수 있습니다.
-
라우팅 경로 확인하기
요청이 커널에 들어온 뒤 해당 아웃바운드 태그와 현재 라우팅 규칙을 확인하세요. 직접 연결로 설정된 대상은 특정 서버를 선택했다고 자동으로 프록시를 거치지 않습니다.
-
잠시 상세 로그 사용하기
「설정」→「매개변수 설정」에서 로그 수준 관련 항목을 찾으세요. 필요한 경우 잠시 debug로 설정해 한 번 재현한 뒤 원래 수준으로 되돌리세요. 대상 주소 같은 민감한 정보가 장기간 쌓이지 않도록 주의해야 합니다.
자주 묻는 질문과 문제 정보 제출 방법
지연 시간 테스트에 숫자가 표시되는데 웹페이지는 왜 열리지 않나요?
먼저 실행한 테스트가 TCP 테스트인지 실제 연결 테스트인지 확인하세요. TCP 테스트는 주로 포트에 연결할 수 있는지만 확인하며, 프록시 인증 전체나 웹사이트 접속까지 검증하지는 않습니다. 웹페이지 하나를 정해 다시 테스트하고 같은 시각의 핸드셰이크 및 라우팅 기록을 대조하세요.
구독 업데이트가 시간 초과되면 노드부터 바꿔야 하나요?
먼저 실패한 작업이 구독 가져오기인지 확인하세요. 「구독 그룹」에서 업데이트에 직접 연결과 프록시 중 어떤 방식이 사용되는지 살펴보세요. 프록시를 통해 업데이트하도록 설정했다면 먼저 사용할 수 있는 프록시 연결이 있어야 합니다. 공개된 문의 글에는 전체 구독 주소를 붙여 넣지 마세요.
네트워크를 바꾸니 연결되는데 프로토콜도 바꿔야 하나요?
기존 설정은 유지하고 두 네트워크에서 같은 노드와 포트를 사용한 결과를 기록하세요. 차이가 있다면 네트워크 경로, DNS 조회, 접속 제한과 관련됐을 가능성이 높지만 오류가 발생한 단계도 함께 확인해야 합니다. 프로토콜과 전송 설정을 바로 다시 구성하지 마세요.
설정 전체와 로그를 전부 다른 사람에게 보내야 하나요?
그럴 필요는 없습니다. 클라이언트 버전, 커널 이름과 버전, 운영체제, 프록시 모드, 재현 시각, 민감 정보를 가린 오류 앞뒤 내용을 제공하세요. 구독 토큰, 사용자 식별 정보, 비밀번호, 개인 키는 삭제하고 문제를 파악하는 데 필요한 필드 이름과 오류 구조만 남기세요.
문의를 제출하기 전에 마지막으로 순서대로 확인하세요. 로컬 포트에서 수신 대기 중인지, 앱 요청이 실제로 프록시에 들어오는지, 서버 도메인이 예상대로 조회되는지, 원격 포트에 연결할 수 있는지 확인한 다음 TLS와 프록시 프로토콜 설정을 살펴봅니다. 서버를 직접 관리한다면 같은 시각의 수신 대기 상태, 방화벽, 인증서, 서버 오류 로그도 확인하세요. 구독 서비스를 이용한다면 확인을 마친 내용을 서비스 제공자에게 전달하는 편이 단순히 “시간 초과가 발생했다”고 알리는 것보다 정확한 답변을 받기 쉽습니다.
결론: 오류가 발생한 단계에 따라 다음 조치를 정하세요
재시험을 마칠 때마다 무엇을 바꿨는지, 오류가 어느 단계에서 멈췄는지, 결과가 달라졌는지 기록하세요. 오류가 연결 시간 초과에서 인증서 오류로 바뀌었다면 다음 단계까지 점검이 진행된 것입니다. 모든 설정을 원래대로 돌리고 처음부터 무작정 다시 시도할 필요는 없습니다.