노드 연결 시간 초과 문제 해결 순서: 구독, 시간, 포트 및 프로토콜 매개변수 점검

구독을 먼저 업데이트해 노드 유효성을 확인하고, 시스템 시간 오차와 로컬 포트·방화벽을 점검한 뒤 전송 방식과 프로토콜 설정을 서버와 비교하세요.

노드에 시간 초과가 표시된다고 해서 프로토콜 자체가 작동하지 않는 것은 아닙니다. 같은 빨간색 지연 결과라도 구독에 이전 주소가 남아 있거나, 시스템 시간 오차, 도메인 조회 실패, 로컬 수신 포트 충돌, 전송 계층 설정과 서버 설정의 불일치가 원인일 수 있습니다. 노드를 계속 바꾸기만 하면 원인이 뒤섞이고 로그도 반복 요청으로 덮어쓰기 쉽습니다.

보다 안정적인 방법은 점검 순서를 고정하고, 매번 변수 하나만 바꾸며 클라이언트 버전, 테스트 시간, 네트워크 유형, 핵심 로그를 기록하는 것입니다. 이 글은 데스크톱 v2rayN과 Android에서 Xray 코어를 사용하는 v2rayNG, v2fly 코어를 사용하는 v2flyNG에 적용됩니다. 메뉴 이름은 소버전에 따라 달라질 수 있지만 구독, 시간, 포트, 네트워크, 프로토콜의 다섯 단계 판단은 동일합니다.

이 글의 핵심

먼저 구독 업데이트 시간과 다른 네트워크를 이용해 노드 정보가 유효한지 확인하고, 시스템 시간 오차를 30초 이내로 줄이세요. 이어서 로컬 SOCKS 포트 10808, HTTP 포트 10809와 방화벽을 점검한 다음 주소, 포트, UUID, 전송 방식, TLS, SNI, 경로를 차례로 비교하세요. 이 순서대로 진행하면 문제가 로컬, 네트워크 진입점, 원격 핸드셰이크 중 어디에서 발생했는지 판단할 수 있습니다.

먼저 시간 초과가 발생한 구간을 확인하세요

프록시 연결은 최소한 애플리케이션, 로컬 프록시 수신, 라우팅 규칙, 원격 네트워크 연결, 프로토콜 핸드셰이크를 거칩니다. 브라우저에 ‘연결 시간 초과’만 표시되면 어느 구간에서 실패했는지 알 수 없습니다. 먼저 클라이언트 로그를 열고 재현 가능한 요청을 한 번 실행하세요. 예를 들어 다른 다운로드를 종료하고 고정된 웹페이지 하나만 방문한 뒤 요청 전후 30초의 로그를 보관합니다.

지연 테스트도 유형을 구분해야 합니다. TCP 탐지는 원격 주소와 포트에 연결을 설정할 수 있는지만 보여 주며 VLESS 또는 VMess 핸드셰이크 성공을 의미하지 않습니다. 실제 지연은 전체 프록시 경로를 거치므로 실제 접속에 더 가깝습니다. TCP 지연이 86ms인데 실제 지연이 계속 시간 초과라면 로컬 DNS보다 프로토콜, 보안 계층, 전송 설정을 먼저 점검하세요.

애플리케이션 요청 로컬 포트 라우팅 일치 원격 연결 프로토콜 핸드셰이크

오류:context deadline exceeded

원인 및 해결: 제한 시간 안에 요청이 완료되지 않은 상태이며, 이 한 줄만으로는 원인을 특정할 수 없습니다. 같은 시각 전후의 DNS, dial, TLS 또는 transport 로그를 위쪽으로 확인한 뒤 이 글의 순서대로 범위를 좁히세요.

오류:connection refused

원인 및 해결: 대상 호스트가 현재 포트를 능동적으로 거부하고 있습니다. 서버 포트 변경, 프로세스 미수신 대기, 진입점 규칙 변경에서 흔히 발생합니다. 먼저 구독을 업데이트하고 포트를 임의로 추측해 바꾸지 마세요.

결론: ‘시간 초과’라는 문구보다 로그가 가리키는 위치가 중요합니다

로컬 수신 실패는 대개 코어를 시작하자마자 나타나며, 원격 다이얼 및 핸드셰이크 오류는 해당 노드로 트래픽이 흐른 뒤에만 발생합니다. 먼저 오류 단계를 확인한 다음 포트를 점검할지 프로토콜 설정을 점검할지 결정하세요.

1단계: 구독을 업데이트하고 노드가 유효한지 확인하세요

구독은 노드 설정의 출처입니다. 서버에서 도메인, 진입 포트, UUID, 전송 경로 또는 보안 계층을 변경하면 로컬 목록에 이전 노드가 남아 연결이 계속 시간 초과될 수 있습니다. 점검할 때는 노드 이름이 같은지만 보지 말고 구독의 마지막 업데이트 시간과 업데이트 후 노드 수, 주소, 포트의 변경 여부를 확인하세요.

v2rayN에서 먼저 「구독 그룹」→「구독 그룹 설정」으로 이동해 구독 주소가 완전하고 그룹이 활성화되어 있는지 확인하세요. 주 화면으로 돌아온 뒤 「구독 그룹」→「모든 구독 업데이트(프록시 사용 안 함)」를 선택합니다. 현재 네트워크에서 구독을 직접 가져올 수 없다면 이미 사용 가능한 노드에 연결한 후 「모든 구독 업데이트(프록시 사용)」를 이용하세요. 두 방법 중 하나만 선택해 테스트를 완료하고, 연속으로 실행해 오류 상황을 덮어쓰지 않도록 합니다.

  1. 이전 상태 기록

    노드 수, 구독 업데이트 시간, 현재 선택된 노드를 기록하세요. 예를 들어 노드 24개, 마지막 업데이트 2026-05-27 21:10으로 남겨 두면 업데이트가 실제로 이루어졌는지 판단하기 쉽습니다.

  2. 구독 업데이트

    「구독 그룹」→「모든 구독 업데이트(프록시 사용 안 함)」를 엽니다. 완료 안내가 표시될 때까지 기다리고 업데이트 중에는 클라이언트를 종료하거나 네트워크를 전환하지 마세요.

  3. 변경 사항 확인

    업데이트 전후의 주소, 포트, 전체 노드 수를 비교하세요. 노드 수가 24개에서 21개로 줄었다면 새 목록을 사용하고, 이전 백업에서 삭제된 노드를 복원하지 마세요.

  4. 단일 노드 재테스트

    새 노드 하나를 선택하고 코어를 재시작한 뒤 세 번 테스트하세요. 각 테스트 사이에는 5초를 두고, 세 번 모두 시간 초과라면 시간과 네트워크를 계속 점검하되 프로토콜을 일괄 변경하지 마세요.

오류:failed to find an available destination

원인 및 해결: 아웃바운드 주소에서 사용 가능한 조회 결과를 얻지 못했습니다. 구독의 도메인 철자를 확인하고 안정적인 DNS로 전환한 뒤 코어를 재시작하여 단일 노드를 다시 테스트하세요.

오류:unexpected EOF

원인 및 해결: 원격 서버가 응답을 완료하기 전에 연결을 종료했습니다. 먼저 구독이 갱신되었는지 확인하세요. 여러 네트워크에서 이 노드만 재현된다면 로그를 보관하고 노드 서비스 제공자에게 진입점 상태를 문의하세요.

2단계: 시스템 시간을 보정하고 도메인 조회를 확인하세요

VMess 인증은 시간 창에 의존하고 TLS 인증서 검증도 시스템 날짜에 의존합니다. 기기 시간이 몇 분 어긋나도 일반 웹페이지는 열릴 수 있지만 프록시 핸드셰이크는 실패합니다. 먼저 시스템의 날짜, 시간, 시간대 자동 설정을 켜고 즉시 동기화를 실행하세요. 오차는 30초 이내로 유지하는 것이 좋으며, 90초를 넘으면 노드 설정을 조정하지 말고 먼저 시간을 맞추세요.

시간을 정확히 맞춘 뒤 DNS를 확인하세요. 노드 주소가 도메인이라면 로컬에서 먼저 연결 가능한 IP로 조회해야 합니다. 터미널에서 운영체제에 기본 제공되는 조회 명령을 실행하고 주소 반환 여부와 응답 시간을 확인하세요. 세 번 연속 조회가 모두 2000ms를 넘거나 조회 실패가 번갈아 나타난다면 문제는 프로토콜 핸드셰이크 전에 발생한 것입니다.

nslookup node.example.net

확인할 내용:
Address: 203.0.113.20
첫 응답: 42ms
연속 조회: 모두 동일한 유효 주소 반환

오류:certificate has expired or is not yet valid

원인 및 해결: 시스템 시간이 잘못되었거나 원격 인증서가 현재 유효 기간에 있지 않습니다. 먼저 시스템 시간을 동기화하세요. 시간이 정확한데도 같은 오류가 계속되면 노드 서비스 제공자가 인증서 상태를 확인해야 합니다.

오류:no such host

원인 및 해결: 노드 도메인 조회에 실패했습니다. 주소에 공백이나 잘못된 문자가 섞이지 않았는지 확인하고 로컬 DNS 캐시를 삭제한 뒤 네트워크를 바꿔 다시 테스트하세요.

3단계: 로컬 포트, 코어 상태, 방화벽을 확인하세요

노드 설정이 올바르더라도 로컬 코어가 먼저 프록시 포트를 정상적으로 수신해야 합니다. v2rayN의 일반적인 설정은 SOCKS 포트 10808을 사용하고 여기서 HTTP 포트 10809를 파생하지만, 실제 값은 「설정」→「매개변수 설정」의 로컬 수신 설정을 기준으로 합니다. 브라우저에 10809를 입력했는데 클라이언트가 이미 20809로 변경되어 있다면 요청은 현재 코어로 들어가지 않습니다.

포트 충돌은 이전 코어가 종료되지 않았거나 다른 클라이언트가 실행 중일 때, 또는 시스템이 절전에서 복귀한 뒤 남은 프로세스 때문에 발생하는 경우가 많습니다. v2rayN 창을 닫았다고 백그라운드 프로세스까지 종료된 것은 아닙니다. 트레이에서 종료한 뒤 다시 시작하세요. 점검 중에는 클라이언트 하나와 코어 인스턴스 하나만 유지하여 여러 프로그램이 시스템 프록시를 동시에 변경하지 않도록 합니다.

  1. 코어 실행 확인

    주 화면 하단의 상태와 로그를 확인하세요. 시작 후에는 수신 성공 메시지가 표시되어야 하며, 로그가 1초 안에 종료된다면 먼저 코어 시작 오류를 처리하세요.

  2. 수신 포트 확인

    「설정」→「매개변수 설정」으로 이동하여 SOCKS 포트 10808과 HTTP 포트 10809를 기록하세요. 브라우저나 다른 애플리케이션은 유형에 맞는 포트를 입력해야 합니다.

  3. 충돌 포트 해제

    다른 프록시 클라이언트와 남아 있는 코어를 완전히 종료한 후 v2rayN을 다시 시작하세요. 10808이 계속 사용 중이면 20808로 변경하고 HTTP 포트와 애플리케이션 설정도 함께 조정하세요.

  4. 방화벽 확인

    현재 코어 프로그램이 사용 중인 네트워크 유형에서 통신을 허용받았는지 확인하세요. 테스트가 끝나면 기존 보안 정책을 복원하고 관련 없는 프로그램의 인바운드 권한을 장기간 완화하지 마세요.

정상 수신 예시:
SOCKS listening on 127.0.0.1:10808
HTTP listening on 127.0.0.1:10809

충돌 예시:
failed to listen TCP on 127.0.0.1:10808
bind: address already in use

오류:bind: address already in use

원인 및 해결: 현재 로컬 포트를 다른 프로세스가 사용하고 있습니다. 남아 있는 코어를 종료하거나 「설정」→「매개변수 설정」에서 로컬 포트를 변경한 뒤 시스템 프록시와 브라우저 설정도 함께 수정하세요.

오류:connection refused 127.0.0.1:10809

원인 및 해결: 애플리케이션이 수신 중이 아닌 로컬 포트에 접근했습니다. 코어가 실행 중인지 확인하고 애플리케이션이 SOCKS 포트가 아닌 HTTP 포트를 사용하는지 점검하세요.

결론: 로컬 수신을 먼저 확인한 뒤 원격 노드를 판단하세요

127.0.0.1의 프록시 포트 접속이 이미 거부되었다면 요청은 노드에 도달하지 않은 것입니다. 이때 VLESS, VMess 또는 전송 방식을 바꿔도 유효한 결과가 나오지 않습니다.

4단계: 다른 네트워크로 회선 문제와 노드 문제를 구분하세요

구독, 시간, 로컬 포트가 모두 정상이라면 노드 설정을 바꾸지 않은 상태에서 네트워크를 전환하세요. 가정용 인터넷과 모바일 핫스팟을 두 대조군으로 삼아 동일한 노드, 클라이언트, 테스트 주소로 실제 지연 테스트를 각각 세 번 실행할 수 있습니다. 네트워크 진입점만 바꿔야 문제가 현재 회선에 집중되어 있는지 판단할 수 있습니다.

예를 들어 가정용 네트워크에서 세 번 모두 시간 초과이고 모바일 핫스팟에서 118ms, 126ms, 121ms가 나왔다면 노드 설정은 적어도 핸드셰이크를 완료할 수 있다는 뜻입니다. 점검 초점은 가정용 네트워크의 DNS, 라우팅 또는 방화벽으로 옮겨야 합니다. 두 네트워크 모두 약 10초 후 시간 초과라면 원격 포트에 접근할 수 없거나 프로토콜 설정이 일치하지 않을 가능성이 큽니다.

테스트 현상 가능성이 높은 위치 다음 단계
두 네트워크 모두 즉시 거부됨 원격 포트 또는 진입점 상태 구독 업데이트 및 포트 확인
한 네트워크는 연결되고 다른 네트워크는 시간 초과 로컬 회선, DNS 또는 라우팅 노드 설정은 유지하고 현재 네트워크를 점검
TCP 연결 가능, 실제 지연은 시간 초과 프로토콜 핸드셰이크 또는 보안 계층 UUID, TLS, SNI 및 전송 설정 확인
모든 노드가 동시에 실패 구독, 로컬 코어 또는 네트워크 진입점 업데이트 시간과 코어 로그 재확인

5단계: 프로토콜과 전송 설정을 항목별로 확인하세요

앞의 네 단계가 모두 통과한 경우에만 노드 편집 화면으로 들어가세요. 먼저 프로토콜 유형이 VLESS인지 VMess인지 확인한 다음 서버에서 제공한 설정을 항목별로 비교합니다. UUID는 인증 식별자이므로 경험에 따라 임의로 바꾸면 안 됩니다. 포트는 진입점의 수신 포트와 일치해야 하며 TCP, WebSocket, gRPC 전송 방식은 서로 바꿔 쓸 수 없습니다. TLS, REALITY 같은 보안 계층도 서버 설정과 일치해야 합니다.

WebSocket 환경에서는 Host와 경로를 확인하세요. 경로의 슬래시와 대소문자도 라우팅에 영향을 줄 수 있습니다. gRPC에서는 서비스명을 확인합니다. TLS 환경에서는 서버 이름, 즉 SNI도 확인해야 합니다. 연결 주소가 IP여도 인증서 검증에 사용하는 이름은 서버 요구 사항과 일치해야 합니다. REALITY 설정에서는 서버 이름, 공개 키, 짧은 ID를 확인해야 하며 일반 TLS 필드를 그대로 적용해서는 안 됩니다.

매개변수 중점 확인 사항 일반적인 증상
addressport 도메인이 조회되고 포트가 구독과 일치함 다이얼 시간 초과 또는 연결 거부
UUID 문자가 완전하며 공백이 섞이지 않음 인증 실패 또는 원격에서 즉시 연결 종료
network TCP, WebSocket, gRPC가 서버 설정과 일치함 TCP는 연결되지만 전송 핸드셰이크 실패
security TLS, REALITY 또는 지정된 보안 계층이 일치함 인증서 또는 핸드셰이크 오류
SNI 및 Host 서버가 지정한 도메인 사용 인증서 이름 불일치 또는 진입점 거부
경로 또는 서비스명 대소문자, 선행 슬래시, 내용이 완전히 일치함 원격에서 비정상 응답을 반환하거나 조기 종료

오류:tls: failed to verify certificate

원인 및 해결: 인증서 이름, 유효 기간 또는 신뢰 체인 검증에 실패했습니다. 먼저 시스템 시간을 확인한 뒤 노드의 서버 이름이 서버 요구 사항과 일치하는지 점검하세요. 인증서 검증 건너뛰기를 장기적인 해결책으로 사용하지 마세요.

오류:invalid user

원인 및 해결: 원격에서 인증 정보를 받아들이지 않았습니다. 구독을 다시 업데이트하고 UUID를 확인하세요. 서로 다른 노드의 주소, 포트, 인증 필드를 수동으로 조합하지 마세요.

오류:websocket: bad handshake

원인 및 해결: WebSocket 핸드셰이크에서 예상한 응답을 받지 못했습니다. 전송 유형, Host, 경로, TLS 설정을 확인하고 요청이 올바른 진입점에 도달하는지 점검하세요.

클라이언트별 재테스트 핵심

데스크톱 v2rayN은 코어 시작, 수신, 아웃바운드 로그를 직접 확인하기에 적합합니다. 점검 전에 「도움말」→「정보」에서 클라이언트 버전을 기록하고 로그 시작 부분에 코어 버전도 남기세요. 예: 클라이언트 7.x, Xray-core 25.x. 버전 번호가 곧 원인을 뜻하지는 않지만 동일한 설정이 서로 다른 코어 환경에서 재현되는지 판단하는 데 도움이 됩니다.

Android의 v2rayNG는 Xray 코어를, v2flyNG는 v2fly 코어를 사용합니다. 동일한 구독을 서로 다른 두 코어 클라이언트에 각각 가져오는 방법은 설정 호환성을 확인할 때만 사용하고, 같은 테스트에서 전송 설정까지 동시에 변경하지 마세요. 모바일 네트워크와 Wi-Fi를 전환한 뒤에는 시스템이 할당한 DNS와 외부 경로가 바뀌었을 수 있으므로 연결 테스트를 다시 실행해야 합니다.

구독 업데이트가 계속 시간 초과되면 어떻게 하나요?

먼저 구독 주소를 복사해 문자가 완전한지 확인한 다음 「모든 구독 업데이트(프록시 사용 안 함)」와 「모든 구독 업데이트(프록시 사용)」를 각각 시도하세요. 두 번째 방법은 먼저 사용 가능한 노드에 연결해야 합니다.

지연 값은 나오는데 웹페이지가 열리지 않으면 어떻게 하나요?

시스템 프록시가 켜져 있는지 확인하고 브라우저가 올바른 HTTP 포트를 사용하는지 점검하세요. 지연 테스트 성공은 테스트 요청이 통과했다는 뜻일 뿐, 브라우저 트래픽이 10809로 들어갔다는 의미는 아닙니다.

모든 노드가 갑자기 동시에 시간 초과되는 것이 정상인가요?

서로 다른 여러 진입점이 동시에 실패한다면 먼저 로컬 코어, 시스템 시간, 구독 업데이트 시간, 현재 네트워크를 확인하세요. 수십 개 노드를 하나씩 편집해도 공통 문제는 대개 해결되지 않습니다.

로컬 포트를 바꾼 뒤 어디를 더 수정해야 하나요?

HTTP 포트를 10809에서 20809로 바꿨다면 시스템 프록시, 브라우저 확장 프로그램, 수동으로 설정한 다른 애플리케이션도 함께 업데이트해야 합니다. SOCKS 애플리케이션은 해당하는 20808을 사용합니다.

TCP 테스트가 성공했는데도 핸드셰이크 실패가 표시되는 이유는 무엇인가요?

TCP 테스트는 주소와 포트에 연결할 수 있는지만 확인합니다. 프로토콜 유형, UUID, 전송 방식, TLS, SNI, WebSocket 경로 또는 gRPC 서비스명을 계속 확인하세요.

수정 완료 후 검증 순서

원인을 찾았더라도 한 번만 확인하지 마세요. 먼저 코어를 재시작하여 로컬 포트 수신 성공을 확인하고, 실제 지연 테스트를 세 번 실행하세요. 이어서 일반 웹페이지와 프록시가 필요한 대상 주소를 열고, 마지막으로 10분 후 다시 테스트합니다. 짧은 시간 동안 우연히 성공한 것일 수 있으며 DNS 캐시나 회선 전환이 아직 안정되지 않았을 가능성이 있습니다.

최종 결과는 ‘클라이언트 및 코어 버전, 네트워크 유형, 노드 프로토콜, 수정 항목, 세 번의 지연 시간’으로 기록하는 것이 좋습니다. 예: v2rayN 7.x, Xray-core 25.x, 가정용 인터넷, VLESS over WebSocket with TLS, SNI 수정, 결과 92ms·95ms·91ms. 이런 기록이 ‘재설치하니 됐다’보다 다음 문제에 재사용하기 좋습니다.

  1. 코어 재시작

    로그에서 10808과 10809가 모두 정상적으로 수신 중인지, 시작 후 포트 충돌이나 설정 구문 분석 오류가 없는지 확인하세요.

  2. 세 번 테스트 실행

    각 테스트 사이에는 5초를 두세요. 실제 지연 세 번의 편차가 50ms보다 작다면 현재 연결 상태가 비교적 안정적이라는 뜻입니다.

  3. 애플리케이션 트래픽 확인

    브라우저, 시스템 프록시, 별도로 설정한 애플리케이션을 점검하여 프록시 유형과 포트가 클라이언트 설정과 일치하는지 확인하세요.

  4. 유효한 기록 보관

    오류 발생 시간, 핵심 로그, 수정 항목을 저장하고 이미 만료된 구독 설정을 장기 구성으로 보관하지 마세요.

결론: 고정된 순서가 오판을 막습니다

구독, 시간, 포트, 네트워크, 프로토콜 설정은 외부에서 내부로 이어지는 점검 사슬입니다. 이전 단계가 통과되지 않았다면 다음 단계의 설정을 일괄 변경하지 마세요. 매번 변수 하나만 바꿔야 재현 가능한 결론을 얻을 수 있습니다.

클라이언트 다운로드 페이지로 이동