技术博客

DNS 故障排查:dig、resolvectl 和 systemd-resolved 怎么看?

DNS 问题会表现为应用超时、访问慢和证书异常,本文梳理 Linux 服务器上 DNS 排查的常用命令和思路。

DNSdigsystemd-resolved故障排查

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,并准备回滚。

参考资料