1. 确认网络基础连通性
bash
# 测试能否ping通IP地址(如8.8.8.8)
ping -c 4 8.8.8.8
- 现象判断 :
- 若IP可通但域名不通 → DNS解析问题
- 若IP和域名均不通 → 网络连接故障(需检查物理链路或防火墙)
2. 检查DNS服务器配置
-
查看当前DNS配置 :
bashcat /etc/resolv.conf
-
若文件为空或DNS服务器错误(如
127.0.0.53
),需手动添加:bashsudo echo "nameserver 8.8.8.8" >> /etc/resolv.conf sudo echo "nameserver 114.114.114.114" >> /etc/resolv.conf
-
注意:重启后可能恢复默认,需永久配置(见步骤3)。
-
3. 永久配置DNS(Netplan/NetworkManager)
-
Ubuntu 18.04+ 使用Netplan :
bashsudo nano /etc/netplan/*.yaml # 如01-network-manager-all.yaml
添加DNS配置示例:
yamlnetwork: version: 2 ethernets: eth0: dhcp4: yes nameservers: addresses: [8.8.8.8, 114.114.114.114]
应用配置:
bashsudo netplan apply
4. 验证nsswitch.conf配置
bash
cat /etc/nsswitch.conf | grep hosts
- 正确配置应为 :
hosts: files dns [myhostname]
若缺少dns
,需编辑文件手动添加。
5. 检查关键库文件缺失
bash
# 检查是否存在libnss_dns.so.2
ls /lib64/libnss_dns.so.2
-
若缺失 ,手动创建软链接(假设库文件在
/usr/lib/x86_64-linux-gnu/
):bashsudo ln -s /usr/lib/x86_64-linux-gnu/libnss_dns.so.2 /lib64/libnss_dns.so.2
6. 排查网络管理服务冲突
bash
# 重启网络服务
sudo systemctl restart systemd-networkd
# 或停止NetworkManager(若存在冲突)
sudo systemctl stop NetworkManager
7. 防火墙及安全组检查
-
本地防火墙 :
bashsudo ufw status # 查看状态 sudo ufw allow 53 # 开放DNS端口
-
云服务器安全组 :
确保安全组规则允许 ICMP协议 和 UDP/TCP 53端口 出站。
8. 清理DNS缓存
bash
sudo systemd-resolve --flush-caches
# 或重启systemd-resolved服务
sudo systemctl restart systemd-resolved
9. 扩展测试
-
手动解析测试 :
bashnslookup www.baidu.com 8.8.8.8
-
抓包分析 :
bashsudo tcpdump -i eth0 port 53
常见问题汇总
现象 | 可能原因 | 解决方案 |
---|---|---|
/etc/resolv.conf 重启后重置 |
DHCP覆盖或NetworkManager干扰 | 修改Netplan配置 或设置PEERDNS=no |
仅部分域名解析失败 | DNS污染或特定域名劫持 | 更换DNS服务器(如1.1.1.1 ) |
解析延迟高 | DNS服务器性能差 | 更换响应更快的公共DNS |