虚拟机从 VMware 迁移到云宏后无法访问外网:一张缺失的默认路由
故障背景
一台运行 RHEL 8(Red Hat 8 / Rocky 8 / AlmaLinux 8 等同系发行版)的数据库服务器,从 VMware 平台整体迁移到云宏虚拟化平台后,出现无法访问外网的问题。具体表现为:
- 同网段 IP(
10.20.146.254)可以 ping 通 - 跨网段 IP(
10.20.141.254)提示Network is unreachable route -n路由表中完全没有默认路由(0.0.0.0那一行)ifcfg-ens3配置文件中的 IP、掩码、网关信息全部正确
在 VMware 环境中原虚拟机网络完全正常,迁移后才出现此问题。
排查过程
第一层:检查 NetworkManager 中的连接状态
nmcli connection show ens3 | grep -E "gateway|never-default|method"
发现三个异常:
ipv4.gateway: --
ipv4.never-default: yes
ipv4.method: auto
分析:
ipv4.gateway为空,说明 NetworkManager 没有读取到 ifcfg 文件中的GATEWAY=配置。ipv4.never-default: yes表示"不将此连接作为默认路由使用",这就是路由表中没有0.0.0.0的直接原因。ipv4.method: auto说明 NetworkManager 仍在使用 DHCP 模式,手动写入的网关会被忽略。
尝试过
nmcli connection modify 手动修改 ipv4.never-default 为 no,但每次 down / up 连接后该值又自动恢复为 yes。这是因为在 auto 模式下,NetworkManager 以 DHCP 行为为优先,手动修改不会持久化。第二层:排查 cloud-init 干扰
考虑到部分云平台会使用 cloud-init 管理网络,执行了以下检查:
systemctl status cloud-init
输出:
Unit cloud-init.service could not be found.确认 cloud-init 不存在,排除干扰。
第三层:发现真正的元凶
进一步检查全局网络配置文件:
cat /etc/sysconfig/network
输出:
NETWORKING=yes
HOSTNAME=FBGL-DB-140-115
GATEWAYDEV=ens192
GATEWAY=10.20.140.254
NOZEROCONF=yes
关键发现: 全局配置中
GATEWAYDEV=ens192,指定了默认路由由 ens192 这张网卡提供。而迁移到云宏后,网卡名称已经变为了 ens3,ens192 这张设备根本不存在了。系统在全局层面"等待"一个不存在的网卡来提供默认路由,因此无论怎么修改
ifcfg-ens3,路由表里都不会出现 0.0.0.0。为什么 VMware 里没有这个问题?
在 VMware 环境中,该网卡的设备名本身就是
ens192,全局配置中的 GATEWAYDEV=ens192 与实际设备名一致,默认路由可以正常生成。迁移到云宏后,底层虚拟网卡硬件标识改变,系统将其识别为 ens3,但全局配置文件没有同步更新,导致设备名错位。解决方案
修改
/etc/sysconfig/network 文件,将 GATEWAYDEV 和 GATEWAY 更新为当前实际网卡的信息:sed -i 's/GATEWAYDEV=ens192/GATEWAYDEV=ens3/' /etc/sysconfig/network
sed -i 's/GATEWAY=10.20.140.254/GATEWAY=10.20.146.254/' /etc/sysconfig/network
修改后文件内容:
NETWORKING=yes
HOSTNAME=FBGL-DB-140-115
GATEWAYDEV=ens3
GATEWAY=10.20.146.254
NOZEROCONF=yes
重启网络使配置生效:
nmcli connection down ens3 && nmcli connection up ens3
验证结果
# 查看路由表
route -n
输出中出现了默认路由:
0.0.0.0 10.20.146.254 0.0.0.0 UG 100 0 0 ens3
10.20.146.0 0.0.0.0 255.255.255.0 U 100 0 0 ens3
# 测试跨网段连通性
ping 10.20.141.254
跨网段 ping 通,外网访问恢复正常。
经验总结
- 虚拟机跨平台迁移后,网卡名称可能发生变化(受驱动类型、MAC 地址、PCI 插槽位置等因素影响),不能想当然地认为网卡名保持不变。
/etc/sysconfig/network是全局网络配置文件,其中的GATEWAYDEV指定了哪张网卡承担默认路由。如果该设备不存在,系统将不会在任何网卡上生成默认路由。- 排查此类问题时,不要只盯着
ifcfg-xxx文件,全局配置和 NetworkManager 内存中的连接状态同样重要。 - 迁移完成后,建议逐一核对以下文件/信息是否一致:
/etc/sysconfig/network(全局网关、设备名)/etc/sysconfig/network-scripts/ifcfg-*(各网卡的 IP、掩码、网关)ip link show(实际网卡名称和 MAC 地址)nmcli connection show(NetworkManager 中的连接配置)
阅读剩余
本站代码模板仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END