这个VLAN配置问题,对于没有使用过RouteOS bridge vlan配置的网络老司机来说,也会导致这样的错误,因为配置的误导性很强,trunk端口的多个或连续vlan-id配置,在华为,H3C和锐捷交换机上都可以通过”逗号“或”横杠“设置,但RouterOS是个例外!
在二层网络中多个终端设备连接到交换机的不同端口,并被不同的vlan隔离,这些端口的流量被标记并发送到trunk端口。Access端口使用pvid属性进行配置。由于trunk端口会对多个VLAN打上标签,因此,在配置vlan trunk时,在bridge vlan中创建规则使用逗号分隔的VLAN来简化配置。当跨越大量VLAN时,例如VLAN -id=100-200,通过这样的设置非常简便,参见下面的网络图和配置。
在命令行配置:
/interface bridge
add name=bridge1 vlan-filtering=yes
/interface bridge port
add bridge=bridge1 interface=ether2
add bridge=bridge1 interface=ether3 pvid=10
add bridge=bridge1 interface=ether4 pvid=20
ether3和ether4在port下配置端口的PVID,在bridge vlan下自动创建,winbox显示如下,vlan id 10和20对应的ether3和ether4是两条独立的规则:
然后配置ether2的trunk,多个vlan大家肯定会想简化配置,通过逗号间隔(错误配置)
/interface bridge vlan
add bridge=bridge1 tagged=ether2 vlan-ids=10,20
winbox的配置如下:
问题:
虽然流量被正确地从access端口转发和标记到trunk端口ether2,但会出现广播或组播数据包实际上在两个untagged未标记的access端口之间扩散。VLAN20和30之间不再被隔离,因此可以嗅探来自不同VLAN网络的流量。当查看网桥VLAN表时,会注意到已经为VLAN 10和20创建了一个规则条目,这个trunk规则允许vlan20和30可以在ether3和ether4同时使用,RouterOS也用红字发出了警告:
症状
- 造成流量在不同的Access VLAN穿透,VLAN隔离失效
解决方法
当使用pvid属性配置了access端口时,它们会被动态地添加到对应的VLAN列表中。当创建了包含多个VLAN或VLAN范围的静态VLAN规则后,具有匹配pvid的untagged接入端口也将被包含在同一个VLAN组或VLAN范围中。对于配置多个trunk端口时,这样的方式可能很简便,但在配置access端口的VLAN时应格外小心。对于本例,多个vlan-id在access口,又配置了trunk端口,应该创建单独的VLAN规则如下:
/interface bridge vlan
add bridge=bridge1 tagged=ether2 untagged=ether3 vlan-ids=10
add bridge=bridge1 tagged=ether2 untagged=ether4 vlan-ids=20
关于这个问题,我求证了MikroTik官方,意思是就是这样配置,如果交换机只有trunk端口,这样配置没有问题,但如果有PVID的access端口,就必须这样每个VLAN id独立配置一个trunk。