核心结论
检测 DNS 泄露时,开启代理后查看“是谁在替你查询域名”:结果中只出现节点地区或公共 DNS 服务器即为正常,出现本地运营商的 DNS 服务器就是泄露。修复的核心是让客户端接管全部 DNS 请求:开启 TUN 模式与 DNS 劫持,使用 Fake-IP,关闭浏览器自带的安全 DNS,并处理 IPv6 与 Windows 多网卡解析。
问题现象
DNS 泄露指的是:开启代理后,网页流量已经从节点出去,但域名查询仍然由本地网络发出,交给本地运营商的 DNS 服务器处理。它本身不会让网页打不开,所以很难直接察觉,常见的间接表现有:
- 出口 IP 已经是支持地区,但 AI 服务仍偶尔提示地区异常或触发额外验证;
- 同一网站在不同设备上表现不一致,某些页面加载到了不符合节点地区的内容;
- 分流规则明明设置了走代理,部分域名的解析结果却与本地直连时相同;
- 在 DNS 泄露检测页面中,看到了自己宽带运营商的 DNS 服务器。
DNS 污染、解析失败等更基础的问题,以及 Fake-IP 与 redir-host 的区别,已在 DNS 问题排查指南中讲过,本文只聚焦“怎么测出泄露、怎么修好泄露”。
可能原因
| 原因 | 判断方法 | 解决方法 |
|---|---|---|
| 只开系统代理,部分程序自行解析 | 关闭 TUN 时泄露,开启 TUN 后消失 | 开启 TUN 模式并启用 DNS 劫持 |
| 浏览器开启了安全 DNS | 关闭浏览器安全 DNS 后结果变化 | 关闭浏览器安全 DNS,由客户端统一处理 |
| Windows 多网卡同时解析 | TUN 开启后仍出现运营商 DNS | 开启严格路由,必要时关闭智能多宿主解析 |
| IPv6 查询未被接管 | 检测结果中出现 IPv6 地址的运营商服务器 | 客户端开启 IPv6 接管,或暂时关闭系统 IPv6 |
| redir-host 模式在本地先解析 | 切换 Fake-IP 后泄露减少 | 改用 Fake-IP 模式 |
| DNS 上游直接从本机发出 | 泄露结果中显示你配置的 DNS 但位置在本地 | 让境外域名由节点远端解析 |
三种检测方式的差别
检测 DNS 泄露的原理是:让你的设备去解析一个检测服务专门准备的随机域名,然后由检测服务的权威服务器记录“是哪台 DNS 服务器来查询的”。这个记录下来的服务器,就是实际替你做递归解析的那一台。
- 浏览器检测页面:最直观,但只能反映浏览器这一条路径;
- 命令行查询:反映系统解析器和终端程序的路径,适合检查 AI 编程工具等命令行场景;
- 客户端日志:能看到每条 DNS 请求发给了哪个上游,适合定位具体配置问题。
三种方式结果不一致很常见,这正好说明不同程序的解析路径不同,需要分别处理。
快速自查
- 开启代理,在浏览器中打开任意一个 DNS 泄露检测页面,运行扩展测试;
- 看结果中是否出现你所在城市或宽带运营商的名称;
- 打开浏览器设置,确认“使用安全 DNS”的状态;
- 确认客户端的 DNS 模块已启用,并记录当前是系统代理还是 TUN 模式;
- 分别在开启和关闭 TUN 的情况下各测一次,对比差异。
逐步排查
-
查看系统当前使用的 DNS 服务器。
# Windows:列出每个网卡配置的 DNS Get-DnsClientServerAddress -AddressFamily IPv4 | Format-Table InterfaceAlias, ServerAddresses# macOS scutil --dns | grep nameserver开启 TUN 后,理想情况是系统解析请求被导向客户端的虚拟网卡;如果物理网卡上仍配置着运营商 DNS,就要留意多网卡并发解析的问题。
-
用命令行查看实际递归服务器。 下面的 TXT 查询会返回“替你向权威服务器发起查询的 DNS 出口 IP”:
# Windows nslookup -type=txt o-o.myaddr.l.google.com Resolve-DnsName -Type TXT o-o.myaddr.l.google.com# macOS / Linux dig TXT o-o.myaddr.l.google.com +short返回的地址如果属于你本地的宽带运营商,说明系统解析这条路径存在泄露;返回公共 DNS 服务商或节点所在地区的地址,一般说明查询已经被接管。结果的具体格式以实际返回为准。
-
清缓存后复测。 修改设置后先清除缓存,否则会看到旧的结果:
ipconfig /flushdnssudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder -
开启 TUN 与 DNS 劫持。 在 Clash Verge Rev 中开启 TUN 模式后,确认 DNS 劫持相关选项已启用(Mihomo 配置中为
tun.dns-hijack,sing-box 中通过路由规则劫持 DNS,字段以实际版本文档为准)。同时建议开启严格路由(Mihomo 的strict-route、sing-box 的strict_route),它能阻止 Windows 绕过虚拟网卡向物理网卡的 DNS 发出查询。TUN 的开启步骤见 Clash Verge TUN 模式设置。 -
处理 Windows 智能多宿主解析。 Windows 默认会同时向多个网卡的 DNS 发出查询并采用最快的结果,这会导致即使开了 TUN 也有请求从物理网卡发出。优先使用客户端的严格路由;专业版系统也可以在组策略“计算机配置 → 管理模板 → 网络 → DNS 客户端”中启用“关闭智能多宿主名称解析”,具体名称以系统版本为准。
-
关闭浏览器安全 DNS。 Chrome 与 Edge 在“隐私和安全 → 安全 → 使用安全 DNS”中关闭;Firefox 在网络设置的 DNS over HTTPS 选项中关闭。让浏览器把解析交给系统,再由客户端统一处理。
-
处理 IPv6。 如果检测结果中出现 IPv6 地址的运营商服务器,而你的客户端没有接管 IPv6,可以在客户端中开启 IPv6 接管,或暂时在系统网卡设置中关闭 IPv6 后复测。
-
最后单独检查 WebRTC。 WebRTC 泄露与 DNS 泄露是两回事,它暴露的是 IP 而不是 DNS 服务器,需要在专门的 WebRTC 检测页面中确认,方法见 Region Not Supported 怎么办。
注意事项
- 检测前先关闭其他 VPN、加速器和浏览器代理扩展,避免多个程序同时处理 DNS;
- 检测结果里出现多个公共 DNS 节点是正常的任播现象,不必逐个追究;
- 修复泄露的目的是让网络环境前后一致,不要把它当作规避服务条款的手段。
- 每次更换客户端、升级内核或重装系统后,都建议重新检测一次,因为默认设置可能已经变化。
仍然无法解决
- 把客户端恢复为订阅默认配置,再只开启 TUN 与 Fake-IP,逐项加回自定义设置;
- 在客户端日志中筛选
dns关键词,确认查询发往了哪个上游; - 如果开启 Fake-IP 后出现网站打不开等副作用,参考 Fake-IP 模式问题排查;
- 路由器上如果运行了其他代理插件或 DNS 劫持,先关闭再测试。
请遵守当地法律法规与服务条款,合理使用网络工具。
相关问题
常见问题
DNS 泄露检测结果里出现了多个国家的服务器,正常吗?
如果都是公共 DNS 服务商(比如你在客户端里配置的加密 DNS)的服务器,属于正常的任播分布;需要关注的是有没有出现你本地宽带运营商名称的服务器。
只开系统代理会不会 DNS 泄露?
有可能。浏览器通过代理访问网页时,域名通常交给代理远端解析,但不走代理的程序、浏览器的预解析以及系统服务仍会使用本地 DNS。开启 TUN 模式并劫持 DNS 能明显减少这类泄露。
DNS 泄露会导致 AI 服务提示地区不支持吗?
它是地区判断的辅助信号之一,影响通常小于出口 IP 本身。但在出口 IP 正常仍反复出现地区异常时,值得把 DNS 泄露和 WebRTC 泄露一起排查。
开了 TUN 模式为什么还会泄露?
常见原因有三个:浏览器开启了自带的安全 DNS,绕过了客户端;Windows 同时向多个网卡的 DNS 发出查询;IPv6 查询没有被接管。逐项关闭或接管后再检测。
加密 DNS(DoH)能完全防止泄露吗?
不能完全替代。DoH 能防止查询内容被篡改和窥探,但如果查询是从本机直接发往 DoH 服务器,服务器仍会看到你的真实网络位置。最好让 DNS 请求也经过代理或由节点远端解析。
本文最后更新于 。网络服务与 AI 平台政策变化较快,如发现信息过时,欢迎通过联系我们反馈。