V2Ray 구독 업데이트 오류 해결: 링크 만료·구문 분석 오류 점검

구독을 업데이트한 뒤 노드 목록이 비거나 파싱 오류가 발생하나요? 링크 유효성, 네트워크 연결, 인코딩 형식, 클라이언트 설정을 순서대로 확인하세요.

핵심 내용

v2rayN, v2rayNG, v2flyNG에서 구독을 다운로드하지 못하거나 응답 내용을 인식하지 못하는 경우, 업데이트 후 목록이 비는 경우에 적용할 수 있습니다. 먼저 현재 사용할 수 있는 노드를 보존하고 링크, 요청 경로, 응답 본문, 구독 그룹을 확인하세요. 한 번에 한 가지 조건만 바꾸어 비교하면 다운로드, 파싱, 표시 중 어느 단계에서 문제가 생겼는지 구분할 수 있으며, 구독 문제를 노드 연결 문제로 오인하는 일도 줄일 수 있습니다.

다운로드 실패·파싱 실패·빈 목록 구분하기

구독 업데이트는 노드 연결 테스트가 아닙니다. 클라이언트가 먼저 구독 주소로 요청을 보내고, 응답 내용을 읽어 노드 항목을 파악한 다음, 해당 그룹에 결과를 저장합니다. 어느 단계에서든 실패하면 화면에는 ‘새 노드가 없음’으로 표시될 수 있지만, 원인에 따라 해결 방법은 다릅니다.

구독 주소 읽기 구독 서버에 요청 응답 본문 수신 노드 항목 파싱 구독 그룹에 저장

구독 링크, 계정 관리 페이지, 개별 노드 공유 링크는 서로 다른 내용입니다. 구독 주소는 보통 https://로 시작합니다. vmess://, vless:// 등은 노드 공유 링크이므로 클라이언트의 해당 가져오기 기능을 사용해야 합니다. 긴 문자열을 복사할 수 있다는 이유만으로 구독 주소라고 판단하지 마세요.

  1. 원본 주소 다시 복사하기

    서비스 제공자의 구독 메뉴에서 주소를 다시 복사하고, 안내 문구나 따옴표, 앞뒤 공백이 포함되지 않았는지 확인하세요. 채팅 기록에 생략되어 표시된 링크는 그대로 사용할 수 없습니다.

  2. 쿼리 매개변수 확인하기

    물음표 뒤의 내용이 빠짐없이 포함되었는지 확인하세요. 구독 주소의 액세스 토큰, 매개변수 순서, 서명은 인증에 쓰일 수 있습니다. 매개변수를 임의로 삭제하거나 & 뒤의 내용을 잘라내지 마세요.

  3. 유효한 링크인지 확인하기

    계정 페이지에서 구독 권한과 만료 여부, 링크 재설정 여부를 확인하세요. 링크를 재설정했다면 새 주소를 기존 그룹에 저장해야 합니다. 이전 주소는 즉시 만료될 수 있습니다.

  4. 그룹 하나만 업데이트하기

    저장한 뒤 해당 그룹만 업데이트하고 결과를 기록하세요. 여러 구독을 동시에 업데이트하면 다른 그룹의 오류가 같은 로그에 섞일 수 있습니다.

브라우저에서 주소가 열린다고 해도 브라우저의 접속 경로로 어떤 응답을 받았다는 사실만 확인할 수 있습니다. 브라우저에는 로그인 쿠키가 있을 수 있고, 클라이언트와 다른 프록시나 DNS를 사용할 수도 있습니다. 따라서 ‘브라우저에서 열림’만으로 클라이언트가 파싱 가능한 구독 본문을 가져올 수 있다고 단정할 수 없습니다.

2단계: 직접 연결과 프록시 다운로드 비교하기

‘구독 업데이트 시 프록시를 사용할지’와 ‘노드에 어떤 라우팅 규칙을 적용할지’는 서로 다른 설정입니다. 구독은 클라이언트 자체의 HTTP 요청 기능으로 다운로드될 수 있으며, 프록시 코어의 DNS, 라우팅, 분할 규칙을 그대로 따르지 않을 수도 있습니다. 코어의 라우팅 모드만 바꿔도 구독 요청 경로가 달라진다고 볼 수는 없습니다.

Windows용 v2rayN 6.x의 일반적인 화면에서는 ‘구독 그룹’ 메뉴에서 ‘모든 구독 업데이트(프록시 사용 안 함)’ 또는 ‘모든 구독 업데이트(프록시 사용)’를 선택해 비교할 수 있습니다. 다른 버전에서는 괄호 표기나 문구, 그룹 조작 메뉴가 다를 수 있으니 현재 메뉴를 기준으로 확인하세요. 특정 버전의 업데이트 방식을 모든 버전의 기본 동작으로 간주하지 않습니다.

Android에서는 먼저 v2rayNG 또는 v2flyNG의 ‘구독 그룹 설정’에서 저장된 주소를 확인한 다음 메뉴의 ‘구독 업데이트’를 사용하세요. 메뉴 이름은 버전에 따라 달라질 수 있습니다. 현재 버전에 업데이트 시 프록시를 사용하는 옵션이 있다면 같은 방식으로 비교하세요. 해당 옵션이 없다면 데스크톱 버전의 메뉴 경로를 Android에 그대로 적용하지 마세요. 테스트마다 업데이트 경로나 네트워크 중 한 가지만 변경하세요.

상태 코드로 인증·리디렉션·차단 원인 찾기

로그에 HTTP 상태 코드가 표시되면 상태 코드를 먼저 확인한 다음 본문을 살펴보세요. 아래 숫자는 HTTP 프로토콜 상태이며, 속도 측정 결과나 클라이언트 버전이 아닙니다. 200 응답도 본문은 오류 안내나 웹페이지일 수 있습니다.

200
요청은 성공했지만 본문 확인 필요
302
임시 리디렉션, 최종 응답 확인 필요
403
서버에서 접근 거부
407
프록시에서 인증 요구

아래는 HTTP 상태 표시줄과 요청 구성 요소에서 나타날 수 있는 실제 오류 문구입니다. 클라이언트, 실행 환경, 화면 언어에 따라 다른 안내가 추가될 수 있습니다. 문구 하나만 대조하기보다는 오류가 어느 단계에서 발생했는지 함께 확인하세요.

HTTP 401 Unauthorized

원인 및 해결: 요청에 유효한 인증 정보가 없거나 토큰이 만료되었습니다. 계정의 구독 메뉴에서 주소를 다시 복사하고, 인터페이스가 로그인된 웹 세션에서만 작동하는 것은 아닌지 확인하세요.

HTTP 403 Forbidden

원인 및 해결: 서버가 현재 요청을 거부했습니다. 권한, 접속 정책, 보안 규칙과 관련된 문제일 수 있습니다. 계정 상태를 확인하고 발생 시간, 상태 코드, 접속 방식을 서비스 제공자에게 전달하세요. 403만으로 계정 만료라고 단정하지 마세요.

HTTP 407 Proxy Authentication Required

원인 및 해결: 요청이 통과하는 프록시에서 인증을 요구하고 있습니다. 구독 서비스가 원인이 아닐 수 있습니다. 시스템 또는 네트워크 프록시의 인증 설정을 확인하거나 프록시 없이 업데이트한 결과와 비교하세요.

The operation has timed out.

원인 및 해결: 정해진 시간 안에 요청이 완료되지 않았습니다. 이름 확인, 연결, 응답 읽기 단계에서 지연되었을 수 있습니다. 먼저 네트워크와 다운로드 경로를 비교하고 주변 로그도 확인하세요. 시간 초과만 늘려서는 만료된 주소를 해결할 수 없습니다.

301 또는 302가 표시되면 최종 응답이 로그인 페이지가 아닌지 확인하세요. 429가 표시되면 업데이트를 연속해서 시도하지 말고 서버의 Retry-After 안내에 따라 기다리세요. 복구 여부를 확인하려고 업데이트 버튼을 계속 누르면 제한이 더 오래 지속될 수 있습니다.

3단계: 응답 본문 형식과 인코딩 확인하기

구독 다운로드가 성공했는데도 파싱 오류가 발생한다면 ‘실제로 어떤 내용을 받았는지’를 확인해야 합니다. 응답 내용은 개인 기기나 통제된 환경에서만 확인하고, 노드 설정 전체를 외부 도구에 붙여넣지 마세요. 노드 본문에도 접속 정보가 포함될 수 있으므로 구독 링크와 마찬가지로 취급해야 합니다.

응답 특징 가능한 의미 다음 단계
<!DOCTYPE html> 또는 <html로 시작 로그인 페이지, 오류 페이지 또는 네트워크 인증 페이지 구독 메뉴에서 원본 주소를 다시 가져오고 최종 리디렉션과 접근 권한 확인
여러 줄의 vmess://, vless:// 등 공유 링크 일반적인 노드 목록 형식 현재 클라이언트 버전이 각 링크와 매개변수를 지원하는지 확인
긴 Base64 문자열 하나 인코딩된 노드 목록일 수 있음 응답이 완전한지 확인하고 먼저 클라이언트에서 파싱하세요. 필요하다면 로컬 기기에서만 디코딩해 확인하세요.
JSON 또는 YAML 텍스트 전체 설정, API 오류 객체 또는 다른 형식일 수 있음 현재 구독 가져오기 기능에서 요구하는 형식인지 확인하세요. 파일 확장자만으로 판단할 수 없습니다.
본문이 비었거나 안내 문구만 있음 사용 가능한 항목이 없거나 서버에서 서비스 오류를 반환함 계정 권한, 노드 필터 조건, 서버 안내 확인

Base64 디코딩에 성공해도 노드를 가져올 수 있다는 뜻은 아닙니다

Base64는 인코딩 방식이지 구독 프로토콜이 아닙니다. 디코딩에 성공했다는 것은 텍스트가 특정 인코딩 규칙을 따른다는 뜻일 뿐, 내부 링크가 유효하다는 보장은 없습니다. 일반적인 VMess 공유 형식은 vmess:// 뒤에 Base64로 인코딩된 JSON을 사용합니다. 반면 VLESS 공유 링크는 식별자, 주소, 전송 매개변수를 URI에 기록하므로 두 형식을 같은 필드 기준으로 처리할 수 없습니다.

4단계: 그룹·필터·저장 결과 확인하기

로그에 다운로드 완료와 노드 인식이 표시되면 네트워크를 계속 바꾸기보다 목록 화면을 먼저 확인하세요. v2rayN에서는 ‘구독 그룹’ → ‘구독 그룹 설정’에서 현재 그룹 주소를 확인합니다. v2rayNG와 v2flyNG에서는 ‘구독 그룹 설정’으로 들어가 해당 항목을 확인하세요. 저장 버튼, 필터, 새로 고침 방식은 버전에 따라 다르며 세 클라이언트의 기능이 완전히 같다고 가정하지 않습니다.

  1. 검색어 지우기: 노드 검색창을 비우고 대상 구독 그룹 또는 전체 노드 화면으로 전환해 이름 필터 때문에 목록이 비어 보이는지 확인하세요.
  2. 필터 확인: 현재 버전에 구독 정규식 필터나 포함·제외 조건이 있다면 기존 값을 기록한 뒤 필터를 잠시 해제하고 한 번 업데이트하세요.
  3. 저장 여부 확인: 주소를 바꾼 뒤 실제로 저장했는지 확인하세요. 편집란에 주소를 붙여넣기만 하고 적용하지 않았다면 업데이트 시 이전 주소를 사용할 수 있습니다.
  4. 분리 테스트: 필요하면 테스트 그룹을 새로 만들어 해당 구독만 넣고 따로 업데이트하세요. 사용 가능한 노드를 덮어쓰지 않도록 기존 그룹은 그대로 두세요.
  5. 실행 중인 프로그램 확인: 데스크톱에 v2rayN이 여러 개 설치되어 있다면 현재 어느 프로그램과 설정 폴더를 사용 중인지 확인하세요. 한 프로그램의 설정을 수정하고 다른 프로그램을 실행하는 일을 방지할 수 있습니다.

‘시스템 프록시 사용’, ‘전역 라우팅’, ‘구독 업데이트 시 프록시 사용’은 같은 설정이 아닙니다. 첫 번째는 시스템 프록시를 따르는 앱에 영향을 주고, 두 번째는 코어가 연결을 받은 뒤 선택할 아웃바운드 경로를 결정하며, 마지막 설정은 구독 요청의 다운로드 방식을 직접 지정합니다. 문제를 확인할 때 변경한 설정을 구체적으로 기록하고 여러 옵션을 ‘프록시를 켰다’는 말로 뭉뚱그리지 마세요.

재테스트 체크리스트와 문의 정보

설정을 변경한 뒤 대상 그룹만 한 번 업데이트하세요. 복구 여부는 업데이트 로그, 노드 목록, 실제 연결 결과를 모두 확인해야 합니다. 오류가 없다고 유효한 노드가 있다는 뜻은 아니며, 노드가 표시되어도 모든 서버에 연결된다는 뜻은 아닙니다. 구독은 복구되었지만 특정 노드에서 시간 초과가 발생한다면 별도의 연결 문제로 처리하세요.

기본 가져오기 방법은 빠른 시작을 참고하세요. 로컬 리스너, 시스템 프록시, 라우팅 문제를 더 자세히 구분하려면 문제 해결 가이드를 확인할 수 있습니다. 문제가 발생한 단계를 먼저 파악한 뒤 해당 단계의 설정만 변경하는 편이 구독을 반복해서 삭제하고 다시 만드는 것보다 증거를 보존하고 결과를 검증하기 쉽습니다.

v2rayN 다운로드