이 점검 목록은 v2rayN, v2rayNG, v2flyNG에서 구독 다운로드 실패, 업데이트 후 노드가 비어 있는 문제, 파싱 오류, 기존 노드가 교체되지 않는 문제를 해결할 때 유용합니다. 먼저 링크와 HTTP 응답을 확인한 뒤 직접 연결 또는 프록시 업데이트를 전환하고, 응답 본문·Base64 인코딩·공유 링크 형식을 점검합니다. 마지막으로 그룹 캐시를 정리하고 코어 연결을 확인합니다.
먼저 어느 단계에서 실패했는지 확인하기
구독 업데이트는 한 번의 동작으로 끝나지 않습니다. 클라이언트는 구독 주소를 읽고, 도메인을 해석하고, TCP 및 TLS 연결을 수립한 다음 HTTP 응답을 받아 본문 형식을 확인하고 공유 링크를 분리해야 합니다. 그 후에야 노드를 구독 그룹에 기록합니다. 화면에 표시되는 ‘업데이트 실패’는 이 과정이 끝까지 완료되지 않았다는 뜻일 뿐, 노드 서버 자체를 사용할 수 없다는 의미는 아닙니다.
문제 해결 시 먼저 두 가지를 확인하세요. 클라이언트가 응답 본문을 받았는지, 그리고 본문에서 노드가 정상적으로 생성되었는지입니다. 응답 자체가 없다면 도메인 해석, 네트워크 경로, 인증서 또는 HTTP 상태를 의심해야 합니다. 콘텐츠는 내려받았지만 노드 수가 0이라면 인코딩, 형식 또는 현재 클라이언트가 인식하지 못하는 프로토콜 필드일 가능성이 높습니다.
HTTP 200은 서버가 콘텐츠를 반환했다는 뜻일 뿐, 그 콘텐츠가 유효한 구독이라는 보장은 없습니다. 로그인 페이지, 오류 안내, 만료 알림도 200 상태 코드로 반환될 수 있습니다. 반대로 301이나 302가 항상 오류인 것도 아닙니다. 다만 리디렉션이 반복되거나 다른 도메인으로 이동하거나, 이동 후 추가 인증이 필요하면 클라이언트가 업데이트를 중단할 수 있습니다.
정해진 순서로 구독 링크와 업데이트 방식 확인하기
구독 링크에는 계정이나 구독 상태를 식별하기 위한 긴 매개변수가 포함되는 경우가 많습니다. 복사 과정에서 문자 하나가 빠지거나 끝의 문장 부호까지 함께 붙거나, 메신저에서 줄바꿈이 삽입되면 서버가 오류 콘텐츠를 반환할 수 있습니다. 원본 관리 페이지에서 전체 주소를 다시 복사하고, 눈대중으로 비슷해 보인다고 직접 덧붙여 쓰지 마세요.
전체 링크 확인
클라이언트의 구독 그룹 설정에 주소를 다시 붙여 넣고, 시작 부분이
https://또는 서비스에서 명시한http://인지 확인하세요. 중간에 공백이나 줄바꿈이 없어야 하며, 끝에 한국어 마침표나 쉼표가 붙어 있지 않아야 합니다.먼저 직접 연결로 업데이트
v2rayN에서 「구독 그룹」→「모든 구독 업데이트(프록시 사용 안 함)」를 엽니다. 현재 네트워크에서 구독 도메인에 직접 접속할 수 있다면 직접 연결을 사용해 만료된 노드나 잘못된 시스템 프록시로 인한 순환 의존성을 배제할 수 있습니다.
그다음 프록시로 업데이트
직접 연결이 시간 초과되면 연결 가능한 것으로 확인된 기존 노드를 먼저 선택한 뒤 「구독 그룹」→「모든 구독 업데이트」를 실행하세요. 프록시 업데이트는 현재 코어가 실행 중이어야 하므로, 아직 다운로드하지 않은 새 노드로 이 단계를 처리할 수 없습니다.
그룹 활성화 상태 확인
「구독 그룹」→「구독 그룹 설정」으로 이동해 대상 그룹이 활성화되어 있는지 확인하세요. 주소가 메모, 별칭 또는 자동 업데이트 간격 필드에 잘못 입력되지 않았는지도 살펴보세요.
그룹 하나만 업데이트
구독이 여러 개라면 먼저 대상 그룹 하나만 업데이트하세요. 이를 통해 특정 링크의 문제인지 모든 요청이 실패하는지 구분할 수 있으며, 같은 이름의 노드 때문에 결과를 헷갈리는 일도 줄일 수 있습니다.
노드 변화 기록
업데이트가 끝나면 대상 그룹의 노드 수와 업데이트 시각을 비교하세요. 성공으로 표시되지만 노드 수가 0이면 본문 형식 점검으로 넘어가야 합니다. 노드 수는 정상인데 연결되지 않는다면 노드 매개변수와 라우팅을 계속 확인하세요.
v2rayNG와 v2flyNG의 메뉴 문구는 앱 버전에 따라 조금 다를 수 있지만 동작 방식은 같습니다. 「구독 그룹 설정」에서 주소를 편집한 뒤 메인 화면에서 「구독 업데이트」를 실행하세요. 업데이트 전에 현재 노드 상태만 새로 고치는 것이 아니라 대상 그룹을 선택했는지 확인해야 합니다.
실제 오류 메시지로 네트워크 및 서버 문제 찾기
‘업데이트할 수 없음’보다 원문 오류 메시지가 원인 파악에 훨씬 유용합니다. v2rayN 메인 화면의 로그 영역을 확인하거나 v2rayNG, v2flyNG의 로그 화면에서 구독 요청 주변의 내용을 읽어 보세요. 아래 문구는 시스템 언어와 실행 환경에 따라 조금 다를 수 있지만, 판단 방향은 대체로 같습니다.
오류: The remote name could not be resolved
원인 및 해결 방법:구독 도메인에서 주소를 확인하지 못한 상태입니다. 먼저 도메인 철자를 확인한 뒤 사용할 수 있는 시스템 DNS로 전환하고 클라이언트를 종료했다가 다시 시작해 보세요. 특정 도메인 하나만 실패한다면 구독 주소가 변경되지 않았는지도 확인해야 합니다.
오류: The operation has timed out
원인 및 해결 방법:제한 시간 안에 요청이 완료되지 않았습니다. 연결, TLS 핸드셰이크 또는 응답 다운로드 단계에서 멈췄을 수 있습니다. 직접 연결과 프록시 업데이트를 각각 테스트하고, 선택한 기존 노드가 실제로 연결 가능한지 확인하세요.
오류: Response status code does not indicate success: 403
원인 및 해결 방법:서버가 현재 요청을 거부했습니다. 구독 관리 페이지에서 링크를 다시 복사하고 식별 매개변수가 아직 유효한지 확인하세요. 브라우저에서도 권한 또는 유효 기간 안내가 표시된다면 먼저 구독 서비스 측 상태를 처리해야 합니다.
오류: Too many redirects
원인 및 해결 방법:주소가 여러 페이지 사이를 반복해서 이동하거나, 오래된 주소가 로그인이 필요한 페이지로 연결되고 있습니다. 즐겨찾기에 저장된 이전 주소를 계속 사용하지 말고, 구독 본문을 직접 반환하는 새 주소를 다시 받으세요.
오류: The SSL connection could not be established
원인 및 해결 방법:TLS 핸드셰이크가 완료되지 않았습니다. 시스템 날짜, 시간대, 인증서 환경을 확인하고 로컬 시간이 크게 틀려 있지 않은지 점검하세요. TLS 1.2 또는 TLS 1.3 협상 실패는 중간 네트워크 장비의 개입으로도 발생할 수 있습니다.
오류: An existing connection was forcibly closed
원인 및 해결 방법:연결이 수립된 뒤 원격 서버나 중간 네트워크에서 조기에 종료했습니다. 직접 연결과 프록시 경로를 바꿔 비교하고, HTTPS를 가로채는 로컬 네트워크 필터링 기능을 잠시 중지한 후 다시 테스트하세요.
모든 구독 도메인에서 주소를 확인하지 못한다면 먼저 로컬 네트워크와 DNS를 점검하세요. 특정 구독 하나만 403, 로그인 페이지 또는 만료 안내를 반환한다면 링크나 서비스 측 상태에 문제가 있을 가능성이 큽니다. 이 판단 대신 클라이언트를 반복해서 재설치하지 마세요. 재설치로는 만료된 접근 매개변수를 복구할 수 없습니다.
다운로드는 성공했지만 노드가 없을 때 파싱 및 형식 확인
클라이언트가 응답을 받은 다음에는 콘텐츠가 Base64로 인코딩된 공유 링크 모음인지, 줄마다 적힌 일반 텍스트 공유 링크인지, 아니면 다른 구조인지 식별해야 합니다. 일반적인 공유 링크는 vmess://, vless://, trojan:// 또는 ss://로 시작합니다. 실제 본문이 웹 페이지이거나 지원되지 않는 구성 파일 또는 오류 안내뿐이라면 업데이트 중 파싱 오류가 표시되거나, 업데이트가 끝난 뒤 노드가 0개가 될 수 있습니다.
| 응답 특징 | 가능한 의미 | 대응 방법 |
|---|---|---|
처음에 <!doctype html> 또는 <html이 나타남 |
웹 페이지, 로그인 페이지 또는 오류 페이지가 반환됨 | 구독 본문을 직접 반환하는 주소를 다시 받고 리디렉션과 인증 상태를 확인 |
전체가 문자, 숫자, +, /, =로 구성됨 |
표준 Base64 인코딩 콘텐츠일 가능성 | 길이, 패딩, 디코딩 후 텍스트를 확인하고 중복 디코딩하지 않기 |
| 여러 줄이 프로토콜 스킴으로 시작함 | 일반 텍스트 공유 링크 목록일 가능성 | 각 줄이 완전한지, 현재 클라이언트가 해당 프로토콜과 필드를 지원하는지 확인 |
| JSON 또는 기타 구조화된 필드만 존재함 | API 정보 또는 전용 구성 형식일 가능성 | 서비스에서 제공하는 V2Ray 공용 구독 형식으로 변경 |
| 본문이 만료, 권한 또는 요청 빈도 안내임 | 요청은 성공했지만 서비스 상태에 문제가 있음 | 유효 기간, 권한 또는 요청 빈도를 처리한 뒤 다시 받기 |
Base64는 입력 3바이트를 인코딩 문자 4개로 변환하며, 끝에는 = 패딩 문자가 0개, 1개 또는 2개 붙을 수 있습니다. 일부 서비스는 패딩을 생략하고 일부 파서는 이를 자동으로 처리합니다. 그러나 본문이 잘렸거나 공백이 섞였거나 복사 중 문자가 빠지면 겉보기에는 Base64처럼 보여도 정상적으로 디코딩되지 않을 수 있습니다.
유효한 공유 링크 예시:
vmess://인코딩된 콘텐츠
vless://식별 정보@서버 주소:포트?매개변수
trojan://식별 정보@서버 주소:포트?매개변수
ss://인코딩 또는 사용자 정보@서버 주소:포트
- 디코딩 결과는 하나 이상의 완전한 공유 링크여야 하며, 원문과 똑같은 긴 인코딩 문자열이 다시 나타나서는 안 됩니다.
- 각 링크에는 프로토콜 스킴, 서버 주소, 포트와 필요한 매개변수가 모두 있어야 합니다. 포트나 주소가 없으면 연결 가능한 노드를 만들 수 없습니다.
- VMess 공유 콘텐츠에는 일반적으로 JSON 데이터가 포함됩니다. JSON이 잘렸거나 따옴표 이스케이프가 손상되었거나 필드 형식이 잘못되면 가져오기에 실패합니다.
- VLESS와 Trojan은 핵심 매개변수를 쿼리 문자열에 넣는 경우가 많습니다. 물음표 뒤의 내용을 빠뜨리면 전송 계층, TLS 또는 REALITY 설정이 달라질 수 있습니다.
- 어떤 웹 도구에서 구독 본문이 디코딩된다고 해서 클라이언트가 그 안의 모든 프로토콜 매개변수를 지원한다는 뜻은 아닙니다. 클라이언트 로그와 생성 결과를 기준으로 판단하세요.
업데이트 방식, 시스템 프록시, 로컬 포트의 상호 작용
‘프록시를 통해 업데이트’는 일반적으로 구독 요청이 클라이언트에서 현재 사용할 수 있는 프록시 경로를 따른다는 뜻입니다. v2rayN에서 자주 사용하는 로컬 SOCKS 수신 포트는 10808이지만, 이 값은 매개변수 설정에서 변경할 수 있습니다. 포트가 바뀌었거나 코어가 실행되지 않았거나 시스템 프록시가 여전히 이전 포트를 가리키면 프록시 업데이트가 즉시 연결을 거부하거나 시간 초과까지 계속 대기할 수 있습니다.
코어 실행 상태 확인
먼저 메인 화면에서 기존 노드 하나를 선택해 코어를 시작하고, 로그에 정상적인 수신 대기 정보가 나타나는지 확인하세요. 실행 중인 로컬 프록시가 없다면 프록시를 통한 업데이트를 선택하지 않아야 합니다.
로컬 포트 확인
「설정」→「매개변수 설정」을 열고 로컬 SOCKS 또는 혼합 수신 대기 포트를 확인하세요.
10808로 설정되어 있다면 해당 프록시를 사용하는 브라우저나 시스템 설정도 같은 포트를 가리켜야 합니다.프록시 순환 의존성 배제
라우팅 규칙에 따라 구독 도메인이 이미 만료된 프록시 아웃바운드로 전달되면 업데이트가 기존 노드에서 멈출 수 있습니다. 이때는 먼저 프록시를 사용하지 않고 업데이트하거나, 사용 가능성이 확인된 노드로 임시 전환하세요.
시스템 시간 확인
날짜, 시간대, 시간 동기화가 올바른지 확인하세요. 시간 차이가 크면 HTTPS 인증서 유효 기간 판단에 영향을 주어 형식 오류가 아닌 TLS 연결 오류로 나타날 수 있습니다.
수신 대기 프로세스 재시작
포트, DNS 또는 코어 유형을 변경한 뒤 코어를 중지하고 다시 시작하세요. 이전 프로세스가 수신 대기 포트를 해제했는지 확인한 다음 그룹 하나만 다시 업데이트합니다.
오류: Connection refused 127.0.0.1:10808
원인 및 해결 방법:요청이 로컬 컴퓨터의 10808에 연결하려 했지만 해당 포트를 수신하는 프로세스가 없습니다. 코어를 시작하거나 구독 업데이트 방식을 프록시를 사용하지 않는 방식으로 바꾸세요. 수신 대기 포트를 변경했다면 호출 측 설정도 함께 수정해야 합니다.
오류: address already in use
원인 및 해결 방법:수신 대기 포트를 다른 프로세스가 이미 사용하고 있어 코어가 정상적으로 시작되지 않았습니다. 중복 실행된 클라이언트 인스턴스를 종료하거나 「설정」→「매개변수 설정」에서 사용 중이지 않은 포트로 변경한 뒤 다시 시작하세요.
라우팅 모드도 결과에 영향을 줍니다. 구독 도메인이 직접 연결로 설정되어 있으면 ‘프록시를 통해 업데이트’를 선택해도 반드시 프록시를 거치는 것은 아닙니다. 실제 경로는 클라이언트의 업데이트 구현과 현재 라우팅 규칙에 따라 달라집니다. 문제를 해결할 때는 한 번에 변수 하나만 바꾸고, 직접 연결·프록시·노드 전환 결과를 각각 기록하세요. DNS, 포트, 라우팅, 코어 유형을 동시에 변경하면 원인을 찾기 어렵습니다.
업데이트 후에도 연결되지 않을 때의 추가 점검
구독 업데이트 성공은 노드 정보가 클라이언트에 기록되었다는 뜻일 뿐, 모든 노드가 연결된다는 보장은 아닙니다. 업데이트 후 연결 실패는 구독 파싱 문제와 분리해 처리하세요. 먼저 새 노드가 대상 그룹에 실제로 포함되어 있는지 확인한 다음 코어 로그를 읽고, 실패 지점이 도메인 해석, 포트 연결, TLS 매개변수, 사용자 식별 정보 또는 라우팅 출구 중 어디인지 판단합니다.
- 선택한 노드 확인:업데이트가 끝나면 대상 그룹의 새 노드를 직접 선택하세요. 삭제되었거나 이름이 바뀐 기존 항목을 계속 사용하지 마세요.
- 코어 재시작:구독으로 현재 노드의 매개변수가 교체되었다면 코어를 중지했다가 다시 시작해 새 설정을 완전히 불러오세요.
- 주소와 포트 확인:서버 도메인을 해석할 수 있어야 하며, 포트는
1부터65535사이의 유효한 값이어야 합니다. 복사 과정에서 빈 값이 되지 않았는지도 확인하세요. - 전송 매개변수 확인:WebSocket, gRPC, TCP 등의 전송 방식은 서로 대체할 수 없습니다. 경로, 호스트 이름, 서비스 이름 등의 필드가 서버 설정과 일치해야 합니다.
- 보안 매개변수 확인:TLS, REALITY, SNI, 지문, 공개 키 관련 필드는 구독에서 제공한 원래 값을 유지해야 합니다. 노드 이름이 비슷하다는 이유로 다른 설정의 값을 복사하지 마세요.
- 라우팅 규칙 확인:사용자 지정 geosite, geoip 또는 도메인 규칙이 테스트 대상을 직접 연결, 차단 또는 잘못된 아웃바운드로 보낼 수 있습니다. 로그에서 실제로 적용된 출구를 확인하세요.
- 클라이언트 코어 구분:v2rayNG는 Xray 코어를 사용하고 v2flyNG는 v2fly 코어를 사용합니다. 두 코어는 일부 확장 매개변수의 지원 범위가 다르므로 같은 구독의 모든 노드가 두 코어에 모두 적합한 것은 아닙니다.
최종 점검 목록
앞선 점검으로도 원인을 찾지 못했다면 아래 순서대로 한 번 더 확인하세요. 먼저 확인하기 쉬운 링크와 요청 문제를 배제한 뒤 파싱, 포트, 노드 설정을 처리하면 구독 자체가 만료된 상태에서 클라이언트 설정만 반복해서 바꾸는 일을 피할 수 있습니다.
주소 다시 복사
원본 구독 관리 페이지에서 전체 링크를 복사하고 기존 입력값을 삭제한 뒤 다시 붙여 넣으세요. 공백, 줄바꿈, 끝의 문장 부호를 확인합니다.
두 가지 업데이트 방식 비교
먼저 프록시를 사용하지 않고 업데이트한 다음, 사용 가능성이 확인된 기존 노드를 선택해 프록시를 통한 업데이트를 실행하고 두 오류가 같은지 기록하세요.
상태와 본문 확인
응답이 200인지, 리디렉션인지, 인증 오류인지, 시간 초과인지 확인하고 본문이 구독 콘텐츠인지 로그인 페이지인지 서비스 안내인지 판단하세요.
인코딩 형식 검증
Base64가 잘리지 않았는지, 디코딩 후 완전한 VMess, VLESS, Trojan 또는 Shadowsocks 공유 링크가 생성되는지 확인하세요.
수신 대기 설정 확인
「설정」→「매개변수 설정」에서 로컬 포트를 확인하고 코어가 시작되었는지, 호출 측이 이전 포트를 계속 사용하고 있지 않은지 점검하세요.
노드 하나로 검증
업데이트 후 노드 하나를 선택하고 코어를 다시 시작한 뒤 로그를 읽어 DNS 해석, 연결, TLS, 전송, 라우팅 결과를 각각 확인하세요.
구독 제공업체에 문의할 때는 발생 시각, HTTP 상태, 클라이언트 이름, 직접 연결과 프록시 업데이트의 비교 결과, 식별 매개변수를 가린 오류 스크린샷을 전달하세요. 전체 구독 주소나 전체 노드 공유 링크는 보내지 마세요. 실패 단계에 가까운 정보를 제공할수록 링크 만료, 서버 응답 오류, 클라이언트 파싱 호환성 문제를 구분하기 쉽습니다.