DNS 故障排查:dig、resolvectl 和 systemd-resolved 怎么看?
DNS 问题会表现为应用超时、访问慢和证书异常,本文梳理 Linux 服务器上 DNS 排查的常用命令和思路。
DNS 故障经常被误判成网络问题或应用问题。用户说“访问慢”,应用日志显示超时,实际上可能是域名解析慢、解析结果错误或本机 resolver 配置异常。
Linux 服务器上排查 DNS,不能只看 /etc/resolv.conf。现代发行版可能使用 systemd-resolved、NetworkManager 或云厂商注入配置。
dig 看权威结果
dig example.com
dig @8.8.8.8 example.com
dig +trace example.com
第一条看默认解析路径,第二条指定公共 DNS 对比,第三条追踪解析链路。对比结果可以判断是本地 DNS、递归 DNS 还是权威 DNS 问题。
resolvectl 看本机状态
resolvectl status
resolvectl query example.com
这些命令能看到每个网卡的 DNS、搜索域、默认路由和缓存状态。云服务器、多网卡、VPN 环境尤其需要看这里。
常见故障
第一,/etc/resolv.conf 被覆盖。手工修改后,重启网络服务又变回去。
第二,搜索域导致解析慢。短域名会拼接多个 search domain,失败后才返回。
第三,IPv6 解析返回但网络不通,应用优先尝试 IPv6 导致延迟。
第四,DNS 缓存保留了旧记录。发布切换后,部分机器仍访问旧 IP。
运维建议
关键业务不要只依赖默认 DNS。要监控解析延迟、失败率和重要域名解析结果。做域名切换时,提前降低 TTL,并准备回滚。
