ubuntu使用很久之后网络突然连不上解决方法
Ubuntu DNS 解析失败 Bug 排查与解决
一、Bug 现象
Ubuntu 使用一段时间后,所有需要域名解析的程序突然无法正常工作,例如:
pinggitee.com提示:
ping: gitee.com: Temporary failure in name resolution但是直接访问 IP 地址却正常,例如:
ping8.8.8.8可以正常通信。
二、Bug 原因
出现该问题说明:
网络连接正常,但 DNS 域名解析失败。
DNS(Domain Name System)的作用是将域名转换为对应的 IP 地址。
例如:
gitee.com │ ▼ DNS服务器 │ ▼ 180.xxx.xxx.xxx如果 DNS 无法正常工作,就会导致:
- ping 域名失败
- Git 无法连接远程仓库
- 浏览器打不开网站
- wget、curl 等工具无法访问域名
但由于 IP 地址无需经过 DNS 解析,因此直接访问 IP 仍然正常。
三、排查过程
(1)确认网络是否正常
首先测试是否能够访问公网 IP:
ping8.8.8.8若能够正常通信,则说明:
- 网卡正常
- 路由正常
- 网络连接正常
问题基本可以确定不是网络故障。
(2)确认是否为 DNS 故障
继续测试域名解析:
pinggitee.com若提示:
Temporary failure in name resolution则说明:
DNS 解析失败。
(3)查看当前 DNS 配置
查看系统 DNS:
cat/etc/resolv.conf可以看到:
nameserver 127.0.0.53说明 Ubuntu 使用的是:
systemd-resolved进行 DNS 解析。
(4)查看真正使用的 DNS 服务器
执行:
resolvectl dns ens34查看网卡当前使用的 DNS。
例如:
192.168.2.2说明 Ubuntu 实际向:
192.168.2.2发送 DNS 查询请求。
(5)测试 DNS 服务器
测试该 DNS 是否正常:
nslookupgitee.com192.168.2.2如果出现:
communications error timeout或者解析速度非常慢,
说明:
当前 DNS 服务器工作不稳定。
(6)使用公共 DNS 测试
例如:
nslookupgitee.com223.5.5.5如果能够立即解析成功,则说明:
问题出在原来的 DNS 服务器,而不是 Ubuntu 系统本身。
四、问题原因分析
本次问题的根本原因是:
DHCP 自动分配的 DNS(192.168.2.2)响应速度慢、稳定性较差。
Ubuntu 长时间运行后仍然继续使用该 DNS,因此出现:
Temporary failure in name resolution虽然网络连接正常,但域名解析失败。
五、解决方法
(1)临时解决
重新启动 DNS 服务:
sudosystemctl restart systemd-resolved或者:
sudosystemctl restart NetworkManager也可以直接重启 Ubuntu。
该方法可以恢复 DNS,但不能彻底解决问题。
(2)长期解决(推荐)
不要继续使用 DHCP 自动分配的 DNS。
改为固定使用公共 DNS,例如:
阿里 DNS:
223.5.5.5腾讯 DNS:
119.29.29.29配置命令:
sudonmcli connection modify"Wired connection 2"ipv4.ignore-auto-dnsyessudonmcli connection modify"Wired connection 2"ipv4.dns"223.5.5.5 119.29.29.29"sudonmcli connection down"Wired connection 2"sudonmcli connection up"Wired connection 2"最后验证:
nmcli connection show"Wired connection 2"|grepdns应看到:
ipv4.dns: 223.5.5.5,119.29.29.29 ipv4.ignore-auto-dns: yes说明以后 Ubuntu 将固定使用公共 DNS,不再依赖 DHCP 分配的 DNS。
六、总结
本次 Bug 并非网络故障,而是DNS 服务器不稳定导致的域名解析失败。通过排查网络连通性、DNS 配置和 DNS 服务器响应情况,最终定位到 DHCP 分配的 DNS 存在稳定性问题。采用固定公共 DNS(如 223.5.5.5 和 119.29.29.29)后,可以有效避免该问题再次发生,提高 Ubuntu 长时间运行时的网络稳定性。
