Clash TUN モードとシステムプロキシの違い:通信の横取り方式を徹底比較
システムプロキシとTUNモード、2つの通信横取り方式を階層・適用範囲・互換性の観点で比較。システムプロキシを迂回するアプリの例や、TUNモードへ切り替えるべき場面を解説します。
システムプロキシとTUNモード、2つの通信横取り方式を階層・適用範囲・互換性の観点で比較。システムプロキシを迂回するアプリの例や、TUNモードへ切り替えるべき場面を解説します。
Clashを使い始める前に、ネットワーク通信がどのようにしてプロキシへ「横取り」されるのかを理解しておくことは、個々のスイッチ名を覚えるよりもはるかに重要です。Clashおよびその派生コアであるClash Meta(mihomo)は、まったく異なる2つのアプローチを用意しています。1つは「システムプロキシ」、もう1つは「TUNモード」です。両者が解決しようとしている課題は同じ——デバイスから送信される通信をClashのルールエンジンに通してから転送する——ですが、介入する階層が根本的に異なり、それが適用範囲・互換性・設定コストの差につながっています。
システムプロキシはOSレベルで提供される設定インターフェースで、本質的には「対応するアプリへ、まずこのアドレスとポートにHTTP/HTTPSリクエストを送るように」指示する仕組みです。WindowsやmacOSには標準でシステムプロキシの設定項目があり、ブラウザや一部のダウンロードツール、IDEのネットワークコンポーネントがこの設定を読み取って動作します。一方、TUNモードは発想がまったく異なります。システム内部に仮想ネットワークインターフェース(Virtual Network Interface)を作成し、OSはこの仮想アダプタを実際のネットワーク出口として扱います。ルーティングテーブルの判定によりこの出口を経由すべきと判断されたIPパケットは、送信元のプロセスや使用プロトコルを問わず、まずこの仮想アダプタに流れ込み、その後Clashコアが解析・ルール照合を行い、対応するノードへ転送します。
システムプロキシの利点は設定が簡単で、リソース消費が少なく、オン/オフの切り替えも柔軟なことです。Clashに初めて触れるユーザーの多くはまずこの方式から使い始めます。ただしその仕組みは、アプリケーション側が積極的に「協力」することを前提としています。アプリ内部がシステムや環境変数からプロキシアドレスを読み取り、自らそのアドレスに接続してリクエストを転送する必要があるのです。つまり、この約束事に従うアプリだけが正しく横取りされる仕組みです。
問題はまさにここにあります。すべてのネットワーク通信を行うアプリがシステムプロキシ設定を読み取るわけではなく、代表的な迂回パターンとしては以下が挙げられます。
HTTP_PROXY/HTTPS_PROXYを別途手動で設定する必要があります。つまり、システムプロキシは一種の「紳士協定」のようなものです。協力的なアプリは素直にプロキシ経由で通信しますが、協力しないアプリはそのまま直接通信を続けます。Clashを起動しているのに、あるクライアントで「プロキシに接続されていません」と表示されたり、想定と異なる結果になったりするのは、多くの場合ルール設定が間違っているのではなく、そのアプリがそもそもシステムプロキシの経路を通っていないことが原因です。
TUNモードの発想はより徹底しています。アプリが「協力する意思」を持っているかどうかに依存せず、OSのネットワークプロトコルスタック層に仮想ネットワークアダプタを差し込み、ルーティングテーブルの規則と組み合わせて、デバイス上のほぼすべての対象IPパケットをこの仮想インターフェースへ誘導します。パケットが仮想アダプタに入った後、Clash Meta(mihomo)コアがユーザー空間でプロトコル解析(一般的にはgVisorまたはOS標準スタックのいずれかの実装方式)、ドメイン照合、ルール判定を行い、どのノード経由にするか、あるいは直接接続にするかを決定します。
横取りがアプリ層ではなくネットワーク層で行われるため、TUNモードはアプリの種類をほとんど選びません。ブラウザ、コマンドラインツール、ゲームクライアント、OS自体のバックグラウンドサービスであっても、ルーティング条件に合致する通信であればすべて一括で管理対象となり、システムプロキシでは扱えなかったUDP通信も含まれます。ゲームや音声通信、クロスプラットフォームクライアントを細かく振り分けたいユーザーが最終的にTUNモードへ移行するのはこのためです。
TUNモードは仮想ネットワークアダプタの作成が必要なため、通常は管理者権限が求められます(Windowsでは管理者として実行、macOS/LinuxではNetwork ExtensionまたはRoot権限が関係します)。初回有効化時にシステムから権限許可のプロンプトが表示されるのは正常な動作です。
適用範囲が広いことは、TUNモードにコストがないことを意味しません。通信がネットワーク層で捕捉され、ユーザー空間のプロトコルスタックで処理されてから転送されるため、パケットが経由する封装・解析の層が増え、理論上はわずかな性能オーバーヘッドが発生します。低性能なデバイスや遅延に極めて敏感な用途では差を感じる場合があります。また、仮想アダプタは端末のルーティングテーブル、ファイアウォール設定、VPNクライアントと相互に影響し合う可能性があります。
対照的に、システムプロキシにはこうした低レベルのリスクがなく、設定すれば即時に反映され、無効化すれば即時に元に戻ります。不具合が起きた際の調査も分かりやすく、多くの場合「どのアプリがプロキシ設定を読み取っていないか」に行き着きます。これが、軽量な用途では今もシステムプロキシが標準的な選択肢である理由です。
| 比較項目 | システムプロキシ | TUNモード |
|---|---|---|
| 動作する階層 | アプリ層。アプリ側がプロキシ設定を読み取ることに依存 | ネットワーク層。仮想アダプタとルーティングテーブルで一括処理 |
| 対応プロトコル | 主にHTTP/HTTPSを対象。UDP対応は限定的 | TCP・UDPともに対応し、プロトコル種別をほぼ問わない |
| 追加権限の要否 | 通常は管理者権限不要 | 仮想アダプタ作成に管理者/Root権限が必要 |
| 互換性のリスク | 低い。ただし「プロキシを迂回する」アプリが存在する | 他の仮想ネットワークツールと競合する可能性がある |
| 代表的な適用シーン | 日常的なブラウジング、軽い作業、一時的な利用 | ゲームの振り分け、コマンドラインツール、プロセス単位での細かい制御 |
あるアプリの通信がいつもプロキシルールに従わない場合、おおむね以下のいずれかに該当します。
このような問題に遭遇したときは、アプリごとにプロキシ設定の入り口を探すよりも、TUNモードへ切り替えてネットワーク層で一括対応してしまう方が「横取り漏れ」を効率的に解決できます。
以上の比較を踏まえると、次のような判断基準が導けます。
process-name)を組み合わせることで、アプリ層では実現できない粒度の制御が可能になります。多くのクライアントはシステムプロキシとTUNモードの併用や素早い切り替えに対応しています。まずシステムプロキシでノードとルールが正常に動作するか確認し、問題がなければTUNモードを有効にして適用範囲を広げると、トラブル調査の際の見通しが立てやすくなります。
設定ファイルの観点で見ると、システムプロキシはClashの設定に特別な記述を追加する必要がなく、クライアント画面上のスイッチひとつでOSのAPIを直接呼び出して完了します。一方TUNモードは、通常設定ファイル内で有効状態・スタックの種類・DNSを横取りするかどうかなどの項目を明示的に指定する必要があります。Clash Meta(mihomo)の一般的な記述例は次の通りです。
tun:
enable: true
stack: system
dns-hijack:
- any:53
auto-route: true
auto-detect-interface: true
auto-routeは通信を仮想アダプタへ誘導するルーティングテーブルを自動設定するかどうかを決め、dns-hijackはDNSクエリを横取りして、一部のドメイン名解決がルール照合を迂回してしまうのを防ぎます。これらの項目はほとんどのGUIクライアントで画面上の簡単なスイッチとして実装されており、通常のユーザーが設定ファイルを直接編集する必要はありませんが、意味を理解しておくと稀に発生する接続不具合の調査に役立ちます。
TUNモードを有効にしたら、システムプロキシも必要ですか?基本的に同時に有効にする必要はありません。TUNモードはシステムプロキシが処理できる範囲をすでに包含しており、両方同時に有効にするとルーティング判定が混乱しやすいため、どちらか一方を選ぶことを推奨します。
TUNモードにすると全体の速度が遅くなりますか?封装・解析の分だけオーバーヘッドは確かに存在しますが、現行の多くの端末ではその差はほとんど感じられません。速度差の多くは接続方式そのものよりも、利用しているプロキシノードの回線品質に起因します。
スマートフォンにもTUNモードはありますか?Androidでは通常VpnServiceインターフェースを通じて同様の効果を実現しており、考え方はデスクトップの仮想アダプタと同じで、アプリ層で処理できない通信も横取りできます。iOSではNetwork Extensionフレームワークによって同種の機能が実現されています。