linux排查dns劫持的核心是比对多个可信dns解析结果是否一致,不一致即提示劫持或污染;需用dig向8.8.8.8、1.1.1.1、223.5.5.5等并行查询+short比对ip,结合@网关对比、+trace追踪链路、清空缓存及直连权威ns验证。

Linux 系统中排查 DNS 劫持或污染,核心是比对多个可信 DNS 服务器的解析结果是否一致。不一致就是关键信号——说明至少有一个 DNS 返回了被篡改的 IP。
快速比对不同 DNS 的解析结果
用 dig 向多个公共 DNS 并行查询同一域名,观察 ANSWER SECTION 是否完全相同:
- dig @8.8.8.8 example.com +short
- dig @1.1.1.1 example.com +short
- dig @223.5.5.5 example.com +short(阿里DNS)
- dig @114.114.114.114 example.com +short
如果其中某一个返回的 IP 与其他全部不同(尤其是指向小众、陌生或国内未备案的地址),高度提示该 DNS 被劫持或污染;若所有结果都一致但明显错误(如指向广告页IP),则可能是权威记录已被篡改或本地劫持。
检查是否被本地中间设备篡改
家庭路由器、企业网关、光猫甚至某些运营商宽带盒子,常会强制将 DNS 请求重定向到自己的服务器。验证方法:
- 用 dig @192.168.1.1 example.com(替换为你的网关IP)查一次,再和 dig @8.8.8.8 对比
- 若网关返回结果异常,而公网 DNS 正确 → 劫持点大概率在局域网出口设备
- 临时改用手机热点重试:如果换网络后问题消失,基本可锁定原网络环境存在 DNS 干预
确认解析路径是否被绕过或污染
使用 +trace 查看完整递归链路,重点观察每级响应是否可信:
- dig example.com +trace
- 从根服务器(.)开始,逐级看到 .com → 权威 NS → 最终 A 记录
- 若在某一级(比如某个 .com NS 或递归服务器)突然返回异常 IP,或 SERVER 字段显示非预期地址(如本该连 114.114.114.114 却连到了 10.x.x.x),说明请求中途被重定向
排除本地干扰与缓存污染
系统级缓存或 hosts 文件可能固化错误映射,掩盖真实劫持:
- 运行 cat /etc/hosts,确认没有手动添加的可疑域名/IP 映射
- 清空本地 resolver 缓存:sudo systemd-resolve --flush-caches(systemd-resolved 环境)或 sudo resolvectl flush-caches
- 临时绕过所有配置,直连权威服务器验证:dig @ns1.example.com www.example.com A(需先查出权威 NS:dig example.com NS)
不复杂但容易忽略











