“network is unreachable”表明内核路由子系统无有效路由条目,需依次检查:①网卡是否up且有合法ipv4地址(ip a);②静态配置中ipaddr、gateway、netmask是否同网段;③ip route show是否存在default路由,缺失则sudo ip route add default via 网关 dev 接口;④云环境应通过元数据服务获取真实网关。

Linux系统执行ping、curl等命令时提示“Network is unreachable”,说明内核路由子系统找不到通往目标网络的路径,不是网线没插或WiFi没连——而是系统压根没生成有效路由条目,连发包的第一步都卡死。
先确认网卡是否真正启用并获得IP
执行ip a,找到你的主网卡(如ens33、eth0、wlan0),看它是否处于UP状态,且有inet行显示IPv4地址。若只有state DOWN或只有IPv6地址,说明接口未激活或DHCP失败。
如果接口是DOWN,运行sudo ip link set ens33 up(把ens33换成你的真实接口名)。
如果接口UP但没分配IPv4,且你用的是DHCP:运行sudo dhclient ens33;如果是静态配置,跳到下一节检查配置文件。
注意:ONBOOT=yes必须写在网卡配置文件里,否则重启后接口自动关闭,这是CentOS/RHEL系最常漏掉的一行。
检查静态IP配置是否自相矛盾
打开网卡配置文件:sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33(路径和文件名依发行版和接口而异)。
重点核对三处:IPADDR必须和GATEWAY在同一子网;NETMASK(或PREFIX)要能覆盖网关;DEVICE名必须和ip a输出一致。
例如IPADDR=192.168.5.100,GATEWAY=192.168.1.1,NETMASK=255.255.255.0 → 这组配置必然失败,因为网关不在192.168.5.0/24网段内。
改完保存,执行sudo systemctl restart network(CentOS 7)或sudo nmcli connection reload && sudo nmcli con up ens33(RHEL 8+/Fedora)。
验证默认路由是否存在
第一步:运行ip route show,看输出里有没有以default via开头的行。
第二步:如果没有,手动添加临时路由:sudo ip route add default via 192.168.1.1 dev ens33(把192.168.1.1和ens33替换成你的真实网关和接口)。
第三步:测试是否生效:ping -c 3 8.8.8.8。如果通了,说明问题就出在路由缺失——下一步要把这条路由写进配置,避免重启丢失。
永久写入方法取决于系统:CentOS 7在/etc/sysconfig/network里加GATEWAY=192.168.1.1;Ubuntu/Debian系则在/etc/netplan/*.yaml的routes段补全;systemd-networkd用户需编辑/etc/systemd/network/*.network文件。
云服务器或虚拟机要额外查元数据网关
方法一:如果还能访问实例元数据服务,直接查:curl -s http://100.100.100.200/latest/meta-data/network/interfaces/macs/$(cat /sys/class/net/ens33/address | tr "[:lower:]" "[:upper:]")/gateway。
方法二:若元数据不可达,登录同VPC内另一台正常实例,执行ip route | grep default,取其网关IP作为参考。
拿到真实网关后,用上一节的ip route add default via ...命令立即生效,别猜、别试错网段。
快速绕过所有配置问题的方法
方法1:改用DHCP自动获取——删掉ifcfg-*文件里的IPADDR/GATEWAY/NETMASK,设BOOTPROTO=dhcp,然后sudo systemctl restart network。
方法2:用nmcli一步到位:sudo nmcli connection modify "System ens33" ipv4.method auto && sudo nmcli connection up "System ens33"。
这一步操作起来很简单,直接覆盖全部手工配置,适合调试阶段快速验证是否是配置错误导致的问题。











