好的阿杰,我帮你整理一份 服务器 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️⃣ 排查网络连接问题
- 检查本地网络:
ping 8.8.8.8 # 测试是否能通公网
- 检查防火墙:
iptables -L -n
ufw status
- 确保 UDP/53、TCP/53 端口未被阻止
- 检查路由:
ip route
- 确认默认网关正确
5️⃣ 检查 DNS 缓存和服务
- 本地缓存:
systemd-resolve --flush-caches
- 重启 DNS 服务:
sudo systemctl restart systemd-resolved
# 或 NetworkManager
sudo systemctl restart NetworkManager
6️⃣ 高级排查
- 抓包分析(tcpdump):
sudo tcpdump -i eth0 port 53
- 观察 DNS 请求和响应是否正常
- 检查 hosts 文件:
cat /etc/hosts
- 确认没有误配置覆盖域名
- 检查防火墙/安全组/云厂商限制:
- 云服务器可能限制外部 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️⃣ 排查步骤总结
- 检查
/etc/resolv.conf
和网卡 DNS 配置 - 使用
ping
/dig
/nslookup
测试域名解析 - 测试网络连通性和防火墙设置
- 检查 DNS 缓存和相关服务
- 高级抓包分析异常请求
- 根据原因调整 DNS / 网络 / 防火墙配置
发表回复