Clashのルールモード・グローバルモード・DIRECTモードの選び方と違い

rule・global・direct各モードの通信経路と使い分けを解説。config.yamlのmodeの設定方法や切り替え方も紹介します。

3つのモードの違い:通信を受け取ったカーネルがどう処理するか

普段はルールモードを使い、ルールによる振り分けを一時的に無効にしたいときはグローバルモードに切り替えます。ローカルネットワークから直接アクセスできるか確認する場合は、DIRECTモードを使います。モードによって変わるのはClashカーネルが接続を処理する方法であり、サブスクリプションの内容やノードサーバーの設定ではありません。

ここでいう「接続」には重要な前提があります。通信がClashに届いていることです。ブラウザーがシステムプロキシに従う場合や、アプリがプロキシポートへ手動で接続する場合、またはTUNが通信を取り込む場合に限り、カーネルが経路を選べます。カーネルに届いていない接続は、画面でグローバルモードに切り替えても自動的にプロキシ経由にはなりません。

モードと設定値主な振り分け方法利用シーン
ルールモード ruleルールを上から順に照合し、一致したポリシーへ接続を渡す普段の通信振り分け、LANへのアクセス、サイトごとの出口の使い分け
グローバルモード global組み込みの GLOBAL ポリシーグループへ接続を渡す一時的に出口を統一して、ルール選択の問題かどうかを比較する
DIRECTモード direct通常のルール一覧でプロキシを選ばず、DIRECTで接続するローカルネットワークの確認、リモートノードを一時的に使わない場合

ルールモード:上から照合し、最初に一致したルールを適用

mode: ruleでは、カーネルがrulesを記載順に照合します。ルールに一致すると、そのルールで指定されたポリシーに接続が渡され、通常は後続のルールはその接続の判定に使われません。ポリシーにはノードやポリシーグループのほか、組み込みのDIRECTやREJECTも指定できます。

最小限のルール例を読み解く

mode: rule

rules:
  - DOMAIN-SUFFIX,example.com,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - MATCH,Proxy
  • example.comとそのサブドメインは1つ目のルールに一致し、直接接続します。
  • 宛先IPアドレスが192.168.0.0/16に含まれる接続は2つ目のルールに一致します。no-resolveは、このIPルールとの照合のためにドメイン名の名前解決を新たに行わない指定です。
  • それまでのルールに一致しなかった接続は、MATCHで処理され、Proxyというポリシーに渡されます。

これはルールの一部であり、設定ファイル全体ではありません。使用する前に、既存の設定でProxyというノードまたはポリシーグループが定義されている必要があります。実際のグループ名が「ノード選択」なら、その名前を正確に指定してください。名前が一致しない場合、別のノードに自動置換されるのではなく、設定の検証に失敗します。

ルールモードでも、すべてのサイトが自動判定されるわけではない

通信の振り分け結果は、設定内のルール、ルールセットの更新状況、ポリシーグループの現在の選択内容によって決まります。あるサイトがセレクターに一致しても、そのセレクターでDIRECTが選択されていれば、最終的には直接接続します。逆に、日本国内のサイトでもMATCH,Proxyに一致すれば、リモートノード経由になることがあります。サイトの所在地だけでは実際の経路を判断できません。

特定のサイトだけ想定外の経路になる場合は、まずクライアントの「接続」画面で対象ドメイン、一致したルール、出力経路を確認してからルールを調整します。例外を追加するときは、より具体的なドメインルールを広範なルールより前に置きます。MATCHは最後に配置してください。先に置くと、後続のルールが適用されません。

グローバルモード:GLOBALに一括で渡すが、すべての端末の通信をプロキシするわけではない

mode: globalでは、通常モードの制御対象となる接続が組み込みのGLOBALポリシーグループに渡され、通常のrulesによる振り分けは行われません。切り替えた後はプロキシまたはポリシーグループの画面を開き、GLOBALで利用可能なノード、または最終的にノードを選択するポリシーグループが選ばれていることを確認してください。

GLOBALでDIRECTを選択している場合、接続は引き続き直接接続します。自動速度テストのグループを選択している場合は、候補ノードと選択ロジックによって最終的な出口が決まります。「グローバル」とは接続先を一括で決める入口のことで、固定ノード、最小遅延、すべてのアプリの通信が取り込まれることを意味しません。

短時間の比較に適しているが、通信の取り込み状況の確認には代用できない

  1. ルールモードで開けなかった完全なドメイン名と、その接続に一致したルールを記録します。
  2. グローバルモードに切り替え、GLOBALで利用できることが確認済みのノードを選択します。
  3. 既存のページ接続を閉じてから再アクセスするか、新しいブラウザーセッションを開始します。古い接続で以前の経路が使われ続けるのを避けられます。
  4. グローバルモードでは接続できるのにルールモードではできない場合は、ルールモードに戻り、最初に一致したポリシーとノードを確認します。ルール全体を削除するのは避けてください。

グローバルモードでは、ルーターの管理画面、プリンター、社内ネットワークへのアクセスが適切でない出口へ送られることもあります。システムプロキシの除外リストやTUNのルーティング除外設定で除外された通信は、引き続きカーネルに届きません。mihomoで追加のルーティング、リスナー、高度なルールを設定している場合は、これらも確認してください。モード名だけでは、すべての通信の動作は判断できません。

DIRECTモード:カーネルへの入口は維持し、ローカルネットワークから接続する

mode: directでは、カーネルに届いた接続にDIRECTを使用します。アクセス障害がリモートプロキシに起因するかを判断するのに適しています。同じサイトがDIRECTモードでは開き、グローバルモードでは開かない場合は、GLOBALの選択内容、ノードの状態、出口側のネットワークを重点的に確認してください。

DIRECTモードにしても、クライアントが終了するわけではありません。システムプロキシは引き続きローカルのリスニングポートを参照する場合があり、TUNも動作し続けることがあります。DNSの設定も引き続きカーネルが処理する場合があります。この状態でクライアントを終了し、システムプロキシが正しく解除されていないと、アプリが停止済みのポートへ接続しようとして、すべてのページが開けなくなることがあります。

  • 出口経路だけを比較する:クライアントを起動したままDIRECTモードに切り替え、新しい接続を開始します。
  • クライアントを経由しないネットワークと比較する:システムプロキシとTUNを無効にし、OSのプロキシ設定が元に戻ったことを確認してからテストします。
  • クライアントを終了する:クライアントの正規の終了操作を使い、プロキシ設定が残っていないか確認します。

DIRECTでも、接続先に必ずアクセスできるとは限りません。接続先サイトの障害、ローカルDNSの問題、ネットワークのアクセス制限、企業ネットワークの認証要件などが影響する場合があります。DIRECTは経路の違いを切り分けるための機能であり、あらゆる問題を解決するものではありません。

config.yamlのmodeの書き方

modeはYAMLのトップレベルに置くフィールドで、mixed-portやrulesと同じ階層に記述します。dnsやポリシーグループの下にインデントしないでください。値はrule、global、directの小文字で記述します。以下の例では混合プロキシポートとして7890を使っていますが、すべてのクライアントの既定ポートがこの値とは限りません。

# 既存設定のトップレベルに統合し、同名フィールドを重複して定義しない
mixed-port: 7890
mode: rule

グローバルモードまたはDIRECTモードにするには、同じ行の値だけを置き換えます。

# グローバルモード
mode: global
# DIRECTモード
mode: direct

GUIでの切り替えと設定ファイルの編集

  1. 対応するデスクトップクライアントでは、「設定」→「Clash設定」または「カーネル設定」を開き、「プロキシモード」を探します。クライアントによっては、ホーム画面にモード切り替えボタンがあります。項目名や場所は、使用中のクライアントによって異なります。
  2. 設定ファイルを編集する場合は、まず「設定」または「サブスクリプション」画面で現在有効な設定を確認し、コピーを保存してから、対応する編集画面で変更してください。
  3. 保存後、クライアントの再読み込み操作を実行します。YAMLの解析エラーがないことと、画面に表示される現在のモードを確認してください。
  4. 新しい接続を開始し、「接続」画面で経路を確認します。ファイルの保存に成功しただけでは、実行中のカーネルに新しい値が反映されたとは限りません。

システムプロキシ・TUN・DNS:混同しやすい3つのポイント

システムプロキシは、アプリが接続をローカルポートへ送るかを決める

設定で実際に127.0.0.1:7890をリスニングしている場合、システムプロキシに従うブラウザーはこの入口からネットワークに接続できます。一方、システムプロキシを使用しないゲーム、コマンドラインプログラムなどは、直接接続する場合があります。Windows 11では「設定」→「ネットワークとインターネット」→「プロキシ」、macOSでは「システム設定」→「ネットワーク」→使用中のネットワークサービス→「詳細」→「プロキシ」で設定を確認できます。アドレスとポートがクライアントの実際のリスニング設定と一致していることを確認してください。

TUNは通信を取り込む範囲を、モードは取り込み後の出口を決める

TUNは仮想ネットワークインターフェースとルーティングを使い、より多くのアプリの通信をカーネルに送ります。これは4つ目のプロキシモードではなく、ルールモードと併用できます。よくある構成は「TUN有効+ルールモード」で、ルールによって直接接続とプロキシ接続を振り分けます。TUNを有効にした後は、権限、ルーティングの除外設定、他のVPNとの競合も確認してください。「グローバルモード」だからといって、TUNが有効になっているとは限りません。

モードを切り替えても、DNS設定全体は自動で切り替わらない

DNSのnameserverやfake-ipなどの設定は、modeとは別の項目です。mihomoでは、DNS通信の出口がrespect-rulesやプロキシサーバーのドメイン名解決設定などに左右されることもあります。そのため、DIRECTモードで名前解決に問題がある場合や、グローバルモードでIPアドレスには届くのにドメイン名で接続できない場合は、DNSログも確認してください。3つのモードを繰り返し切り替えるだけでは解決しません。

症状別の確認ポイント:モード切り替え後に見る項目

症状まず確認する項目
グローバルモードでは接続できるが、ルールモードではできない一致したルールと位置、対応するポリシーグループの選択、誤ってDIRECTまたはREJECTになっていないか
ルールモードでは接続できるが、グローバルモードではできないGLOBALの現在の選択内容、選択中ノードの状態、社内ネットワーク向け通信の出口が変わっていないか
どのモードでも接続記録がないアプリがシステムプロキシに従っているか、ポートが正しいか、TUNが実際に通信を取り込んでいるか
切り替えても既存ページの状態が変わらないブラウザーのキャッシュ、接続の再利用、バックグラウンドの長時間接続を確認し、新しい接続で検証する
DIRECTでは接続できるが、プロキシ経由では失敗するノードの接続エラー、サブスクリプション内のノード状態、ポリシーグループが最終的に選んだ出口

テストでは、ドメイン名、アプリ、通信の取り込み方法を同じに保ち、モードまたはポリシーグループを一度に1つだけ変更します。「現在のモード」「一致したルール」「最終的な出口」「エラー内容」の4項目を記録すると、「開けるかどうか」だけを記録するより原因を特定しやすくなります。ログを共有する前に、サブスクリプションURL、アクセストークンなどの機密情報を削除してください。

普段はルールモードを使い、グローバルモードとDIRECTモードは比較に活用

  • 普段のWeb閲覧、オフィス業務、LANを併用する:ルールモードを選び、必要なドメイン例外を設定して、よく使うポリシーグループの選択内容を確認します。
  • 一時的に出口をノードへ統一する:グローバルモードを選び、モードボタンを切り替えるだけでなく、GLOBALの選択内容も確認します。
  • ローカルネットワークが正常か確認する:まずDIRECTモードで比較します。クライアント自体の影響を除外する場合は、通信の取り込みを無効にし、システム設定を確認します。

確認する順番は3段階です。まず通信がカーネルに届いているか、次に現在のモード、最後に最終的な出口を確認します。この3つの関係を把握すれば、「グローバルなのにプロキシを通らないアプリがある」理由や、ルール・ノード・DNSのどこに問題があるかをより正確に切り分けられます。各フィールドの説明はClash設定フィールド一覧、初めて設定をインポートする場合はクイックスタートガイドをご覧ください。

Clashをダウンロード