mihomo(Clash Meta)カーネルの特徴とClash無印版との違い
mihomoカーネルはClash無印版と比べて何が違うのか。新プロトコル対応、ルール機能の強化、性能差、移行時の注意点まで、2つのカーネルの関係と選び方を1本でまとめて解説する。
2つのカーネルの関係とは
無印版のClashはDreamacro氏がGo言語で開発し、GPL-3.0ライセンスでオープンソース公開されていたプロジェクトだ。2023年11月、作者はリポジトリをアーカイブして削除し、開発は停止。バージョンは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カーネルで、クライアント自体もすでに更新が止まっている。クライアントを選ぶ際は、見た目の違いより「どのカーネルを積んでいるか」のほうが重要な分かれ道だ。
対応プロトコル:出口プロトコルに1世代分の差
オープンソース版Clashが対応する出口プロトコルは、2023年以降ずっと変わっていない。Shadowsocks、ShadowsocksR、VMess、Trojan、Snell、SOCKS5、HTTPのみだ。mihomoはこれに加えて、この3年ほどで登場した新しいプロトコルに対応している。
- VLESS(XTLS Visionフロー制御・Reality偽装トランスポート対応)
- HysteriaおよびHysteria2(QUICベースの輻輳制御プロトコル)
- TUIC(QUIC系のもう1つの実装)
- 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のルールは、設定ファイルに1行ずつ書き込む静的な項目で、種類はDOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、MATCHなど。広告ブロックリストを更新したい場合も、設定ファイルをまるごと入れ替えるしかない。
mihomoはルールシステムを3層に拡張している。
- RULE-SETルールセット:rule-providersでリモートまたはローカルのルールファイルを参照する仕組み。behaviorはdomain、ipcidr、classicalの3種類があり、interval設定で自動更新できるため、設定ファイルを手動で入れ替える必要がない。
- GEOSITEカテゴリ分類:geodata-modeを有効にすると、GEOSITEルールでサイトのカテゴリデータベースにマッチさせられる。国単位のGEOIPよりはるかに細かい粒度で振り分けが可能。
- 論理ルールとサブルール:AND、OR、NOTで複数条件を1つのルールに組み合わせられる。SUB-RULESを使うと、特定条件に合致した通信を2段目のルールチェーンに渡してさらに振り分けできる。
典型的な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方式のルールセットは内部でインデックス最適化されているため消費量がずっと少ない。ルールセットを選ぶ際はこの2種類を優先するのが、メモリを抑える効果的な方法だ。
無印版カーネルは2023年以降、修正も更新も一切行われていない。新しいOSで互換性の問題に遭遇しても公式の解決策はなく、唯一の対処法は開発が続いているカーネルへの移行だ。TUNモードも同様で、無印版のオープンソースコードにはそもそもTUNが存在しないが、mihomoはTUNを内蔵し、system・gvisor・mixedの3種類のスタックから選べる。これも多くのユーザーが移行を決める直接のきっかけになっている。
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とルールの項目を1つずつ確認するとよい。
今使っているのがどのカーネルか確認する方法
確認できる方法は3つある。
- クライアントの画面:設定または「About」ページでカーネルのバージョンを確認する。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を内蔵したクライアントを選べば間違いない。当サイトのダウンロードページに掲載している現行クライアントはいずれもこの条件を満たしている。古い機器の無印版カーネルは比較用に残しておいてもよいが、新プロトコル、新ルール文法、新OSへの対応はすべてmihomo側でしか更新されない。