DNS 汚染とは
DNS 汚染(DNS スプーフィング / DNS ポイズニング)とは、ISP やグレートファイアウォールが特定のドメインへの DNS クエリに対して偽の IP アドレスを返すことで、ユーザーが目的のウェブサイトにアクセスできなくする手法です。例えば、キャリアの DNS サーバーに www.google.com を問い合わせると、無効な IP アドレスが返ってきたり、リクエスト自体が拒否されたりすることがあります。
DNS 漏洩(DNS リーク)も関連する問題です。プロキシを有効にしていても、DNS クエリがプロキシをバイパスしてキャリアの DNS サーバーに直接送信されてしまう場合があります。これにより一部のドメインが解決できなくなるだけでなく、閲覧履歴が ISP に露出してしまいます。
| 問題 | 症状 | 結果 |
|---|---|---|
| DNS 汚染 | ドメインが誤った IP に解決される | 目的のウェブサイトにアクセスできない |
| DNS 漏洩 | DNS クエリがプロキシを通過しない | ISP に閲覧履歴が記録され、一部サイトに引き続きアクセスできない |
2 つの解決モード:fake-ip と redir-host
fake-ip モード(推奨)
fake-ip は Clash 独自の高性能 DNS 解決モードです:
- アプリケーションが DNS クエリを発行すると、Clash はすぐに偽の IP(198.18.x.x 帯域)を返す
- アプリケーションはこの fake IP を使って接続要求を発行する
- Clash が接続要求をインターセプトし、ルールに基づいて直接接続かプロキシ経由かを決定する
- プロキシ経由の場合、Clash は元のドメイン名をプロキシサーバーに送り、プロキシサーバーが海外で実際の DNS 解決を行う
メリット:DNS 解決の完了を待たずに接続を確立できるため、レイテンシが極めて低い。海外ドメインの DNS クエリは国内 DNS を一切経由しないため、汚染を完全に防ぐことができる。
デメリット:一部のアプリケーション(特定のゲーム、P2P ソフトウェアなど)が fake IP を正しく処理できない場合があり、fake-ip-filter での除外が必要になる。
redir-host モード
従来の DNS 解決モード:Clash は通常通りドメインを実際の IP に解決し、IP-CIDR ルールに基づいてプロキシを使用するか判断します。
メリット:互換性が高く、すべてのアプリケーションが正常に動作します。
デメリット:接続確立前に DNS 解決を完了させる必要があるため、レイテンシが高くなります。汚染されたドメインに対しては fallback DNS による再解決が必要で、設定が複雑になります。
DoH / DoT 暗号化 DNS 設定
通常の DNS クエリはプレーンテキストの UDP/TCP プロトコルを使用するため、ISP に簡単に傍受・改ざんされます。DoH(DNS over HTTPS)と DoT(DNS over TLS)は暗号化によって DNS クエリを保護します:
- DoH:DNS クエリは HTTPS リクエストにカプセル化され、ポート 443 を使用します。通常の HTTPS トラフィックと混在するため、識別・フィルタリングが困難です
- DoT:DNS クエリは TLS で暗号化され、専用ポート 853 を使用します。暗号化は信頼性が高いですが、トラフィックの特徴が明らかでフィルタリングされやすいです
Clash では DoH は https:// プレフィックス、DoT は tls:// プレフィックスを使用します:
dns:
nameserver:
- https://dns.alidns.com/dns-query # 阿里 DoH(国内)
- https://doh.pub/dns-query # 腾讯 DoH(国内)
fallback:
- tls://8.8.8.8:853 # Google DoT(海外)
- tls://1.1.1.1:853 # Cloudflare DoT(海外)
- https://dns.google/dns-query # Google DoH(海外)
完全な防汚染 DNS 設定
以下は検証済みのベストプラクティス設定です:
dns:
enable: true
listen: 0.0.0.0:1053 # DNS リッスンポート(TUN モードでは dns-hijack が引き継ぐ)
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
# fake-ip 除外リスト:これらのドメインは fake-ip を使用せず、実際の IP を直接返す
fake-ip-filter:
- "*.lan"
- "*.local"
- "localhost.ptlogin2.qq.com"
- "+.stun.*.*"
- "+.stun.*.*.*"
- "time.*.com"
- "time.*.gov"
- "*.ntp.org.cn"
- "ntp.*.com"
# 国内 DNS:国内ドメインの解決に使用
nameserver:
- 223.5.5.5 # 阿里 DNS(プレーンテキスト、高速)
- 119.29.29.29 # 腾讯 DNS
- https://dns.alidns.com/dns-query # 阿里 DoH
# 海外 DNS:汚染された海外ドメインの解決に使用(プロキシ経由でアクセス)
fallback:
- tls://8.8.8.8:853
- tls://1.1.1.1:853
- https://dns.google/dns-query
- https://cloudflare-dns.com/dns-query
# fallback トリガー条件:IP が CN 以外の場合に fallback DNS で再解決
fallback-filter:
geoip: true
geoip-code: CN
ipcidr:
- 240.0.0.0/4 # 予約アドレス(通常は汚染結果)
domain:
- "+.google.com"
- "+.facebook.com"
- "+.youtube.com"
- "+.twitter.com"
- "+.github.com"
# 特定ドメインに特定の DNS サーバーを割り当て
nameserver-policy:
"geosite:cn": [223.5.5.5, 119.29.29.29]
"geosite:geolocation-!cn": [tls://8.8.8.8:853, tls://1.1.1.1:853]
主要設定項目の説明
| 設定項目 | 説明 |
|---|---|
enhanced-mode: fake-ip | fake-ip モードを有効化し、DNS 解決のレイテンシを大幅に削減する |
fake-ip-filter | これらのドメインは fake-ip をバイパスして実際の IP を返す(mDNS、NTP など実際の IP が必要なプロトコル向け) |
nameserver | プライマリ DNS。国内ドメインの高速解決に使用 |
fallback | バックアップ DNS。nameserver が汚染された IP を返したときにトリガーされる |
fallback-filter.geoip: true | nameserver が返した IP が CN に属さない場合に fallback 再クエリをトリガーする |
nameserver-policy | 特定ドメインに専用 DNS サーバーを割り当てる。nameserver/fallback より優先度が高い |
TUN モードとの併用
TUN モードを有効にする場合、dns-hijack を設定してすべての DNS リクエストを Clash で処理する必要があります:
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53 # ポート 53 へのすべての UDP/TCP リクエストをハイジャック
- tcp://any:53
dns:
enable: true
enhanced-mode: fake-ip
# ... 残りの設定は上記と同じ
dns-hijack: any:53 を有効にすると、システムの DNS が他のサーバー(例:8.8.8.8)に設定されていても、すべての DNS リクエストが Clash の DNS モジュールによって処理されるため、DNS 漏洩を根本的に解消できます。
DNS 漏洩テスト方法
設定完了後、以下のツールを使って DNS 汚染対策が有効かどうかを確認してください:
- dnsleaktest.com にアクセスし、「Standard Test」をクリックする
- テスト完了後、DNS サーバーリストを確認する:
- Google や Cloudflare などの海外サーバーが表示される(国内キャリアの IP なし)→ 汚染対策設定が正しい
- 中国聯通、中国電信などの国内 DNS が表示される → DNS 漏洩あり、設定を確認する
- ipleak.net にアクセスして、IP、DNS、WebRTC 漏洩の総合チェックも行えます
よくある DNS トラブルシューティング
DNS 解決が完全に失敗する
すべてのウェブサイトにアクセスできず「DNS_PROBE_FINISHED_NXDOMAIN」エラーが表示される:
dns.enable: trueが設定されているか確認するnameserverにアクセス可能な DNS サーバーが少なくとも 1 つ含まれているか確認する- 一時的に nameserver を
223.5.5.5(プレーンテキスト UDP、最も基本的)に変更して接続性をテストする - Clash のログを確認し、「dns」関連のエラーメッセージを検索する
DNS 解決が遅い
enhanced-mode: fake-ipが有効になっているか確認する(初回接続のレイテンシを大幅に削減できる)nameserverの DoH サーバーをプレーンテキスト UDP(例:223.5.5.5)に置き換える。DoH は TLS ハンドシェイクのオーバーヘッドが大きい- fallback DNS サーバーに到達可能かどうかを確認する。到達不能な fallback サーバーはタイムアウト待機を引き起こす
IP は正常だが一部のサイトにアクセスできない
fake-ip による互換性の問題の可能性があります。該当ドメインを fake-ip-filter 除外リストに追加してください:
dns:
fake-ip-filter:
- "problem-domain.com" # 問題のあるドメインを追加
上級設定ガイドで TUN モードと DNS の詳細設定を確認する
まとめ
- DNS 汚染はドメインが誤った IP に解決される原因となり、DNS 漏洩は閲覧履歴を ISP に露出させる
- fake-ip モードが最適解:即座に偽の IP を返し、海外ドメインはプロキシサーバーが海外で解決するため、レイテンシが低く汚染対策も完璧
- 国内 DNS(nameserver)は高速なプレーンテキスト UDP(223.5.5.5)を使用し、海外 DNS(fallback)は暗号化された DoT/DoH(tls://8.8.8.8:853)を使用する
fallback-filter.geoip: trueは fallback をトリガーするための重要な設定で、汚染されたドメインが海外 DNS で再解決されることを保証する- TUN モードでは
dns-hijack: any:53を設定することで DNS 漏洩を完全に解消できる - 設定後は dnsleaktest.com で確認し、表示される DNS サーバーが海外ノードであることを確認する
関連記事
- TUN モード使用ガイド:DNS 汚染対策と組み合わせて使用するグローバルプロキシソリューション
- ルールベースルーティング設定:ルールを使ってプロキシを通すトラフィックを正確に制御する
- サブスクリプション自動更新設定:ノードリストとルールセットを自動更新に保つ