Clash DNS 配置详解:解决污染与泄露
fake-ip 和 redir-host 有什么区别?如何配置 nameserver 防止 DNS 污染、避免 DNS 泄露?这篇文章把 DNS 模块的原理和实操配置一次讲透。
为什么 DNS 配置这么重要
很多人装好 Clash、导入订阅之后就以为万事大吉了,结果发现某些网站打不开、明明走了代理却还是被认成国内 IP,或者反过来国内网站被解析到国外去。这些问题十有八九出在 DNS 环节,而不是代理节点本身。
浏览器访问一个网址前,首先要把域名解析成 IP 地址,这个过程就是 DNS 查询。如果这一步被运营商"动了手脚",后面代理再怎么配置都没用——因为你的设备一开始就拿到了错误的 IP。常见的两种"动手脚"方式:
-
DNS 污染运营商或中间设备伪造 DNS 响应,把你导向错误的 IP(比如返回一个无法访问的地址,或跳转到广告页)。
-
DNS 泄露即使流量走了代理,DNS 查询请求却仍然直连发送给本地运营商,导致你访问了哪些网站被完整记录,代理形同虚设。
判断标准很简单:打开 dnsleaktest.com 测试,如果显示的 DNS 服务器归属地是你的本地运营商而不是节点所在地,说明存在 DNS 泄露。
三种 DNS 解析模式对比
Clash 的 DNS 模块支持几种不同的工作模式,理解它们的区别是配置好 DNS 的关键。
最早期的模式。Clash 直接向上游 DNS 服务器查询真实 IP,再根据规则决定走代理还是直连。优点是简单直观,缺点是域名分流可能失效——因为真实 IP 拿到手后,如果这个 IP 段没有被规则命中,就可能直连失败,而且对 IP 段规则(如 GEOIP)的支持不够精确。
Clash 不直接返回真实 IP,而是先分配一个虚拟的私有 IP(如 198.18.0.1)给客户端,等实际发起连接时,Clash 再根据域名做规则匹配,决定走代理还是直连,此时才向真正的上游查询 IP。这种"先分流、后解析"的方式让基于域名的规则永远优先生效,是目前最推荐的模式。
fake-ip 模式下,域名规则(DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD)能 100% 命中,因为分流判断发生在真实 IP 出现之前。这也是为什么大多数订阅默认使用这个模式。
某些应用(比如部分局域网设备发现、企业内网系统)不能用虚拟 IP,需要拿到真实 IP 才能正常工作。这时可以用 fake-ip-filter 把这些域名排除在虚拟 IP 分配之外,让它们始终走真实解析。
# DNS 模块核心配置 dns: enable: true ipv6: false enhanced-mode: fake-ip fake-ip-range: 198.18.0.1/16 fake-ip-filter: - '*.lan' - '*.local' - '+.market.xiaomi.com' nameserver: - 223.5.5.5 # 阿里 DNS,用于国内域名 - 119.29.29.29 # 腾讯 DNS,同上 fallback: - tls://8.8.4.4:853 # DoT,用于境外域名 - tls://1.1.1.1:853 fallback-filter: geoip: true geoip-code: CN
nameserver 与 fallback 该怎么选
这是新手最容易踩坑的地方。nameserver 和 fallback 都是"上游 DNS 服务器列表",但作用完全不同:
- nameserver:默认优先使用的服务器,一般填写国内运营商能正常访问、速度快的 DNS(阿里 223.5.5.5、腾讯 119.29.29.29、114 DNS 等)。
- fallback:当
fallback-filter判断某个查询结果"不像是国内地址"时,会改用这里的服务器重新查询一次,一般填写 DoH/DoT 加密 DNS(如 Google、Cloudflare),避免被污染。
配合 fallback-filter.geoip: true,Clash 会先用 nameserver 查询,如果解析出的 IP 不在 geoip-code 指定的国家/地区(比如不在 CN),就自动切换到 fallback 重新查询一次,从而做到"国内域名走国内 DNS,境外域名走加密 DNS"的自动分流,不需要手动维护域名列表。
如果你的机器本身没有境外直连能力(比如公司内网强制走代理网关),fallback 里的 DoT/DoH 请求也需要能被 Clash 自身的代理转发,否则查询会超时。大多数客户端默认已经处理好这一点,遇到解析异常可以检查客户端设置里是否开启了"DNS 走代理"选项。
验证与常见问题排查
-
nslookup / dig 测试在终端执行
nslookup google.com,如果返回的是198.18.x.x段的地址,说明 fake-ip 生效了(这是正常现象,不是故障)。 -
DNS 泄露测试访问 dnsleaktest.com 做扩展测试,确认显示的 DNS 服务器地址与你的代理节点归属地一致,而不是本地运营商。
-
面板日志在控制面板的"日志"页把等级切到 debug,正常访问网站会看到 DNS 查询与规则匹配的详细过程,方便定位具体哪条规则命中。
为什么 nslookup 查出来的 IP 是 198.18 开头,网页却能正常打开?
这正是 fake-ip 模式的工作方式——198.18.0.0/16 是专门预留的虚拟地址段,仅供 Clash 内部识别域名用,实际网络请求会在建立连接时被 Clash 拦截并转发到真实节点,不影响正常访问。
某些内网设备/局域网 NAS 突然连不上了,是不是 DNS 出问题?
很可能是虚拟 IP 段与内网设备发现机制冲突。把对应域名(如 *.lan、路由器管理域名)加入 fake-ip-filter,让它们走真实解析即可。
换了 DNS 配置后要重启客户端吗?
大多数客户端支持热重载配置(点击"重新加载配置"即可),个别情况下缓存的 DNS 记录未过期会导致短暂延迟生效,可以重启客户端或清空系统 DNS 缓存彻底刷新。
延伸阅读
学完了?把 Clash 装上试试
全平台安装包一站获取,跟着推荐标签选就不会错,几分钟就能用上。