Clash 오픈소스 생태계 정리: 오리지널·Meta/mihomo·각 클라이언트 관계

Clash라는 이름은 이미 아카이브된 오리지널 코어, 커뮤니티가 이어받은 mihomo 메인 라인, 그리고 인터페이스가 저마다 다른 십여 개 클라이언트를 동시에 가리키곤 한다. 이 글은 사전식으로 이 생태계를 정리한다. 오리지널 코어가 아카이브된 경위, Clash Meta에서 mihomo로 이어지는 계승 관계, 코어와 클라이언트의 역할 분담 구조, 그리고 플랫폼별 클라이언트 유지 현황을 다루고 끝에는 플랫폼별 선택 가이드를 덧붙인다.

GPL-3.0 오픈소스 라이선스 · Go 언어 작성 · mihomo 현재 메인 코어

1. 오리지널 Clash의 전말

오리지널 Clash는 개발자 Dreamacro가 Go 언어로 작성해 2018년경 공개했으며 GPL-3.0 라이선스로 배포되었다. 순수 커맨드라인 코어로 그 자체는 GUI가 없으며, 실행 시 config.yaml이라는 설정 파일을 읽어 로컬에 HTTP·SOCKS 프록시 포트를 열고, 설정에 정의된 규칙에 따라 각 연결을 직결 또는 특정 프록시 아웃바운드로 분배한다.

당시 기준으로 프로토콜 지원 범위는 상당히 넓었다. Shadowsocks, VMess, Trojan, Snell과 표준 HTTP·SOCKS5 아웃바운드를 지원했고, 규칙 시스템은 도메인 접미사, 키워드, IP 대역, GEOIP 등 다양한 매칭 방식을 제공했다. "위에서부터 순서대로 매칭해 첫 히트에서 종료"하는 분기 모델과 아웃바운드 셀렉터인 "정책 그룹"은 이후 생태계 전체가 지금까지 따르는 표준 패턴이 되었다.

오픈소스판 외에 개발자는 클로즈드소스 Premium 코어도 별도로 배포했다. 사전 빌드된 바이너리 형태로 TUN 가상 네트워크 카드, 스크립트 규칙 등 강화 기능을 제공해 필요한 사용자가 교체 사용할 수 있게 했다.

2023년 11월, 개발자는 GitHub에 있던 clash 저장소를 비우고 삭제했고 프로젝트 홈페이지는 그 이후 접속이 불가능해졌다. 같은 시기 Clash for Windows를 비롯한 여러 유명 다운스트림 클라이언트도 잇따라 업데이트 중단 또는 배포 중단을 발표했다. 오리지널 코어의 버전은 그 지점에서 멈췄고 프로토콜 지원과 기능 추가도 더 이상 이루어지지 않는다. 이것이 오늘날 생태계 전체를 이해하는 출발점이다.

2. Clash Meta에서 mihomo로

오리지널이 업데이트를 멈추기 전부터 이미 커뮤니티에는 기능 분기인 Clash.Meta가 존재했으며, MetaCubeX 조직이 유지보수를 맡아 오리지널 코드를 기반으로 새 프로토콜과 기능을 계속 추가하는 것을 목표로 삼았다. 오리지널 저장소가 삭제된 뒤 이 분기는 자연스럽게 사실상의 메인 라인이 되었다. 2024년 초 프로젝트명은 mihomo로 바뀌었고 저장소는 MetaCubeX/mihomo로 이전되었으며, 버전 번호는 기존 시퀀스를 이어받고 라이선스도 GPL-3.0을 그대로 유지한다.

오리지널 대비 mihomo의 주요 추가 사항을 카테고리별로 정리하면 다음과 같다.

  • 아웃바운드 프로토콜: VLESS, Hysteria, Hysteria2, TUIC, WireGuard 등을 추가해 오리지널이 멈춘 이후 등장한 주요 프로토콜 대부분을 커버한다.
  • 규칙 시스템: 룰 프로바이더(rule-providers)와 바이너리 규칙셋 포맷을 도입해 대규모 도메인·IP 목록의 배포와 로딩을 용이하게 했다.
  • DNS 모듈: 도메인별 분기 처리 리졸빙 전략, 도메인 스니핑 등의 기능을 지원해 DNS 오염과 분기 오류를 줄인다.
  • TUN 모드: 가상 네트워크 카드 스택을 재작성 및 강화해 gVisor와 system 두 가지 구현을 제공하며, 전체 트래픽 인수가 한층 안정적이다.
  • 제어 인터페이스: external-controller는 오리지널 버전과 호환성을 유지해 기존 패널과 클라이언트가 매끄럽게 이전할 수 있다.

현재 유지보수 중인 Clash 계열 클라이언트는 거의 전부가 mihomo를 기본 또는 권장 코어로 채택하고 있다. 오리지널 코어는 일부 구형 기기와 구 설정에서만 계속 쓰이고 있다.

3. 코어와 클라이언트의 역할 분담

Clash 생태계의 구조는 "코어 + 셸"의 2계층으로 정리할 수 있다. 코어는 백그라운드 프로세스로 프록시 프로토콜, 규칙 매칭, DNS 리졸빙을 담당한다. 클라이언트는 GUI 셸로 화면 표시, 구독 다운로드 및 갱신, 시스템 프록시 온오프, 부팅 시 자동 실행 등을 담당하며 코어가 노출하는 RESTful 제어 인터페이스로 명령을 내리고 상태를 조회한다. 이 인터페이스는 기본적으로 127.0.0.1:9090에서 대기한다.

# config.yaml(일부): 코어 외부 제어 인터페이스
external-controller: 127.0.0.1:9090
secret: ""

설정 파일 포맷은 코어 간에 거의 호환되기 때문에 동일한 config.yaml을 서로 다른 클라이언트에 그대로 옮겨 쓸 수 있는 경우가 많다. metacubexd, zashboard 같은 패널 도구도 동일한 제어 인터페이스로 동작하므로 어떤 클라이언트를 쓰는지와 무관하게 어떤 mihomo 인스턴스에도 연결할 수 있다.

구독 링크는 결국 Clash 설정 포맷으로 생성된 yaml 텍스트이며, 클라이언트는 이를 주기적으로 가져와 로컬 설정에 병합하는 역할을 한다. "코어·셸·구독" 이 세 계층을 이해하면 생태계에 새로 등장하는 클라이언트도 빠르게 파악할 수 있다. 먼저 어떤 코어를 내장했는지, 그다음 구독과 시스템 프록시를 어떻게 캡슐화했는지를 보면 된다.

4. 플랫폼별 클라이언트 현황

아래 표는 플랫폼별로 자주 쓰이는 클라이언트의 내장 코어와 유지보수 상태를 정리한 것이다(각 프로젝트의 공개 릴리스 페이지 기준).

클라이언트플랫폼내장 코어유지보수 상태
Clash Verge RevWindows / macOS / Linuxmihomo활발히 유지보수 중
FlClashWindows / macOS / Linux / Androidmihomo활발히 유지보수 중
mihomo partyWindows / macOS / Linuxmihomo활발히 유지보수 중
ClashX MetamacOSmihomo유지보수 중
ClashMetaForAndroidAndroidmihomo유지보수 중
OpenClashOpenWrtmihomo(설정에서 전환 가능)활발히 유지보수 중
Clash for WindowsWindows / macOS / Linux오리지널 / Premium2023년 11월 업데이트 중단
Clash for AndroidAndroid오리지널업데이트 중단
ClashXmacOS오리지널업데이트 중단
Clash Verge(구버전)Windows / macOS / Linux오리지널 / Meta업데이트 중단, Rev가 후속

몇 가지 보충 사항: Clash Verge Rev는 업데이트가 중단된 Clash Verge의 커뮤니티 후속작으로 Tauri 기반이며 인터페이스는 구버전 계열을 그대로 이어받았다. FlClash는 Flutter로 작성되어 데스크톱과 모바일 플랫폼이 동일한 UI 로직을 공유한다. OpenClash는 OpenWrt용 LuCI 애플리케이션으로 코어를 설정에서 전환할 수 있다. iOS에서 흔히 쓰이는 Stash는 클로즈드소스 유료 소프트웨어로 Clash 설정 포맷과 호환되지만 오픈소스 코어와 직접적인 계승 관계는 없으며 여기서는 참고 정보로만 정리한다.

5. 선택 가이드

위 계보를 종합하면 선택 기준은 세 가지 원칙으로 정리된다.

  1. 유지보수 중인 조합을 우선한다.프록시 소프트웨어는 프로토콜 구현과 OS 변화에 맞춰 계속 업데이트되어야 하며, 업데이트가 끊긴 버전은 구 환경 대응에만 그치고 드러난 문제도 더는 수정되지 않는다.
  2. 코어는 mihomo를 기준으로 삼는다.새 프로토콜과 새 규칙셋 포맷은 mihomo 쪽에서만 발전한다. 구 설정이 오리지널의 특정 동작에 강하게 의존하는 경우가 아니라면 이미 아카이브된 코어로 돌아갈 이유가 없다.
  3. 클라이언트는 플랫폼 사용 습관에 맞게 고른다.데스크톱 3대 플랫폼은 UI 선호에 따라 Clash Verge Rev와 FlClash 중에서 고르면 되고, Android는 ClashMetaForAndroid나 FlClash를, OpenWrt 라우터는 OpenClash를 쓰면 된다.
참고 · 설정 마이그레이션

구 클라이언트에서 내보낸 config.yaml은 대부분 mihomo 기반 클라이언트에 그대로 가져와 쓸 수 있다. 이미 제거된 일부 구 필드나 구 프로토콜 표기는 mihomo 공식 문서를 참고해 항목별로 조정한 뒤 불러와야 실행 오류를 피할 수 있다.

각 클라이언트의 다운로드 경로, 시스템 요구 사항, 설치 절차는 본 사이트 설치 파일 페이지에서 항목별로 정리하고 있다. 처음 설정을 마치는 과정은 시작 가이드를 참고해 단계별로 따라 하면 된다.

6. 용어 정리

코어core

실제로 프록시와 분기 처리를 수행하는 백그라운드 프로세스로 그 자체는 GUI가 없으며, 오리지널 Clash와 mihomo가 여기에 해당한다.

클라이언트GUI

코어의 GUI 셸로 설정 관리, 구독 갱신, 시스템 프록시 온오프를 담당한다.

구독subscription

Clash 설정 포맷으로 노드와 규칙을 배포하는 링크로 클라이언트가 주기적으로 가져온다.

정책 그룹proxy-group

아웃바운드 셀렉터로 특정 매칭이 최종적으로 어느 노드나 그룹으로 전달되는지 결정한다.

TUN 모드tun

가상 네트워크 카드로 전체 트래픽을 인수하는 방식으로 시스템 프록시를 따르지 않는 프로그램까지 커버할 수 있다.

규칙셋rule-set

재사용 가능한 규칙 목록 파일로 mihomo는 용량이 더 작은 바이너리 포맷도 별도로 제공한다.

Clash 다운로드