每次打开一个网站,你的设备都要请一台解析服务器把域名换成 IP 地址。这个提问本身就是一条明文记录,记着你接下来要去哪儿,而默认情况下它会发给你所在网络塞给你的那台服务器——一般就是宽带运营商的。

DNS 泄漏就是这些查询跑到了你没打算让它去的地方。常见的情形是:设备明明配好了用私有或加密的解析服务器,却因为若干结构性原因,还是把一部分甚至全部查询发给了运营商。表面上什么都没坏,所以泄漏才会一放好几年都没人察觉。

DNS 到底暴露了什么?

域名、时间戳,还有来源——这些已经足够还原出一段浏览过程。

传统 DNS 走 53 端口,不加密。任何处在你和解析服务器之间的人都能读到这条查询,而解析服务器本身看到的每一条查询,都记在你这条连接名下。它看不到具体页面,但敏感的往往就是域名本身。

加密改变的是这份记录握在谁手里,而不是它存不存在:

传输方式 加密吗? 谁能看到查询
明文 DNS(53 端口) 你的网络、你的运营商、解析服务器
DNS over TLS(DoT,853 端口) 你选的那台解析服务器
DNS over HTTPS(DoH,443 端口) 你选的那台解析服务器;网络侧较难把它和普通网页流量区分开
DNSSEC 否——它做的是验证 和明文 DNS 一样;它证明答案是真的,但不会把答案藏起来

DNSSEC 是这里最常被误解的一项。它给应答签名,让应答无法被伪造。它完全不提供任何机密性。

泄漏实际上是怎么发生的?

六种结构性成因,几乎涵盖了全部。

成因 机制
分流路由 一部分流量走隧道,DNS 却走默认网卡
IPv6 没被带进去 隧道只处理 IPv4,于是 IPv6 查询走回运营商那条路
操作系统并行解析 Windows 会同时向所有网卡发问,谁先回答就用谁的
浏览器层级的 DoH 浏览器独立于系统设置自行解析,两个方向都可能出事
路由器覆盖 路由器通过 DHCP 强行指定自己的解析服务器,或者直接拦截 53 端口
强制门户 酒店或机场的网络劫持 DNS,把你导到它的登录页

浏览器那一条值得说清楚,因为它是双向的。带自己 DoH 设置的浏览器可能绕过你精心配好的系统解析服务器;反过来,一个配置正确的浏览器,也可能掩盖住「这个浏览器之外的一切都还在泄漏」这件事。只查其中一边、然后想当然地认为另一边没问题,是最常见的检测错误。

那要怎么检查?

每一层分开测,因为它们的结果可能互相矛盾。

操作系统——当前配置了哪些解析服务器:

系统 命令
macOS scutil --dns | grep nameserver
Windows Get-DnsClientServerAddress
Linux(systemd-resolved) resolvectl status
Linux(通用) cat /etc/resolv.conf

实际回答你的是哪一台——配置和实际行为是两回事:

dig +short whoami.akamai.net 会返回那台替你完成查询的解析服务器的 IP 地址。拿它跟你预期的那台比对。

**浏览器层级:**打开浏览器的安全 DNS 设置,看它有没有启用、选的是哪一家服务商。然后在同一个浏览器里打开一个 DNS 泄漏检测页。如果那个页面报出来的解析服务器跟你在命令行测到的不一样,就说明浏览器在自行解析。

**IPv6:**用纯 IPv6 的查询再测一遍。隧道只承载 IPv4,是造成部分泄漏最常见的单一原因。

结果该怎么看?

拿解析服务器的归属方跟你的预期比对,而不是跟一份「安全地址」名单比对。

观察到的情况 判读
解析服务器属于你的运营商,可你明明配了另一台 泄漏
列出好几台,其中一台是你的运营商 部分泄漏——查询被分流了
IPv4 显示的是预期的那台,IPv6 显示运营商 IPv6 泄漏
浏览器和系统报出来的解析服务器不同 不一定是泄漏,但意味着有两条独立的路径要各自确认
解析服务器落在意料之外的国家 通常是正常的——anycast 解析服务器由最近的节点应答
解析服务器是路由器的私有地址 无法判定;路由器会继续往上转发,得去看路由器自己的设置

最后一行是家庭网络里的坑。结果显示 192.168.1.1,只告诉你「是你的路由器回答的」。路由器再转发给谁是另一个问题,答案在路由器的 WAN 或 DNS 设置里。

修好它的极限在哪儿?

修好 DNS 泄漏,改变的是「谁会知道你查过哪些域名」。它不会让这次访问变得私密,而把这一点说过头,正是这个话题最常被歪曲的方式。

名称解析完之后,你的设备会向那个 IP 地址开一条连接。路径上的任何观察者都能看到目的地址,而大多数 TLS 连接会在握手阶段以未加密的形式发送服务器名称,除非两端都启用了 Encrypted Client Hello。这两个信号都能在完全不依赖 DNS 的情况下认出是哪个网站。

所以诚实的结论范围很窄,但确实成立:把 DNS 加密、发给你自己选的解析服务器,可以让「你访问过的每一个域名」这份明文清单从你的本地网络和运营商日志里消失,转而交到解析服务器运营方手上。它搬动了信任,而不是消除信任——这也让「谁在运营那台解析服务器、他们记录了什么」,成了真正要紧的问题。

相关问题