TUN モードとは:仮想ネットワークアダプタとレイヤー3での引き込み
TUN は OS が提供する仮想ネットワークデバイスで、ネットワーク層(レイヤー3)で動作し、通過するのは標準的な IP パケットです。TUN モードを有効化すると、クライアントは順に次の3つの処理を行います。
- OS に仮想ネットワークアダプタを登録する。Windows では Mihomo や utun という名前のアダプタとして表示され、macOS と Linux では新しい utun デバイスとして追加されます。
- ルーティングテーブルを書き換え、デフォルトルートをこの仮想アダプタに向ける。端末が送信する IP パケットはまずカーネルに渡ります。
- カーネル(mihomo)がアダプタ上でパケットを読み取り、宛先ドメインとポートを解析し、設定内のルールに従って直接接続かノード経由かを判断してから、実際のネットワークアダプタから送信します。
重要なのはレイヤーの違いです。システムプロキシはアプリ層のプロトコルで、アプリ側が自ら設定を読み取って従わなければ機能しません。一方 TUN はネットワーク層でパケットを捕捉するため、アプリはプロキシの存在自体を意識せず、従うかどうかという概念がそもそもありません。これが TUN でターミナルのコマンド、ゲームの通信、UWP アプリまで制御できる理由です。
その代わり権限が必要です。仮想ネットワークアダプタの作成やルーティングテーブルの書き換えには管理者権限(Windows / macOS)または root 権限(Linux)が必要なため、初回有効化時に権限確認のダイアログが表示されるのは正常な動作です。
TUN モードとシステムプロキシの違い
| 比較項目 | システムプロキシ | TUN モード |
|---|---|---|
| 動作レイヤー | アプリ層(HTTP / SOCKS) | ネットワーク層(IP パケット) |
| 有効化の条件 | アプリ側がシステムプロキシの設定を読み取る必要がある | アプリ側の対応不要、端末全体を引き込み |
| 適用範囲 | ブラウザと設定に従うアプリのみ | すべての TCP / UDP 通信 |
| UDP 対応 | 基本的に非対応 | 対応(ノードの仕様に依存) |
| 必要な権限 | 一般ユーザーでも可 | 管理者 / root |
| 典型的な抜け穴 | ターミナル、ゲーム、UWP アプリ | 他の VPN 系ソフトとルーティングを奪い合う |
使い分けの目安は2つです。日常的なブラウジングならシステムプロキシで十分、オーバーヘッドも最小限。一方、ターミナルの通信もプロキシ経由にしたい、ゲームを高速化したい、システムプロキシをまったく読み取らないアプリがある——こうした場合は TUN を有効化します。両者は同時に有効化しても競合しません。TUN が引き込んだ後は、システムプロキシ側のルートはほぼ使われなくなります。ただし不具合を調査する際は片方だけ残すのがおすすめです。変数が多いと原因の特定が難しくなります。
有効化前の準備:カーネル・権限・設定
カーネルは mihomo 系である必要がある
TUN はカーネルによって実装されています。オリジナルの Clash はメンテナンスが終了しており TUN のサポートも不完全なため、安定した TUN モードを使うにはクライアントのカーネルが mihomo(Clash Meta)である必要があります。本サイトで紹介している Clash Verge Rev、Clash Nyanpasu、FlClash、Clash Plus はいずれも mihomo カーネルを採用しています。
設定ファイルでは、mihomo の TUN 項目は以下のように記述します。GUI クライアントでは通常トグルをオンにするだけでこれらの項目が自動的に設定されるので、内容を把握しておくだけで十分です。
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
stack:プロトコルスタックの実装方式。systemはOS標準のスタックを使い互換性が最も高く、gvisorはユーザー空間のスタックで UDP やゲームの場面で安定しやすく、mixedは TCP を system、UDP を gvisor で処理する方式で日常用途に推奨です。auto-route:ルーティングテーブルを自動で書き換え、端末全体の通信を引き込みます。オフにすると仮想アダプタは作られても通信が流れ込まず、TUN を有効化していないのと同じ状態になります。auto-detect-interface:実際の出口となるネットワークアダプタを自動検出します。複数のネットワークアダプタがあるPCではオンのままにしておくのがおすすめです。dns-hijack:53番ポート宛の DNS クエリをハイジャックし、カーネル内蔵の DNS で処理します。DNS リークによる振り分け判定の誤りを防ぎます。
DNS は fake-ip モードとの併用が推奨で、TUN 環境下での振り分けが最もクリーンになります。
dns:
enable: true
enhanced-mode: fake-ip
各OSでの TUN 有効化手順
Windows(Clash Verge Rev を例に)
- 設定ページを開き、まず「サービスモード」をインストールします。これは常駐する小さなヘルパーで、導入しておけば TUN モードのたびに管理者権限でクライアントを起動する必要がなくなります。
- 設定ページに戻り、「TUN モード」のトグルをオンにします。
- ファイアウォールの確認ダイアログが表示されたら許可を選択します。ネットワーク接続の一覧に仮想ネットワークアダプタが1つ追加されます。
- サービスモードを導入しなくても使えますが、クライアントを起動するたびに右クリックで「管理者として実行」する必要があります。
macOS
- Clash Verge Rev または ClashX Meta の設定画面で TUN を有効化します(クライアントによっては「拡張モード」と表記されている場合もあります)。
- 初回有効化時はログインパスワードの入力が求められます。特権ヘルパーをインストールするためのもので、一度入力すれば以降は不要です。
- ターミナルで
ifconfigを実行し、新しく utun デバイスが追加されていれば有効化に成功しています。
Linux
- GUI クライアントなら TUN のトグルをオンにするだけです。コマンドラインで mihomo を実行する場合は root 権限が必要、またはバイナリに
cap_net_admin権限を付与してください。 - デスクトップ環境に複数の VPN 系ツールを入れている場合、ルーティングテーブルを制御できるのは常に1つだけなので、他のツールは先に停止しておきましょう。
Android と iOS
- Android の Clash クライアント(Clash for Android、FlClash、Clash Plus)は OS の VpnService を利用して動作しており、実質的にすでに TUN 相当なので個別のオン/オフスイッチはありません。起動をタップすると OS が「接続のリクエスト」を表示し、許可するとステータスバーに鍵アイコンが表示され、これで全トラフィックの引き込みが完了しています。
- バックグラウンドでの通信断を防ぐため、クライアントを電池の最適化対象から除外しておくことをおすすめします。
- iOS も同様です。クライアントは OS のネットワーク拡張機能(Packet Tunnel)を通じてトラフィックを引き込みます。初回起動時に VPN 構成の追加を許可すれば完了です。
TUN の引き込みが有効になっているか確認する
確認は3ステップです。
- ネットワークアダプタを確認する。Windows では
ipconfigを実行し、Mihomo または utun を含む名前のアダプタを探します。macOS と Linux ではifconfigまたはip addrで utun デバイスを確認します。 - システムプロキシを参照しないツールで出口 IP を確認する。ターミナルで次を実行します。
curl ip.sb
curl は既定でシステムプロキシの設定を参照しません。TUN を有効化する前に実行すると自分の実際の IP が返り、有効化した後に実行するとノードの出口 IP が返ります。これはトラフィックが仮想ネットワークアダプタに引き込まれたことを示す、最も分かりやすい判定方法です。
- 接続ページを確認する。クライアントの接続(Connections)パネルに curl が作成した接続の記録が表示され、ルールチェーンの列にどのルールにマッチしたかが表示されているはずです。
curl の結果が自分の実際の IP のままの場合は、まず auto-route が有効になっているか、他の VPN 系ソフトによってルーティングテーブルが書き換えられていないかを確認してください。
よくある問題と対処法
他の VPN 系ソフトとの競合
企業 VPN、ネットゲーム用アクセラレータ、WSL2 の仮想スイッチなどはいずれもルーティングテーブルを書き換えます。複数のソフトが同時にデフォルトルートを奪い合うと、結果的にどれも正常に通信できなくなります。同時に有効化するのは常に1つだけにしてください。
ブラウザは通るのにターミナルがプロキシを通らない
多くの場合 auto-route が有効になっていない、またはルーティングテーブルが他のソフトに書き換えられています。他の VPN 系ツールを一旦停止してから TUN を再度有効化してください。複数のネットワークアダプタがある環境では auto-detect-interface がオンになっているか確認してください。
DNS の異常:プロキシは通るのにドメイン名の解決に失敗する
dns-hijack が設定されているか、enhanced-mode が fake-ip になっているかを確認してください。システムの DNS が到達不能なアドレスに固定されている場合も同じ症状が起こります。
ゲームの UDP 通信が通らない
TUN は経路を用意するだけで、UDP を転送できるかどうかはノード自体が UDP に対応しているかに依存します。ノードが対応しているのに通らない場合は、stack を system から gvisor または mixed に変更して試してください。
最後に一点補足です。TUN は端末全体の通信をプロトコルスタックに通すため、わずかながら性能とバッテリーへの負荷が増えます。全トラフィックの引き込みが不要な場面では TUN をオフにしてシステムプロキシのみにしたほうが省電力です。