什么是 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 解析模式:
- 当应用发起 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(适用于需要真实 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 防污染是否生效:
- 访问 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 服务器 - 临时将 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 服务器显示为境外节点
延伸阅读
- TUN 模式使用指南:与 DNS 防污染配合使用的全局代理方案
- 规则分流配置说明:通过规则精确控制哪些流量走代理
- 订阅自动更新设置:保持节点列表和规则集的自动更新