設定の実践 · Clash 技術ブログ

Clash の TUN モードとシステムプロキシの違い:DNS のオーバーライドと Fake-IP の設定

システムプロキシが受け取るのは、プロキシ設定を参照するアプリの通信だけです。一方、TUN はシステムのネットワーク層からより多くの通信を引き継ぎます。まず失敗しているプログラムの接続記録があるか確認し、その後 TUN、DNS のオーバーライド、Fake-IP が必要かを判断してください。

  • TUN
  • DNS
  • fake-ip
目次

ブラウザーは使えるのにターミナルの接続記録がない場合と、リクエストは記録されるのにドメインルールが効かない場合では、変えるべき設定が異なります。前者は通信がクライアントに届く仕組みを、後者は実際のドメイン、名前解決の結果、ルールを確認します。ノードやサービス自体の不具合は、取り込む通信の範囲を広げても解決しません。こうした違いを押さえると、仮想アダプターを使うべきか、内部ドメイン一つに例外を設定すればよいかを判断できます。

システムプロキシと TUN がアプリの通信を取り込む仕組み

システムプロキシを有効にすると、Clash はローカルプロキシアドレスをOSへ書き込み、この設定を参照するアプリが HTTP、HTTPS リクエストをそのポートへ送ります。ブラウザは通常この設定を使いますが、ターミナルツール、ゲーム、一部のデスクトップアプリは使わない場合があります。システムプロキシだけでは UDP を一律に取り込むこともできません。

TUN は仮想アダプターを作り、システムルーティングを通じて、より多くの TCP、UDP 接続を Mihomo へ入れます。「このプロセスがローカルプロキシポートを使っていない」という入口の問題は解決できますが、ノードの可用性、ルール順序、サーバーが返す 403 は変えられません。

二つの入口方式の主な違い

項目システムプロキシTUN
トラフィックを Clash へ入れるかを誰が決めるかアプリがシステム設定を参照するかシステムルーティングと仮想アダプター
UDP通常は取り込まないTUN へ入れることはできるが、ノードと設定には引き続き依存する
システム権限プロキシ設定の変更仮想アダプター、サービス、またはネットワーク拡張の権限も必要
ロールバックプロキシスイッチを無効にするだけTUN を無効にし、ルートとインターフェースが解除されるまで待つ
システムプロキシと TUN のトラフィック入口
  1. アプリが接続を開始するブラウザ、ターミナル、ゲーム、またはバックグラウンドサービス
  2. システムプロキシまたは TUNそのトラフィックがコアへ入れるかを決める
  3. ルールと DNSドメインを維持し、直接接続かプロキシかを決める
  4. 実際の送信経路DIRECT、プロキシノード、または拒否

システムプロキシまたは TUN が通信をコアに渡します。その後、直接接続するかプロキシノードを使うかは、ルール、DNS の結果、ポリシーグループによって決まります。

Connections でアプリに TUN が必要か判断する

同じ操作で前後を比較する

  1. Profile、Rule モード、ノードを固定する

    自動切り替えや設定更新が入口のテストを妨げないようにします。

  2. システムプロキシだけを有効にする

    対象プログラムで、決めた操作を一つ繰り返します。

  3. Connections を確認する

    リクエストが表示されていればクライアントに届いています。続けてルールとログを確認します。

  4. 記録がない場合に限り TUN を有効にする

    同じ操作をもう一度行い、新しい接続が表示されるか比較します。

TUN で新しい接続が表示されて成功すれば、不足していた取り込み範囲を補っています。二つの入口のどちらでもリクエストが見えるのに同じ timeout になる場合は、入口を切り替え続けず、ノード、DNS、対象ネットワークを確認してください。

auto-route、出口アダプター、stack の役割

Mihomo の auto-route はトラフィックを TUN へ送り、auto-detect-interface は実際の送信アダプターを識別します。stack には system、gvisor、mixed などの実装を選択できます。既定値で対象アプリを取り込める場合は、「高速化」のためだけに安易に変更しないでください。

Wi-Fi からホットスポットへ切り替えた後に突然通信できなくなる場合、送信アダプターの変更が原因かもしれません。特定のコンピュータで system または mixed だけがファイアウォールに遮断される場合に限り、コアプロセス用のファイアウォールを調整します。Windows の strict-route は VirtualBox などの仮想ネットワークにも影響する可能性があるため、仮想マシン使用時は個別に確認してください。

現在の Mihomo 設定へ統合する TUN フィールドの例
tun:
  enable: true
  stack: mixed
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

ドメインルールが効かない場合は DNS が Mihomo に入るか確認する

DNS はドメイン名を接続用のアドレスに変換します。名前解決が Mihomo を迂回すると、コアには IP しか見えず、ドメインルールが想定どおりに一致しないことがあります。解決結果とプロキシの出口が合わず、トップページは開いても画像が失敗したり接続が不安定になったりする場合もあります。

dns-hijack は対象の DNS 通信を Mihomo 内部の DNS へ渡しますが、すべてのシステムで自動的に動くわけではありません。Windows と macOS では、LAN 内の DNS サーバーへ送るクエリを自動で取り込めないため、実際のシステム DNS アドレスと取り込み結果を確認します。Android のプライベート DNS も通常の取り込み経路を迂回します。

Connections にドメインがあり、ルールも正しい
リクエストにはルール判断に使えるドメイン名があります。プロキシリクエスト、DNS の対応情報、スニッフィングなどから得られた可能性があります。
IP しか表示されず、ドメインルールに一致しない
DNS が Mihomo に入っているか、アプリが暗号化 DNS を使用しているか確認してください。
IP ではアクセスできるが、ドメインでは名前解決エラーになる
システム DNS、Mihomo DNS、現在のネットワークを重点的に比較します。

Fake-IP:仮想アドレスと元のドメイン名を対応づける

fake-ip モードはアプリに予約済みアドレスを返し、対応するドメイン名を記憶します。アプリがそのアドレスに接続すると、Mihomo はドメインを復元し、DOMAIN、DOMAIN-SUFFIX、RULE-SET で出口を判断できます。

この方法で DNS が自動的に速くなることも、リモートノードの品質が変わることもありません。一部の LAN サービス、端末検出、企業向けソフトウェア、IP を直接検証するプログラムでは互換性がない場合があります。対象ドメインを正確に fake-ip-filter へ追加するか、検証後に別の DNS 拡張モードを選択してください。

Fake-IP でよく見られる結果

動作説明
システムの問い合わせが予約済みアドレスを返す正常な fake-ip マッピングの場合があり、ドメインが乗っ取られたことを意味しない
Connections に元のドメインを表示できるマッピングによってコアがドメインルールを評価できる
特定の内部ドメインが fake-ip では失敗する正確なドメインを除外し、内部 DNS で解決する
すべてのサイトが遅いfake-ip だけで結論を出さず、ノード、DNS 上流、ログを続けて確認する

redir-host と単一ドメインの fake-ip-filter 例外

一部の企業向けソフトウェア、LAN サービス、端末検出機能は、DNS が返す実アドレスを直接使うため、Fake-IP に適さない場合があります。設定全体を redir-host にする方法と、互換性がないと確認したドメインだけを fake-ip-filter へ追加する方法があります。前者はすべてのドメインの名前解決方法を変更し、後者は影響範囲を小さくできます。

redir-host は上流 DNS が返す実際の IP をアプリに渡します。Mihomo が Fake-IP のように事前にドメイン情報を保持できるとは限らず、識別はクライアント、キャッシュ、スニッフィングにも左右されます。内部ドメイン一つだけが失敗する場合は、構成全体ではなくそのドメインの例外から調整します。

実際の IP が必要な場合の選び方

状況より適した対処検証結果
一つの企業内ドメインだけが失敗する正確な fake-ip-filter を追加し、内部 DNS を使用する実際の内部 IP を返し、接続を DIRECT に一致させる
ある種類のアプリが広く Fake-IP と互換性を持たない別の redir-host 設定と比較するアプリが復旧し、公開ドメインのルールも引き続き正しく一致する
NAS とプリンターが固定プライベート IP を使用するプライベートサブネットを DIRECT のままにするアクセスがプロキシポリシーを遠回りしなくなる
互換性のないドメインが分からないまず Connections と DNS ログから対象を探す対象を確認してから例外を追加し、広範囲のワイルドカードは使わない

対象の要求を固定し、名前解決エラーに応じて DNS を調整する

ドメインの問題が起きたら、ノードとリクエストを固定し、現在の enhanced-mode、上流 DNS、エラーを記録します。互換性がないと確認した内部ドメインを fake-ip-filter に追加する、Android のプライベート DNS を一時的に切り替えるなど、変更する条件は一つだけにします。問題が改善し、これまで使えていた接続も正常な場合に、その変更を残します。

no such host / DNS lookup failed

上流 DNS に到達できるか、リクエストが Mihomo に入っているかを確認します。

内部ネットワークのドメインだけ名前解決できず、公開ドメインは正常

内部 DNS の経路を維持し、対象ドメインに正確な直結ルールまたは Fake-IP 除外を設定します。

ネットワークを切り替えた後だけ名前解決に失敗する

すべてのノードを変更する前に、二つのネットワークの DNS、IPv6、出口インターフェースを比較します。

ドメインルールが常に MATCH と表示される

コアがドメイン名を取得できているか、より広いルールが先に一致していないかを確認します。

Web 閲覧、UDP、社内ネットワークに合う方法

利用場面に応じて選択する

利用場面推奨する開始方法選択理由
主にウェブ閲覧と、システムプロキシに従うデスクトップアプリを使用するシステムプロキシ必要な権限が少なく、無効化しやすく、接続経路も明確
ターミナルやゲームランチャーの記録が Connections にないアプリプロキシまたは TUN と比較するシステムプロキシを使用しないプロセスも取り込める
UDP の処理が必要なアプリTUNシステムプロキシでは UDP を一括して取り込めない
社内ネットワーク、仮想マシン、複雑なローカルネットワークシステムプロキシから始めるまず元のルートを維持し、TUN の除外範囲を一項目ずつ検証する
特定ドメインのルールが誤った経路を選ぶ既存の接続方式のいずれか + ルール修正取り込み範囲を広げても、最初に一致するルールは変わらない

この選択は固定ではありません。普段ブラウザしか使わないときは TUN を無効にしてシステムプロキシへ戻し、特定のプログラムで必要になったときだけ再び有効にできます。切り替え後は、スイッチの色だけで判断せず、元の操作と Connections で結果を確認してください。

TUN の無効化、システムプロキシの復旧、古いポート設定の処理

TUN を有効にした直後にすべての通信が止まった場合は、まず TUN を無効にし、元の Profile とノードを維持します。システムプロキシで復旧するなら、原因は仮想ネットワークアダプター、ルート、または TUN の DNS にあります。システムプロキシでも失敗するなら、ノードと設定を見直してください。無関係な設定まで消去されるため、いきなり OS のネットワークリセットを実行しないでください。

クライアント終了後もページが開かない場合は、システムプロキシに 127.0.0.1 の古いポートが残っていないか確認します。解除したら、普段は直接接続できる宛先で復旧を確かめます。

参考資料