linux bridge实现了ieee 802.1d协议,这个实现,应该是不能支持VLAN的功能。也就是说,这个实现,只能承载一个广播域,而不能承载多个广播域。当然,可以创建多个bridge device,每个bridge都对应不同的vlan,在bridge内部,包通过fdb表来转发,但是这个fdb表里面并没有vlan的信息。如果要在多个bridge device之间通信,比必须在bridge device上创建vlan interface,然后配置路由,这样可以实现不同bridge之间的转发。
linux vlan实现了ieee 802.1q协议。802.1q本来应该是一个二层协议,但是linux的实现需要创建vlan interface,而且可以在vlan interface上配置ip地址。所以,这个interface可以放到路由表里面。一般来说,在这个interface上收到的包,会带这个interface配置的vlan id,而从这个interface发出去的包,会打上这个interface的vlan id.
举一个例子。一个盒子有6个物理interface, eth0,eth1,eth2,eth3,eth4,eth5,eth6.
bridge0 { eth0, eth1, eth2 }, vlan id 是2
bridge1 { eth3, eth4, eth5 }, vlan id 是3
eth0,eth1,eth2,eth3,eth4,eth5都在混杂模式,并且没有ip地址,它们是bridge的port.
创建vlan interface, bridge0.2, bridge1.3。在bridge0.2和bridge1.3上配置ip地址。vlan 2的机器,把bridge0.