首页/博客/DNS 配置完全指南

Clash DNS 配置完全指南:Fake-IP、DNS 污染与自建解析

规则写得再精确,如果域名解析出来的 IP 本身就是错的,分流也无从谈起。这篇把 DNS 污染的原理、Clash 两种解析模式的区别、加密 DNS 与分域名解析策略讲透,帮你从根上排查"规则明明对了,却还是走错线路"的问题。

🗓️ 2026 年 7 月 10 日 ⏱️ 阅读约 9 分钟 🔗 相关手册:进阶配置 · DNS 与 Fake-IP

为什么 DNS 会成为分流翻车的元凶

很多人调了半天规则,发现某个网站还是走错线路,第一反应是"规则写错了",但真正的原因往往在更前面一步——域名解析。

规则分流的前提是"先知道这个域名/IP 该不该走代理",而这个判断有两种输入:域名本身(DOMAINDOMAIN-SUFFIX 等规则)和解析出的 IP(IP-CIDRGEOIP 等规则)。如果 DNS 解析这一步就出了问题,后面所有基于 IP 的判断都会跟着错:

  • DNS 污染 / 劫持:部分网络环境会对特定域名返回错误、甚至无法访问的 IP,常见于对某些境外域名的解析请求。
  • 运营商 DNS 就近解析:出于 CDN 加速目的返回的 IP 未必是你期望连接的节点,可能影响 GEOIP 判断。
  • 本地 hosts / 缓存污染:系统或路由器层面的缓存记录了错误结果,重启客户端也没用,因为问题不在 Clash 里。
💡

排查"规则不生效"问题时,DNS 应该是除了规则语法本身之外,第一个要检查的环节,而不是最后一个。

Fake-IP 与 Redir-Host:两种模式的取舍

Clash 的 dns.enhanced-mode 决定了解析行为的底层逻辑,两种模式各有取舍:

Fake-IP 模式

  • 给每个域名分配一个虚假的、仅本机可见的 IP,真正解析延后到实际发起连接时才做
  • 规则匹配可以直接按域名进行,兼容性最好,是 TUN 模式下的默认推荐
  • 缺点:某些依赖"拿到真实 IP 做校验"的程序(部分游戏、企业内网客户端)可能不兼容

Redir-Host 模式

  • 直接返回真实解析结果,行为更接近传统网络
  • IP-CIDR / GEOIP 规则判断会更准确,路由器/网关场景更常用
  • 缺点:需要真实发起一次 DNS 查询才能决定走哪个代理,多一次往返延迟

没有绝对的"更好",一般建议:桌面客户端 + TUN 模式优先用 fake-ip;如果发现某个特定应用连接异常,可以在 fake-ip-filter 里把它的域名单独排除,而不是直接切换整个模式。

用加密 DNS 对抗污染:DoH 与 DoT

传统 DNS 查询是明文的 UDP 53 端口通信,容易被中间网络设备识别并篡改返回结果,这正是"DNS 污染"的常见成因之一。解法是把 DNS 查询包裹在加密通道里:

方式全称特点
DoHDNS over HTTPS伪装成普通 HTTPS 流量,抗识别能力强,写法形如 https://1.1.1.1/dns-query
DoTDNS over TLS使用独立的 853 端口加密,特征比 DoH 明显一些,写法形如 tls://1.1.1.1
UDP(传统)DNS over UDP明文、速度最快,但完全暴露给中间网络,适合作为国内 DNS 的查询方式
config.yamlyaml
dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - https://1.1.1.1/dns-query
    - tls://8.8.8.8
  fallback-filter:
    geoip: true
    geoip-code: CN

思路和进阶手册里介绍的一致nameserver 用国内明文 DNS 保证速度,fallback 用境外加密 DNS 保证准确性,fallback-filter 负责判断什么时候该切换到 fallback

按域名分流解析:nameserver-policy

有时候你不想用"国内/国外"这种粗粒度的判断,而是想给特定域名指定专用的 DNS 服务器——比如公司内网域名必须用内网 DNS 才能解析成功,这时候需要 nameserver-policy

config.yamlyaml
dns:
  nameserver-policy:
    'geosite:private': '223.5.5.5'
    '+.internal.company.com': '10.0.0.1'
    '+.google.com': 'https://1.1.1.1/dns-query'

nameserver-policy 的匹配优先级高于全局的 nameserver / fallback,可以理解成"针对某几个域名的例外规则",非常适合公司内网、自建服务等有专属解析要求的场景。

⚠️

内网域名如果被 Fake-IP 接管、又没有走到正确的内网 DNS,会导致内网服务"看起来能连上,但一直超时",遇到这种情况先检查 nameserver-policyfake-ip-filter 是否把内网域名排除在外。

怎么验证解析结果是否正确

光靠"感觉网速慢/连不上"很难判断问题出在 DNS 还是别处,更靠谱的方式是直接查看实际解析到的地址:

  • Dashboard 面板:几乎所有 Clash 客户端的控制面板都能看到每条连接实际使用的目标 IP,是最直接的排查入口,不需要额外工具。
  • 命令行工具:Windows 下用 nslookup 域名,macOS/Linux 下用 dig 域名nslookup 域名,可以对比开启 Clash 前后同一个域名解析出的 IP 是否一致。
  • Fake-IP 模式下的特殊情况:这种模式下系统层面 nslookup 拿到的是虚拟 IP(通常落在 198.18.0.0/16 这个网段),这是正常现象,不代表解析出错,只有实际发起连接时内核才会去做真正的解析。

判断"是不是 DNS 污染"最简单的办法:临时把系统 DNS 或 Clash 的 nameserver 换成一个加密 DNS(比如 DoH),如果同一个域名换了 DNS 之后就能正常访问,基本可以确认是原来的 DNS 被污染或劫持。

要不要自建 DNS 服务器

对大多数人来说,用公共的加密 DNS(如 1.1.1.18.8.8.8)已经足够解决污染问题,不需要自己搭一套。但如果你在维护家庭网关、路由器这类需要给多台设备统一提供解析服务的场景,自建 DNS(比如搭配 AdGuard Homednsmasq)会更合适:

  • 可以在网关层统一做广告过滤和分流解析,不需要每台设备单独配置
  • 可以自定义本地域名解析(比如给内网设备起好记的名字),配合 Clash 的 nameserver-policy 指向自建 DNS
  • 可以做请求日志和统计,方便排查哪些设备、哪些域名的解析请求异常

如果只是单机日常使用,直接用 Clash 内置的 DNS 模块配好 nameserver / fallback 就完全够用,自建 DNS 更多是网关级用户才需要考虑的进阶选项。

三步排查 DNS 相关问题

  1. 打开 Dashboard 的连接详情,确认出问题的连接实际解析到了哪个 IP,判断是"解析错了"还是"解析对了但规则没匹配上"。
  2. 临时把 enhanced-modefake-ip 切到 redir-host(或反过来)做对比测试,缩小问题范围。
  3. 确认 fallback-filter.geoip 是否开启、geoip-code 是否填的是你所在地区,这是最容易被忽略的一处细节。

如果以上都排查过依然无法定位,建议参考常见问题里的连接故障排查清单,或对照进阶手册的 DNS 章节重新检查一遍完整配置。