什麼是 DNS 污染

DNS 污染(DNS 欺騙 / DNS 毒化)是指 ISP 或防火長城對特定網域的 DNS 查詢返回虛假 IP 位址,導致使用者無法正常存取目標網站。例如,向電信業者 DNS 查詢 www.google.com 時,返回的 IP 可能是一個無效位址或直接被拒絕。

DNS 洩漏(DNS Leak)是另一個相關問題:即便開啟了代理,DNS 查詢可能仍然繞過代理直接發往電信業者的 DNS 伺服器。這不僅導致部分網域無法解析,還會將你的瀏覽行為暴露給 ISP。

問題表現後果
DNS 污染網域解析返回錯誤 IP無法存取目標網站
DNS 洩漏DNS 查詢不經過代理瀏覽行為被 ISP 記錄,部分網站仍無法存取

兩種解析模式: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-ip啟用 fake-ip 模式,大幅降低 DNS 解析延遲
fake-ip-filter這些網域不使用 fake-ip,直接返回真實 IP(適用於需要真實 IP 的 mDNS、NTP 等協定)
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 防污染是否生效:

  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。開啟 TUN 模式並設定 dns-hijack 才能徹底解決 DNS 洩漏。

常見 DNS 問題排查

DNS 解析完全失敗

所有網站都無法存取、顯示「DNS_PROBE_FINISHED_NXDOMAIN」:

  • 檢查 dns.enable: true 是否已設定
  • 確認 nameserver 中至少有一個可存取的 DNS 伺服器
  • 暫時將 nameserver 改為 223.5.5.5(明文 UDP,最基礎)測試連通性
  • 查看 Clash 日誌,搜尋「dns」相關錯誤訊息

DNS 解析速度慢

  • 確認 enhanced-mode: fake-ip 已啟用(可大幅降低首次連線延遲)
  • nameserver 中的 DoH 伺服器替換為明文 UDP(如 223.5.5.5),DoH 握手開銷較大
  • 檢查 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 伺服器顯示為境外節點

延伸閱讀