Linux网桥与KVM主机的VLAN精细化配置求助
Linux网桥与KVM主机的VLAN精细化配置求助
嗨,我来帮你搞定这个VLAN+Linux网桥+KVM的配置需求,刚好之前处理过类似的场景,咱们一步步来拆解实现:
核心需求回顾
你希望交换机把VLAN10-20的带tag流量通过bond1传到KVM的data-bridge,然后给不同VM做精细化VLAN过滤:VM1只接收VLAN10-13的流量,VM2只接收VLAN13-16的流量。
实现方案(分两种配置方式,手动临时配置&永久持久化配置)
一、手动临时配置(适合快速测试)
- 开启Linux网桥的VLAN过滤功能
默认情况下Linux网桥的VLAN过滤是关闭的,先打开它:
echo 1 > /sys/class/net/data-bridge/bridge/vlan_filtering
- 配置bond1端口允许所有目标VLAN通过
让网桥接收交换机传过来的VLAN10-20流量:
bridge vlan add dev bond1 vid 10-20 master
这里的master参数表示这些VLAN会被网桥转发到其他允许的端口。
- 给VM1的tap设备配置VLAN过滤规则
先找到VM1对应的tap设备名称(可以用ip link查看,通常是tapXXX格式),假设是tap-vm1-eth1,配置允许VLAN10-13:
bridge vlan add dev tap-vm1-eth1 vid 10-13
- 给VM2的tap设备配置VLAN过滤规则
同理,假设VM2的tap设备是tap-vm2-eth1,配置允许VLAN13-16:
bridge vlan add dev tap-vm2-eth1 vid 13-16
二、永久持久化配置(适合生产环境)
如果需要重启后配置依然生效,推荐用libvirt+netplan(或传统的network interfaces)来配置:
1. Netplan配置bond1和data-bridge
编辑/etc/netplan/01-netcfg.yaml(文件名可自定义):
network: version: 2 bonds: bond1: interfaces: [eth0, eth1] # 替换成你的物理网卡名称 parameters: mode: 802.3ad # 根据你的交换机配置选bond模式,比如balance-alb也可以 lacp-rate: fast mii-monitor-interval: 100 bridges: data-bridge: interfaces: [bond1] parameters: stp: false # 如果不需要生成树协议可以关闭 vlan-filtering: true # 开启VLAN过滤 vlans: - id: 10-20 link: bond1 tagged: true # 标记为带VLAN tag的流量
执行sudo netplan apply生效配置。
2. Libvirt中给VM配置VLAN过滤
编辑VM的XML配置文件(比如virsh edit vm1),在网卡部分添加VLAN规则:
<interface type='bridge'> <source bridge='data-bridge'/> <model type='virtio'/> <!-- 给VM1添加允许的VLAN --> <vlan> <tag id='10'/> <tag id='11'/> <tag id='12'/> <tag id='13'/> </vlan> </interface>
同理给VM2的XML配置添加VLAN13-16的规则,然后重启VM生效。
注意事项
- 确认交换机侧的端口是Trunk模式,并且允许VLAN10-20通过;
- 如果VM内部需要直接使用某个VLAN的无tag流量,可以在网桥端口配置
untag参数(比如bridge vlan add dev tap-vm1-eth1 vid 10 untag),但你的需求是接收带tag的流量,所以不用加; - 测试时可以在VM内部用
tcpdump -i eth1 vlan抓包,验证是否只有指定VLAN的流量过来。
备注:内容来源于stack exchange,提问作者Gianmasta
相关产品推荐
相关产品推荐

