Clashの3つのプロキシモード

Clashのmode設定をもとに、3つのモードで通信がどのように処理されるか、切り替え時の注意点、ルールモードでのMATCHルールの役割を解説します。

まず確認:通信の取り込みとプロキシモード

普段はルールで通信を振り分け、トラブル時は一時的にグローバルへ切り替え、端末から直接接続するときはDIRECTを選びます。この3つのモードが決めるのは、接続がClashのコアに入った後、どのロジックで出口を選ぶかです。どのアプリの通信をクライアントに取り込むかを直接決めるものではありません。

たとえば、ブラウザーがシステムプロキシ経由でクライアントに接続する場合や、アプリで本機の127.0.0.1:7890 HTTPプロキシを手動設定した場合、その通信がコアで処理されます。TUNモードを有効にすると別の方法で通信を取り込み、通常は仮想ネットワークインターフェースとルーティングを使って、より多くの通信を制御します。実際に取り込まれる範囲は、OSやルーティング、除外設定、権限にも左右されます。

以下の説明は、一般的なClashの設定仕様とClash Meta(mihomo)コアを対象としています。クライアントによって「プロキシモード」「動作モード」「モード」など表示名は異なりますが、ルール・グローバル・DIRECTの3項目は通常、同じmodeの値に対応します。

mode設定:3つのモードを比較

設定ファイルのトップレベルでは、modeはmixed-portやrulesなどと同じ階層に記述します。dnsやポリシーグループの中に入れないでください。以下はモードと待ち受けポートのみを示した例で、単独で動作するサブスクリプション設定ではありません。

mixed-port: 7890
mode: rule
log-level: info
画面上の名称設定値出口の選び方用途
ルールモードruleルールを上から順に照合し、最初に一致したルールの宛先へ接続普段の通信の振り分け、LANへの直接接続
グローバルモードglobal組み込みのGLOBALポリシーグループで選択接続先の比較テスト、一時的に出口を統一
DIRECTモードdirectDIRECTから接続ローカルネットワークとの比較、一時的な直接アクセス

画面でモードを切り替えると、通常はクライアントがコアの制御インターフェースを通じて実行中の状態を変更します。サブスクリプションファイルが直接書き換えられるとは限りません。設定の再読み込みやクライアントの再起動、サブスクリプション更新後に選択状態が維持されるかは、クライアントの保存方法や上書き設定によって異なります。既定値を固定したい場合は、クライアントの上書き設定を確認しましょう。次回の更新で置き換わるサブスクリプションのコピーだけを編集しないでください。

ルールモード:上から照合し、一致した時点で決定

ルールモードでは、コアがrulesの一覧を上から順に確認し、最初に一致したルールで宛先が決まります。宛先にはDIRECTやREJECTのほか、ポリシーグループ名も指定できます。つまり「ルールモード」は「すべてプロキシ経由」という意味ではなく、接続ごとに異なる処理を設定できます。

見やすいルール設定例

以下の例では、設定内に「プロキシ選択」というポリシーグループがすでにあるものとします。この名前は実際のproxy-groups内のnameと完全に一致させてください。この数行だけではプロキシノードやポリシーグループは作成されません。

mode: rule

rules:
  - DOMAIN-SUFFIX,example.com,プロキシ選択
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
  - MATCH,プロキシ選択
  • DOMAIN-SUFFIX,example.comは、そのドメインとサブドメインに一致します。ただし、コアが接続先のドメイン情報を取得できる必要があります。
  • 3つのIP-CIDRルールは、一般的なIPv4プライベートアドレス範囲を対象とします。ローカルサービスへの接続をDIRECTに振り分けたい場合に適しています。
  • no-resolveは、このIPルールの判定のために追加のドメイン解決を行わないことを示します。接続全体でDNSが不要になるわけではありません。
  • 最後のMATCHは、それまでのルールに一致しなかった接続を受け取り、「プロキシ選択」に渡します。

ルール一覧が「より具体的なもの優先」で自動的に並べ替えられることはありません。MATCH,DIRECTを先頭に置くと、後続のドメインルールは照合されません。同様に、範囲の広いルールを具体的なルールより前に置くと、後者が機能しないことがあります。

ポリシーグループの選択も最終的な出口に影響する

ルールが「プロキシ選択」に一致しただけでは、処理はまだ終わりません。そのグループでDIRECTが選ばれていれば、接続は最終的に直接接続されます。別のポリシーグループが選ばれている場合は、参照先をたどって出口を確認する必要があります。「プロキシルールに一致したのに想定したノードを通らない」ときは、モードボタンだけでなく、一致したルール、宛先グループ、グループ内の現在の選択を確認してください。

MATCHルール:分類されなかった接続の行き先を決める

MATCHにはドメインやIP、ポートの条件がなく、その行まで到達したすべての接続に一致します。設定の動作を分かりやすくするため、通常はルール一覧の末尾に置きます。失敗時の再試行機能ではなく、ノードに接続できないときに自動でDIRECTへ切り替えることもありません。

ルールの記述分類されなかった接続の結果確認するポイント
MATCH,プロキシ選択指定したポリシーグループに渡すグループが存在するか、現在の選択先が利用可能か
MATCH,DIRECT端末から宛先へ直接接続ローカルネットワークから対象サービスに接続できるか
MATCH,REJECT前のルールで許可されなかった接続を拒否必要な許可ルールが抜けていないか

「既知のローカルサービスはDIRECT、それ以外はプロキシグループへ」としたい場合は、前述の例の構成を使えます。「明示したドメインだけプロキシ経由にし、それ以外はDIRECT」とする場合は、最終行をMATCH,DIRECTに変更します。違いは既定の出口であり、ルールモードそのものではありません。

グローバルモード:出口の比較テストに便利

modeをglobalにすると、コアに取り込まれて処理される接続は、通常のrulesを順に照合するのではなく、組み込みのGLOBALポリシーグループに渡されます。クライアントのプロキシ画面で、グローバルグループの現在の選択先を確認してください。モードを切り替えるだけでグローバルグループを確認しなければ、想定したノードが出口になるとは限りません。

グローバルグループで選べる内容は、コアやクライアントの表示方法によって異なります。現在の選択先がDIRECTなら、画面に「グローバル」と表示されていても、最終的には直接接続されることがあります。グローバルモードは出口を一括して選ぶ方式を示すもので、必ず遠隔プロキシを使うという保証ではありません。

ルールモードでは失敗し、グローバルモードでは成功する場合の確認方法

  1. 同じ宛先アドレスを使い、まずルールモードで新しい接続を開始します。接続画面で一致したルール、ポリシーチェーン、出口を記録してください。
  2. グローバルモードに切り替え、GLOBALで先ほどと同じテスト用ノードを明示的に選んでから、新しい接続を開始します。
  3. グローバルモードでのみ成功する場合は、まずルールの順序、ルールセットが読み込まれているか、ルールモードで使うポリシーグループの選択先を確認してください。
  4. どちらのモードでも失敗する場合は、ルールの調整を続けるのではなく、ノードの状態、端末からの接続方法、DNS、接続先サービスを確認してください。

グローバルモードにも利用上の注意点があります。通常はDIRECTのルールで処理されるLAN通信も、切り替えると通常の振り分けルールが適用されなくなります。プリンターやNAS、社内サイトで問題が起きた場合は、まずルールモードに戻して接続経路を確認してください。グローバルモードを万能な解決策として使い続けないようにしましょう。

DIRECTモード:クライアントを終了するわけではない

mode: directでは、コアが処理する接続はDIRECT経由で宛先にアクセスします。この状態でも、クライアントが本機のポートを待ち受けたり、システムプロキシの通信を受け取ったり、TUNを動作させたりする場合があります。コアのDNSモジュールが引き続き名前解決に関与することもあります。クライアントの終了、システムプロキシの無効化、TUNの停止とは別の操作です。

この違いはトラブルシューティングで重要です。DIRECTモードを使えば「遠隔プロキシ経由」と「端末から直接接続」の動作を比較できますが、クライアントの通信制御が完全に影響していないことを単独で証明できるわけではありません。OS本来のネットワーク経路をテストするには、システムプロキシとTUNをそれぞれ無効にし、アプリに手動でプロキシアドレスが設定されていないことも確認してください。

DIRECTモードが役立つ3つのケース

  • ローカルサービスのテスト:現在のネットワークから接続先へ直接アクセスできるか確認し、必要に応じてDIRECTルールを追加します。
  • ノードや回線の比較:同じアドレスへの新しい接続をDIRECTとプロキシ経由でそれぞれ行い、画面上の速度テストだけでなく、接続できるかどうかを比較します。
  • 一時的に既定の出口へ戻す:クライアントの動作状態は保ったまま、コアに取り込まれた接続を一時的に宛先へ直接アクセスさせます。

DIRECTモードでは通常のルール一覧による振り分けも行われないため、一覧内のREJECTルールによるルールベースのブロックは適用されません。こうしたルールに依存したアクセス制限がある場合は、切り替えによる動作の変化を事前に確認してください。

システムプロキシ・TUN・DNSの確認手順

「モードを切り替えても変化がない」ときは、通信の取り込み、モード、ルール、出口の順に確認しましょう。まず接続がクライアントの接続画面に表示されるかを確かめ、その後に照合情報を確認すると、何度も再起動するより原因を絞り込みやすくなります。

  1. 接続先ポートを確認:実際のmixed-portが7890なら、アプリには対応する本機のプロキシアドレスを設定します。ポートを7891に変更したのに、アプリが7890を指定していると、接続に失敗したり別のプロセスにつながったりすることがあります。
  2. 現在のモードを確認:ディスク上のmodeだけで判断せず、クライアントのモード画面で実際に選択されている項目を確認してください。実行中の状態は画面から変更されている場合があります。
  3. ポリシーチェーンを確認:ルールモードでは一致したルールとポリシーグループ、グローバルモードではGLOBAL、DIRECTモードではDIRECTが使われているかを確認します。
  4. 接続を作り直す:モードの切り替えが反映されるのは、新しい接続が中心です。実行中のダウンロードや動画、長時間接続はすぐに切り替わらないことがあります。テスト中のページを閉じて開き直し、必要なら対象の接続だけを終了してください。
  5. 名前解決を個別に確認:モードを切り替えても、すべてのDNS設定が自動的に変更されるわけではありません。アプリの暗号化DNS、システムキャッシュ、コアのDNS、TUNによるDNSの取り込みが、最終的に取得されるIPアドレスに影響することがあります。

普段のモード選択と復旧時の確認

サブスクリプション、ポリシーグループ、ルールを適切に設定したクライアントでは、通常、ルールモードが日常利用の既定値として適しています。LANへの直接接続、指定サイトへのプロキシ接続、必要な拒否ルールを保てます。グローバルモードは短時間の出口確認に、DIRECTモードはローカルネットワーク経路の比較に便利です。

  • 普段の利用:ルールモードを選び、末尾のMATCHが用途に合った宛先を指定していることを確認します。
  • 振り分けの問題:一時的にグローバルモードへ切り替え、比較対象のノードを明示的に選びます。違いを確認したら、ルール一覧に戻って原因を調べてください。
  • ネットワークの基準確認:まずDIRECTモードで比較します。通信の取り込みによる影響も除外する必要があれば、システムプロキシとTUNを無効にしてテストしてください。
  • テスト終了後:元のモードとポリシーグループの選択に戻し、LAN上のサービスやよく使うサイトに接続できるか再確認します。一時的な状態をそのまま使い続けないようにしましょう。

次の2点を分けて考えると混乱を防げます。システムプロキシやTUNは通信をクライアントへ取り込む方法を決め、modeは取り込んだ後の出口の選び方を決めます。ルールモードではさらに「上から順に照合し、MATCHで残りを処理する」と確認すれば、モード切り替えや通信の振り分けに関する問題の多くを理解できます。

Clashをダウンロードプラットフォームに合ったクライアントを選択