Subconverter란 무엇인가
Subconverter는 여러 프로토콜로 인코딩된 구독 데이터를 읽어, Clash·Surge·Quantumult X 등 목표 형식의 설정 파일로 다시 출력해 주는 오픈소스 변환 엔진입니다. 사용자가 직접 노드 URI를 해독할 필요 없이, 구독 URL 한 줄을 넣으면 proxies·proxy-groups·rules가 갖춰진 YAML을 얻을 수 있다는 점이 실무에서 큰 장점입니다. 특히 V2Ray 계열(vmess·vless), 구형 ShadowsocksR, Trojan이 한 구독에 섞여 있을 때 Clash 단일 프로필로 합치려면 이런 변환 계층이 사실상 표준에 가깝습니다.
최신 Clash 생태계는 Meta 코어를 기준으로 기능이 확장되어 왔고, Subconverter 출력도 clash·clashr 등 타깃 이름에 맞춰 미세하게 달라집니다. 즉 “한 번 변환했다면 영원히 동일한 파일”이 아니라, 코어 버전·외부 템플릿·룰 프로바이더 조합에 따라 클라이언트 쪽에서 한 번 더 다듬는 흐름이 자연스럽습니다. 그래도 변환기가 해 주는 일은 “원시 구독 → 구조화된 YAML 골격”을 만드는 데 집중되어 있어, 수작업보다 훨씬 적은 실수로 시작할 수 있습니다.
왜 Clash에서는 YAML 변환이 필요한가
많은 상용 패널은 사용자에게 범용 구독 링크만 던져 주고 끝나는 경우가 있습니다. 그 링크 안에는 프로토콜별로 서로 다른 스킴이 섞여 있으며, 클라이언트마다 해석 규칙이 조금씩 다릅니다. Clash Meta 기반 앱은 내부적으로 YAML 또는 이에 준하는 구조를 로드하므로, 중간에서 공통 분모를 YAML로 맞추는 것이 가장 재현성이 높습니다. 같은 구독이라도 V2Ray 전용 앱에 넣었을 때와 Clash에 넣었을 때 노드 이름·그룹 구조가 다르게 보이는 이유도 대개 이 변환 단계의 규칙 차이 때문입니다.
또한 규칙 기반 라우팅을 쓰려면 rules와 rule-providers가 프로필 안에 함께 있어야 합니다. Subconverter는 외부 규칙 세트를 끌어오는 옵션을 제공하기도 하지만, 실제 운영에서는 문서에 나온 예시처럼 사용자 환경에 맞게 규칙을 덧붙이는 경우가 많습니다. 변환 결과를 그대로 신뢰하기보다, DNS·분류·직연결(DIRECT) 범위를 한 번씩 검토하는 습관이 필요합니다.
온라인 공개 인스턴스와 자체 호스팅
가장 빠른 방법은 공개된 Subconverter 웹 엔드포인트에 구독 URL을 넣고 결과 링크를 복사하는 것입니다. 다만 구독 URL은 사실상 비밀 키와 같습니다. 제3자 서버에 한 번 노출되면 해당 인스턴스 운영자의 로그나 캐시에 남을 수 있으므로, 중요한 노드라면 이 경로는 피하는 편이 안전합니다. 반대로 자신만의 VPS나 홈서버에 컨테이너를 띄우면, 변환 요청이 외부로 새지 않도록 통제할 수 있습니다.
자체 호스팅을 선택하면 TLS 종단, 접근 제한(토큰·IP 허용 목록), 업스트림 타임아웃 같은 운영 파라미터를 직접 조정할 수 있습니다. 소규모로 쓸 때는 Docker 한 컨테이너로도 충분한 경우가 많고, 리버스 프록시 뒤에 두면 모바일과 데스크톱에서 동일한 내부 URL로 끝점을 통일하기 좋습니다. 어떤 방식을 고르든 결과물은 “클라이언트가 주기적으로 받아 갈 새 구독 URL”이라는 점만 기억하면 됩니다.
보안: 공개 변환기에 원본 구독을 붙여 넣기 전에, 테스트용 최소 권한 구독인지 반드시 확인하세요. 운영 환경 구독은 자가 호스팅이나 클라이언트 내장 변환을 우선 고려하는 것이 좋습니다.
Docker로 빠르게 띄우는 예시
서버에 Docker가 있다면 공식 이미지를 기준으로 컨테이너를 실행하고, 앞단에 Nginx나 Caddy로 HTTPS를 붙이는 패턴이 흔합니다. 아래는 개념을 잡기 위한 최소 예시이며, 실제 배포 시에는 포트·볼륨·환경 변수를 본인 정책에 맞게 조정해야 합니다.
# Example only — adjust image tag and ports for your environment
docker run -d --name subconverter \
-p 25500:25500 \
tindy2013/subconverter:latest
기동 후에는 http://서버주소:25500/sub?target=clash&url=원본구독URL 형태로 HTTP API를 호출할 수 있습니다. target 값을 clash, clashr 등으로 바꾸면 출력 프로필 형식이 달라지므로, 사용 중인 Clash 코어 문서와 맞춰 보는 것이 좋습니다. 운영 환경에서는 방화벽으로 관리 포트를 제한하고, 가능하면 인증 토큰을 요구하는 리버스 프록시 규칙을 추가하세요.
쿼리 파라미터와 프로필 커스터마이징
Subconverter는 URL 쿼리로 출력 형식·인코딩·외부 템플릿·이름 붙이기 규칙 등을 덮어쓸 수 있습니다. 예를 들어 구독에 포함된 노드 이름을 일괄 접두사로 바꾸거나, 특정 지역 태그를 제거하는 식의 가공이 가능합니다. 다만 옵션이 많을수록 재현성이 떨어질 수 있으니, 팀 단위로 쓸 때는 대표 URL 한 줄을 문서에 고정해 두고 변경 이력을 남기는 편이 유지 관리에 유리합니다.
외부 규칙 세트나 프로바이더 URL을 합성해 넣는 경우, 그 주소가 장기간 유효한지·원작 라이선스 조건은 무엇인지도 함께 확인하세요. 규칙 파일이 깨지면 클라이언트가 시작 시점에 전체 프로필 로드를 실패할 수 있습니다. 이런 문제를 줄이려면 Clash Verge Rev처럼 프로필 편집과 로그 확인이 쉬운 클라이언트에서 단계적으로 검증하는 방법을 권합니다.
Clash 클라이언트에 반영하는 실무 순서
변환이 끝나면 최종적으로 얻게 되는 것은 클라이언트가 주기적으로 내려받을 수 있는 URL 또는 파일입니다. 대부분의 GUI 클라이언트는 프로필 편집 화면에서 구독 링크 칸에 이 URL을 넣고 새로고침만 하면 됩니다. 이때 원본 구독과 변환 구독을 동시에 중복 등록하지 않도록 주의하세요. 노드가 두 배로 잡히거나 규칙 충돌로 이상 동작이 날 수 있습니다.
시스템 프록시만 켠 상태에서 브라우저는 잘 되는데 터미널 도구가 빗나간다면, TUN 모드나 DNS 설정을 함께 점검해야 합니다. 전체 트래픽 경로를 통일하는 방법은 TUN 모드 가이드에서 단계별로 다루고 있습니다. 클라이언트 바이너리 자체는 Clash 다운로드 페이지에서 환경에 맞게 받는 것을 권장합니다. 설치 패키지의 주된 배포 경로는 이 페이지를 사용하고, 오픈소스 저장소는 아래에서 별도로 안내합니다.
자주 막히는 지점과 점검 순서
변환 결과가 비어 있거나 노드 수가 현저히 적다면, 먼저 원본 구독이 만료·차단되지 않았는지 브라우저나 curl로 확인하세요. 다음으로 Subconverter 로그 또는 HTTP 응답 코드를 보면 TLS 핸드셰이크 실패·타임아웃·리다이렉트 루프 같은 힌트를 얻을 수 있습니다. 인코딩 문제로 한글 노드 이름이 깨질 때는 클라이언트 쪽 글꼴·UTF-8 처리 문제인지, 변환기 옵션에서 이름을 ASCII로 강제했는지도 함께 살펴보세요.
특정 프로토콜만 로드되지 않는다면 해당 프로토콜이 현재 사용 중인 Clash 코어에서 공식 지원되는지 확인해야 합니다. 코어를 올렸는데도 동일하다면 변환 타깃 이름(target)이 코어가 기대하는 프로필 스키마와 어긋난 경우가 많습니다. 이때는 최소 구성의 YAML을 수동으로 한 줄씩 줄여 가며 재현하는 방식이 디버깅에 도움이 됩니다.
오픈소스 저장소와 클라이언트 배포의 구분
Subconverter는 커뮤니티에서 널리 쓰이는 도구이며, 라이선스·소스 코드·이슈 논의는 GitHub 저장소에서 확인할 수 있습니다: https://github.com/tindy2013/subconverter. 반면 일상적인 Clash 클라이언트 설치 파일은 보안 검증과 채널 일관성을 위해 이 사이트의 다운로드 페이지를 우선하는 편이 안전합니다. 저장소는 신뢰 확인과 기여·버그 리포트용으로 두고, 실행 파일은 별도 경로로 받는 습관을 들이면 혼선이 줄어듭니다.
정리
Subconverter는 “여러 프로토콜이 뒤섞인 구독”을 Clash가 이해하는 단일 YAML로 묶는 실용적인 다리입니다. 온라인 도구는 편하지만 비밀 유출 리스크가 있으니 운영 구독에는 자가 호스팅이나 신뢰할 수 있는 내부 엔드포인트를 우선하세요. 변환 후에도 규칙·DNS·TUN 여부는 사용 환경에 맞게 다시 조정하는 것이 일반적입니다. 비슷한 목적의 도구들을 여러 번 거치기보다, Clash Meta 생태계 하나에 맞춰 프로필을 단순하게 유지하는 편이 장기적으로 덜 지칩니다.
변환까지 마쳤다면 이제 남은 일은 안정적인 클라이언트에서 프로필을 불러와 매일 쓰기 편하게 다듬는 일입니다. 유사한 범주의 앱들 가운데에서도 규칙 엔진과 코어 통합이 잘 된 Clash 계열은 실험과 운영을 오가기에 부담이 적은 편입니다.