dns解析异常应先验证是否为dns问题:ping ip通而域名返回“unknown host”即锁定dns故障;再检查/etc/resolv.conf内容及软链接指向;接着用dig @dns_ip直连测试;最后排查本地缓存、/etc/hosts干扰及udp 53端口连通性。

DNS解析超时或缓慢,不是接口慢、也不是网络断,而是域名转IP这一步卡住了。排查要从“是不是DNS问题”开始,再一层层往下压,不跳步、不盲试。
第一步:确认真是DNS在拖后腿
别一上来就查/etc/resolv.conf或跑dig。先做两个快速验证:
-
ping一个已知IP:比如
ping -c 3 8.8.8.8,通 → 网络层没问题;不通 → 先查网卡、路由、防火墙 -
ping一个域名:比如
ping -c 3 baidu.com,返回unknown host→ 基本锁定DNS解析失败;返回超时或连不上 → 可能是目标服务或网络问题 - 再补一手:
curl -I http://180.101.49.12(百度某IP),能拿到HTTP头 → 进一步坐实是DNS环节出错,不是防火墙拦了或后端挂了
第二步:看配置,重点盯/etc/resolv.conf
这个文件是系统找DNS的“地图”,但容易被覆盖或配错:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 执行
cat /etc/resolv.conf,检查是否真有nameserver行,且IP地址有效(比如8.8.8.8、114.114.114.114) - 注意软链接:有些系统用
systemd-resolved或NetworkManager动态管理,/etc/resolv.conf可能只是指向/run/systemd/resolve/stub-resolv.conf,这时要用systemd-resolve --status看真实配置 - 警惕多个nameserver串联:glibc默认串行查询,第一个超时(默认5秒×2次=10秒)才会切到第二个。哪怕第二个快如闪电,也得等第一个彻底凉透
第三步:绕过本地配置,直连DNS服务器测速
用dig指定服务器发请求,排除缓存、代理、本地服务干扰:
-
dig www.baidu.com @8.8.8.8 +stats→ 看Query time,20ms正常,>2秒就要怀疑 -
dig www.baidu.com @114.114.114.114 +stats→ 对比不同DNS响应速度 - 如果某个DNS一直慢或超时,说明它本身不可靠,不该放在
resolv.conf第一位 - 加
+trace可看完整递归路径,定位卡在哪一级(根、TLD、权威)
第四步:查干扰项和底层通路
很多“DNS慢”其实是被别的东西绊了一脚:
-
本地hosts文件:
cat /etc/hosts,看有没有错误映射或大量无效条目 -
本地缓存服务:比如
nscd或systemd-resolved异常,可临时停掉测试:sudo systemctl stop nscd -
UDP 53端口是否被拦:用
nc -zv 8.8.8.8 53或timeout 2 bash -c 'echo >/dev/tcp/8.8.8.8/53' 2>/dev/null && echo ok || echo blocked -
全局解析状态:用
ping.pe或ping.cn查各地节点是否一致,判断是本地问题还是权威DNS没生效(比如刚改记录,TTL还长)










