Linux DNS 故障排查常见步骤

7次阅读

linux dns故障排查需分层验证:先测网络连通性(ping 8.8.8.8/114.114.114),再查resolv.conf及networkmanager配置,接着验证udp/tcp 53端口,用dig @dns +trace深度诊断,最后检查systemd-resolved/nscd缓存与nsswitch.conf解析顺序。

Linux DNS 故障排查常见步骤

Linux DNS 故障排查核心在于“分层验证”:先确认网络通路是否畅通,再逐级检查配置、服务、协议和解析过程。不跳步、不假设,每一步都有明确的验证信号。

查网络连通性与基础配置

很多所谓“DNS问题”其实卡在第一步——根本没连上网。先执行:

  • ping -c 4 8.8.8.8:验证能否到达公网IP,排除网关、路由、物理链路问题
  • ping -c 4 114.114.114.114:测试国内常用DNS服务器可达性
  • cat /etc/resolv.conf:确认 nameserver 行存在且IP有效;注意某些系统(如使用 NetworkManager 的发行版)会动态覆盖该文件,直接编辑可能无效
  • nmcli dev show | grep DNS(若用 NetworkManager):查看实际生效的DNS设置

测DNS端口与服务响应

DNS依赖53端口(TCP/UDP),防火墙或中间设备常拦截UDP 53。验证方法:

  • nc -zv -u 8.8.8.8 53:测试UDP 53是否开放(DNS查询主用UDP)
  • telnet 8.8.8.8 53nc -zv 8.8.8.8 53:测试TCP 53(用于大响应或区域传输)
  • 若失败,检查本地 iptables/nftables 规则,或尝试临时关闭防火墙(systemctl stop firewalld)快速验证

用 dig 深度诊断解析链路

nslookup 提示简略,dig 能暴露完整路径。关键命令:

  • dig @8.8.8.8 baidu.com:绕过本机配置,直连公共DNS,判断是否为本地DNS服务器故障
  • dig +trace baidu.com:显示从根域(.)→顶级域(com.)→权威服务器的完整递归路径,定位卡在哪一级
  • 重点看输出中的:status(NOERROR/SERVFAIL/NXDOMAIN)、SERVER(实际查询的DNS)、ANSWER SECTION(是否有结果)

查系统解析机制与缓存

现代Linux常启用 systemd-resolved 或 nscd,它们可能干扰原始配置:

  • systemd-resolve –status:查看当前 resolver 状态及上游DNS
  • sudo systemd-resolve –flush-caches:清空 systemd-resolved 缓存
  • grep ^hosts /etc/nsswitch.conf:确认是否含 dns(如 hosts: files dns),否则即使 resolv.conf 正确也不走DNS
  • 若使用 nscd:sudo systemctl restart nscd
text=ZqhQzanResources