1. ホーム
  2. 技術ノート
  3. Clash TUN モード有効化ガイド
読了目安 9 分

Clash TUN モード有効化ガイド:仮想ネットワークカードの仕組みと全トラフィック接管の正しい手順

システムプロキシは「素直に設定を読む」ソフトしか捕まえられませんが、TUN モードはネットワークカードの層ですべてのトラフィックを捕捉し、プログラムがプロキシ設定を読むかどうかに関係なく機能します。本記事では TUN 仮想ネットワークカードの動作原理を解説し、Windows と macOS で TUN を有効化してサービスモードを導入し、DNS ハイジャックが機能しているか検証するまでの完全な手順を紹介します。

システムプロキシでは接管できないトラフィックを、TUN なら接管できる

まず、よく混同される概念を整理しておきます。システムプロキシ(System Proxy)と TUN モードは、同じ問題を異なる層で解決する手段です。システムプロキシの仕組みは、OS やブラウザが読み込むプロキシ設定項目を書き換えるというものです——Windows の「ネットワークとインターネット」設定にある HTTP/HTTPS プロキシアドレスや、環境変数 HTTP_PROXY/HTTPS_PROXY がそれに当たります。ソフトウェアがこの規約に従い、自らプロキシ設定を読みに行けば、トラフィックは Clash が待ち受けるポートに転送されます。しかし、ソフトウェアがこれを読まない、あるいは独自に接続方式をハードコードしている場合(一部のゲームクライアント、コマンドラインツール、一部の UWP アプリ、システム更新サービスなどに多い)、システムプロキシはそれを制御できません。

TUN モードは発想を変えたアプローチです。ソフトウェアに「プロキシを使うよう説得する」のではなく、OS のネットワークスタック内に仮想ネットワークカード(Virtual Network Adapter)を作成し、システムのデフォルトルートをこの仮想ネットワークカードに向けます。こうすることで、すべての送信トラフィック——ブラウザ、バックグラウンドサービス、プロキシ設定を認識しないプログラムを含め——がまずこの仮想ネットワークカードを経由し、その後 Clash(または Clash Meta / mihomo コア)がユーザー空間で読み取り、解析し、ルールに従って振り分けます。これがいわゆる「全トラフィック接管」であり、対象となるのはデバイス全体のネットワーク層であって、特定アプリのアプリケーション層設定ではありません。

よくある誤解を一つ訂正しておきます。TUN モードは「より強力なシステムプロキシ」ではなく、まったく異なる実装経路です。システムプロキシはアプリケーション層プロトコル(HTTP/HTTPS CONNECT)にとどまりますが、TUN はネットワーク層(IP パケット)で動作するため、TCP/UDP ベースの任意のトラフィック——ゲーム、VoIP、DNS クエリそのものを含む——を処理できます。UDP トラフィックのプロキシが必要な場面や、デバイス上のすべてのプログラムを統一的に処理する必要がある場面では、TUN モードでしか実現できないのはこのためです。

仮想ネットワークカードがどのように「トラフィックを横取り」するか:3つの鍵となる工程

TUN モードの動作フローを理解しておくと、今後遭遇し得る問題の切り分けに役立ちます。全体の流れは次の3工程に分けられます。

  1. 仮想ネットワークカードの作成:クライアントが OS の低レベル API を呼び出し(Windows では Wintun ドライバ、macOS では utun インターフェースが一般的)、Clashutun のような名前の仮想ネットワークアダプタを作成し、プライベート IP セグメントを割り当てます。
  2. ルーティングテーブルの調整:クライアントがシステムのデフォルトルートや一部のルーティングルールをこの仮想ネットワークカードに向けて書き換え、同時に Clash 自身のプロセスやローカルゲートウェイへの直接ルートは維持し、トラフィックが循環しないようにします。
  3. ユーザー空間での転送と振り分け:OS が仮想ネットワークカードにパケットを送り込むと、Clash コアがユーザー空間でこれらの IP パケットを読み取り、具体的な TCP/UDP セッションに復元し、設定ファイル内のルール(ドメインマッチ、IP セグメントマッチ、GeoIP など)に従って直接接続・特定のプロキシノード経由・拒否のいずれかを判定します。

これは、TUN モードがより高いシステム権限を必要とする理由の説明にもなります——ルーティングテーブルの変更と仮想ネットワークカードの作成は、Windows では管理者権限、macOS では sudo またはシステム拡張の承認が必要です。これはソフトウェアが「権限を越えている」わけではなく、仮想ネットワークカードという技術そのものが OS の低レベルリソースへのアクセスを必然的に要求するためです。

Notice / 注意

TUN モードを有効化する前に、他に仮想ネットワークカードを作成するソフト(別のプロキシツールや一部の VPN クライアントなど)が同時に動作していないか確認してください。2つの仮想ネットワークカードが同時にルーティングテーブルを競合させると、通信不能になったりトラフィックが正しく出て行かなくなったりする可能性が高いため、競合するソフトを完全に終了してから TUN を有効化することをおすすめします。

Windows で TUN モードを有効化する手順

Windows クライアントによって画面レイアウトは多少異なりますが、コアとなるスイッチと順序は共通です。以下は一般的な流れです。

  1. クライアントのコアが Clash Meta または mihomo であることを確認します(一部の旧バージョンの Clash Premium コアは TUN をサポートしないため、クライアントを更新するかコアを切り替えてください)。
  2. クライアントのメイン画面を開き、「プロキシ設定」または「ネットワーク」パネルから TUN モード のスイッチを探します。初回有効化時、通常は Wintun ドライバのインストール許可を求めるダイアログが表示されるので、許可をクリックします。
  3. クライアントが「サービスモード」(Service Mode)オプションを提供している場合は、あわせてインストールすることをおすすめします。サービスモードにより TUN 関連の処理が Windows サービスとして常時バックグラウンドで動作するため、TUN を有効化するたびに管理者権限でクライアントを再起動する必要がなくなり、ユーザーがログオフしても TUN ネットワークカードが異常にならなくなります。
  4. TUN スイッチをオンにすると、クライアントが管理者権限での再起動を求めるので確認をクリックします。初回起動時は 1〜2 秒程度の短いルート切り替えの遅延を感じることがあります。
  5. 「プロキシモード」パネルに切り替え、現在がルールモード(Rule)であり全直結モードでないことを確認します。これにより TUN が接管したトラフィックが、サブスクリプション内の振り分けルールに従って処理され、全部プロキシ経由・全部直結の一択にならずに済みます。
コントロールパネル → ネットワークと共有センター → アダプターの設定の変更
Clash / Mihomo という名前の仮想ネットワークカードが表示され、状態が「接続」になっているはずです

有効化後にネットワークアダプタの一覧に対応する仮想ネットワークカードが表示されない場合、多くは Wintun ドライバのインストール失敗、またはセキュリティソフトによるブロックが原因です。管理者権限でクライアントを手動で一度再起動してみるか、サードパーティのセキュリティソフトのドライバブロック機能を一時的に無効化してから再試行してください。

macOS で TUN モードを有効化する:システム拡張の承認が鍵

macOS は OS レベルでネットワーク拡張の作成に対してより厳格な審査プロセスを設けているため、macOS 上で TUN モードを有効化する際には通常「システム拡張の承認」というステップが1つ追加されます。

  1. クライアントの設定で TUN モードのスイッチをオンにすると、初回は「システム拡張がブロックされました」というメッセージが表示されます。
  2. 「システム設定 → プライバシーとセキュリティ」に移動し、画面下部に表示される該当クライアントのシステム拡張許可の案内から、許可をクリックします。
  3. 一部の macOS バージョンでは、システム拡張を反映させるためにパソコンの再起動が必要です。再起動後、クライアントを再度開いてください。
  4. 再度 TUN スイッチをオンにすると、クライアントが utun 仮想インターフェースの作成とルーティングテーブルの変更のために管理者パスワードを求めるので、パスワードを入力して確認します。
  5. 有効化に成功したら、ターミナルで ifconfig または networksetup -listallnetworkservices を実行して utun 系のインターフェースが出現しているか確認できます。
ifconfig | grep utun
# 正常な場合は以下のような出力が確認できます
utun5: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
Tip / ヒント

macOS でシステム拡張が繰り返し拒否される場合は、「システム設定 → プライバシーとセキュリティ → セキュリティ」で「App Store からのアプリケーションのみ許可」がオンになっていないか確認してください。一部のセキュリティポリシーは正当なネットワーク拡張の承認リクエストまで連帯してブロックしてしまうため、一時的に制限を緩めてから再試行してください。

TUN が本当に機能しているか検証する:スイッチの状態だけを見ない

スイッチが「オン」になっていても、トラフィックが本当に想定どおり接管されているとは限りません。ここでは2つの確実な検証方法を紹介します。1つ目は DNS 解決がハイジャックされているかを見る方法です——TUN モードでは、DNS クエリ自体も Clash コアを経由して処理されるべきで、そうでなければドメインベースのルールが正しくヒットしません。

nslookup example.com
# 返ってきた結果の応答サーバーアドレスに注目
# 表示されたのが Clash コアの設定で指定した DNS リスニングアドレス(198.18.0.2 などの fake-ip セグメント)であれば
# DNS クエリが TUN によって接管されており、OS 標準の DNS に直接届いていないことを意味します

2つ目の方法は、クライアントの接続パネルまたはトラフィックパネルで直接観察することです。TUN を有効化した後は、ブラウザのプロキシ設定を経由しないソフト(標準の天気アプリや一部のコマンドラインツールなど)の接続記録もリストに表示されるはずです。システムプロキシ設定に明確に対応していないプログラムを開いても、まったくネットに接続できない、あるいはトラフィックがパネルに表示されない場合は、TUN が実際には接管に成功していないことを示しています。ルーティングテーブルが他のソフトに横取りされていないか、サービスモードが正常に動作しているかを確認しましょう。

また、fake-ip モードでは一部のローカルネットワークアクセスや LAN 内デバイス検出系の機能が影響を受ける場合があるので、LAN 内デバイスへの正常なアクセスも必要な場合は、設定ファイルで LAN の IP セグメントに個別の直結ルールを設定するか、fake-ip-filter で該当するドメインやアドレスセグメントを除外し、LAN アクセスが誤ってプロキシ経由になるのを避けることをおすすめします。

TUN 有効化後によく発生する問題

  • 有効化直後に通信不能になる:多くはルーティングテーブルの競合が原因です。仮想ネットワークカードを作成する可能性のある他のソフトを先に終了し、クライアントを再起動してから再度有効化してください。
  • 一部のアプリにアクセスできず、証明書エラーが出る:クライアントで MitM(中間者パケットキャプチャ)関連機能も同時に有効化している場合、Clash が生成したルート証明書を別途インストールして信頼する必要があります。これは TUN モード自体とは無関係で、まず設定内で MitM 関連オプションを無効化して切り分けてみてください。
  • Windows でパソコンを再起動するたびに管理者権限で開き直す必要がある:サービスモードが正しくインストールされていないことを意味します。設定パネルに戻ってサービスコンポーネントを再インストールしてください。
  • LAN 内の他デバイスが互いを検出できなくなる:ルールリスト内で LAN のアドレスセグメント(192.168.0.0/16、10.0.0.0/8 など)が直結に設定されているか確認し、必要に応じて手動でルールを追加してください。

まとめると、TUN モードはシステムプロキシが本来持つカバレッジの死角問題を解決するものであり、原理的には仮想ネットワークカードとルーティングテーブルの調整に依存し、設定面ではシステムプロキシの有効化に比べてドライバのインストールと権限の承認という2つの手順が追加されます。この3つの工程——ネットワークカードの作成、ルートの調整、ユーザー空間での振り分け——を理解しておけば、具体的なエラーに遭遇した際にも、どの段階の問題かをおおむね特定でき、闇雲にクライアントを再インストールする必要がなくなります。

Clash をダウンロード