好的阿杰,我帮你整理一份 服务器 DNS 解析失败的排查方法,系统化涵盖从基础检查到深层原因分析,适合 Linux/Unix 系统。


1️⃣ 确认 DNS 解析失败现象

常见表现:

  • 无法访问域名:
ping www.google.com
# ping: unknown host www.google.com

  • 浏览器访问网站报 DNS 错误
  • 日志提示无法解析主机名

2️⃣ 检查本地 DNS 配置

2.1 查看 /etc/resolv.conf

cat /etc/resolv.conf

示例:

nameserver 8.8.8.8
nameserver 8.8.4.4

  • 确认至少有一个有效 DNS 服务器
  • 注意:某些系统(如 Ubuntu 18+)使用 systemd-resolved,配置文件可能被覆盖

2.2 检查是否被覆盖

systemctl status systemd-resolved
cat /etc/systemd/resolved.conf

  • 如果使用 NetworkManager,需要检查网卡配置是否自动获取 DNS

3️⃣ 测试 DNS 解析功能

3.1 使用 ping / nslookup / dig

ping www.google.com
nslookup www.google.com
dig www.google.com

  • nslookup 示例:
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
Name: www.google.com
Address: 142.250.200.68

3.2 指定 DNS 测试

dig @8.8.8.8 www.google.com

  • 如果指定 DNS 能解析,说明本地 DNS 配置有问题
  • 如果仍然失败,可能网络或 ISP DNS 有问题

4️⃣ 排查网络连接问题

  1. 检查本地网络
ping 8.8.8.8   # 测试是否能通公网

  1. 检查防火墙
iptables -L -n
ufw status

  • 确保 UDP/53、TCP/53 端口未被阻止
  1. 检查路由
ip route

  • 确认默认网关正确

5️⃣ 检查 DNS 缓存和服务

  1. 本地缓存
systemd-resolve --flush-caches

  1. 重启 DNS 服务
sudo systemctl restart systemd-resolved
# 或 NetworkManager
sudo systemctl restart NetworkManager


6️⃣ 高级排查

  1. 抓包分析(tcpdump):
sudo tcpdump -i eth0 port 53

  • 观察 DNS 请求和响应是否正常
  1. 检查 hosts 文件
cat /etc/hosts

  • 确认没有误配置覆盖域名
  1. 检查防火墙/安全组/云厂商限制
  • 云服务器可能限制外部 DNS 请求
  • 需要开放 UDP/53、TCP/53

7️⃣ 常见原因总结

类型典型问题解决方法
配置问题/etc/resolv.conf DNS 错误修改为可靠 DNS,如 8.8.8.8 / 114.114.114.114
网络问题无法访问 DNS 服务器检查路由、防火墙
服务问题systemd-resolved / NetworkManager 异常重启服务、刷新缓存
本地覆盖hosts 文件错误删除冲突条目
云环境限制UDP 53 被限制调整安全组规则

8️⃣ 排查步骤总结

  1. 检查 /etc/resolv.conf 和网卡 DNS 配置
  2. 使用 ping / dig / nslookup 测试域名解析
  3. 测试网络连通性和防火墙设置
  4. 检查 DNS 缓存和相关服务
  5. 高级抓包分析异常请求
  6. 根据原因调整 DNS / 网络 / 防火墙配置