RHEL 7.3 KVM中拆分带标签/无标签流量至不同网桥的配置方法
在RHEL 7.3 KVM中配置网桥拆分Tagged/Untagged流量
我来帮你搞定这个问题——你当前的核心问题是网桥默认没有启用VLAN过滤功能,所以不管流量带不带标签,都会被一股脑转发到br0。下面是适配RHEL7.3环境的分步配置方案:
1. 先备份现有网络配置(重要!)
先把当前的网卡、网桥配置备份一份,避免配置出错后无法恢复:
mkdir -p /root/network-backup cp /etc/sysconfig/network-scripts/ifcfg-* /root/network-backup/
2. 启用网桥VLAN过滤功能
这是解决问题的核心前提!RHEL7.3默认关闭了网桥的VLAN过滤,导致它无法区分带标签和无标签的流量。我们需要手动开启:
- 编辑
/etc/sysctl.conf,添加以下配置:net.bridge.bridge-nf-call-iptables=0 net.bridge.bridge-nf-call-ip6tables=0 net.bridge.bridge-nf-call-arptables=0 - 让配置立即生效:
sysctl -p
3. 配置物理网卡为Trunk模式
假设你的物理网卡是eth0(根据实际情况替换),修改其配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,让它变成纯Trunk转发端口:
TYPE=Ethernet BOOTPROTO=none NAME=eth0 DEVICE=eth0 ONBOOT=yes # 不设置IP,也不直接绑定到网桥,交给后续的网桥VLAN规则处理 # 标记为Trunk端口,允许Native VLAN和目标VLAN XX的流量通过 VLAN=yes
4. 配置主网桥br0(承载Untagged流量)
创建/修改/etc/sysconfig/network-scripts/ifcfg-br0,让它只处理无标签的Native VLAN流量:
TYPE=Bridge BOOTPROTO=none NAME=br0 DEVICE=br0 ONBOOT=yes # 如果需要让RHEL物理机通过br0联网,可以设置IP(替换成你的网段) IPADDR=192.168.1.10 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 # 关键配置:启用VLAN过滤,指定Native VLAN(比如VLAN 1,替换成你的实际Native VLAN) BRIDGE_VLAN_INFO="native vlan 1" # 关闭STP(如果不需要生成树协议) BRIDGE_STP=off BRIDGE_DELAY=0 # 将物理网卡eth0添加到br0 BRIDGE_PORTS=eth0
5. 配置VLAN子网桥br0.XX(承载Tagged流量)
创建/etc/sysconfig/network-scripts/ifcfg-br0.XX(把XX替换成你的实际VLAN ID,比如100),让它只处理带XX标签的流量:
TYPE=Vlan BOOTPROTO=none NAME=br0.XX DEVICE=br0.XX ONBOOT=yes # 指定对应的VLAN ID VLAN_ID=XX # 绑定到主网桥br0 PHYSDEV=br0 # 如果物理机需要访问这个VLAN,可以添加IP配置(按需开启) # IPADDR=10.0.XX.10 # NETMASK=255.255.255.0
6. 配置KVM虚拟机的网络连接
现在可以给虚拟机指定对应的网桥:
- 需要使用Untagged流量的虚拟机,配置网桥为
br0:<interface type='bridge'> <source bridge='br0'/> <model type='virtio'/> </interface> - 需要使用Tagged的VLAN XX流量的虚拟机,配置网桥为
br0.XX:<interface type='bridge'> <source bridge='br0.XX'/> <model type='virtio'/> </interface>
7. 重启网络服务验证
执行以下命令重启网络,让所有配置生效:
systemctl restart network
然后验证网桥和VLAN接口状态:
brctl show ip addr show
此时你会看到br0和br0.XX都正常启动,流量会自动拆分:无标签流量走br0,带XX标签的流量走br0.XX。
内容的提问来源于stack exchange,提问作者Mark Sherlock




