Clashのルール・グローバル・DIRECTモードの違いと使い分け

Clashのルール・グローバル・DIRECTモードを通信経路から解説。普段の閲覧や一時的なトラブルシューティング、LANアクセスでの使い分けを紹介します。

プロキシの入口とモードの違いを把握する

Clashの「ルール」「グローバル」「DIRECT」は、通信がコアに入った後の処理方法を決めるもので、どのアプリが通信をコアに渡すかを決めるものではありません。PCでシステムプロキシだけを有効にしている場合、通常はシステムプロキシ設定に従うブラウザーやアプリの通信がClashに入ります。システムプロキシ設定を参照しないアプリは、そのまま直接インターネットに接続することがあります。TUNを有効にすると、クライアントがより多くの通信を取り込めますが、対象範囲はクライアントの設定、OSのルーティング、除外設定によって異なります。そのため、グローバルモードに切り替えても、端末上のすべての接続がプロキシを経由するとは限りません。

現在の状態は、次の2点を確認します。まずクライアントの「システムプロキシ」または「TUN」が有効かどうか、次に「モード」がルール・グローバル・DIRECTのどれに設定されているかを見ます。通信の入口を確認せずモードだけを変えると、「アプリの通信がClashに入っていない」状態を「ルールが機能していない」と誤解しがちです。以下で比較するのは、Clashに入った後の接続です。クライアントによってメニュー名は多少異なりますが、通常は「概要」または「プロキシ」画面でモードを切り替えられます。

3つのモードで通信がどう流れるか

モード コアに入った後の処理 用途
ルール(Rule) 設定内のルールを上から順に照合し、一致したルールに応じてポリシーグループやDIRECTなどに接続を振り分けます。 ドメインやネットワーク帯ごとに接続先を分けたい、普段のブラウジング。
グローバル(Global) 通常のルール一覧による振り分けは行わず、すべての接続をグローバルポリシーグループで選択中の接続先に送ります。 ルールが接続トラブルの原因か一時的に切り分けたいとき、または取り込まれた通信を短時間、同じ接続先にまとめたいとき。
DIRECT(Direct) コアに入った接続をDIRECTで処理し、端末のネットワークから接続先へ直接接続します。 ローカルネットワークとの接続を比較したいとき、またはプロキシノード経由の通信を一時的に止めたいとき。

ここでのDIRECTは接続先の一つであり、「Clashを終了する」という意味ではありません。DIRECTモードでもシステムプロキシやTUNが有効なら、通信はいったんクライアントを通り、その後端末のネットワークから送信される場合があります。グローバルモードも、グローバルポリシーグループで何を選んでいるかによって結果が変わります。プロキシノードを選んでいればそのノードに接続しますが、手動でDIRECTを選んでいる場合は直接接続になります。モードを確認するときは、ポリシーグループの現在の選択内容もあわせて確認してください。

ルールモード:普段使いではマッチ結果を確認

ルールモードでは、設定ファイルのrulesを記載順に照合し、通常は最初に一致したルールで接続先が決まります。たとえば、家庭用ルーターのアドレスが192.168.0.0/16の範囲内ならDIRECTに設定できます。特定のドメインを別のポリシーグループに振り分け、どのルールにも一致しない接続は最後のMATCHで処理できます。ルールモードは「すべてのサイトで最速のノードを自動選択する」機能ではありません。ドメインの振り分け先はサブスクリプションやローカル設定のルールによって決まり、プロキシノードの選択方法は該当するポリシーグループによって異なります。

以下は、ルールの並び順を確認するための抜粋です。ノード選択は同じ設定内のproxy-groupsに定義されている必要があります。この数行だけをコピーしても完全な設定にはなりません。設定と照らし合わせる際は、まずグループ名を確認し、その後でルールの順序を調整してください。

rules:
  - DOMAIN-SUFFIX,example.com,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - MATCH,ノード選択

このルールセットは、まずexample.comとそのサブドメインを処理し、次に一致するローカルネットワークのIPアドレスを処理します。それ以外の接続は「ノード選択」に渡します。no-resolveは、このIPルールの照合時に追加のドメイン解決を行わない指定です。すべてのDNSリクエストを無効にするという意味ではありません。ルール一覧の先頭にMATCHを置くと、それ以降のルールは照合されません。サブスクリプションで生成された設定を変更する前に、元の設定をバックアップしてください。サブスクリプションを更新すると、設定ファイルに直接加えた変更が上書きされる場合もあります。

ルールモードに切り替えた後、通信経路を確認する方法

  1. クライアントの「設定」で、前回のテストで使った空の設定ではなく、想定した設定が現在有効になっていることを確認します。
  2. 「概要」または「プロキシ」で「ルール」に切り替え、クライアントの「接続」または「ログ」を開いてから、確認したいアドレスにアクセスします。
  3. 該当する接続のマッチしたルール、ポリシーグループ、最終的なノードを確認します。DIRECTと表示された場合は、該当ルールとその順序を確認してください。接続記録がない場合は、システムプロキシまたはTUNの入口を確認します。

ログに表示されるドメイン名は、ブラウザーのアドレスバーと完全には一致しないことがあります。Webページは画像やAPIなど別のドメインにも接続するため、ページを開いたときに複数の接続が異なる経路を通るのは正常です。トラブルシューティングでは対象の接続を一つ選び、ページが開けるかどうかだけでルール全体を判断しないでください。

グローバルモード:短時間の比較に使う

「ルールモードでは開けないが、ノードを変えると開ける」場合は、一時的にグローバルモードに切り替え、グローバルポリシーグループで利用可能なノードを明示的に選んで、同じアドレスにアクセスします。グローバルモードでは使えるのにルールモードでは使えない場合は、どのグループにルールがマッチしたか、そのグループで何が選択されているか、ノードが利用可能かを優先して確認します。どちらのモードでも使えない場合は、サブスクリプション設定、ノードへの接続、システムプロキシ、TUNを確認してください。この場合、ルールを繰り返し変更しても、入口やノードの問題は解決しないことがあります。

グローバルモードはトラブルシューティングに向いていますが、LANへの通信まで必ずプロキシ経由にする設定ではありません。たとえば192.168.1.1のルーター管理画面やLANプリンターに接続する場合、グローバルポリシーグループの選択やクライアントのルート除外設定によって結果が変わることがあります。ローカル機器へ安定してアクセスするには、LAN向けのDIRECTルールを含むルールモードを普段使いし、実際の接続記録を確認するのがおすすめです。グローバルモードでのテスト後はルールモードに戻し、元のサイトに再度アクセスしてください。

DIRECTモード:ネットワークとノードの問題を切り分ける

DIRECTモードでは、Clashに入った接続をプロキシノード経由にせず、ローカルネットワークから接続します。ローカルでアクセスできるサイトの動作を比較する場合に便利です。たとえば、ルールモードで問題が発生したサイトがDIRECTに切り替えると使える場合は、マッチしたルール、ポリシーグループ、ノードをさらに確認できます。DIRECTにしても問題が続く場合は、まず端末のネットワーク、接続先アドレス、アプリ自体を確認してください。この比較だけで誤ったルールを特定できるわけではないため、「接続」や「ログ」の記録もあわせて確認します。

LANアクセスでは、アプリの通信がプロキシの入口を通っているかどうかも確認が必要です。ブラウザーがシステムプロキシ経由でルーターのアドレスにアクセスしている場合、DIRECTモードは比較テストに使えます。一方、別のアプリがもともとシステムプロキシを迂回しているなら、モードを切り替えても動作は変わりません。「DIRECTにしても変化がない」ことだけで、DIRECTモードが機能していないと判断しないでください。

利用場面に合わせて選び、接続記録で確認

  • 普段のブラウジング:ルールモードを選びます。よく使うサイトが想定したポリシーグループにマッチすることを確認し、LANアドレスは設定に従って直接接続します。
  • 特定サイトの一時的なトラブルシューティング:ルールモードでマッチした接続先を記録し、グローバルモードに切り替えてノードを一つ指定し、動作を確認します。比較後はルールモードに戻します。
  • ローカルネットワークのテスト:一時的にDIRECTモードに切り替え、ローカルネットワークから本来アクセスできるアドレスを開きます。テスト後は元のモードに戻します。
  • ルーターやプリンターへのアクセス:アドレスのネットワーク帯、LAN向けのDIRECTルール、接続記録を確認します。ローカルアドレス一つにアクセスするために、端末全体のモードを長時間切り替える必要はありません。

よくあるケースとして、ルールモードではブラウザーが正常に動く一方、ゲームやコマンドラインのプログラムが接続一覧に表示されないことがあります。この場合、プログラムの通信がそもそもコアに入っていない可能性があるため、3つのモードを切り替えても違いが出ないことがあります。まずプログラム独自のプロキシ設定を確認してください。より多くのアプリの通信を取り込む必要がある場合は、クライアントの説明に沿ってTUNの有効状態、システム権限、除外設定を確認します。TUNはコアに入る通信の範囲を変える機能で、ルール・グローバル・DIRECTはコアに入った後の処理を決めます。

モード選択は、「入口を確認する」「現在の設定を確認する」「モードを選ぶ」「接続記録を見る」の順に進めると整理できます。普段はルールモードを使い、問題が起きたときはグローバルモードとDIRECTモードで短時間の比較を行います。比較のたびに変更する設定は一つに絞り、対象のアドレス、マッチしたルール、最終的な接続先を記録すれば、問題が入口・振り分け・ノードのどこにあるかを判断しやすくなります。

クライアントのインストーラーを見る