Linux DNS解析慢主因是本地配置不当或服务干扰,需从四方面排查:检查nsswitch.conf解析顺序(如简化为hosts: files dns)、验证systemd-resolved是否干扰(用systemd-resolve --status查看并可临时禁用)、确认resolv.conf中nameserver是否被动态覆盖或指向不可达地址、测试DNS路径是否被劫持或串行阻塞。

Linux 系统 DNS 解析慢,多数情况不是 DNS 服务器本身慢,而是本地解析路径存在冗余、串行阻塞或服务干扰。排查要从配置顺序、服务冲突、路径绕路和缓存机制四方面入手。
检查 /etc/nsswitch.conf 的 hosts 解析顺序
系统按该文件定义的顺序尝试多种解析源(如 files、dns、mdns4_minimal、resolve),顺序不当会导致无谓等待。
- 运行 cat /etc/nsswitch.conf | grep hosts,确认当前配置,常见问题配置如:
hosts: files mdns4_minimal [NOTFOUND=return] dns - 若含
mdns4_minimal或wins等非必要模块(尤其在服务器环境),建议简化为:hosts: files dns - 修改后执行 getent hosts example.com 测试是否生效;如使用 nscd,需重启:
sudo systemctl restart nscd
验证 systemd-resolved 是否造成干扰
较新发行版默认启用 systemd-resolved,其 stub 模式可能引入额外延迟或与 NetworkManager 冲突。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 查看当前状态:systemd-resolve --status,重点关注 DNS servers 列和 "DNS Servers" 下的实际上游地址
- 临时禁用测试:
sudo systemctl stop systemd-resolved && sudo systemctl disable systemd-resolved - 再运行 time dig example.com 或 time curl -I http://example.com,对比耗时变化
- 若明显变快,可考虑卸载,或改用 dnsmasq、直连真实 DNS,避免 stub 转发链路
确认 DNS 查询路径是否被劫持或串行阻塞
/etc/resolv.conf 中多个 nameserver 是严格串行尝试,前一个超时才会轮到下一个,极易引发“偶发超时”。
- 运行 cat /etc/resolv.conf,检查 nameserver 数量及顺序;典型风险配置:
nameserver 8.8.8.8\nnameserver 114.114.114.114 - 分别测试各 DNS 响应速度:dig @8.8.8.8 example.com +stats 和 dig @114.114.114.114 example.com +stats,观察 Query time
- 用 dig example.com +short(走系统默认)对比直连结果是否一致、耗时是否显著更高
- 若第一个 DNS 响应慢(如 190ms)且不可靠,建议只保留一个稳定 DNS,或调换顺序
排查 resolv.conf 是否被动态覆盖或指向无效地址
该文件常被 NetworkManager、DHCP、cloud-init 等覆盖,导致实际使用的 DNS 并非预期,甚至含 IPv6 地址但在无 IPv6 环境下空等超时。
- 运行 ls -l /etc/resolv.conf,若为软链接(如指向
/run/systemd/resolve/stub-resolv.conf),说明受 systemd-resolved 控制 - 检查 nameserver 是否可达:nc -zv 114.114.114.114 53;若不通,需更换或修复网络策略
- 若使用静态 IP,可在 NetworkManager 配置中设
dns=none,或 Debian/Ubuntu 下设置resolvconf=NO防止自动覆盖

















