システムプロキシは Clash の最も基本的なトラフィック引き継ぎ方式で、OS の HTTP/SOCKS5 プロキシパラメータを設定することで、プロキシに対応したアプリケーションのトラフィックを Clash に転送します。しかしシステムプロキシには本質的な限界があります。ゲームクライアントやコマンドラインツールなど、ネットワーク接続を直接確立するプログラムはシステムプロキシの制御を受けません。Clash 公式の TUN モードは、仮想 NIC を通じてネットワーク層でシステム全体のトラフィックを引き継ぎ、真のグローバル透過プロキシを実現する公式ソリューションです。
TUN モードの動作原理
TUN(Network Tunnel)は OS が提供する仮想ネットワークインターフェースメカニズムで、OSI モデルの第3層(ネットワーク層)で動作します。Clash が TUN モードを有効化すると、utun(macOS)または Meta(Windows/Linux)という名前の仮想 NIC がシステムに作成され、システムのルーティングテーブルが変更されてすべてのアウトバウンド IP トラフィックがこの仮想 NIC に送り込まれます。
トラフィックが仮想 NIC に入ると、Clash はユーザースペースでそれを解析して宛先アドレスを識別し、ルール設定に基づいてプロキシ経由か直接接続かを決定し、最終的に実際の物理 NIC を通じて送信します。このプロセス全体はアプリケーションに対して完全に透過的で、アプリケーション側での設定変更は一切不要です。
TAP モード(第2層、イーサネットフレームレベルで動作)と比較して、TUN モードは ARP やイーサネットヘッダーなどのレイヤー2の処理が不要なため、パフォーマンスが高く、クロスプラットフォーム対応も容易です。
TUN モードの有効化方法
TUN モードを有効化する方法は2つあります。GUI クライアントは通常、設定ページに TUN スイッチを備えています。Clash for Windows を例として説明すると、「全般」設定で先に「Service Mode」(サービスモード)をインストールし、インストール完了後に「TUN Mode」スイッチをオンにする必要があります。サービスモードのインストールには管理者権限が必要で、Clash をシステムサービスとして実行することでルーティングテーブルの変更権限を取得するためです。
もう一つの方法は、設定ファイルに TUN 設定を直接記述することです:
tun:
enable: true
stack: mixed
dns-hijack:
- any:53
auto-route: true
auto-detect-interface: true
3種類の TUN スタックモードの選択
Mihomo カーネルは3種類の TUN プロトコルスタック実装を提供しており、それぞれ長所と短所があります:
- system:OS のネイティブ TCP/IP スタックを直接使用します。最もパフォーマンスが高く、CPU とメモリのオーバーヘッドが最小ですが、一部のシステム構成では互換性の問題が発生する場合があります。
- gvisor:Google gVisor プロジェクトのユーザースペース TCP/IP プロトコルスタック実装を使用します。OS カーネルから完全に分離されており、互換性が最も高く、問題の切り分けや特殊な環境での使用に適していますが、system モードよりパフォーマンスはやや劣ります。
- mixed:TCP 接続に system スタックを、UDP 接続に gVisor スタックを使用します。両者の長所を統合しており、TCP のパフォーマンスはネイティブに近く、UDP の互換性も優れています。現時点で最も推奨される選択肢であり、大多数のシナリオで最高のパフォーマンスを発揮します。
DNS ハイジャックとリーク防止
dns-hijack: [any:53] の設定は非常に重要です。これは任意の IP アドレスの 53 番ポートに送信されるすべての DNS リクエストを、強制的に Clash 内蔵の DNS モジュールにリダイレクトする設定です。
なぜ DNS ハイジャックが必要なのか?TUN モードでは、一部のアプリケーションが直接 8.8.8.8:53 に DNS リクエストを送信する場合(システム DNS 設定を迂回する場合)、そのリクエストは物理 NIC を直接通過し、Clash のルール判定を経由しません。これにより DNS リーク(実際のアクセス記録が露出)が発生するだけでなく、一部のドメインがプロキシノードに正しくルーティングされない問題も引き起こします。DNS ハイジャックを有効にすることで、すべての DNS リクエストが Clash によって一元処理され、Fake-IP モードと組み合わせることで最適な DNS ハイジャック対策が実現できます。
動作確認とトラブルシューティング
TUN モード有効化後、以下の方法で正常動作を確認できます。ターミナルで curl -I https://www.google.com を実行し、正常な HTTP レスポンスヘッダーが返ってくれば、コマンドラインツールのトラフィックもプロキシ経由になっています。また、Clash の「接続」ページで TUN が引き継いだすべての接続をリアルタイムで確認できます。以前はシステムプロキシでカバーできなかったプログラムも含まれます。
有効化後にネットワークが完全に切断される場合、最も一般的な原因は auto-detect-interface が出口 NIC を正しく識別できなかったことです。手動で指定することができます:
tun:
enable: true
stack: mixed
auto-route: true
interface-name: en0 # macOS の物理 NIC 名。Windows は通常「イーサネット」または「Wi-Fi」