什么是 DNS 污染

DNS 污染(DNS Spoofing / DNS Poisoning)是指 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 服务器显示为境外节点

延伸阅读