OpenNebula宿主机网络配置调整后VM完全失去网络连接求助
碰到这种把VLAN标记从宿主机移到交换机后VM彻底断网的情况,我之前运维OpenNebula环境时也遇到过——既然你明确VM没用到br_public或br_data,那问题肯定出在VM实际依赖的网桥及对应物理接口的配置变更上,毕竟VLAN的处理逻辑从主机转移到了交换机,宿主机侧的网络配置必须同步调整。下面是一步步的排查和修复步骤:
1. 先搞清楚VM到底用的哪个网桥
首先得确认你的VM关联的是哪个网桥(毕竟你说没用到那两个默认网桥),在宿主机上执行这个命令,查看所有网桥和物理接口的绑定关系:
brctl show
输出里会列出每个网桥对应的物理port,找到VM使用的那个网桥,记下来它绑定的物理接口(比如br_vlan10对应eth2)。
2. 清理宿主机上旧的VLAN子接口配置
之前你在宿主机上做VLAN标记,肯定配置过类似eth2.100这样的VLAN子接口,现在把标记移到交换机后,这些子接口必须删掉,而且物理接口要改成不做VLAN标记的普通模式:
- 先查看当前的网络配置文件:
cat /etc/network/interfaces
如果还能看到类似下面的VLAN子接口配置,直接删掉:
auto eth2.100 iface eth2.100 inet manual vlan-raw-device eth2
- 然后修改对应物理接口的配置,确保它是直接绑定到VM网桥的普通接口,比如:
auto eth2 iface eth2 inet manual up ip link set $IFACE up down ip link set $IFACE down
- 重启网络服务让配置生效:
systemctl restart networking
3. 验证交换机侧的VLAN配置是否匹配
既然VLAN标记改在交换机上做了,得确保交换机这边的配置没毛病:
- 宿主机连接的交换机端口必须设为Trunk模式,而且要允许VM所在VLAN的流量通过
- 交换机上对应的VLAN要正确配置网关、DHCP(如果VM用DHCP的话)或者静态路由
你可以通过交换机的命令行确认,比如思科设备用show running-config interface GigabitEthernetX/X,华为设备用display current-configuration interface GigabitEthernetX/X,检查端口模式和允许的VLAN列表。
4. 核对OpenNebula的虚拟网络配置
登录OpenNebula前端,找到VM所属的虚拟网络,检查这几点:
- 虚拟网络配置的网桥名称必须和宿主机上实际存在的网桥完全一致
- 如果之前虚拟网络里配置了VLAN ID(用来在主机侧处理VLAN),现在必须把这个配置删掉,因为VLAN标记已经交给交换机了
- 确认虚拟网络的
VN_MAD是bridge模式(这是最常用的VM网络模式)
5. 单台VM的网络连通性测试
挑一台VM,进入它的控制台,一步步排查:
- 先看网卡配置:
ip addr show,确认是否获取到了正确的IP地址(静态IP的话要和VLAN网段匹配) - 测试和宿主机网桥的连通性:
ping <宿主机网桥的IP>(如果网桥设置了IP的话) - 测试和网关的连通性:
ping <VLAN网关IP>
如果VM没拿到IP,要么是DHCP服务器的问题,要么是交换机侧VLAN没转发DHCP流量;如果能ping通网关但连不上外部,可能是路由或者防火墙的问题。
6. 检查宿主机的防火墙规则
有时候迁移网络配置后,旧的防火墙规则会阻止VM的流量,在宿主机上执行这两个命令看看:
iptables -L -n ufw status
如果有针对旧VLAN子接口的规则,或者阻止网桥转发的规则,直接调整或删掉就行。
内容的提问来源于stack exchange,提问作者Tim Jones

