DNS污染让你连正常网站都打不开?
你点开一个网站,转圈转到怀疑人生;换个手机热点,秒开。
不是你网卡了,是你的DNS被“下药”了——它给你一张假地图,还理直气壮说这地址没错。
怎么判断你的网络被DNS污染了?
关键看:只有某些网站打不开,而且基本集中在海外或小众服务;国内主流App和网站完全没影响。
试试这个两步法,30秒就能验证:
打开终端(Mac/Linux)或命令提示符(Windows),输入:
nslookup github.com
记下返回的IP地址(比如140.82.121.4)。紧接着输入:
ping 140.82.121.4(把你刚看到的IP粘贴进去)
如果 nslookup 返回的是个国内IP(比如 218.85.152.99),但 ping 它压根不通、或者延迟高得离谱(>1000ms),基本可以确定:DNS在骗你。
再补一刀验证:用手机热点连同一个网站,再跑一遍 nslookup。如果两次结果差得离谱——一次指向广东机房,一次指向美国西海岸——那不用猜了,就是污染。
真实场景:一位做前端开发的朋友,公司内网查 npmjs.org 总返回一个杭州IDC的IP,根本连不上;回家用宽带一查,立刻拿到正确的美国服务器IP,包管理器秒恢复。他当场把路由器DNS改了。
为什么运营商的DNS会“指错路”?
这不是Bug,是配置。
运营商DNS服务器被设定了“关键词拦截规则”:只要域名匹配(比如含 github、twitter、cloudflare),就不走权威DNS,直接返回一个预设IP——可能是空白页、错误提示,甚至某个本地镜像站。
这个动作发生在你设备发出请求后的第一跳,比你浏览器还没开始加载页面时就完成了“掉包”。
所以你刷不出网页,不是因为服务器宕机,而是你压根没找到门在哪。
它不挑人,全网通用。但副作用也很实在:比如你访问一个用 vercel.app 域名的小项目,只要Vercel被列进了规则库,整个子域名下的所有个人博客、简历页,全跟着一起进小黑屋。
手动修改DNS服务器能解决问题吗?
换 8.8.8.8 或 1.1.1.1 是最常用的第一反应,确实管用——至少在前几年。
但现在的问题是:这些IP本身可能被限速、丢包,甚至UDP 53端口被干扰。
你设置了 8.8.8.8,但发出去的DNS请求像寄信寄到了火星,收不到回音。这时候改DNS就等于换了个更漂亮的空盒子。
我自己踩过坑:有次在某高校宿舍连WiFi,nslookup 设置了 1.1.1.1,结果查 google.com 卡住5秒才返回,而用手机热点查同一域名,0.2秒出结果。后来抓包一看,UDP 53的请求包全被静默丢弃了。
还有哪些更可靠的检测工具?
别只靠 nslookup,多角度交叉印证才稳:
用
dig对比不同DNS源的结果(Mac/Linux自带,Windows可装bind-tools):dig @8.8.8.8 github.comdig @223.5.5.5 github.com(阿里DNS)
如果两个结果IP完全不同,且其中一个明显不合理,污染嫌疑拉满。用
traceroute github.com和traceroute 140.82.121.4(用你从干净网络查到的真实IP)对比路径:
前者走到第三跳就断在某个城域网节点,后者一路顺畅到旧金山——说明问题出在解析环节,不是网络链路。浏览器里打开
chrome://net-internals/#dns(Chrome/Edge)或about:networking#dns(Firefox),直接看浏览器当前用的是哪个DNS,有没有缓存污染。
绕过DNS污染的终极思路是什么?
一句话:别让DNS查询暴露在明面上。
防火墙专盯UDP 53端口的明文请求,那我们就把它裹进HTTPS流量里,或者干脆塞进加密隧道。
目前真正落地有效的方案就三个:
用DoH(DNS over HTTPS)或DoT(DNS over TLS)
把DNS查询变成和刷网页一样的HTTPS请求。Cloudflare、Google、阿里都提供免费DoH地址,浏览器和系统原生支持,开个开关就行。开VPN(哪怕只是临时连5分钟)
不是为了翻墙,是为了借道。所有DNS请求经由VPN服务器发出,本地DNS彻底失效。适合紧急查资料、下载依赖、验证部署。改Hosts文件(手动写死IP)
适合单点突破:你知道某个网站现在必须访问,又不想开全局代理。前提是——你得先在没污染的网络下查到它当前有效的IP。
今天下班前就能试的3个具体操作
别收藏吃灰,现在打开电脑,照着做:
第一步:在Chrome或Edge里立刻启用DoH
点右上角「⋯」→ 设置 → 隐私和安全 → 安全 → 找到「使用安全DNS」→ 开关打开 → 选择「Google」或「Cloudflare」。完成。不用重启,刷新网页就能感受到区别。
第二步:登录你家路由器,改掉默认DNS
打开浏览器,输入 192.168.1.1(或你路由器背面写的地址)→ 输入管理员密码(一般是 admin/admin 或 admin/123456)→ 找到「WAN设置」或「DHCP服务器」→ 把主用DNS改成 1.1.1.1,备用DNS改成 8.8.8.8 → 保存 → 重启路由器。等Wi-Fi重连后,全家设备自动生效。
第三步:为那个死活打不开的网站,手写一条Hosts记录
比如你想访问 docs.rust-lang.org:
① 用手机热点打开 https://www.ipaddress.com,搜这个域名,抄下最新IP(如 185.199.108.153);
② 在电脑上按 Win+R,输入 notepad C:\Windows\System32\drivers\etc\hosts,以管理员身份运行记事本;
③ 在文件末尾新起一行,写:185.199.108.153 docs.rust-lang.org;
④ 保存 → 打开命令提示符,输入 ipconfig /flushdns → 回车;
⑤ 打开浏览器,直输 https://docs.rust-lang.org,试试看。