DNS 泄漏测试:解析器名称不等于路由
解析器名称无法说明 DNS 是否绕过了隧道。先确定你想要的政策,再比较接收方、路由和例外。
对 VPN 用户来说,有三种配置都算正确的 DNS:查询发往运营商的解析器、查询发往你选择的加密解析器,以及把工作域名送往组织的 split DNS。泄漏测试只报告一个解析器,而仅凭这一个标签无法说明你实际属于哪种配置。先确定预期政策,再据此测试。否则你就是在拿数字和感觉作比较。
读结果之前先决定你想要的
用一句话说清政策:所有域名都走 VPN 解析器、所有域名都走选定的加密解析器,或者内网域名走组织的 split DNS。每种配置对不同用户都站得住脚,也各自产生不同的预期答案。没有这句话,任何与论坛帖截图不同的结果都显得吓人。第一次测试之前先把政策写下来。
在政策确定之前做的测试什么都衡量不了。它只会给出一个没有参照点的解析器名称。
解析器名称既证明不了路径,也证明不了接收方
两个问题才重要:谁收到了查询,又是哪条路由把它送出去的。设置界面显示服务商地址时,第三方解析器仍可能经隧道抵达。泄漏测试页面上的标签描述的是观察者的视角,不是你的路由表。
浏览器可以使用自己的加密 DNS,而站点流量仍走隧道;缓存中的应答也可能让页面无需新的查询就加载出来。所以公网 IP 的结果说明不了 DNS。DoH 和 DoT 保护查询在到达解析器途中的安全,而那个解析器仍然看得到域名。
resolvectl status
resolvectl query example.com
dig +short example.com
split DNS 使多个解析器都正确
组织可以把内部域名送往自己的 DNS,其余域名送往别处。因此列出多个解析器的测试可能描述的是预期政策,而不是故障。在禁用任何东西之前,先把观察到的集合与有记录的 split DNS 规则做比较。为了让测试页面看起来更干净而关掉内部解析器,会破坏私有域名。
拆分隧道和 split DNS 是两个不同的选择:一个路由数据包,一个路由问题。改变隧道路由不会移动名称查询,改变解析器也修不好网站路径。IPv6 是第三个问题,因为非预期的 IPv6 连接并不自动等于 DNS 泄漏。
把结果变成一次排查
测试前记录预期政策和浏览器的安全 DNS 设置。在隧道开启的状态下运行测试,记下它点名的每一个解析器,并把集合与政策比较,而不是与某一个预期地址比较。
如果症状在重连时出现,就在重连之后重复一次,因为连接时应用的政策之后可能丢失。内部 DNS 例外请查客户端文档,不要猜设置。
修掉你发现的不一致:浏览器选择、VPN 的 DNS 设置,或 split DNS 规则。如果隧道失效时必须让查询停止,kill switch 是单独一项设置,仅靠 DNS 配置无法提供它。当你需要解释加密解析器隐藏什么、不隐藏什么时,RFC 8484 规范很有用。