구독 링크만 있는데 규칙이 없다? Subconverter로 Clash YAML을 만들고 Clash Meta에 가져오기
에어리어(공항)에서 받은 링크가 SSR·Vmess·기타 범용 구독 형식인데, 분류 규칙·지역별 rule-provider가 붙은 Clash YAML이 필요할 때가 많습니다. Subconverter는 그 구독을 Clash·Clash Meta(Mihomo) 계열이 읽을 수 있는 설정으로 바꿔 주는 도구이며, 결과는 로컬 파일로 저장하거나 원격 구성 URL로 클라이언트에 직접 걸 수 있습니다. 이 글은 구독 변환의 목적, 온라인 변환과 자체 배포의 차이, Mihomo·Clash Verge Rev 등에 넣는 경로, 그리고 규칙 세트 다운로드 실패·인코딩 같은 흔한 오류를 한 흐름으로 묶습니다.
왜 “구독 URL만”으로는 부족한가
많은 서비스가 제공하는 구독은 노드 목록과 인증 파라미터에 초점이 맞춰져 있고, GEOIP·도메인 분류·중국 본토/해외 스플릿 같은 정책은 사용자 쪽 Clash 설정에서 정해야 합니다. 반면 Clash 계열 클라이언트는 proxies·proxy-groups·rules·(선택) rule-providers가 한 파일에 논리적으로 맞물려야 Rule 모드가 의미 있게 동작합니다. 그래서 “구독만 붙였는데 전부 직접 연결이다” 또는 “브라우저만 프록시에 탄다” 같은 증상은, 노드가 없어서가 아니라 규칙 템플릿이 비어 있거나 충돌해서 생기는 경우가 많습니다.
Subconverter의 역할은 대략 두 갈래로 이해하면 됩니다. 첫째, 원본 구독(또는 단일 노드 URI)을 Clash가 이해하는 proxies 항목으로 풀어 씁니다. 둘째, 미리 정의된 프리셋이나 사용자 지정 템플릿으로 proxy-groups와 rules·rule-providers 뼈대를 얹어 “바로 Rule 모드에 넣을 수 있는” Clash YAML을 만듭니다. 이후 세부 튜닝은 《rule-provider 경로·갱신 주기》 같은 글에서 다루는 것처럼 로컬에서 조정하면 됩니다.
Subconverter가 만들어 주는 것
배포판·버전에 따라 옵션 이름은 조금씩 다르지만, 핵심 출력은 단일 YAML입니다. 안에는 보통 다음이 포함됩니다.
- proxies: 구독에서 풀린 서버 목록(이름·타입·주소 등).
- proxy-groups:
select·url-test등으로 묶인 정책 그룹. - rules 및/또는 rule-providers: 공개 규칙 세트 URL을 가리키는 항목과 로컬 규칙 행.
Clash Meta(Mihomo) 전용 문법이 필요하면 변환 시 대상 프로필을 Meta에 맞춘 프리셋으로 지정하는 방식이 일반적입니다. 이미 코어가 Meta라면 geodata-mode·스니퍼 등 추가 키는 변환 후 YAML에 수동으로 보강하는 경우가 많습니다.
용어 정리
원격 구성 URL은 “클라이언트가 주기적으로 GET으로 받아 오는 설정 파일의 주소”입니다. Subconverter를 서버에 띄우면 그 엔드포인트가 곧 원격 구성이 될 수 있습니다. 반면 브라우저에서 한 번 받아 config.yaml로 저장해 넣는 방식은 로컬 프로필에 가깝습니다.
온라인 변환 vs 자체 호스팅
공개 변환 웹에 구독 링크를 붙여 넣는 방식은 빠르지만, 링크 안에는 대개 토큰·쿼리 비밀번호가 그대로 들어 있습니다. 즉 “누가 서버를 운영하느냐”에 구독이 노출될 수 있으므로, 신뢰할 수 없는 변환기에는 넣지 않는 것이 안전합니다. 팀·가정 내에서는 로컬에서 Subconverter를 실행하거나, 《Docker로 Meta 배포》와 같이 직접 제어하는 호스트에 두고 변환 API만 쓰는 편이 낫습니다.
| 방식 | 장점 | 주의 |
|---|---|---|
| 공개 온라인 변환 | 설치 없이 즉시 YAML 확인 | 구독 유출·가용성·로그 정책 불명 |
| 자체 Subconverter | URL·로그 통제, 반복 변환에 유리 | 도메인·TLS·방화벽 직접 관리 |
자체 호스팅을 선택하면 “변환 결과를 고정 URL로 노출”해서 클라이언트의 원격 프로필 한 줄로 끝내는 운영이 가능합니다. 다만 해당 URL이 외부에 유출되면 설정 전체가 열릴 수 있으니, 가능하면 경로에 난수 토큰을 넣거나 Basic 인증·방화벽을 검토하세요.
변환 요청을 구성할 때 알아둘 것
HTTP API 형태의 Subconverter는 보통 원본 구독 URL과 출력 포맷(Clash), 프리셋/템플릿 이름을 쿼리로 넘깁니다. 정확한 파라미터는 사용 중인 바이너리 문서를 따르는 것이 맞고, 여기서는 개념만 짚습니다.
- target: Clash 계열로 출력할지 등 결과 형식을 가리키는 경우가 많습니다.
- url: 인코딩된 원본 구독 주소입니다. 길고 특수문자가 많아 이중 인코딩 실수가 잦습니다.
- insert 또는 규칙 관련 플래그: 기본 규칙 세트를 끼워 넣을지 여부를 제어하는 배포판이 있습니다.
브라우저 주소창 길이 제한 때문에 아주 긴 구독은 POST 본문이나 설정 파일로 넘기는 방식이 필요할 수 있습니다. 변환 결과가 비어 있거나 노드 수가 이상하면, 먼저 원본 구독을 그대로 다운로드해 텍스트가 정상인지(403·만료 HTML이 아닌지) 확인하세요.
생성된 Clash YAML 읽는 법
파일을 열었을 때 proxies: 아래에 노드가 채워져 있고, proxy-groups:에 ♻ 자동 선택 같은 그룹이 보이면 변환 자체는 성공한 것입니다. 이어서 rules:와 rule-providers:를 확인하세요. 규칙 세트가 GitHub·jsDelivr·국내 미러 등 외부 URL을 가리키면, 네트워크나 DNS에 따라 다운로드 실패가 날 수 있습니다. 이 경우 rule-provider 경로와 update-interval을 조정하거나, 클라이언트가 해당 호스트에 닿는지부터 점검합니다.
# Illustrative skeleton — names differ by preset
proxies: []
proxy-groups: []
rule-providers: {}
rules: []
Meta 전용 기능을 쓰려면 변환 직후 YAML에 스니퍼·튜닝 블록을 덧붙이는 경우가 많습니다. 한 파일에 여러 출처를 합치려면 외부 도구나 수동 병합이 필요하고, 이때 proxy-groups 이름이 규칙에서 참조하는 이름과 정확히 일치해야 합니다.
Mihomo·Clash Verge 등 Meta 클라이언트에 넣기
클라이언트마다 메뉴 이름은 다르지만 패턴은 두 가지입니다.
원격 구성 URL로 가져오기
- Subconverter가 반환하는 HTTPS 주소(또는 신뢰 가능한 내부망 HTTP)를 복사합니다.
- GUI에서 “프로필 URL”“구독 링크가 아닌 설정 URL”에 해당하는 입력란에 붙여 넣습니다.
- 업데이트 주기를 정하고 저장한 뒤, 한 번 수동 새로고침으로 내용이 채워지는지 확인합니다.
파일로 가져오기
- 브라우저나
curl로 변환 결과를.yaml로 저장합니다. - 프로필 디렉터리에 넣거나 GUI에서 “파일에서 가져오기”를 선택합니다.
- 활성 프로필로 지정한 뒤 코어를 재시작하거나 구성을 다시 로드합니다.
Windows 초기 설정이 필요하면 《Clash for Windows 설정》을, macOS에서는 《Clash Verge Rev macOS》를 함께 보는 것이 좋습니다. Android 쪽 가져오기 오류는 《Android 구독 가져오기 실패》와 증상이 겹칠 수 있습니다—차이는 “노드 목록용 구독 URL”이 아니라 설정 YAML·원격 구성 URL을 넣었는지입니다.
자주 보는 오류와 대응
규칙 세트·rule-provider 다운로드 실패
로그에 404·TLS handshake·타임아웃이 찍히면 규칙 파일이 비어 있거나 오래된 URL일 수 있습니다. 규칙 제공자 저장소의 기본 브랜치·경로가 바뀌었는지 확인하고, 필요하면 미러나 로컬 복사본으로 바꿉니다. DNS 이슈와 겹치면 《DNS·fake-ip》부터 점검하는 편이 빠릅니다.
구독 자체가 비어 있거나 403
변환기 문제가 아니라 원본 구독 URL이 만료·차단·User-Agent 요구로 막힌 경우입니다. 공항 패널에서 링크를 재발급하거나, Subconverter가 원본을 가져올 때의 UA를 설정할 수 있는지 문서를 확인하세요.
인코딩·중복 인코딩
구독 URL을 한 번 더 인코딩하면 변환기가 다른 서버를 바라보게 됩니다. 주소줄을 복사할 때 한 단계만 인코딩됐는지 점검하세요.
혼동 주의
구독 URL(노드 목록)과 원격 구성 URL(합쳐진 Clash YAML)은 다릅니다. 클라이언트에 무엇을 넣었는지 메뉴별로 다시 확인하세요.
실무 체크리스트
- 원본 구독을 브라우저나
curl로 직접 받아 내용이 정상인지 확인한다. - Subconverter 출력 YAML에서
proxies개수와 그룹 이름을 본다. rule-providersURL이 열리는지, 클라이언트 로그에 오류가 없는지 본다.- Meta 클라이언트에서 원격 프로필 또는 로컬 파일로 넣고 Rule 모드를 켠다.
- 실패 시 한 번에 여러 변수를 바꾸지 말고, 구독·변환·규칙·DNS 순으로 좁힌다.
정리
Subconverter는 “비 Clash 구독만 있는 상태”에서 Clash YAML로 도약시키는 실무 도구입니다. Clash Meta·Mihomo·GUI 포크들은 모두 그 YAML을 읽을 수 있게 맞추면 되고, 원격 구성 URL로 두면 업데이트도 단순해집니다. 다만 구독은 곧 비밀 키와 같으므로, 변환기 선택과 노출 URL 관리는 성능만큼이나 중요합니다.