深入”DNS污染“:为什么用了8.8.8.8/1.1.1.1,DNS解析还是会得到假IP?

最近在测试一些防“番羽土啬”设备系统,试用了一款某大厂的的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 查询有没有暴露在公网,以及查询过程是否容易被中间网络干扰。