구독 관리

Clash 구독 관리: 업데이트 실패, 인증, 헬스체크 트러블슈팅 가이드

구독이 갑자기 업데이트에 실패하거나 노드가 전부 회색으로 변했나요? 이 글은 구독의 근본 원리부터 시작해서 흔한 실패 원인, 헬스체크 설정, 노드 필터링 방법을 한 번에 정리합니다.

구독이란 정확히 무엇이고, 문제가 생기면 어디를 봐야 할까

흔히 말하는 "구독 가져오기"는 설정 파일 차원에서 보면 실제로 proxy-providers 필드에 해당합니다. 클라이언트가 주기적으로 특정 URL에 접속해서 반환된 노드 목록을 내려받아 노드로 파싱한 다음, 해당 정책 그룹에 집어넣는 방식입니다. 이 원리를 이해하고 있어야 "구독 업데이트 실패"가 발생했을 때 어느 방향으로 문제를 찾아야 할지 알 수 있습니다.

config.yaml YAML
proxy-providers:
  my-sub:
    type: http
    url: "https://example.com/sub?token=xxx"
    interval: 3600       # 3600초마다 자동 업데이트
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 300

대부분의 GUI 클라이언트는 이 긴 설정을 "구독 가져오기" 입력창 뒤에 숨겨두고 있습니다. 여러분이 입력하는 링크가 바로 url 필드이고, 화면상의 "업데이트 간격"은 interval에 대응되며, 본질적으로는 차이가 없습니다.

구독 업데이트가 실패하는 흔한 원인들

  • "비정상 클라이언트"로 인식되어 접속이 거부됨일부 구독 서비스는 요청의 User-Agent를 검사해서 흔히 쓰이지 않는 클라이언트의 요청을 차단합니다. header 필드에 흔히 쓰이는 UA 문자열을 직접 지정해서 위장하면 됩니다.
  • 구독 링크에 인증이 필요함구독 주소에 접속할 때 Authorization 헤더가 필요한 경우(자체 구축 패널의 구독 API에서 흔함)에도 마찬가지로 header 필드를 통해 추가해야 하며, 토큰을 URL에 이어붙이는 방식은 권장하지 않습니다(일부 서비스는 두 방식을 모두 지원하지만 header 방식이 더 정석적입니다).
  • 구독을 가져오는 것 자체에 프록시가 필요함구독 서버가 해외에 있는데, 해외 사이트에 접속하려면 먼저 사용 가능한 노드가 있어야 하는 경우 "사용 가능한 노드가 없어서 구독을 못 받아오고, 구독을 못 받아오니 노드가 없는" 무한 루프가 생길 수 있습니다. 이때는 proxy 필드로 구독 업데이트 전용의 고정된 안내 노드를 지정하면 됩니다.
  • 구독 파일 크기가 제한을 초과함size-limit 필드는 기본적으로 제한이 없지만, 클라이언트나 패널에서 자체적으로 더 보수적인 제한을 걸어둔 경우 지나치게 큰 구독 파일이 바로 거부될 수 있습니다. 이 제한을 적절히 늘리거나 제거하면 됩니다.
흔한 해결 방법 YAML
proxy-providers:
  my-sub:
    type: http
    url: "https://example.com/sub"
    proxy: 직접연결 안내노드    # 구독 업데이트 전용 고정 출구
    header:
      User-Agent:
        - clash-verge/v2.0.0
      Authorization:
        - Bearer your-token-here

클라이언트의 그래픽 인터페이스에 header 옵션이 직접 노출되어 있지 않다면, 보통 "구독 오버라이드/사용자 정의 파라미터" 같은 고급 설정을 통해 전달해야 합니다. 구체적인 진입점은 클라이언트마다 다르므로 찾을 수 없다면 해당 클라이언트의 공식 문서를 참고하세요.

health-check로 죽은 노드 찾아내기

구독 노드를 오래 쓰다 보면 서버가 다운되거나, 속도가 제한되거나, 차단되는 일이 흔하게 일어납니다. 헬스체크를 하지 않으면 정책 그룹 안에 연결되지 않는 "좀비 노드"가 잔뜩 섞여 있게 되어 자동 측정/자동선택 시 체감이 나빠집니다. health-check가 바로 이 문제를 해결해줍니다.

설정 방법

해당 proxy-providers 항목 아래에 health-check 항목을 추가하고 안정적인 검사 주소를 지정하면 됩니다(https://www.gstatic.com/generate_204https://cp.cloudflare.com를 추천). 클라이언트는 설정한 간격마다 각 노드에 검사 요청을 보냅니다.

  • enable: 헬스체크 활성화 여부로, 항상 켜두는 것을 권장합니다.
  • interval: 검사 간격(초 단위)으로, 너무 짧게 설정할 필요는 없으며 300~600초면 충분합니다.
  • lazy: 기본값은 true로, 노드가 실제로 사용되지 않을 때는 검사하지 않아 리소스를 절약합니다. 패널에 항상 정확한 지연 데이터를 표시하고 싶다면 끌 수 있지만 백그라운드 트래픽이 조금 늘어납니다.

정책 그룹 타입이 url-test(자동 측정)나 fallback(자동 장애 전환)인 경우, 헬스체크 결과가 자동선택 로직에 직접 영향을 줍니다—죽은 노드는 자동으로 건너뛰어지므로 수동으로 개입할 필요가 없습니다.

구독 노드가 너무 많고 뒤섞여 있다면? filter로 정리하기

일부 구독은 한 번에 수백 개의 노드를 제공하는데, 이걸 전부 하나의 정책 그룹에 몰아넣으면 고르기도 어렵고 보기도 안 좋습니다. filter / exclude-filter를 사용하면 키워드나 정규식으로 노드를 걸러내거나 제외할 수 있어서, 같은 지역이나 같은 용도의 노드를 별도의 정책 그룹으로 나눌 수 있습니다.

config.yaml YAML
proxy-providers:
  hk-only:
    type: http
    url: "https://example.com/sub"
    filter: "(?i)港|hk|hongkong"
  no-relay:
    type: http
    url: "https://example.com/sub"
    exclude-filter: "(?i)中转|relay"

같은 구독 주소를 여러 개의 proxy-providers 항목으로 설정해서, 서로 다른 filter로 "홍콩만", "일본만", "경유 노드 제외" 같은 하위 세트를 나눈 다음 각각 정책 그룹을 만들면, 수백 개짜리 큰 목록에서 일일이 찾는 것보다 훨씬 편리합니다.

자주 묻는 질문

"구독 업데이트"를 수동으로 누르는 것과 자동 업데이트를 기다리는 것에 차이가 있나요?

본질적인 차이는 없습니다. 수동 업데이트는 원래 interval에 따라 주기적으로 실행될 가져오기 동작을 즉시 한 번 실행하는 것뿐이며, 효과는 완전히 동일합니다. 방금 구독 서비스 쪽의 요금제나 노드를 바꿨다면 수동으로 한 번 업데이트해서 바로 적용시키고 다음 자동 업데이트 주기를 기다리지 않아도 됩니다.

구독 주소가 브라우저에서는 열리는데 클라이언트에서는 가져오기가 실패하는 이유는 뭔가요?

브라우저와 클라이언트가 요청을 보낼 때 사용하는 User-Agent와 요청 헤더가 다르기 때문입니다. 일부 구독 서비스는 특정 클라이언트의 UA만 허용합니다. 앞서 설명한 방법대로 header에 클라이언트에서 흔히 쓰는 UA를 직접 지정해서 시도해보세요.

새 구독 링크로 바꿨는데 기존 노드가 정책 그룹에 남아있으면 어떻게 하나요?

보통 로컬에 캐시된 구독 파일이 교체되지 않은 경우입니다. path 필드에 지정된 캐시 파일 경로를 확인하고, 기존 캐시 파일을 수동으로 삭제한 후 구독 업데이트를 다시 실행하거나, proxy-providers에 있는 해당 항목의 이름을 새로운 이름으로 바꿔서 신구 데이터가 같은 캐시 파일을 공유하지 않도록 하면 됩니다.

더 알아보기

다 배우셨나요? Clash를 설치해서 직접 사용해보세요

모든 플랫폼의 설치 파일을 한곳에서 받을 수 있으며, 추천 태그를 따라 선택하면 실수할 일이 없고 몇 분이면 바로 사용할 수 있습니다.

다운로드 페이지로 이동
#구독관리 #proxy-providers #헬스체크
블로그 목록으로 돌아가기
Clash 클라이언트 다운로드모든 플랫폼 설치 파일, 지금 바로 시작