mihomo カーネルと従来版 Clash の違い:ルール記法・DNS・TUN の新機能

mihomo(Clash Meta)カーネルと従来版カーネルの主な違いを解説。新規プロトコル対応、ルールセットと GeoSite の使い方、DNS 振り分け、TUN モードの実装、旧設定移行時の注意点を紹介。

背景:なぜ2つのカーネルが存在するのか

Clash プロジェクトの元々のカーネルリポジトリは原作者が管理しており、プロトコル対応やルール記法は比較的保守的で、安定しているものの機能が限られたバージョンに長く留まっていました。これをベースにコミュニティが Clash Meta ブランチを立ち上げ、新しいプロトコルやルールタイプ、より完成度の高い DNS/TUN 実装を継続的に追加し、その後独立して mihomo という名称に変更され、事実上のコミュニティ主流版となりました。現在、各クライアント(本サイトに掲載されている大半の Windows、macOS、Android 版を含む)は mihomo をデフォルトまたは選択可能なカーネルとして採用しており、従来版カーネルの更新頻度は明らかに鈍化しています。

両者の違いを理解しておくと、「あるルールが効かない」「特定のプロトコルに接続できない」「設定ファイルを新しいクライアントに移したらエラーになる」といった問題の原因判断に役立ちます——多くの場合、原因は設定ファイルの記述ミスではなくカーネルの差異にあります。

プロトコル・機能対応の違い

従来版カーネルが対応するプロトコルは、Shadowsocks、ShadowsocksR、VMess、Trojan、Snell といった初期の主流プロトコルにほぼ固定されています。mihomo はこれに加えて以下の機能を補完しています:

サブスクリプションのノードに vlesshysteria2tuic といったフィールドがあり、クライアントが「ノードタイプ非対応」と表示する場合、多くは従来版カーネルを使用していることが原因です。mihomo カーネル版に切り替えれば解決し、サブスクリプションの再取得やノードの再生成は不要です。

ルール記法と GeoSite/GeoIP の使い方の違い

従来版カーネルのルールタイプは DOMAINDOMAIN-SUFFIXDOMAIN-KEYWORDIP-CIDR と内蔵の GEOIP に限られ、ルールセットは完全なリストとして設定に書き込むか個別にルールファイルを管理する必要があり、更新・保守のコストが高めでした。mihomo はより細かいルールタイプと効率的なルールセット機構を導入しています:

rule-providers:
  reject:
    type: http
    behavior: domain
    url: "https://example-ruleset/reject.txt"
    path: ./ruleset/reject.yaml
    interval: 86400

rules:
  - RULE-SET,reject,REJECT
  - GEOSITE,category-ads-all,REJECT
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

rule-providers はリモートから定期的に取得してローカルにキャッシュする機能に対応し、GEOSITE ルールはコンパイル済みのドメイン分類データベース(category-ads-allcn など)を直接参照できるため、ドメインを手作業で列挙する必要がありません。こうした記法は従来版カーネルでは認識されず、設定ファイルに rule-providersGEOSITE が含まれているのに従来版カーネルで実行すると、構文エラーやルール不発の原因になります。ルールが効かない問題を調査する際、まず確認すべき点です。

DNS 振り分け戦略の比較

従来版カーネルの DNS モジュールは機能がシンプルで、通常は上流サーバーを1グループしか設定できず、宛先ドメインごとの細かい振り分けが難しく、「国内ドメインが海外の DNS で解決されアクセスが遅くなる」「DNS が実際の所在地を漏らしてしまう」といった問題が起きやすくなります。mihomo の DNS モジュールはポリシーごとのグループ分けに対応しています:

dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  nameserver-policy:
    "geosite:cn": [223.5.5.5, 119.29.29.29]
    "geosite:geolocation-!cn": [https://1.1.1.1/dns-query]
  fake-ip-filter:
    - "*.lan"
    - "+.local"

nameserver-policy では GeoSite の分類ごとに解析サーバーを指定でき、国内ドメインは国内 DNS、海外ドメインは暗号化 DNS で解決することで、不要な迂回を根本から減らせます。enhanced-mode も従来版のシンプルな実装から拡張され、より安定した fake-ip モードが利用可能になり、TUN との併用時の互換性も向上しています。

従来版カーネルの設定を mihomo に移行する場合、DNS セクションの旧フィールド(初期バージョンで使われていた dns.fallback の単純なリストなど)は新しい記法で書き直すことを推奨します。旧ファイルをそのまま流用すると、エラーは出ないのに実際には機能していないケースがあります。

TUN モードの実装の違い

TUN モードは Clash が仮想ネットワークアダプタとしてシステム全体の通信を引き受ける仕組みで、アプリ層のシステムプロキシ設定に依存しません。プロキシプロトコルに対応していないアプリ(ゲームや一部の CLI ツール)では特に重要です。従来版カーネルの TUN 実装は登場が遅く、設定項目も少なく、プラットフォーム対応も限定的で、初期は主に Linux でのみ利用可能で、Windows/macOS のサポートは不完全でした。

mihomo の TUN モジュールはネットワークスタックの処理ロジックを書き直しており、よく使われる設定は以下の通りです:

tun:
  enable: true
  stack: system
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

stacksystemgvisor など異なるネットワークスタック実装を選択でき、互換性と性能を両立できます。auto-routeauto-detect-interface はルーティングテーブルの自動設定と出口インターフェースの自動検出を行い、手動でのルート設定の手間を減らします。Windows、macOS、Android クライアントの TUN(仮想ネットワークアダプタ/VPN モードとも呼ばれる)機能は、現在ほぼすべて mihomo カーネルの上に構築されており、これもカーネル版を選ぶ際に mihomo を優先すべき直接的な理由の一つです。

旧設定を mihomo に移行する際の注意点

従来版カーネルの設定ファイルを mihomo カーネルに移行する場合、mihomo は従来版の記法に対して下位互換性を保っているため、大半はそのまま利用できます。ただし、いくつか注意すべき点があります:

  1. 廃止されたフィールド名を使っていないか確認する。バージョン更新の過程で名称が変更された策略グループのパラメータなどがあり、最新のサンプル設定と1つずつ照合するとよい;
  2. ルールの順序に注意する。従来版の設定では MATCHFINAL を末尾に置いてフォールバックとするのが一般的で、mihomo でもこのルールは末尾に残しておく必要があり、そうしないと以降のルールが無視される;
  3. 策略グループの type フィールドには mihomo で smartload-balance などの新しい選択肢が追加されている。従来版が認識しない新しいタイプを誤って旧カーネルの設定に書くと起動失敗の原因になる;
  4. 設定でリモートのルールセットや GeoSite/GeoIP データファイルを参照している場合、mihomo で初回実行する際にネット接続してダウンロードする必要がある。オフライン環境ではあらかじめローカルファイルを用意しておくこと。

総合的に見て、mihomo は現在ほとんどのクライアントで既定の選択となっています。追加されたプロトコル、より細かいルール記法、分類ごとの DNS ポリシー、より完成度の高い TUN 実装は、いずれも従来版カーネルが短期間で追いつくのが難しい差です。特別な互換性の要件がない限り、日常利用では mihomo カーネルを統合したクライアント版を選び、設定ファイルは新しい記法に段階的に調整していけば十分で、旧来の書き方を無理に残す必要はありません。

Clash をダウンロード