DNS 泄漏检测与防范:代理连上了,解析不一定走了代理
最后更新: 2026-08-21 | 适用: Clash 系客户端 / sing-box
很多人以为「代理连上了 = 所有流量都走代理」。实际上 DNS 查询和数据连接是两条独立的路。 代理接管了后者,前者可能仍在走本地运营商——这就是 DNS 泄漏。
一、泄漏是怎么发生的
访问一个网站分两步:先把域名解析成 IP,再向那个 IP 发起连接。代理客户端默认接管的是第二步。 如果没有额外配置,第一步仍由系统按本地 DNS 设置执行。
结果是两个问题同时存在:
- 解析行为暴露——本地 DNS 服务器看得到你查询了哪些域名,即使后续连接是加密的。
- 解析结果可能是错的——本地 DNS 若返回被污染的记录,代理拿到的目标 IP 从一开始就不对,表现为「连上了但打不开」。
二、三步自检
- 先看客户端的连接日志。 主流客户端都有日志面板,会显示每条请求命中了哪条规则、经由哪个出站。 如果域名解析条目显示走的是 DIRECT,说明 DNS 没被接管。
- 再用公开的 DNS 泄漏检测站点验证。 关注返回的服务器归属: 落在你本地运营商 = 泄漏;落在代理出口所在地区 = 正常。 不要只看服务器名称,要看它属于哪个网络。
- 最后测一个已知被污染的域名。 如果解析出的 IP 明显不合理(例如指向本地保留地址), 说明拿到的是被污染的结果。
三、两种防范方式,各有代价
Fake-IP 模式
客户端在收到解析请求时立刻返回一个虚拟 IP,把真实解析推迟到远端代理服务器执行。 本地既不发出真实查询,也绕开了本地污染,还省掉一次解析往返、页面首字节更快。
代价:部分依赖真实 IP 的场景(某些局域网服务、需要按 IP 做判断的程序)会不适应。 遇到这类情况,把对应域名加进直连规则即可。
加密 DNS(DoH / DoT)
把 DNS 查询本身加密,防止中间环节窥探与篡改。它解决的是「查询过程被看到」, 但不解决「查询从哪里发出」——如果加密查询仍从本地直连出去,对端依然知道是你在查。
实用做法是两者配合:Fake-IP 处理走代理的域名,加密 DNS 处理需要直连的域名。
四、配置后一定要复测
改完配置不要默认就好了。按第二节那三步再跑一遍——尤其是第一步的日志面板, 它是唯一能明确告诉你「这条解析走了哪里」的地方,比任何检测网站都直接。
常见问题
开了代理为什么还会 DNS 泄漏?
因为代理接管的是数据连接,DNS 查询是另一条路。如果客户端没有把 DNS 一并接管,系统仍会用本地运营商的 DNS 去解析域名,解析这一步就暴露了。
Fake-IP 模式是干什么的?
它让客户端先返回一个虚拟 IP,把真实的域名解析推迟到远端代理服务器上执行。这样本地既不发出真实查询,也绕开了本地 DNS 污染。
检测网站显示的 DNS 服务器不是我设置的,正常吗?
正常。你看到的是解析请求最终到达的递归服务器,它未必等于你填写的地址。判断依据是它属于哪个网络:如果落在你本地运营商,就说明查询没走代理。
本文依据各客户端公开文档与协议规范整理。文中不含实测数据, 涉及具体数值的判断请以你自己环境下的复测结果为准。