新手排查DNS劫持需分层验证:一查nslookup解析IP是否异常;二核/etc/resolv.conf等配置是否被篡改;三检DNS代理进程、53端口占用及可疑定时任务;四验网络出口是否拦截或重定向DNS请求。

新手排查服务器是否遭遇未授权DNS劫持,关键在于“分层验证+交叉比对”,不依赖单一工具或现象。重点不是找“有没有被黑”,而是确认“解析结果是否可信、路径是否干净”。以下四步可独立操作,无需专业背景。
一、快速验证当前解析结果是否异常
在服务器命令行中执行:
- nslookup www.baidu.com —— 查看返回的IP是否属于百度官方网段(如220.181.x.x、39.156.x.x等);若返回123.123.123.123、119.6.6.6等陌生地址,高度可疑
- nslookup www.baidu.com 8.8.8.8 —— 强制用Google DNS重查,对比两次结果是否一致;不一致即存在本地或上游劫持
- dig +short www.taobao.com @114.114.114.114 —— 换国内公共DNS再比对,排除地域性污染干扰
二、检查服务器自身DNS配置源头
很多劫持源于配置被静默修改,需人工核对:
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
- Linux系统:运行 cat /etc/resolv.conf,确认nameserver是否为可信地址(如114.114.114.114、1.1.1.1),警惕192.168.x.x、10.x.x.x等内网地址(除非你明确部署了内网DNS)
- 检查DHCP是否覆盖配置:运行 systemd-resolve --status(Ubuntu/Debian)或 nmcli dev show(CentOS/RHEL),看DNS是否由DHCP强制下发且不可控
- 查看是否有静态HOSTS劫持:cat /etc/hosts,留意是否存在对常用域名(如github.com、npmjs.org)的异常IP映射
三、排查进程与服务级干扰
恶意程序常通过后台服务篡改解析行为,新手可聚焦两个高危点:
- 检查是否有非标准DNS代理进程:ps aux | grep -i "dnsmasq\|unbound\|pdnsd\|dns",确认是否为管理员主动部署;陌生进程名需进一步查证
- 查看UDP 53端口占用:sudo lsof -i :53 或 sudo netstat -tulnp | grep :53,若非named、systemd-resolved、dnsmasq等常见服务在监听,极可能被植入
- 检查定时任务是否偷偷改DNS:crontab -l 和 sudo cat /etc/crontab,查找含resolv.conf、nameserver、echo.*8.8.8.8等关键词的行
四、验证网络出口是否存在中间劫持
服务器若走企业网关或云平台NAT,劫持可能发生在更上层:
- 从服务器ping公网DNS服务器:ping 8.8.8.8 和 ping 114.114.114.114,确认基础连通性;若能通但nslookup失败,说明UDP 53被拦截或重定向
- 用tcpdump抓包验证真实查询流向:sudo tcpdump -i any port 53 -c 5,访问一个新域名后观察DNS请求发往哪个IP,是否与/etc/resolv.conf一致
- 对比云厂商控制台设置:如阿里云ECS,登录控制台→实例详情→“安全组”和“网络ACL”中检查是否放行UDP 53出方向;同时查看VPC内是否启用了“DNS劫持防护”或“自定义DNS转发规则”
整个过程不需要重启服务,多数检查可在5分钟内完成。真正的问题往往藏在最基础的配置文件或一个不起眼的cron任务里。确认异常后,优先固化可信DNS、关闭非必要DNS代理、禁用可疑定时任务——防御比清除更有效。

















