Clashのルールモード・グローバルモード・DIRECTモードの違いと使い分け
Clashのルール・グローバル・DIRECT各モードの通信経路と用途を比較。普段はルールモードがおすすめな理由と、グローバルへ一時的に切り替える際の注意点を解説します。
まずルールモードを選び、通信がClashに届いているか確認
普段使いにはルールモードがおすすめです。プロキシが必要な通信はプロキシグループへ振り分け、LAN内の機器や直接アクセスできるサイトにはDIRECTを適用できます。グローバルモードはルール分岐の問題を一時的に切り分けるとき、DIRECTモードはプロキシを使わない場合の通信状況を比べるときに便利です。3つのモードが変えるのは、コアが受け取った通信の処理方法であり、通信速度の設定ではありません。
設定は2段階に分けて考えましょう。システムプロキシ、TUN、Android VPNは通信をコアに取り込む方法を決め、ルール・グローバル・DIRECTは取り込んだ通信の出口を決めます。モードをグローバルにしても、システムプロキシが有効でなく、対象アプリもプロキシを使っていなければ、そのアプリは直接通信する場合があります。
3つのプロキシモードで通信がどう流れるか
| モードと設定値 | 通信の出口の決まり方 | 主な用途 |
|---|---|---|
ルール:rule |
ルールを順に照合し、最初に一致したルールで指定されたポリシーを適用 | 日常的な通信の振り分け、LANへのアクセス、ドメインごとの出口選択 |
グローバル:global |
内蔵の GLOBAL プロキシグループで現在選択されているポリシーを使用 |
ルールによる振り分けを一時的に迂回し、アクセス結果を比較 |
DIRECT:direct |
DIRECT で接続先に直接接続 |
ローカルネットワークの確認、プロキシ利用前後の比較 |
ルールモード:一致したルールのポリシーが出口を決める
ルールは通常、設定ファイルの上から順に照合され、最初に一致したルールでポリシーが決まります。ポリシーには DIRECT、REJECT、個別のノード、プロキシグループなどを指定できます。ルールモードだからといって「海外サイトはすべて自動的にプロキシ経由」になるわけではありません。実際の通信経路は、サブスクリプションに含まれるルールやルールセット、最後に適用されるルールによって決まります。
たとえば、ドメインルールであるサービスを PROXY に振り分けても、そのグループで DIRECT が選択されていれば、接続は最終的に直接通信になります。原因を調べるときは、モードボタンだけでなく「一致したルール」と「プロキシグループで現在選択されているポリシー」の両方を確認してください。
グローバルモード:GLOBALの出口を選ぶ必要がある
グローバルモードに切り替えると、通常のルールリストでは通信を振り分けず、コアは GLOBAL で現在選択されているポリシーを使います。クライアントによって、表示名は「グローバル」または「GLOBAL」です。ここでDIRECTを選んでいれば、グローバルモードにしてもプロキシ経由にはなりません。別のプロキシグループを選んだ場合は、そのグループで最終的にどのノードが選ばれているかも確認しましょう。
グローバルモードにしても、期限切れのサブスクリプション、ノードの認証失敗、サーバーへの接続不能は解消されません。ルールモードでLAN向けに設定していたDIRECTルールも適用されなくなるため、プリンター、NAS、ルーターの管理画面へのアクセスに影響する場合があります。ただし、TUNのルーティングで除外されている通信は、もともとこの処理に入りません。
DIRECTモード:プロキシノードを経由しないが、コアは動作する
DIRECTモードでは、コアに取り込まれた通信がローカルネットワークから接続先へ直接送られます。クライアントは引き続きポートを待ち受け、システムプロキシからの通信を受け取り、TUNやDNSサービスを動作させる場合があります。そのため、「DIRECTに切り替える」ことと「クライアントを終了してシステムのネットワーク設定を元に戻す」ことは、同じテストではありません。TUNのルーティングやDNS設定を疑っている場合、DIRECTに切り替えるだけでは原因を切り分けられません。
YAMLのmode、rules、プロキシグループの関係
設定のトップレベルにあるフィールドは mode で、一般的な値は rule、global、direct です。以下はルールの例で、サブスクリプション全体ではありません。使う前に、既存の設定に PROXY という名前のノードまたはプロキシグループがあることを確認してください。実際のグループ名が「ノード選択」なら、2か所の PROXY をどちらも同じグループ名に置き換えます。
# 既存の設定に追加してください。この断片でサブスクリプション全体を上書きしないでください。
mode: rule
rules:
- DOMAIN-SUFFIX,example.com,PROXY
- 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,PROXY
DOMAIN-SUFFIX,example.com,PROXY:例のドメインとそのサブドメインに一致します。ドメイン単位の振り分けを説明する例であり、実在するサービス向けの推奨ルールではありません。IP-CIDR:ここでは、よく使われるプライベートIPv4アドレスの3つの範囲を対象にしています。ローカルアドレスの例外を網羅したものではありません。ループバック、リンクローカル、IPv6などは、ネットワーク環境に合わせて別途検討してください。no-resolve:このIPルールとの照合のために、ドメイン名の名前解決を新たに行わない指定です。クライアント全体のDNSを無効にする設定ではありません。MATCH,PROXY:前のルールに一致しなかった通信を処理します。MATCHを先頭に置くと、それ以降のルールは照合されません。
グローバルモードに切り替える場合、トップレベルのフィールドを次のように変更できます。ただし、実際の出口は実行時に選択される GLOBAL によって決まります。
mode: global
コアに取り込まれた通信を直接接続させる場合は、次のように設定します。
mode: direct
ClashとClash Meta(現在は一般にmihomoと呼ばれます)では、拡張フィールドの仕様が完全には共通していません。特にDNS、TUN、プロセス照合の機能は異なる場合があります。この記事で扱う3つのモードは基本的な概念です。ほかの高度な設定をコピーする前に、アプリ名だけで判断せず、クライアントの「情報」やコア情報で実際に使われているコアを確認してください。
普段使いにルールモードを選ぶメリット
ルールモードの利点は、通信ごとに適した出口を選べることです。すべてのサイトが速くなるわけではありません。通信速度や使い勝手は、プロキシノードの帯域と品質、接続先サイト、ローカルネットワークにも左右されます。ルールを適切に設定すれば、LANへのアクセス、プロキシ不要のダウンロード、特定の出口が必要なサービスを、すべて同じ回線に集中させずに済みます。
- Webサイトや業務サービス:ドメインごとに通信を振り分けます。日本国内から直接アクセスできるサービスは通常DIRECTのままにし、プロキシが必要なサービスには指定したプロキシグループを使います。
- NAS、プリンター、ルーター:実際に使っているローカルネットワークの範囲をDIRECTに設定し、TUNのルーティング除外も確認します。LAN内の通信がリモートの出口へ送られるのを防げます。
- アカウントへのログイン:同じサービスに関係するドメインでは、できるだけ同じ出口を使います。ログイン中にノードを何度も切り替えると、追加認証が求められることがあります。
- ダウンロードや大容量通信:まず接続パネルで出口を確認してください。グローバルモードでは、こうした通信でもプロキシ回線のデータ通信量を消費する場合があります。
「より徹底的に設定したい」という理由で、グローバルモードを常用する必要はありません。グローバルモードはルールによる振り分けをなくすだけで、ノードの品質やシステムプロキシの対象範囲を改善するものではありません。ルールモードで特定のサイトだけに問題が起きる場合は、すべての通信の出口を変えるのではなく、そのサイトに合ったルールやプロキシグループを修正しましょう。
ルールモードでは開けず、グローバルでは開けるときの確認手順5つ
グローバルモードを一時的に使った切り分けが有効なケースです。テストでは同じノード、同じURL、同じネットワークを使い、モードだけを変更してください。条件を複数変えると、原因がルールなのか回線なのか判断できません。
- 現在の設定を記録する。現在のモード、一致したルールのグループ、そのグループで選択されているノードを書き留めます。クライアントの「接続」または「Connections」画面を開き、新しい接続を確認できるようにします。
- ルールモードで再現する。対象サイトのタブを閉じてから開き直し、接続先ドメイン、一致したルール、最終的な通信経路を確認します。意図せず
DIRECT、REJECT、または想定外のデフォルトグループに一致していないか確認してください。 - 同じノードを選んでグローバルに切り替える。「プロキシ」または「Proxies」画面で
GLOBALを開き、比較する出口を選びます。メニューの場所はクライアントによって異なるため、実際の画面表示を確認してください。「システムプロキシ」のスイッチをモード選択と混同しないようにしましょう。 - 新しい接続を確立して比較する。モードを切り替えても、既存のTCP接続が別の出口へ移行するとは限りません。接続パネルで対象の接続を閉じるか、該当するアプリを完全に終了してから再起動します。ダウンロード中の処理を誤って終了しないよう注意してください。
- ルールモードに戻して原因を修正する。グローバルでは正常でルールモードでは失敗する場合、ルールの順序、リモートルールセットの読み込み状況、グループ名の一致、関連するサブドメインの漏れを優先して確認します。修正後、ルールモードに戻して再テストしてください。
明示的にプロキシポートを指定して、通信がコアに届くか確認する
現在の設定で mixed-port: 7890 を使っている場合、デスクトップのターミナルで次のコマンドを実行すると、HTTPSリクエストを1回、本体のHTTPプロキシ経由で送信できます。Windows PowerShellでは、古い環境の同名コマンドによる引数の違いを避けるため、curl.exe の使用をおすすめします。
curl --proxy http://127.0.0.1:7890 --connect-timeout 10 --max-time 20 -I https://example.com/
Windowsでのコマンド:
curl.exe --proxy http://127.0.0.1:7890 --connect-timeout 10 --max-time 20 -I https://example.com/
実際の待ち受けポートが 7891 の場合は、コマンドのポート番号も変更してください。このテストで確認できるのは、指定したポートを経由してそのリクエストが送信されたことだけです。すべてのアプリの通信が取り込まれていることや、リモートノードが使われたことを、応答コードだけで判断することはできません。最終的な出口は、接続パネルに表示されるポリシーの経路で確認してください。接続が拒否された場合は、ルールを変更する前に、コアが実行中か、ポート番号が一致しているかを確認します。
モードを切り替えても問題が続く場合はDNS、TUN、既存の接続を確認
グローバルモードにしてもDNSの問題は自動で解決しない
プロキシモードとDNS設定は別のものです。mihomoでは、名前解決の動作が dns.enhanced-mode、nameserver、nameserver-policy などのフィールドにも左右されます。グローバルモードに切り替えただけで、すべてのDNSリクエストがプロキシ経由になるとは限りません。アプリ独自の暗号化DNSが制御されるとも限りません。
「ドメインにアクセスできないが、ネットワーク自体は正常そう」という場合は、まずログに名前解決のタイムアウトがないか確認し、現在のDNS設定が上書きされていないか調べます。モード、DNSサーバー、ノードを一度に変更しないでください。原因を特定するには、変更する条件を一つずつにする必要があります。
TUNは通信の入口であり、4つ目のプロキシモードではない
TUNを有効にしたまま、ルール・グローバル・DIRECTのいずれも選択できます。デスクトップでは仮想ネットワークアダプターとルートが作成されているか、AndroidではVPNの許可が有効かを確認してください。アプリの除外リストに登録されたプログラムは、グローバルモードと表示されていてもコアを経由しないことがあります。反対に、DIRECTモードでもTUNが引き続き通信を受け取り、転送する場合があります。
DIRECTで接続できなくても、プロキシルールが原因とは限らない
ルール・グローバル・DIRECTのどれでも接続に失敗する場合は、まずローカルネットワーク、接続先サービスの状態、ポートの待ち受け状況、コアのログを確認してください。クライアントを完全に迂回して比較するには、システムプロキシとTUNを無効にしてからクライアントを正常に終了し、システムにプロキシ設定が残っていないことを確認します。DIRECTに切り替えるだけでは、コアのDNSやルーティングの影響を排除できません。