結論:旧設定は多くの場合移行できるが、新機能は互換性に注意
サブスクリプションが一般的なShadowsocks、VMess、Trojanのノードで、ルールも DOMAIN-SUFFIX、IP-CIDR、MATCH が中心なら、mihomoへの移行でYAML全体を書き直す必要は通常ありません。確認が必要なのは、ノード固有の拡張パラメーター、ルールセットの形式、DNS設定、そしてクライアントが手動変更した項目を上書きしないかどうかです。
mihomoはClash Metaプロジェクトの後継名称で、Clashの設定体系を引き継ぎながら、プロトコルやトラフィック処理機能を拡張しています。mihomoはカーネルであり、特定のGUI付きClashクライアントを指すものではありません。クライアントはサブスクリプション管理やシステムプロキシの切り替え、設定の統合を担当し、カーネルは接続の確立、ルールの適用、DNS処理を担います。画面を提供するアプリを変えただけでは、実際に動作するカーネルまで変わったとは限りません。
オリジナルプロジェクトはすでにメンテナンスを終了しています。新しいプロトコルや継続的に更新されるルール機能、最近のOSへの対応が必要な場合は、現在もメンテナンスされているカーネルを優先的に検討しましょう。ただし、カーネルを更新してもすべてのノードが速くなるわけではありません。回線品質、サーバー設定、ネットワークのパケットロス、実際に選択された出力先のポリシーも接続品質に影響します。
プロトコル対応:まずノードの種類、次に接続パラメーターを確認
| ノード・機能 | オリジナルClashオープンソースカーネル | mihomoへの移行時の確認事項 |
|---|---|---|
| Shadowsocks、VMess、Trojan | 一般的な設定に対応 | 暗号化方式、トランスポート層、TLSパラメーターを確認 |
| VLESS、Reality | 新しい組み合わせには非対応 | サーバーが求めるflow、フィンガープリント、公開鍵、short-idを確認 |
| Hysteria2、TUIC | 非対応 | UDPの疎通とプロトコル固有の認証項目を確認 |
| 新しい暗号化方式とトランスポート拡張 | 旧バージョンの制約あり | アルゴリズム、トランスポートの種類、カーネルのバージョンを確認 |
「VLESS対応」でも、すべてのVLESSリンクをそのまま使えるわけではない
ノードの type は確認項目のひとつにすぎません。VLESSとRealityの組み合わせでは、servername、client-fingerprint、reality-opts 内の公開鍵や短い識別子も確認が必要です。Visionを使う場合は flow も確認してください。これらのパラメーターはサーバー側の設定と一致させる必要があり、別のノードからコピーして使い回すことはできません。
- 「未対応のプロキシタイプ」と表示される:クライアント名やサブスクリプションのファイル名だけで判断せず、実際に動作しているカーネルがmihomoか確認してください。
- 設定の読み込みは成功するが、TLSハンドシェイクに失敗する:システム時刻、SNI、証明書のドメイン名、Realityのパラメーターを確認してください。まず証明書検証を無効にするのは避けましょう。
- Hysteria2またはTUICがタイムアウトする:使用中のネットワークとサーバーがUDP通信を許可しているか確認してください。ほかのTCPノードでブラウザーからWebページを開けても、UDP経路が正常とは限りません。
サブスクリプション変換にも限界があります。変換ツールで設定項目の構造を変更することはできますが、Hysteria2サーバーをオリジナルClash対応のVMessサーバーに変えることはできません。クライアントが新しいプロトコルを認識しない場合は、互換性のあるカーネルに切り替えるか、サービス提供元が明示的に対応している別のノードを使ってください。
ルール拡張:基本構文は引き継げるが、ルールセットの形式は要確認
Clashの一般的なルールは上から順に評価され、最初に一致したルールで出力先のポリシーが決まります。移行時は既存ルールの順序を維持し、一度に多数のルールを変更しないようにしましょう。特に、ルールが参照するポリシーグループが実際に存在することを確認してください。最後に MATCH を置き、それまで一致しなかった接続を処理します。
rules:
- DOMAIN-SUFFIX,example.com,Proxy
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- MATCH,Proxy
ここでの Proxy は、設定内に存在するポリシーグループまたは出力先の名前である必要があります。example.com は構文例として使われる予約済みのサンプルドメインです。no-resolve は、このIPルールの評価時にドメイン名の名前解決を行わない指定であり、カーネル全体のDNSを無効にするものではありません。接続に宛先IPが含まれている場合は、そのIPで引き続きマッチングできます。
rule-providersとRULE-SETは別の役割
rule-providers はルールの読み込み元と解釈方法を定義し、RULE-SET はメインのルール一覧からそのルールセットを参照します。mihomoはルールプロバイダーに対応し、さらに多様なルールの組み合わせやマッチング機能を備えています。Premiumを使っていた場合は、その一部をすでに利用していることもあります。
rule-providers:
private-net:
type: file
behavior: classical
format: yaml
path: ./rules/private.yaml
rules:
- RULE-SET,private-net,DIRECT
- MATCH,Proxy
対応する ./rules/private.yaml ファイルには、次のような内容を記述できます。相対パスは通常カーネルの作業ディレクトリを基準にするため、GUIアプリのディレクトリとは異なる場合があります。ファイルが見つからない場合は、まず起動ログに記録された作業パスを確認してください。
payload:
- IP-CIDR,10.0.0.0/8,no-resolve
- IP-CIDR,172.16.0.0/12,no-resolve
- IP-CIDR,192.168.0.0/16,no-resolve
behavior: classicalは、上記のIP-CIDRのようなルールタイプ付きの項目を受け付けます。behavior: domainとbehavior: ipcidrにはそれぞれ専用の形式を使います。classical形式のルールを行単位でそのまま混在させないでください。- mihomoのMRSバイナリルールセットはdomain型またはipcidr型向けです。任意のclassical形式のYAMLは、拡張子を変えただけではMRSとして使えません。
- 論理ルールやプロセスマッチングなどの拡張機能は、ひとつずつ動作を確認してください。プロセスの識別はOS、権限、トラフィックの取り込み方法にも左右されます。
移行後に多くのWebサイトがフォールバック用ポリシーに振り分けられる場合は、まずルールセットの読み込み状況を確認し、その後ルールの順序を確認してください。ルールセットのURLからファイルを取得できても、内容の形式が behavior と一致するとは限りません。
DNSの違い:基本項目を引き継ぎ、名前解決と出力先を分けて確認
オリジナルClashには、DNSモジュールやFake-IPなどの基本機能がすでにあります。mihomoはこれらに加え、ドメインごとに使用するリゾルバーを選ぶ設定や、ノードのドメイン名を解決する方法などを拡張しています。DNSが正しいアドレスを返すことと、接続が正しいポリシーを通ることは別の問題です。前者は接続先を決め、後者はどの出口から接続するかを決めます。
旧設定から引き継げる項目
一般的な dns.enable、listen、enhanced-mode、fake-ip-range、nameserver は移行の出発点として引き継げます。以下は理解しやすいように抜粋したDNS設定で、ノードやポリシーグループは含まれておらず、システムDNSを自動的に変更するものでもありません。
dns:
enable: true
listen: 127.0.0.1:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 223.5.5.5
- 119.29.29.29
1053 はこの例でのローカルDNS待ち受けポートです。通常のシステムDNS設定ではサーバーアドレスを指定するだけで、このポートを併記することはできません。システムの名前解決を取り込むには、別途フォワーディングを設定するか、対応する環境でTUNのDNSハイジャックを有効にしてください。198.18.0.1/16 はFake-IPのマッピング用で、リモートWebサイトの実際のグローバルIPアドレスではありません。
新機能を一度にすべて有効にしない
- nameserver-policy:特定のドメインやドメイン群に使うリゾルバーを指定します。社内ドメインとインターネット上のドメインを分けて処理する場合に便利です。
- proxy-server-nameserver:プロキシノードのサーバードメイン名を解決する経路を指定します。ノードのアドレスを解決するために、まだ確立されていないプロキシに依存する事態を避けられます。
- fake-ip-filter:互換性の問題が確認されているドメインをFake-IPの対象から除外します。LAN内のサービスひとつのために、ルーティング全体を無効にする必要はありません。
検証時はクライアントのDNSログ、接続詳細に表示されるドメイン名、最終的に選択されたポリシーをそれぞれ確認します。ブラウザー内蔵のセキュアDNSは独自の名前解決経路を使う場合があります。カーネルのDNSを変更しただけでは、ブラウザーのすべての問い合わせがそこを通るとは限りません。
TUNとトラフィックのスニッフィング:取り込み範囲とルールモードは別
システムプロキシは、システムのプロキシ設定を参照するアプリで主に使われます。TUNは仮想ネットワークインターフェース経由でトラフィックを取り込み、システムプロキシを参照しないアプリにも対応できます。TUNはトラフィックをカーネルに取り込む方法であり、ルールモードは取り込んだトラフィックの出力先を決める方法です。両者は二者択一ではありません。
オリジナルのオープンソースカーネルとPremiumのTUN機能を混同しないでください。mihomoに移行した後も、tun の設定をコピーするだけですべてが有効になるとは限りません。クライアントによってはサービスのインストールや管理者権限が必要な場合があり、GUIが該当項目を生成して上書きすることもあります。
- まずシステムプロキシでサブスクリプション、ノード、ルールを確認し、設定の読み込みに成功するまではTUNを追加しないでください。
- デフォルトルートの競合を避けるため、ほかのVPNや仮想ネットワークアダプターを無効にして比較してください。
- TUNを有効にした後、ログで仮想インターフェースとルートの作成結果を確認し、権限エラーが発生していないことを確かめてください。
- LANプリンター、NAS、社内ネットワークのアドレスをテストし、必要に応じて明示的なバイパスルールやルート除外を設定してください。
mihomoのトラフィックスニッフィングは、一部のHTTP、TLS、QUICトラフィックからホスト情報を取得し、ドメインルールのマッチングを補助できます。ただし、HTTPSの内容を復号する機能ではなく、すべての接続を識別できるわけでもありません。暗号化されたClientHelloなどの仕組みにより、確認できる情報が制限される場合があります。スニッフィングは具体的な振り分け要件に合わせて有効にし、あらゆるDNS問題への万能策として扱わないでください。
旧サブスクリプションの移行:設定の出所ごとに確認
| 設定項目 | 基本的な対応方法 | 必ず確認する点 |
|---|---|---|
| mixed-port、mode、log-level | まずはそのまま引き継ぐ | ポートの競合、クライアントによる値の上書き |
| proxies、proxy-groups | 基本構造を維持 | プロトコル項目、グループ内のノード名、テスト用URL |
| rules | 一般的なルールを引き継ぐ | 参照名、順序、MATCHの位置 |
| rule-providers | 形式を確認してから再利用 | behavior、format、ファイルパス、読み込み結果 |
| dns、tun | 段階的に有効化 | システム権限、ルート、名前解決の依存関係、GUIによる設定統合 |
| Premiumのscriptスクリプトルール | そのまま互換性があると判断しない | mihomo対応のルールまたはルールセットに書き換える |
実際の移行手順
- 元の設定をバックアップ:サブスクリプションの原文と、クライアントが現在生成している実行用設定を別々に保存します。両者は異なる場合があるため、問題の調査時にサブスクリプションの編集画面だけを見ないでください。
- カーネルの種類を確認:クライアントのカーネル情報または起動ログで名前とバージョンを確認します。単体のバイナリを使っている場合は、
mihomo -vを実行してバージョンを確認してください。 - 先に設定をテスト:設定ファイルのあるディレクトリで
mihomo -t -f ./config.yamlを実行します。Windowsの単体実行ファイルでは、.\mihomo.exe -t -f .\config.yamlを使用できます。 - まずは接続経路をひとつだけ確認:動作確認済みのノードをひとつ選び、システムプロキシを有効にして、ルールモードでテストページにアクセスします。
- 拡張機能をひとつずつ戻す:ルールセット、DNSポリシー、TUNの順に有効にし、変更する設定は毎回ひとつに絞ってログを確認します。
- 最後にサブスクリプションを一度更新:カスタムルールが失われていないことを確認してから、自動更新と起動時の自動起動を設定します。
設定テストに成功しても、カーネルが設定を読み込めたことが分かるだけです。サブスクリプションのノードがオンラインであること、ルールセットのダウンロードが成功すること、システムプロキシが有効であることまでは保証されません。GUI付きクライアントは起動前に設定を統合することもあります。そのため、コマンドラインでテストするファイルは、クライアントが実際に使うファイルとできるだけ同じものにしてください。
移行後の確認:ポート、ルール、DNSを個別にチェック
実行用設定の mixed-port が 7890 の場合は、プロキシを明示して接続テストを行えます。システムプロキシの設定が正しいかどうかという要因を切り分けられます。ポート番号はクライアントに表示されている実際の値に置き換えてください。
curl -I --proxy http://127.0.0.1:7890 https://example.com
Windows PowerShellでは curl.exe を使うと、環境によって同じ名前のコマンドに割り当てられたエイリアスによる引数の解釈への影響を避けられます。このテストで確認できるのは今回のHTTPプロキシリクエストのみで、UDP、TUN、ほかのアプリの動作は確認できません。
- 接続が拒否される:まずカーネルが起動しているか、ローカルポートの指定が正しいか、ほかのプロセスがポートを使用していないか確認してください。
- プロキシには接続できるが、リクエストがタイムアウトする:選択中のノード、ノードのドメイン名解決、サーバーへの到達性を確認してください。
- ページは開くが、出口が想定と違う:接続詳細で、適用されたルール、ポリシーグループの現在の選択先、グローバルモードが実際に有効かを確認してください。
- 特定のアプリだけ失敗する:そのアプリがシステムプロキシを参照するか確認してください。参照しないことが確かな場合は、サブスクリプションを何度も変更するのではなく、TUNの利用を検討しましょう。
選び方はシンプルです。VLESS Reality、Hysteria2、TUIC、またはより細かなルールやDNS制御が必要なら、これらに対応したmihomoクライアントを使いましょう。基本的なサブスクリプションを移行する場合は、まず安定している設定を引き継ぎます。カーネルの互換性、設定の統合、ネットワークの疎通を分けて確認すると、設定を一度にすべて置き換えるより問題を特定しやすくなります。
各項目の詳細はClash設定ガイドをご覧ください。ポートの競合、システムプロキシが効かない、権限の問題などは、よくある質問を参考に順番に確認できます。