Ubuntu 20.04 LTS服务器网络异常问题求助
兄弟,我太懂你这种折腾服务器的糟心感了——搁谁机器躺了半年重启出网络问题都头大。咱们先把问题拆解开:能局域网远程登录,说明本地网络链路是通的,但没法访问外网、Docker容器没网,大概率是DNS、路由或者网络配置的锅,咱们一步步来排查:
先排查DNS解析问题:
能ping通内网但访问不了网站,首先得确认域名能不能正常解析。你可以在服务器上跑这两个命令测试:nslookup google.com dig github.com如果返回“server failed”或者没有IP结果,那就是DNS配置出问题了。可以临时修改
/etc/resolv.conf添加公共DNS:echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf echo "nameserver 1.1.1.1" | sudo tee -a /etc/resolv.conf要是重启后resolv.conf又被重置,就得去
/etc/netplan目录下修改对应的yaml配置文件,在nameservers字段里加上这两个DNS地址,然后执行sudo netplan apply生效。检查路由表是否有默认网关:
没有默认网关的话,服务器根本不知道该把外网数据包发往哪里。用命令查看路由表:ip route show正常应该能看到类似
default via 192.168.x.1 dev eno1的条目(192.168.x.1是你的路由器网关,eno1是网卡名)。如果没有这条,手动添加:sudo ip route add default via 你的网关IP dev 网卡名比如你的网关是192.168.1.1,网卡是eno1,就跑
sudo ip route add default via 192.168.1.1 dev eno1。测试外网连通性的底层链路:
先ping你的网关,比如ping 192.168.1.1,如果能通,再ping公网IP:ping 8.8.8.8- 如果能ping通8.8.8.8但访问不了域名,那100%是DNS的问题,回到第一步解决;
- 如果连8.8.8.8都ping不通,那要么是路由没配对,要么是网卡硬件/驱动有问题,或者防火墙限制了出站。
修复Docker容器的网络问题:
Docker默认会用宿主机的DNS配置,但如果宿主机DNS出问题,容器也会跟着遭殃。你可以手动给Docker指定DNS:- 编辑
/etc/docker/daemon.json(如果没有就新建):
写入内容:sudo nano /etc/docker/daemon.json{ "dns": ["8.8.8.8", "1.1.1.1"] } - 重启Docker服务:
sudo systemctl restart docker
之后启动一个测试容器试试网络:
docker run --rm alpine ping -c 3 google.com- 编辑
检查防火墙规则:
Ubuntu 20.04默认用ufw防火墙,说不定是规则限制了出站流量。先看看防火墙状态:sudo ufw status如果是active状态,你可以临时关闭试试:
sudo ufw disable然后再测试访问外网,如果能正常访问了,就说明是ufw的规则需要调整,比如添加允许出站的规则。
最后排查硬件/驱动问题:
毕竟机器躺了半年,网卡硬件可能有松动或者驱动异常。用ethtool看网卡状态:ethtool 你的网卡名看输出里的
Link detected是不是yes,速率是否正常。如果是驱动问题,可以试试重新加载网卡驱动,或者更新系统内核(先备份重要数据再操作)。
备注:内容来源于stack exchange,提问作者Lester702

