読了時間 約9分

Clash TUN モードとは?仮想ネットワークカードが全トラフィックを制御する仕組みと有効化方法

TUN モードが仮想ネットワークカードで全トラフィックを制御する仕組みを解説し、各OSでの有効化手順、適したケース、よくある競合の対処法を紹介します。

なぜ TUN が必要なのか:システムプロキシの3つの死角

多くの Clash クライアントは初期設定でシステムプロキシ方式で動作します。カーネルがローカルに HTTP/SOCKS 混合ポートを開き、そのアドレスを OS のプロキシ設定に書き込む仕組みです。導入は簡単ですが、この方式には構造上の死角が3つあります。

  • 設定に従うアプリしか対象にならない。プロキシを使うかどうかはアプリ側の判断次第で、システムプロキシ設定を読み取るプログラムだけがトラフィックをカーネルに渡します。git、curl、npm、docker といった多数の CLI ツール、大半のゲーム、一部のデスクトップソフトはこの設定を読まず、プロキシを素通りしてしまいます。
  • TCP しか処理できない。システムプロキシは UDP や ICMP を扱えないため、音声通話、オンラインゲーム、QUIC など UDP ベースのトラフィックは制御範囲外です。
  • DNS は依然としてローカル ISP 経由。アプリが自力で名前解決を行うため、結果が汚染される可能性があり、汚染済みの誤った IP をプロキシに渡しても意味がありません。

TUN モードの発想は、制御ポイントをアプリ層からネットワーク層へ移すことです。カーネルが仮想ネットワークカードを作成し、OS が発信するすべての IP パケットをそこにルーティングさせることで、アプリ側は一切関与せずに済みます。

仕組み:仮想ネットワークカードが全トラフィックを制御する原理

TUN は OS が提供する3層(ネットワーク層)の仮想デバイスで、生の IP パケットを送受信します。2層(データリンク層)版は TAP と呼ばれ、イーサネットフレームを扱います。Clash 系カーネル(mihomo など)が使うのは TUN です。

TUN を有効化すると、カーネルは次の3つの処理を順に行います。

  1. デバイス作成。Windows では wintun ドライバーを読み込んで仮想ネットワークカードを生成し、macOS では utun デバイスを作成、Linux では /dev/net/tun を開きます。
  2. ルーティング制御。システムのルーティングテーブルを書き換え、デフォルトルートを仮想ネットワークカードに向け(auto-route)、同時に物理ネットワークカードを実際の出口として記録します(auto-detect-interface)。
  3. パケット単位の処理。カーネルが仮想ネットワークカードから IP パケットを読み出し、TCP セッションを再構築し UDP の転送マッピングを確立、設定内のルール(DOMAIN-SUFFIX、GEOIP、IP-CIDR、MATCH など)に基づいて、その接続をプロキシノード経由・直接接続・拒否のいずれにするか判定します。

プロトコルスタック stack の選択

生の IP パケットを TCP/UDP ストリームに復元するには TCP/IP スタックが必要で、mihomo は3種類を用意しています。gVisor はユーザー空間実装で互換性が最も高く、system は OS のプロトコルスタックを流用してオーバーヘッドが小さく、mixed は TCP を system、UDP を gVisor で処理する折衷案です。デスクトップクライアントは通常 gVisor か mixed が初期値で、普段使いなら変更する必要はありません。

fake-ip との連携

TUN は通常 fake-ip モードと組み合わせて動作します。アプリの DNS クエリはカーネルに横取りされ(dns-hijack)、カーネルは 198.18.0.0/16 範囲内の仮アドレスを返しつつ、それとドメイン名の対応を記録します。アプリがその仮アドレスに接続しようとすると、カーネルは実際のドメイン名を逆引きし、ドメインルールに基づいて正確に振り分けます。これにより、ローカル DNS 汚染を回避できることと、IP パケットしか見えない場面でもドメインベースの振り分けが機能することという、2つの直接的なメリットが得られます。

TUN モードとシステムプロキシの比較

項目システムプロキシTUN モード
動作階層アプリ層(HTTP/SOCKS)ネットワーク層(IP パケット)
有効化の前提アプリがシステムプロキシ設定に従う必要があるアプリに依存せず、ルーティング層で強制的に制御
UDP / ICMP処理しないUDP を制御可能(ノードが UDP をサポートしている必要あり)、ICMP は実装により異なる
DNSアプリ側で名前解決カーネルが横取り可能、fake-ip と連携
権限要件特別な権限は不要管理者/root 権限またはサービスモードで仮想ネットワークカードを作成する必要あり
典型的な用途日常のブラウジング、通常業務ゲーム、CLI ツール、プロキシ設定を読まないソフト

両者は競合しません。多くのクライアントではシステムプロキシを保険として残すことを推奨しています。設定に従うアプリはアプリ層の経路を使い、それ以外のトラフィックは TUN がネットワーク層で受け止めます。

各OSでの有効化方法

Windows(Clash Verge Rev の場合)

  1. 設定画面を開き「サービスモード」(Service Mode)を見つけてインストールします。このサービスはシステムサービスとして常駐し、仮想ネットワークカードの作成を担当します。インストール後は、毎回管理者権限でメインプログラムを起動する必要がなくなります。
  2. 設定画面に戻り「TUN モード」のスイッチをオンにします。
  3. 初回有効化時にファイアウォールでブロックされた場合は、wintun 仮想ネットワークカードの通過を許可してください。

macOS

Clash Verge Rev または ClashX Meta で TUN(拡張モード)のスイッチをオンにすると、特権ヘルパーをインストールして utun デバイスを作成するためログインパスワードの入力が求められます。一度承認すれば以降スイッチをオンにするたびに聞かれることはありません。

Linux

TUN デバイスの作成には CAP_NET_ADMIN 権限が必要です。root でカーネルを実行するか、カーネルバイナリに権限を付与します。

sudo setcap cap_net_admin,cap_net_bind_service=+ep /usr/local/bin/mihomo

Android と iOS

モバイル端末には専用のスイッチはありません。Android クライアント(Clash Meta for Android、FlClash など)は OS の VpnService をベースに動作し、iOS 側(Clash Plus など)は Network Extension の Packet Tunnel をベースに動作します。いずれも仕組み自体が仮想ネットワークカード方式です。これが、モバイル端末では全アプリのトラフィックを問答無用で制御できる理由です。

手動で設定を書く(上級者向け)

mihomo の設定ファイルを直接編集する場合、以下が同等の設定です。

tun:
  enable: true
  stack: mixed
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53
    - tcp://any:53

auto-route はデフォルトルートの制御を担当し、auto-detect-interface は実際の出口ネットワークカードの識別を担当します。両者はどちらも欠かせません。dns-hijack は 53 番ポートの DNS クエリをカーネルに横取りさせます。

NOTEデスクトップクライアントの TUN スイッチは、実質的にこの設定をあなたの代わりに書き換えているだけです。手動での設定変更とGUIのスイッチ操作を同時に行うと互いを上書きしてしまうので避けてください。

TUN を有効にすべきケース

  • ゲームとリアルタイム通話:UDP トラフィックを制御できるのは TUN だけです。ただし使用するノードが UDP 転送に対応している必要があります。
  • CLI・開発ツール:git clone、curl、パッケージマネージャー、コンテナのイメージ取得などシステムプロキシを読まない操作。
  • プロキシ設定に従わないクライアント:一部の中国製ソフト、古いアプリ、独自の固定ネットワークスタックを内蔵したアプリ。
  • プロセス単位の振り分け:TUN を有効にするとカーネルはどのプロセスからの接続かを識別できるようになるため、PROCESS-NAME ルールと組み合わせて細かく振り分けられます。

逆に言えば、日常的なウェブブラウジングが中心のユーザーにとって TUN の有無は大差なく、システムプロキシだけで十分な場合が多いので、無理に有効化する必要はありません。

よくある競合とトラブルシューティング

他の VPN・高速化ツールとの併用

VPN 系ツールはいずれもデフォルトルートを制御しようとするため、2つ同時に有効化するとルーティングテーブルが互いに上書きし合い、両方とも機能しなくなるのが通例です。同時に有効化する制御ツールは1つだけに留めてください。どうしても併用が必要な場合は、もう一方のツールでローカルセグメントとノードサーバーのアドレスをバイパスリストに追加してください。

トラフィックのループ

カーネル自身がプロキシサーバーへ送るトラフィックまで TUN にルーティングされると、ループが発生し、有効化した瞬間にネット全体が繋がらなくなる現象が起こります。auto-detect-interface の役割は、カーネルの発信を物理ネットワークカードに紐づけて仮想ネットワークカードを回避させることです。ルーティングテーブルを手動で編集する場合は、ノードサーバーの IP が必ず物理出口を経由するようにしてください。

ブラウザの DoH がDNS制御を回避する問題

Chrome や Edge の「セキュアDNS」機能は名前解決を DoH サーバー(443番ポート経由)に委ねてしまうため、カーネルの dns-hijack ではこれらのクエリを捕捉できず、fake-ip が機能しなくなります。結果としてブラウザではドメインルールが効かなくなります。対処法はブラウザのセキュアDNSを無効化し、名前解決をカーネルに戻すことです。

社内・ローカルアドレスに接続できない

デフォルトルートが制御下に置かれると、社内ネットワーク、学内ネットワーク、ルーターの管理画面などに到達できなくなることがあります。ルールにローカルセグメント向けの IP-CIDR 直接接続ルールを追加してください。

rules:
  - 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

仮想マシン、WSL2、Docker

Windows では Hyper-V 仮想スイッチと TUN のルーティングが競合し、WSL2 の接続断やコンテナの外部アクセス不可を引き起こすことがあります。仮想ネットワークカードのインターフェースメトリック(ホップ数)を調整して WSL2 のトラフィックを正しく制御対象にする、またはクライアントの設定で Hyper-V のセグメントを除外してください。

TUN を有効にすると完全にネットに繋がらなくなる

  1. auto-routeauto-detect-interface の両方が有効になっているか確認してください。
  2. 他のプロキシツールの「拡張モード」「グローバルルーティング」系機能を終了してから再試行してください。
  3. クライアントのログを確認し、仮想ネットワークカードの作成に成功しているか、権限エラーが出ていないかを確かめてください。
  4. それでも直らない場合はTUNスイッチをオフにしてください。多くのクライアントはルーティングテーブルを自動的に復元します。復元されない場合はネットワークサービスまたはシステム自体を再起動してください。
WARNTUN を無効にする正しい順序は、先にスイッチをオフにしてからクライアントを終了することです。プロセスを直接強制終了すると、ルーティングテーブルの復元が間に合わずネット接続断が起こることがあります。この場合はシステムを一度再起動すれば直ります。

よくある質問

Q-01TUN モードとシステムプロキシは同時にオンにできますか?

できますし、むしろ両方有効にしておくのがおすすめです。システムプロキシ設定に従うアプリはアプリ層のプロキシを使い、従わないアプリは TUN がネットワーク層で制御するため、両者は補完関係にあり競合しません。

Q-02TUN を有効にするとパフォーマンスが落ちますか?

全トラフィックがカーネルのプロトコルスタックを経由するため、大容量ダウンロード時には純粋なシステムプロキシと比べて CPU 使用率がやや高くなりますが、日常的なブラウジングではほぼ気になりません。パフォーマンスを重視する場合は stacksystem に変更してください。

Q-03TUN を有効にするとゲームの遅延が増えるのはなぜですか?

まずノードが UDP 転送に対応しているか確認してください。次にルールを確認し、ゲームのトラフィックが MATCH の兜底ルールによって遅延の大きいノードに送られていないかを見てください。ゲームのプロセスや対象 IP セグメントには低遅延ノードを個別に指定するのが対策になります。

Q-04スマホでは TUN を別途オンにする必要がありますか?

不要です。Android の VpnService と iOS の Packet Tunnel はそれ自体が仮想ネットワークカードの実装であり、モバイルクライアントを起動した時点で全アプリのトラフィックが自動的に制御対象になります。

Q-05TUN を有効にしたらネットに繋がらなくなりました。どう直せばいいですか?

まずクライアントで TUN スイッチをオフにしてください。多くの場合ルーティングテーブルは自動的に元に戻ります。それでも直らない場合は、ネットワークサービスを再起動するか、システム自体を再起動してください。残留した仮想ネットワークカードやルーティング項目がクリアされます。

まとめ

TUN モードは、プロキシの制御ポイントをアプリ層からネットワーク層へ下げる仕組みです。1つの仮想ネットワークカードが発信するすべての IP パケットを受け止め、カーネルがルールに基づいて接続ごとに振り分けます。これによって、プロキシ設定を読まないアプリ、UDP、汚染された DNS という、システムプロキシでは対処できない3種類のトラフィック問題を解決できます。日常的なブラウジングであればシステムプロキシで十分ですが、ゲーム、CLI ツール、頑固なクライアントを扱う場合は TUN を有効化し、他の VPN ツール、ブラウザの DoH、社内ネットワークセグメントとの競合に注意してください。

TUN モード対応の Clash クライアントをダウンロード

ダウンロードページには Clash Verge Rev、FlClash、Clash Plus など主要クライアントを掲載しており、いずれも mihomo カーネルをベースに TUN モードと fake-ip をサポートし、Windows、macOS、Linux、Android、iOS に対応しています。

Clash をダウンロード