最近在测试一些防“番羽土啬”设备系统,试用了一款某大厂的的DNS防护系统,原理大慨就是将它旁挂在出口防火墙或负载均衡设备上,通过配置这些设备将出口流量中的DNS流量导向这台DNS防护设备,由这台设备进行分析,然后联动外网上的DNS服务器进行拦截封杀,也说是相当于“接管”了整个单位出口的DNS解析。一旦你访问了外面的非法网站,就返回一个禁止访问的提示页面。
大慨就是这么一个过程。然后趁系统测试期间,把“DNS污染”深入重学了一遍。很多人刚开始折腾网络或VPN的时候,都做过一件事同,就是把电脑 DNS 改成 Google 的 8.8.8.8,或者 Cloudflare 的 1.1.1.1。按照正常理解,DNS 已经换成海外服务器了,那么访问海外网站应该就不会受到国内运营商 DNS 污染了,对吧?但有时候你会发现:
nslookup x.com 8.8.8.8
结果几乎瞬间就返回了一个 IP,而且这个 IP 可能并不是网站真正的地址。这到底是怎么回事?难道 Google DNS 在故意返回假结果?
当然不是!
一、真正的 DNS 服务器,可能根本还没来得及回答你
传统 DNS 查询通常使用 UDP 协议的 53 端口。
简单来说,你的电脑会向 DNS 服务器发送一句:
“请告诉我 x.com 的 IP 地址。”
如果这个 DNS 查询是明文传输,那么网络中的设备就有机会看到你正在查询什么域名。
对于部分受到干扰的域名,可能会出现一种被称为 DNS 污染或 DNS 注入 的现象。
原理可以简单理解为:
你向远处的 DNS 服务器提问,但在真正的回答回来之前,有设备提前伪造了一份 DNS 回复。
由于传统 UDP DNS 本身缺乏加密和强身份验证机制,系统有可能先接收到伪造的结果,并把它当成正常 DNS 响应。
于是你看到的现象就是:
明明查询的是 8.8.8.8,但返回速度却快得离谱。
这并不一定意味着真正的 Google DNS 返回了错误结果,而有可能是你的查询或响应在网络传输过程中受到了干扰。
二、为什么传统 UDP DNS 容易被“抢答”?
DNS 查询中有一个 Transaction ID,也就是“事务编号”。
可以把它理解成:
你提问题时生成的一个编号,DNS 回复必须带着同样的编号,你的电脑才知道这是回答自己的。
如果有人能够看到你的 DNS 查询包,就可以根据里面的信息伪造一个看起来非常像正常 DNS 回复的数据包。
例如:
客户端 → 8.8.8.8:
x.com 的 IP 是多少?
正常情况下:
8.8.8.8 → 客户端:
x.com = 正确 IP
但如果中间出现干扰:
客户端 → 海外 DNS
↓
查询被识别
↓
伪造 DNS 回复 → 客户端
由于伪造的回复距离更近、到达速度更快,你的系统可能先接受了这个结果。
这就是所谓的“DNS 抢答”或 DNS 注入现象。
当然,具体网络设备如何部署、位于哪里,外界无法完全确认,因此不能简单地说一定是某种固定的“光纤分光镜架构”。
三、为什么改成 8.8.8.8 也不一定有用?
关键就在于:
你虽然把 DNS 服务器换成了海外 DNS,但 DNS 查询本身可能仍然是明文 UDP 数据包。
例如:
你的电脑
↓ 明文 DNS
8.8.8.8
只要中间网络能够识别:
你正在查询什么域名
理论上就可能对 DNS 查询进行干扰。
所以:
换 DNS 地址 ≠ DNS 查询一定安全。
真正重要的是:
DNS 查询是怎么传输的。
四、DoH、DoT 为什么能减少 DNS 污染?
现在越来越多的软件开始使用:
- DoH(DNS over HTTPS)
- DoT(DNS over TLS)
- DoQ(DNS over QUIC)
它们最大的区别就是:
DNS 查询被加密了。
以前是:
电脑 → 明文 DNS 查询 → DNS 服务器
现在则变成:
电脑 → 加密连接 → DNS 服务器
网络中间设备通常无法像查看普通 UDP DNS 一样,直接看到你正在查询哪个域名。
因此,这类加密 DNS 在很多情况下可以有效减少传统 DNS 注入和污染问题。
不过也要注意:
加密 DNS 并不等于绝对不会受到任何网络干扰。
网络层面还可能存在 IP 地址封锁、连接阻断、协议干扰等其他情况。
所以更准确的说法是:
DoH、DoT 等技术可以显著降低传统明文 DNS 被污染的风险,但不能保证“100% 免疫所有网络干扰”。
五、为什么代理软件经常把 DNS 放到代理节点解析?
像 Mihomo、sing-box 等代理工具,通常支持让特定域名通过代理节点进行 DNS 查询。
例如:
你的电脑
↓
加密代理连接
↓
海外服务器
↓
海外 DNS
这样做的好处是:
你的本地网络不再直接向海外 DNS 发送明文 UDP 查询。
DNS 请求会先进入加密代理通道,再由远端服务器完成解析。
对于容易受到本地网络 DNS 干扰的域名,这种方式通常更加可靠。
因此,很多代理软件都会采用:
国内域名 → 国内 DNS
海外域名 → 通过代理或远程 DNS 解析
这种分流策略。
六、为什么国内网站不能全部使用海外 DNS?
还有一个很多人容易忽略的问题:
DNS 不只是“查 IP”,它还会影响 CDN 调度。
例如,你人在中国访问一个国内网站。
如果 DNS 服务认为你在美国,就可能给你返回美国附近的 CDN 节点。
结果可能就是:
人在国内
↓
DNS 返回海外 CDN
↓
网站速度变慢
所以比较合理的方案通常是:
国内网站
↓
国内 DNS
↓
国内 CDN 节点
海外网站
↓
加密 DNS / 代理 DNS
↓
海外网络环境解析
这也是为什么 Mihomo、sing-box 等工具普遍支持 DNS 分流。
至于 ECS(EDNS Client Subnet),它确实可以帮助部分 DNS 服务进行更精确的 CDN 调度,但同时也可能带来额外的隐私泄露问题,因此并不是越多越好。
七、Fake-IP 又是什么?
很多代理软件还有一个非常有意思的功能:
Fake-IP(虚拟 IP)模式。
它的思路是:
当你的设备查询:
x.com 的 IP 是多少?
代理软件并不一定马上去公网查询真实 IP。
而是先在本地返回一个虚拟地址,例如:
198.18.x.x
这个 IP 并不是真正的 x.com 服务器地址。
代理软件会在本地保存一份映射关系:
198.18.0.23
↓
对应
↓
x.com
当浏览器尝试连接:
198.18.0.23
代理软件就知道:
你实际上想访问的是 x.com。
然后再根据规则,通过代理连接到真正的网站。
这样做的好处是:
- 减少本地 DNS 查询泄露
- 避免部分 DNS 污染问题
- DNS 分流效率更高
- 代理软件更容易识别访问的真实域名
不过需要注意的是:
Fake-IP 并不是系统内核凭空生成 IP,而是代理软件的本地 DNS 和网络处理机制在完成这件事。
最后总结
如果你只是简单地把 DNS 改成:
8.8.8.8
1.1.1.1
但仍然使用传统的明文 UDP DNS,那么对于部分网络环境和域名来说,依然可能遇到 DNS 污染或解析异常。
更合理的 DNS 思路通常是:
国内网站
使用国内 DNS,获得更好的 CDN 就近调度。
海外网站
使用 DoH、DoT、DoQ 或通过代理进行远程 DNS 解析。
代理软件
根据需要使用:
- DNS 分流
- Remote DNS
- DoH / DoT / DoQ
- Fake-IP
一句话总结:
DNS 污染的关键并不只是“你用了哪个 DNS”,更重要的是:DNS 查询有没有暴露在公网,以及查询过程是否容易被中间网络干扰。