Ubuntu Server静态IP配置下无法ping通外网及DNS解析失败求助
Ubuntu Server静态IP配置下无法ping通外网及DNS解析失败求助
你好!从你描述的情况来看,Ubuntu Server 22.04在静态IP配置模式下没法访问外网,但动态配置时网络正常,而且能ping通本地路由器,这确实有点棘手。我先帮你把目前的排查信息整理清楚,再给出一些可能的解决方向。
当前环境与问题汇总
- 系统版本:Ubuntu 22.04.3 LTS(内核
5.15.0-94-generic) - 正常现象:动态IP配置时网络恢复正常;能ping通本地路由器
192.168.50.1 - 异常现象:静态IP配置下,无法ping通外网(如
8.8.8.8),DNS解析超时(dig google.com提示连接8.8.8.8#53超时)
关键排查信息
路由表信息
default via 192.168.50.1 dev eno1 proto static 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 192.168.50.0/24 dev eno1 proto kernel scope link src 192.168.50.88
网卡状态信息
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:14:b1:38:2d txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.50.88 netmask 255.255.255.0 broadcast 192.168.50.255 inet6 fe80::86a9:3eff:fe11:7ef6 prefixlen 64 scopeid 0x20<link> ether 84:a9:3e:11:7e:f6 txqueuelen 1000 (Ethernet) RX packets 4563 bytes 667639 (667.6 KB) RX errors 0 dropped 14 overruns 0 frame 0 TX packets 5702 bytes 6573527 (6.5 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 16 memory 0xb1200000-b1220000 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 15062 bytes 2578348 (2.5 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 15062 bytes 2578348 (2.5 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Netplan静态配置文件(00-installer-config.yaml)
network: version: 2 renderer: networkd ethernets: eno1: addresses: - 192.168.50.88/24 nameservers: addresses: [1.1.1.1,8.8.8.8] routes: - to: default via: 192.168.50.1
DNS与解析相关信息
/etc/resolv.conf状态与内容:
ls -l /etc/resolv.conf -rw-r--r-- 1 root root 19 Feb 16 16:13 /etc/resolv.conf more /etc/resolv.conf # This is /run/systemd/resolve/resolv.conf managed by man:systemd-resolved(8). nameserver 8.8.8.8 search .
resolvectl status输出:
Global Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported resolv.conf mode: foreign DNS Servers: 8.8.8.8 Fallback DNS Servers: 8.8.4.4 Link 2 (eno1) Current Scopes: DNS Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported DNS Servers: 1.1.1.1 8.8.8.8 Link 3 (wlp2s0) Current Scopes: none Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported Link 4 (docker0) Current Scopes: none Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
- 外网ping测试结果:
ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. ^C --- 8.8.8.8 ping statistics --- 14 packets transmitted, 0 received, 100% packet loss, time 13311ms
- DNS解析测试结果:
dig google.com ;; communications error to 8.8.8.8#53: timed out ;; communications error to 8.8.8.8#53: timed out
可能的解决方向
- 检查Netplan配置的缩进:YAML对缩进非常敏感,你的配置文件里
version、renderer、ethernets等字段应该和network保持2个空格的缩进,eno1下的addresses、nameservers等字段再缩进2个空格,修正后的配置应该类似:
network: version: 2 renderer: networkd ethernets: eno1: addresses: - 192.168.50.88/24 nameservers: addresses: [1.1.1.1, 8.8.8.8] routes: - to: default via: 192.168.50.1
修正后执行sudo netplan apply生效配置。
检查防火墙规则:静态IP模式下,防火墙可能拦截了外网流量,你可以临时关闭防火墙测试:
sudo ufw disable,如果能ping通外网了,再调整防火墙规则允许出站流量。验证路由器静态IP权限:确认路由器是否允许静态IP地址访问外网,有些路由器需要把静态IP加入信任列表或者DHCP静态映射中,避免被拦截。
检查systemd-resolved状态:执行
sudo systemctl restart systemd-resolved重启解析服务,然后再次测试DNS解析;另外可以尝试把resolv.conf切换为systemd-resolved的符号链接:sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf,之后重启网络服务。检查网关可达性细节:虽然能ping通网关,但可以尝试用
traceroute 8.8.8.8查看数据包的走向,确认是否在网关处被阻断。
备注:内容来源于stack exchange,提问作者fabelmk1




