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 解決モードです:

  1. アプリケーションが DNS クエリを発行すると、Clash はすぐに偽の IP(198.18.x.x 帯域)を返す
  2. アプリケーションはこの fake IP を使って接続要求を発行する
  3. Clash が接続要求をインターセプトし、ルールに基づいて直接接続かプロキシ経由かを決定する
  4. プロキシ経由の場合、Clash は元のドメイン名をプロキシサーバーに送り、プロキシサーバーが海外で実際の DNS 解決を行う

メリット:DNS 解決の完了を待たずに接続を確立できるため、レイテンシが極めて低い。海外ドメインの DNS クエリは国内 DNS を一切経由しないため、汚染を完全に防ぐことができる。

デメリット:一部のアプリケーション(特定のゲーム、P2P ソフトウェアなど)が fake IP を正しく処理できない場合があり、fake-ip-filter での除外が必要になる。

redir-host モード

従来の DNS 解決モード:Clash は通常通りドメインを実際の IP に解決し、IP-CIDR ルールに基づいてプロキシを使用するか判断します。

メリット:互換性が高く、すべてのアプリケーションが正常に動作します。

デメリット:接続確立前に DNS 解決を完了させる必要があるため、レイテンシが高くなります。汚染されたドメインに対しては fallback DNS による再解決が必要で、設定が複雑になります。

💡
最新の Clash クライアント(Clash Verge Rev、CMFA)はいずれも fake-ip モードを推奨しています。多くのプロキシサービスが提供するサブスクリプション設定ファイルは、デフォルトですでに fake-ip を使用しています。

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-ipfake-ip モードを有効化し、DNS 解決のレイテンシを大幅に削減する
fake-ip-filterこれらのドメインは fake-ip をバイパスして実際の IP を返す(mDNS、NTP など実際の IP が必要なプロトコル向け)
nameserverプライマリ DNS。国内ドメインの高速解決に使用
fallbackバックアップ DNS。nameserver が汚染された IP を返したときにトリガーされる
fallback-filter.geoip: truenameserver が返した 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 汚染対策が有効かどうかを確認してください:

  1. dnsleaktest.com にアクセスし、「Standard Test」をクリックする
  2. テスト完了後、DNS サーバーリストを確認する:
    • Google や Cloudflare などの海外サーバーが表示される(国内キャリアの IP なし)→ 汚染対策設定が正しい
    • 中国聯通、中国電信などの国内 DNS が表示される → DNS 漏洩あり、設定を確認する
  3. ipleak.net にアクセスして、IP、DNS、WebRTC 漏洩の総合チェックも行えます
⚠️
システムプロキシモード(TUN モードではない)を使用している場合、dnsleaktest で国内 DNS が表示されることは正常な動作です——システムプロキシは HTTP/HTTPS トラフィックのみをプロキシするため、ブラウザの DNS リクエストが Clash を経由しない場合があります。DNS 漏洩を完全に解決するには、TUN モードを有効にして dns-hijack を設定する必要があります。

よくある 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 サーバーが海外ノードであることを確認する

関連記事