TUN モード完全解説
システムプロキシは表面的な解決策に過ぎません。TUN モードこそが「すべてのトラフィックをプロキシ経由にする」根本的な方法です。本記事では仕組みから設定まで、TUN モードの使い方を徹底解説します。
システムプロキシの限界
Windows と macOS にはどちらも「システムプロキシ」の仕組みがあります。システム設定にプロキシサーバーのアドレスとポートを入力すると、ブラウザやメールクライアントなどネットワーク規約に準拠したプログラムがこの設定を読み取り、プロキシ経由でリクエストを送信します。この仕組みは実装が簡単で互換性も高く、Clash の最も一般的な動作モードです。
しかし、システムプロキシには根本的な限界があります。アプリケーションの自発的な協力に完全に依存しているという点です。システムプロキシの本質は「推奨」にすぎず、OS はすべてのプログラムにそれを強制できません。アプリは低レベルのネットワーク API を直接呼び出してバイパスできます。次のような一般的なシナリオでは、システムプロキシはまったく機能しません:
ゲームクライアント:Steam、Epic Games、EA App などのゲームプラットフォームは通常、自前でネットワークリクエストを管理しており、システムプロキシ設定を読み取りません。低遅延が必要なマルチプレイヤーゲームをプレイする際、Clash が有効になっていてもゲームのトラフィックは直接接続され、プロキシによる高速化は得られません。
UWP アプリ(Windows):Windows Store アプリはサンドボックス内で動作し、AppContainer の権限分離によりシステムプロキシ設定にアクセスできません。Xbox アプリ、Spotify の Windows 版、一部の Microsoft 標準ツールがこれに該当します。
コマンドラインツール:git、npm、pip、docker pull などのコマンドラインツールは、HTTP_PROXY 環境変数を手動で設定しない限りシステムプロキシを使用しません。開発者にとって特に厄介で、ターミナル操作のたびにプロキシ変数を手動で export する必要があります。
iOS / Android ネイティブアプリ:モバイルのシステムプロキシは通常 HTTP/HTTPS リクエストにのみ有効で、UDP 通信(多くのゲーム、ビデオ通話、DNS リクエストなど)はプロキシの外に完全に置かれます。
TUN モードとは
TUN(TUNnel)は OS カーネルが提供する仮想ネットワークデバイスインターフェースで、元々 VPN の実装に使用されていました。TUN モードにより、Clash はシステムカーネルレベルで仮想 NIC(通常 utun または Meta と命名)を作成し、システムルーティングテーブルを変更することで、デバイス上のすべてのネットワークトラフィック(システムプロキシに対応しているトラフィックだけでなく)をこの仮想 NIC に転送し、Clash がルールに基づいてトラフィック分岐を処理します。
これにより、トラフィックがアプリケーションのネットワークライブラリに入る前に、カーネルレベルで Clash に引き継がれます。アプリケーションがシステムプロキシ設定に従うかどうか、どのプログラミング言語やネットワークフレームワークを使用しているかに関わらず、ネットワークリクエストが発生すれば必ず Clash のルールエンジンを通過します。これが「真のグローバルプロキシ」の意味です。プロキシの管理から逃れられるプログラムは存在しません。
動作原理
TUN モードを有効にすると、Clash はシステムに対して次の処理を行います:
ステップ 1:仮想 NIC の作成。OS カーネルに仮想ネットワークデバイスを登録し、プライベート IP 範囲(例:198.18.0.0/16)を割り当てます。この NIC には物理的な対応がなく、完全に Clash プログラムがユーザー空間でその動作をシミュレートします。
ステップ 2:システムルーティングテーブルの変更。グローバルをカバーする 2 つのルーティングルールをシステムルーティングテーブルに追加します。0.0.0.0/1 と 128.0.0.0/1(合わせてすべての IPv4 アドレスに等しい)を宛先とするすべてのトラフィックが仮想 NIC に転送されます。これら 2 つのルートはデフォルトゲートウェイルートより優先度が高く、すべてのアウトバウンドトラフィックが最初に Clash を経由することを保証します。
ステップ 3:DNS ハイジャック(Fake-IP)。TUN モードは通常 Fake-IP DNS モードと組み合わせて使用されます。アプリが DNS クエリを発行すると、Clash は即座に「偽の」内部 IP(198.18.x.x)を返し、アプリはこの偽の IP を使って接続を開始します。Clash は仮想 NIC レベルでこの接続をインターセプトし、元のドメイン名を復元して、ルールに基づき直接接続かプロキシかを決定します。このプロセスはアプリに透明ですが、実際の DNS クエリ遅延を省くため速度も向上し、DNS リークを完全に防止します(DNS リクエストがシステムのデフォルト DNS サーバーに送信されません)。
ステップ 4:トラフィック分岐処理。Clash はすべてのトラフィックを受け取り、設定ファイルのルールセットに従って各接続の宛先を判断します。直接接続ルールに一致するものは実際の NIC に直接転送し、プロキシルールに一致するものはプロキシノード経由で中継し、ブロックルールに一致するものは直接破棄します。
主な使用シーン
ゲームのプロキシ高速化:これは TUN モードの最も一般的な使用動機です。Steam のダウンロード、ゲーム内マッチメイキングサービス、ボイスチャット(Discord)などはすべて UDP を使用しており、システムプロキシではまったく効果がありません。TUN モードを有効にすると UDP トラフィックも引き継がれ、クロスリージョンゲームの遅延を効果的に低減し、安定性を向上させます。
開発者ツール:プロキシ環境変数を手動で export する必要がなくなります。TUN モードでは npm install、git clone、docker pull などのコマンドが自動的にプロキシ経由になり、開発体験が大幅に向上します。
ストリーミング解除:一部のストリーミングクライアント(ブラウザ版ではなく Netflix 公式アプリなど)はシステムプロキシをバイパスします。TUN モードにより、そのトラフィックも解除ノードを経由できます。
iOS のグローバルトラフィック管理:iOS では Clash Plus はデフォルトで TUN/VPN モードで動作し、すべてのアプリのトラフィック(UDP ビデオ通話を含む)がプロキシの管理下に置かれ、一元管理とトラフィック分岐が可能です。
各プラットフォームの設定方法
Windows
管理者権限で Clash Plus を実行してください(右クリック→「管理者として実行」、またはタスクマネージャーでプロセス権限を確認)。「Settings → TUN Mode」に進み、「Enable TUN Mode」スイッチをオンにします。初回有効化時、プログラムは仮想 NIC ドライバーのインストールを試みます。システムが UAC 承認ダイアログを表示したら「はい」をクリックしてください。インストール完了後、デバイスマネージャーに「Mihomo」または「WinTun」という名前の仮想 NIC が表示されれば、インストール成功です。
macOS
「Settings → TUN Mode」に進み、スイッチをオンにします。初回有効化時、macOS は「システム拡張がブロックされました」という通知を表示します。「システム設定→プライバシーとセキュリティ」に移動し、「セキュリティ」セクションで関連する拡張機能を見つけて「許可」をクリックします。その後、管理者パスワードを入力して Clash Plus を再起動する必要があります。以降は TUN モードを有効にする際に再度承認は不要です。
Android / iOS
モバイル版の Clash Plus はデフォルトで TUN/VPN モードで動作します。ホーム画面の「接続」ボタンをタップし、VPN 権限のリクエストが表示されたら「許可」をタップするだけで、プロキシが TUN モードになります。追加設定は不要です。iOS では「On Demand(オンデマンド接続)」を同時に有効にすることをお勧めします。ロック画面後にプロキシが切断されるのを防ぐためです。
Stack モードの選び方
Clash Plus(Mihomo カーネル)の TUN モードは 3 種類のネットワークプロトコルスタック(Stack)をサポートし、設定ファイルの tun セクションの stack フィールドで指定します:
| Stack | 実装方式 | 適用シーン |
|---|---|---|
system | OS の TCP/IP プロトコルスタックを使用 | 互換性が最高、安定したパフォーマンス、デフォルト推奨 |
gvisor | Go 言語で実装されたユーザー空間ネットワークスタック(Google gVisor) | より強い分離性、特殊な分離要件があるシーンに適する |
mixed | TCP は system、UDP は gvisor を使用 | TCP パフォーマンスと UDP 互換性を両立、推奨 |
ほとんどのユーザーには mixed モードを推奨します。TCP 接続はパフォーマンスを確保するために OS プロトコルスタックを使用し、UDP 接続は gVisor を使用してより良い DNS 処理と UDP トラバーサル互換性を確保します。一部の UDP アプリに異常が発生した場合は、Stack を system に切り替えて問題を診断してみてください。
注意事項
権限の要件:TUN モードには管理者 / root 権限が必要です。システムルーティングテーブルの変更は特権操作だからです。Windows で管理者権限で Clash Plus を実行しないことは、TUN モード起動失敗の最も一般的な原因です。
システムプロキシとの共存:TUN モードを有効にしながらシステムプロキシを同時に保持できます。システムプロキシに対応したアプリでは、システムプロキシがその HTTP(S) リクエストを処理し、TUN モードがその他すべてのトラフィックをカバーします。両者は競合しません。ただし、システムプロキシが処理するトラフィックは TUN レベルでループバックを形成しますが、Clash 内部で自動的に処理されるため無限ループは防止されます。
パフォーマンスのオーバーヘッド:TUN モードはカーネルレベルですべてのトラフィックをインターセプトして処理するため、システムプロキシより多くの CPU とメモリを消費します。ローエンドデバイス(古いスマートフォン、Raspberry Pi)では顕著なパフォーマンス低下が発生する可能性があるため、日常の軽い使用にはシステムプロキシを優先することをお勧めします。
プロキシループの防止:Clash がプロキシサーバーに接続するトラフィック自体が TUN に引き継がれないようにしてください。引き継がれると無限ループになります。Mihomo カーネルはアウトバウンドプロキシ接続を自動的に直接接続トラフィックとしてマークするため、通常は手動での対応は不要です。ただし接続がハングする場合は、ルーティングループの問題がないか確認してください。
まだクライアントをインストールしていませんか?
ダウンロードページからお使いのシステムに適したバージョンを入手してください。TUN モードは設定から一クリックで有効化できます。