访问任何网站之前,设备都要先把域名解析成 IP,这一步由 DNS 完成。如果流量走了代理,DNS 查询却仍由本地运营商的服务器处理,就发生了 DNS 泄漏:网站内容是加密的,但你访问了哪些域名、你所在的网络,都可能被暴露。
DNS 查询的路径
- 浏览器请求
example.com,交给系统的 DNS 解析器; - 解析器(通常是路由器或运营商的 DNS 服务器)向上递归查询;
- 域名的权威服务器返回 IP,并且能看到是哪个递归解析器来问的。
第 3 步是检测与泄漏的关键:权威服务器看到的递归解析器 IP,往往属于你的运营商,能直接反映你的真实网络与大致地区。
为什么开了代理还会泄漏
- 代理只接管了连接,没接管解析:浏览器先用系统 DNS 解析域名,再把解析后的 IP 交给代理连接。
- 分流规则需要先解析:按「国内直连、国外代理」分流时,客户端常常要先解析域名来判断走哪条路,这次解析可能用的就是本地 DNS。
- 系统或浏览器另有 DNS 设置:例如操作系统指定了运营商 DNS,或浏览器开启了指向某个服务商的 DoH,绕开了代理客户端的 DNS 设置。
- IPv6 未被代理:代理只接管 IPv4 时,IPv6 的 DNS 查询会直接走本地网络。
检测原理
检测服务会让浏览器去访问一批随机生成、从未出现过的子域名。因为是全新的名字,任何缓存都没有,必须一路查到检测服务自己的权威服务器。权威服务器记下发起查询的解析器 IP,再把结果告诉网页:
- 解析器的国家、运营商与代理出口一致:没有泄漏;
- 解析器属于本地运营商、或国家与出口不同:存在 DNS 泄漏。
本站会同时比对解析器与当前出口的国家和 ASN。解析器是公共 DNS(如 Cloudflare、Google)时,只要它所在国家与出口一致,通常也可以接受。
如何修复
- 开启代理客户端的 DNS 接管:使用 TUN 模式或开启「DNS 劫持 / Fake-IP」,让所有 DNS 查询都由代理客户端处理。
- 远程解析:SOCKS5 代理选择「由代理端解析域名」(如浏览器中的远程 DNS 选项)。
- 同时处理 IPv6:代理不支持 IPv6 时,可在系统中关闭 IPv6,避免查询绕过。
- 检查浏览器的安全 DNS:确认 DoH 设置与你的代理方案一致,不要让浏览器直连另一家 DNS 服务。
WebRTC 是另一条常见的泄漏途径,见 WebRTC 泄漏原理。