DNS污染和DNS劫持有什么区别?怎么检测、怎么解决

约 4 分钟读完 2 次阅读

DNS污染和DNS劫持,结果都是你查一个域名、拿到了错误的 IP,区别在于是谁、在哪一步动的手。DNS污染发生在查询途中:你的查询还没到 DNS 服务器,途经的网络设备就抢先塞回一个伪造的答案。DNS劫持发生在 DNS 服务器或你的路由器上:服务器本身被改了,或者你根本没连到正确的服务器。

两者解决办法不一样。网上不少老文章说「把 DNS 改成 8.8.8.8 就行」,对劫持可能有用,对污染基本没用。这篇讲清两者的区别,给一个能自己动手的检测方法,再说现在真正有效的解决办法。

污染和劫持的区别

对比项DNS污染DNS劫持
在哪一步查询途中,被途经的设备抢答DNS 服务器或你的路由器上
谁干的网络中间的过滤设备运营商的 DNS、被篡改的路由器、恶意软件
典型表现某些境外网站的域名解析到毫不相干的 IP,打不开打开网页被跳到广告页,输错网址跳到导航页
换个 DNS 服务器地址有没有用基本没用,查询照样在途中被抢答往往有用,绕开了被动手的服务器
真正的解决办法加密 DNS(DoH / DoT),或让代理那边解析换 DNS、检查路由器、查杀恶意软件

为什么改成 8.8.8.8 挡不住污染

普通的 DNS 查询是明文的,用 UDP 发出去,不验证答案是谁回的。污染的原理就是:途经的设备看到你在查某个域名,立刻伪造一个答案先回给你,你的电脑收到第一个答案就用了,真正的答案后到,被丢掉。

你把 DNS 改成 8.8.8.8,查询仍然是明文、仍然要途经同样的网络,照样会被抢答。所以改地址对污染没用。

加密 DNS 不一样:DoH 把查询放在 HTTPS 里,DoT 放在 TLS 里,途中的设备既看不到你查的是什么,也没法伪造一个能通过验证的答案。

自己检测是不是被污染了

第一步:查出解析结果

# 用系统默认的 DNS 查
nslookup www.google.com

# 换一个 DNS 服务器再查一次
nslookup www.google.com 223.5.5.5

第二步:查这个 IP 是谁的

把上面拿到的 IP 填进去:

curl -s https://ipinfo.io/查到的IP/org

google.com 解析出来的 IP 应该属于 Google(结果里会出现 Google LLC)。如果显示的是毫不相干的公司,或者根本连不上,就是被污染了。

第三步:用加密 DNS 对照

DoH 查询走的是 HTTPS,可以直接用 curl 发:

curl -s "https://cloudflare-dns.com/dns-query?name=www.google.com&type=A" -H "accept: application/dns-json"

返回的 JSON 里 Answer 部分就是 IP。它跟第一步的结果对不上、而且它的 IP 归属正确,就能确认普通查询被污染了。这个地址本身在部分网络下也可能访问不了,那种情况可以连着代理再测。

怎么解决

你的情况办法
不用代理,只想防劫持换一个可信的公共 DNS,检查路由器的 DNS 设置有没有被改
想防污染系统或浏览器开启加密 DNS(DoH / DoT)。Windows 11 和主流浏览器的设置里都有这个选项
用代理客户端让要走代理的域名由代理那边解析,本地不查也就不会被污染
命令行、Git 走代理用 socks5h:// 写法,域名交给代理解析,见 SOCKS5代理设置方法

代理客户端处理 DNS 的方式,FakeIP 是其中一种,它让要走代理的域名根本不在本地解析,原理和利弊见 FakeIP是什么。

两个常见误区

「改 hosts 文件就能解决」

hosts 里写死一个 IP,确实能跳过 DNS。但网站的 IP 会变,写死的很快就失效;而且很多网站即使 IP 对了,连接还会在其他环节被拦下。现在改 hosts 只适合临时救急,不是长期办法。

「DNS 污染和 DNS 泄漏是一回事」

污染是你拿到了错误的答案;泄漏是用了代理之后,DNS 查询还是从你本地的网络发出去了,暴露了你在访问哪些网站。两者可能同时存在,但检查方法不同,泄漏的检查见 IP泄漏性能测试。

我们的客户端怎么处理 DNS

我们的电脑端把域名分成两类:国内域名交给本地 DNS 解析;其余域名经代理用加密 DNS 解析,查询从境外发出,也就不会被途中污染。安卓端对要走代理的域名用 FakeIP,本地不做真实解析,同样避开了污染。

说一句对我们不利的实话:国内域名我们照样用本地 DNS 解析,这样国内网站才快。如果你的运营商或路由器劫持了国内域名(比如把打错的网址跳到广告页),我们的客户端不会帮你处理,要按上面防劫持的办法自己解决。

常见问题

DNS 污染是什么意思?

你查一个域名时,查询在途中被网络设备抢先回了一个伪造的答案,于是拿到了错误的 IP,网站打不开。

DNS 污染怎么解决?

改用加密 DNS(DoH / DoT),或者让代理客户端在境外解析要走代理的域名。只把 DNS 地址改成 8.8.8.8 基本没用,查询照样会被途中抢答。

DNS 劫持是什么意思?

DNS 服务器或你的路由器返回了被篡改的结果,常见的是打开网页被跳到广告页,或者输错网址被带到导航页。

DNS 劫持怎么解决?

先检查路由器的 DNS 设置有没有被改,再换一个可信的公共 DNS;电脑上出现的话,顺便查一下有没有恶意软件。

DNS 污染怎么检测?

用 nslookup 查出域名的 IP,再查这个 IP 归哪家公司所有。比如 google.com 解析出来的 IP 不属于 Google,就是被污染了。也可以用 DoH 查一次做对照。

在线客服
正在加载...