mihomo(Clash Meta) 커널과 오리지널 Clash의 차이점
mihomo 커널이 오리지널 Clash보다 나은 점: 신규 프로토콜 지원, 규칙 기능 강화, 성능 차이, 그리고 마이그레이션 시 주의사항까지. 두 커널의 관계와 선택 기준을 한 편으로 정리했다.
두 커널은 어떤 관계인가
오리지널 Clash는 Dreamacro가 Go 언어로 작성해 GPL-3.0 라이선스로 공개한 오픈소스 프로젝트다. 2023년 11월 개발자가 저장소를 보관 처리(archive)하며 삭제해 프로젝트 관리가 중단됐고, 버전은 영원히 v1.18.0에 멈춰 있다. 오픈소스 버전은 HTTP·SOCKS 인바운드와 Shadowsocks / ShadowsocksR / VMess / Trojan / Snell 아웃바운드, 그리고 기본 분기 규칙을 제공한다. TUN 모드와 스크립트 규칙은 비공개 Premium 버전에만 존재했고 오픈소스판에는 포함되지 않았다.
mihomo는 커뮤니티가 오리지널 코드를 이어받아 계속 개발한 포크로, 처음에는 Clash.Meta라는 이름으로 시작해 2023년 말 mihomo로 이름을 바꿨다. MetaCubeX 조직이 관리하며 마찬가지로 GPL-3.0으로 공개돼 있고 지금도 꾸준히 업데이트된다. 두 프로젝트의 관계는 한 문장으로 요약할 수 있다: 오리지널은 멈춰선 기준선이고, mihomo는 그 바통을 이어받은 후속작이다.
실제 클라이언트로 보면 더 명확하다. 본 사이트 다운로드 페이지에 수록된 Clash Verge Rev, Clash Nyanpasu, FlClash, ClashX Meta 등은 모두 mihomo를 내장하고 있다. 반면 Clash for Windows는 오리지널 기반의 비공개 Premium 커널을 내장했는데, 클라이언트와 함께 이미 업데이트가 끊겼다. 클라이언트를 고를 때는 화면 디자인보다 커널의 신구 여부가 훨씬 중요한 기준이다.
프로토콜 지원: 아웃바운드 종류가 한 세대 차이 난다
오리지널 오픈소스 Clash가 지원하는 아웃바운드 프로토콜 목록은 2023년 이후 그대로다: Shadowsocks, ShadowsocksR, VMess, Trojan, Snell, SOCKS5, HTTP. mihomo는 여기에 최근 3년간 등장한 프로토콜을 추가로 지원한다:
- VLESS, XTLS Vision 흐름 제어와 Reality 위장 전송 포함
- Hysteria 및 Hysteria2, QUIC 기반 혼잡 제어 프로토콜
- TUIC, QUIC 계열의 또 다른 구현체
- WireGuard, 표준 WireGuard 서버와 직접 연동 가능
- SSH, AnyTLS 등 비교적 최신 아웃바운드 유형
| 아웃바운드 프로토콜 | 오리지널 Clash | mihomo |
|---|---|---|
| Shadowsocks / ShadowsocksR | 지원 | 지원 |
| VMess | 지원 | 지원 |
| Trojan | 지원 | 지원 |
| Snell | 지원 | 지원 |
| VLESS(Reality / XTLS Vision) | 미지원 | 지원 |
| Hysteria / Hysteria2 | 미지원 | 지원 |
| TUIC | 미지원 | 지원 |
| WireGuard | 미지원 | 지원 |
실제 영향은 꽤 직접적이다. 구독 목록에 reality 파라미터가 붙은 vless:// 노드나 hysteria2:// 로 시작하는 노드가 섞여 있으면 오리지널 커널은 이를 해석하지 못해 해당 노드들이 목록에서 통째로 사라진다. 같은 구독을 mihomo 클라이언트에 불러오면 전부 정상적으로 인식된다. 최근 발급되는 서버 구독 대부분이 mihomo 형식으로 만들어지고 있어, 이것이 커널을 교체하게 되는 가장 흔한 이유다.
규칙 시스템: 고정 목록에서 규칙셋으로
오리지널 Clash의 규칙은 설정 파일에 한 줄 한 줄 고정으로 적어 넣는 방식이다. 종류로는 DOMAIN, DOMAIN-SUFFIX, DOMAIN-KEYWORD, GEOIP, IP-CIDR, MATCH 등이 있다. 광고 차단 목록 하나를 갱신하려면 설정 파일 전체를 통째로 교체해야 한다.
mihomo는 규칙 체계를 3단계로 확장했다:
- RULE-SET 규칙셋: rule-providers로 원격 또는 로컬 규칙 파일을 불러오며, behavior는 domain, ipcidr, classical 세 가지로 나뉜다. interval 필드로 자동 갱신 주기를 지정할 수 있어 설정을 수동으로 바꿔치지 않아도 된다.
- GEOSITE 사이트 분류: geodata-mode를 켜면 GEOSITE 규칙으로 사이트 분류 데이터베이스를 기준으로 매칭할 수 있어, 국가 단위인 GEOIP보다 훨씬 세밀하다.
- 논리 규칙과 서브 규칙: AND, OR, NOT으로 여러 조건을 하나의 규칙으로 묶을 수 있고, SUB-RULES는 특정 조건에 걸린 트래픽을 두 번째 규칙 체인으로 넘겨 다시 분기시킬 수 있다.
전형적인 mihomo 규칙 설정은 다음과 같은 형태다:
rule-providers:
adblock:
type: http
behavior: domain
url: "https://example.org/rules/adblock.yaml"
path: ./ruleset/adblock.yaml
interval: 86400
rules:
- RULE-SET,adblock,REJECT
- GEOSITE,category-ads-all,REJECT
- AND,((NETWORK,UDP),(DST-PORT,443)),REJECT
- MATCH,PROXY
그 외에 mihomo는 sniffer(스니퍼) 기능을 내장하고 있다. 목적지 IP만 가진 연결에서 TLS SNI나 HTTP Host를 감지해 도메인 정보를 복원한 뒤 규칙 매칭을 다시 수행한다. 이를 통해 앱이 도메인 규칙을 건너뛰고 IP로 직접 접속하는 오래된 문제를 해결한다. 오리지널 커널에는 이런 기능이 없다.
성능과 리소스 사용량
두 커널 모두 Go 언어로 작성돼 있어 단일 연결의 포워딩 성능은 같은 수준이며, 평소 웹 브라우징에서는 체감 차이가 거의 없다. 차이는 지속적인 관리에서 오는 세부 기능에서 드러난다. mihomo는 tcp-concurrent 동시 접속, unified-delay 통일된 지연 측정 기준을 제공하고, 메모리 회수 튜닝도 더 세밀하며, 최신 Windows·macOS에서 발생하는 호환성 문제도 계속 수정하고 있다.
대신 기능이 늘어난 만큼 기본 메모리 사용량은 다소 높다. 특히 behavior가 classical인 규칙셋을 여러 개 불러오면 사용량이 눈에 띄게 늘어난다. domain과 ipcidr 방식의 규칙셋은 내부적으로 인덱싱 최적화가 돼 있어 사용량이 훨씬 낮다. 규칙셋을 고를 때 이 두 방식을 우선하는 것이 메모리를 절약하는 실질적인 방법이다.
오리지널 커널은 2023년 이후 어떤 수정이나 업데이트도 없었다. 새로운 시스템에서 호환성 문제가 생겨도 공식적인 해결책이 없으며, 유일한 대안은 계속 관리되는 커널로 바꾸는 것이다. TUN 모드도 마찬가지다. 오리지널 오픈소스 코드에는 TUN 자체가 없지만, mihomo는 TUN을 내장하고 system, gvisor, mixed 세 가지 스택을 선택할 수 있게 했다. 이 점이 많은 사용자가 이전을 결정하는 직접적인 이유이기도 하다.
mihomo로 옮길 때 바꿔야 할 것들
설정 구조는 대체로 호환된다. port, mixed-port, proxies, proxy-groups, rules의 작성 방식은 양쪽이 동일해서 예전 설정 대부분이 그대로 작동한다. 손을 대야 하는 부분은 다음과 같다:
- DNS 강화 모드: 최신 mihomo는 redir-host를 제거하고 fake-ip만 남겼다. 기존 설정의 enhanced-mode: redir-host는 fake-ip로 바꿔야 한다.
- 노드 필드: proxies의 interface-name과 routing-mark는 제거됐다. 그대로 두면 시작할 때 경고가 뜨거나 거부될 수 있으니 삭제하면 된다.
- 지역 데이터베이스: mihomo는 기본적으로 자체 geoip 데이터 파일을 사용하며 geo-update-interval로 자동 갱신을 지원한다. GEOSITE 규칙을 쓰려면 geodata-mode를 별도로 켜야 한다.
- 클라이언트 전용 필드: Clash for Windows 설정의 cfw-* 필드는 해당 클라이언트에만 쓰이는 값이라 클라이언트를 바꿀 때 옮겨 갈 필요가 없다.
구독 호환성은 한쪽으로만 매끄럽게 흐른다. 신규 프로토콜 노드(VLESS Reality, Hysteria2)는 mihomo 형식 구독에서만 나타나며, 기존 Clash 구독은 mihomo에서도 거의 그대로 쓸 수 있다. 즉 커널을 바꿔도 기존 구독이 사라지지 않고, 오히려 더 많은 노드를 쓸 수 있게 된다.
이전 전에는 반드시 백업
커널이나 클라이언트를 바꾸기 전에는 기존 설정 폴더를 백업해 두자. 특히 직접 손댄 규칙, 오버라이드 설정, 로컬 규칙 파일은 꼭 챙겨야 한다. 새 클라이언트에 처음 불러온 뒤에는 DNS와 규칙 항목을 하나씩 다시 확인하는 것이 좋다.
지금 쓰는 게 어느 커널인지 확인하는 방법
다음 세 가지로 확인할 수 있다:
- 클라이언트 화면: 설정 또는 정보 페이지에서 커널 버전을 확인한다. 2023년에 멈춘 v1.18.0이면 오리지널이고, 버전에 Meta나 mihomo 표기가 있고 날짜가 계속 갱신되면 mihomo다.
- 외부 컨트롤러: 브라우저에서 http://127.0.0.1:9090/version 에 접속한다. 반환된 JSON에서 meta 필드가 true면 mihomo다. 예:
{"version":"v1.19.0","meta":true}. - 명령줄: 커널 파일을 -v 옵션과 함께 직접 실행한다. 출력이 Mihomo Meta로 시작하면 mihomo다.
결론적으로 새로 설치한다면 mihomo를 내장한 클라이언트를 바로 고르면 된다. 본 사이트 다운로드 페이지에 있는 현행 클라이언트는 모두 이 조건을 충족한다. 예전 기기의 오리지널 커널은 비교용으로 남겨둘 수는 있지만, 신규 프로토콜, 새 규칙 문법, 최신 시스템 대응은 전부 mihomo 쪽에서만 업데이트된다.