Clashの3つのモードの違い
Clashのルール・グローバル・DIRECTモードの仕組みを通信経路から解説。Web閲覧・ゲーム・仕事での使い分けと切り替え方法も紹介します。
普段はルール、切り分けにはグローバル、直通確認にはDIRECT
普段使いには、ルールモードが適しています。プロキシが必要な通信は対応するポリシーに振り分け、ローカルネットワークや指定サイト、社内サービスにはルールに従って直接接続できます。グローバルモードは、特定のプロキシ出口から目的のサービスにアクセスできるかを短時間で確認する場合に便利です。DIRECTモードは、ローカルネットワークが正常かどうかの確認に使えます。3つのモードは速度や安全性のランクではなく、カーネルが接続先への経路を決める方法の違いです。
モードの違いを理解するには、まず前提を確認しましょう。ここで扱うのは、Clashまたはmihomoのカーネルに取り込まれた通信です。アプリがシステムプロキシを使わず、TUNなどの方法でも通信を捕捉されていない場合、グローバルモードに切り替えても自動的にプロキシ経由にはなりません。
| モード | 出口の決まり方 | 主な用途 |
|---|---|---|
| ルール Rule | ルールを上から順に照合し、一致したルールのポリシーまたはポリシーグループに渡します。 | 普段のWeb閲覧、ローカルサービスと外部サービスの振り分け。 |
| グローバル Global | 通常は組み込みのGLOBALポリシーグループに渡し、グループで現在選択されている出口を使います。 | ノードの検証、一時的に出口を統一する場合、切り分け。 |
| DIRECT(直結) | プロキシノードを出口に使わず、この端末のネットワークから接続先へ直接接続します。 | ローカルネットワークの確認、プロキシ出口の一時停止。 |
ルールモード:照合順で出口が決まる
ルールモードでは、設定内のrulesを上から順に照合し、一致すると通常は後続のルールを調べません。ルールによって、通信をDIRECT、拒否ポリシー、特定のノードやポリシーグループに振り分けられます。ルールモードだからといって「中国本土の通信は直結、それ以外はすべてプロキシ」とは限りません。それは一部のサブスクリプションで採用されるルール構成にすぎず、実際の動作は現在有効な設定によって異なります。
ルールを確認し、次にポリシーグループの選択先を確認
以下はルールの一部であり、サブスクリプション全体の設定ではありません。設定に「プロキシ選択」という名前のポリシーグループがすでにあることを前提としています。他の設定にコピーする場合は、ポリシー名を既存の名称と完全に一致させてください。
mode: rule
rules:
- DOMAIN-SUFFIX,example.com,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- MATCH,プロキシ選択
DOMAIN-SUFFIX,example.com,DIRECT:example.comとそのサブドメインを直結します。notexample.comには一致しません。IP-CIDR,192.168.0.0/16,DIRECT,no-resolve:接続先のIPアドレスがこの範囲に属する場合、直結します。no-resolveは、このルールとの照合のために追加の名前解決を行わない指定です。これだけでローカルネットワークのアドレスをすべて網羅できるわけではありません。MATCH,プロキシ選択:それまでのルールに一致しなかった通信を、フォールバック先として「プロキシ選択」に渡します。
MATCHを1行目に置くと、後続の通常ルールで通信を処理できなくなります。また、「プロキシ選択」で現在DIRECTが選ばれていれば、このグループに一致しても最終的には直結します。そのため、「ルールモードが有効」と確認するだけでは不十分です。一致したルール、ポリシーグループ、最終的な出口も確認してください。
サブスクリプションの更新で振り分け結果が変わることも
サブスクリプションにはノードだけでなく、ポリシーグループ、ルール、DNS設定が含まれることもあります。更新後に同じサイトへの経路が変わっても、必ずしもクライアントの不具合とは限りません。ルールの順序やポリシーグループの定義が変わった可能性もあります。長期的に使うカスタム振り分けルールは、クライアントが対応するオーバーライド設定やマージ設定に追加するのがおすすめです。サブスクリプションから生成されたファイルを直接編集すると、次回の更新で上書きされる場合があります。マージの順序は利用中のクライアントに応じて確認してください。
グローバルとDIRECT:出口を変えても、ネットワークの前提は変わらない
グローバルモードでは、普段使いのポリシーグループではなくGLOBALを確認
グローバルモードでは、通常の振り分けルールを1つずつ適用して出口を選ぶのではなく、通常は組み込みのGLOBALグループを使います。切り替えたら、プロキシ画面でそのグループの選択先を確認してください。特定のノード、別のポリシーグループ、またはDIRECTが選ばれている場合があります。普段使う「自動選択」グループでノードを変更しても、グローバルモードの出口が変わるとは限りません。
グローバルモードは、条件を1つずつ変えるテストに向いています。ルールモードでは開けないサイトが、グローバルモードに切り替え、同じ利用可能なノードを選ぶと開ける場合は、まず元のルールとグループ選択を確認しましょう。ただし、これだけで原因を断定することはできません。DNSキャッシュ、既存接続の再利用、接続先サービスの状態も結果に影響します。テストでは接続を張り直し、できるだけ設定を1つずつ変更してください。
DIRECTモードにしてもクライアントは終了しない
DIRECTモードでは、カーネルに取り込まれた通信が接続先へ直接アクセスしますが、クライアントの待ち受けポート、DNSモジュール、TUNによる接管は引き続き動作する場合があります。そのため、「DIRECTモードで正常」と「クライアントを完全に終了したら正常」は同じテストではありません。前者は接管経路を維持したまま出口だけを変更しますが、後者ではシステムプロキシ、仮想ネットワークインターフェース、DNSの経路も変わる可能性があります。
接続先に現在のローカルネットワークからアクセスできない場合、DIRECTモードにしても新たに到達できるようにはなりません。一方、プリンター、社内管理ページ、会社のネットワーク出口からしかアクセスできないシステムなどは、正しく直結する必要があることがよくあります。グローバルプロキシにしてこれらのサービスが使えなくなった場合は、遠隔ノードを何度も切り替えるのではなく、まずルールによる振り分けに戻してください。
システムプロキシ・TUNと3つのモードの関係
通信経路は2段階に分けて考えられます。アプリのリクエスト → 通信の取り込み口 → モードと出口の選択。システムプロキシは通常、HTTPプロキシなどの設定をOSに登録します。その設定に従うアプリだけがシステムプロキシを使います。一部のゲーム、コマンドラインプログラム、独自のネットワーク処理を実装したソフトは、システムプロキシに自動では従いません。特に、システムプロキシをあらゆるUDP通信を取り込む仕組みと考えるのは避けてください。
TUNは仮想ネットワークインターフェースとルーティングを使ってIP通信を取り込み、明示的なプロキシに対応していないアプリの処理に適しています。ただし、どの通信を取り込めるかは、ルート、除外リスト、権限、プラットフォームごとの実装によって異なります。TUNを有効にしても適切なルールが自動で選ばれるわけではなく、接続先ノードがゲームに必要なUDP転送に対応しているとも限りません。
入口と出口はポート番号で区別
たとえば設定でmixed-port: 7890を使用している場合、127.0.0.1:7890はこの端末上のHTTP/SOCKS兼用プロキシの入口です。遠隔ノードのアドレスでも、ルールモード専用ポートでもありません。クライアントや設定によって異なるポートを使う場合があるため、現在有効な設定を確認してください。
curl --proxy http://127.0.0.1:7890 --connect-timeout 10 --max-time 20 --head https://example.com
このコマンドはプロキシの入口を明示するため、ターミナルがシステムプロキシの設定を引き継いでいるかどうかに左右されません。接続タイムアウトを10秒、全体のタイムアウトを20秒に設定し、レスポンスヘッダーを取得します。これらはテスト用の設定値であり、実測レイテンシではありません。「接続が拒否されました」と表示されたら、ノードの障害と判断する前に、カーネルが動作しているか、ポートが7890かを確認してください。ポート番号が異なる場合は、設定に合わせてコマンドを変更します。
Web閲覧・ゲーム・仕事でのモードの選び方
| 用途 | まず試すモード | あわせて確認する項目 |
|---|---|---|
| 普段のWeb閲覧・動画視聴 | ルールモード | サイト関連のドメインが想定どおり同じポリシーに振り分けられているか、フォールバック先のグループが正しく選ばれているか。 |
| 特定のサービスにアクセスできない | 一時的にグローバルモードで比較 | GLOBALの実際の出口、既存接続を張り直したか、DNSに問題がないか。 |
| オンラインゲーム | 必要な通信を取り込んだうえでルールモード | ゲームの通信がカーネルに取り込まれているか、ノードがUDPに対応しているか、ルーティングやパケットロスに問題がないか。 |
| 社内ネットワーク・ローカル機器 | ルールモードで社内ネットワークを直結 | 企業VPNのルート、社内DNS、ローカルネットワークのアドレス範囲が適切に除外されているか。 |
| 回線自体の確認 | DIRECTモードで比較 | 必要に応じて通信の取り込みも無効にしてテストし、終了後は元の設定に戻します。 |
ゲームは「グローバルなら速くなる」とは限らない
ゲームのレイテンシは、サーバーの場所、通信事業者の経路、遠隔ノードまでの経路、回線の混雑状況に左右されます。グローバルモードにしても、遠回りの出口が改善されたり、ノードにないUDP機能が追加されたりすることはありません。ゲームのプロセスがそもそもカーネルに取り込まれていなければ、3つのモードを切り替えても変化しない可能性があります。手当たり次第にグローバルへ切り替えるより、まず接続ログを確認し、TUNが必要かを判断しましょう。
仕事では社内ネットワークと企業ポリシーを優先
企業VPNとTUNは、どちらもルートやDNSを変更する場合があります。両方を同時に有効にする場合は、社内ドメインの名前解決先を特に確認してください。社内システムが内部DNSに依存している場合、IPアドレスの直結ルールを1つ追加するだけでは解決しないことがあります。ドメインがすでに誤ったアドレスに解決されている可能性があるためです。組織のネットワーク要件に従い、企業VPNが処理するアドレスとローカルプロキシが処理する通信を明確にし、同じアドレス範囲を2つの接管機構で取り合わないようにしてください。
モードの切り替え場所と動作確認
Clashはカーネルと設定のエコシステムを指す名称であり、各GUIクライアントの画面構成は統一されていません。Clash Metaはその後mihomoの名称で開発が続いていますが、mihomoを使うクライアントでもボタンの位置や名称は同じとは限りません。古いスクリーンショットをすべてのクライアントに共通するメニュー例と考えず、各コントロールの機能を手がかりに探してください。
- モード切り替えの場所を確認します。デスクトップクライアントでは、「プロキシ」画面の上部やトレイメニューに「ルール/グローバル/DIRECT」の選択肢があることがよくあります。英語表記は通常
Rule、Global、Directです。たとえばClash Verge Revでは、「プロキシ」画面でモードの切り替えを探してください。具体的な位置はバージョンによって変わる場合があります。 - 通信の取り込み設定を確認します。クライアントの「設定」またはホーム画面で、「システムプロキシ」と「TUNモード」の設定を確認してください。これらはモード選択とは別のスイッチです。ルールモードにしただけで、システムプロキシが有効になるわけではありません。
- ポリシーグループを確認します。ルールモードでは該当する通信のポリシーグループを、グローバルモードでは
GLOBALを確認してください。画面で強調表示されているモードだけでなく、選択中のノードや子グループも記録しましょう。 - テスト接続を張り直します。ページを再読み込みしても、すべての持続接続が終了するとは限りません。必要に応じて該当するタブを閉じて開き直すか、クライアントの接続画面で対象の接続を終了してください。この操作により、その接続で進行中の通信が中断されます。
- 接続ログを確認します。「接続」画面で対象のドメイン名またはIPアドレスを探し、一致したルール、ポリシーの経路、出口を確認してください。画面名はクライアントによって異なる場合があります。ログは判断材料の1つとして使い、Webページが表示されるかどうかだけで判断しないでください。
設定ファイルでモードを指定する方法
# 3つのうち1つだけ指定。以下はルールモード
mode: rule
# グローバルモードの場合:mode: global
# DIRECTモードの場合:mode: direct
これはトップレベルのフィールドです。ルールやノードの下にインデントしないでください。GUIクライアントでは、起動時や再読み込み時に画面上の設定でこの値が上書きされる場合があります。ファイルを編集した後は、画面上で実際に有効なモードも確認してください。モード値のdirectとルールアクションのDIRECTは用途が異なります。前者は実行モードの値、後者はルールで指定する組み込みの出口です。
モードを切り替えても解決しない場合の確認手順
- 設定とカーネルが動作しているか確認します。サブスクリプションのインポートに成功しても、カーネルが正常に設定を読み込んだとは限りません。まず設定の解析エラーを確認し、次にプロキシの待ち受けポートが開いているかを確認してください。
- リクエストがカーネルに届いているか確認します。接続画面を開いた状態で、新しいテストリクエストを送信してください。記録がまったく表示されない場合は、まずアプリのプロキシ設定、TUNのルート、除外設定を確認します。
- モードと出口を確認します。現在のモード、一致したルール、最終的なノードを記録してください。ルールが
DIRECTに一致している場合、通常、別のプロキシグループでノードを切り替えてもその接続には影響しません。 - ルールモードとグローバルモードを比較します。ノードを変えずに接続を張り直してください。グローバルでは使えてルールでは使えない場合は、ルールとポリシーグループを優先して確認します。どちらでも失敗する場合は、ノード、サブスクリプションの状態、DNS、接続先サービスを確認してください。
- DIRECTモードと通信の取り込み解除を比較します。DIRECTモードでも失敗し、通信の取り込みを解除すると復旧する場合は、取り込み経路、DNS、ルーティングをさらに調べる必要があります。元の設定を記録し、テスト後に必ず戻してください。無効になったローカルポートをシステムプロキシが参照し続ける事態を防げます。
よくある質問3つ
ルールモードはグローバルモードより明らかに遅い?
モードだけを見て判断することはできません。ルール照合には処理コストがかかりますが、実際の使い勝手は出口、DNS、接続の再利用、ネットワークの混雑状況にも左右されます。モードごとに別のノードを選んでいる場合、測定結果の差をルール照合の影響とは言えません。比較する際は、接続先、ノード、通信の取り込み方法、テスト時間帯をできるだけそろえてください。
DIRECTに切り替えたのに、クライアントに通信記録が残るのはなぜ?
DIRECTモードでも、リクエストがカーネルを通らなくなるわけではありません。システムプロキシやTUNによって通信がカーネルに渡され、そこから接続先へ直接接続されるため、接続一覧は引き続き更新されます。サブスクリプションの更新やヘルスチェックなどのバックグラウンド処理が個別にリクエストを送ることもあります。通信の総数だけを見て、特定のWebページがプロキシノードを使った証拠と判断しないでください。
グローバルモードでアクセスできたら、ずっと使い続けてもよい?
取り込まれたすべての通信で同じ出口が本当に必要なら、そのまま使うこともできます。ただし、ローカルサービスや社内システムに適さない場合がある点には注意してください。ローカルと外部のサービスを日常的に併用するなら、ルールモードに戻して該当するドメインやルールセットを修正し、通信が想定したポリシーに振り分けられることを確認するのが確実です。誤った振り分けをグローバルモードで隠したままにしないようにしましょう。
モード選びの基本は次のとおりです。普段はルールモードを使い、アクセスできない場合はグローバルモードで出口を確認し、DIRECTモードでローカル経路を確認します。どのモードを選んでも、接続ログで通信が実際にどの経路を通ったか確認してください。ルールの種類や設定項目についてはプロトコルガイドをご覧ください。GUIクライアントを選ぶ際は、クライアント比較で対応プラットフォームやカーネルの違いを確認できます。