传统的交换机设备都是支持VLAN隔离的,OpenvSwitch作为一个主流的虚拟交换机,自然也是支持VLAN相关的实现的。OVS交换机内部也可以通过VLAN ID来隔离交换机的各个端口。
如果一个OVS交换机的端口设置了tag标签(该端口处于access模式),数据包从该端口进入到交换机内部时,该数据包就会被打上对应的tag,于是该数据包也就只能从设置了相同tag的端口发出,而在出交换机的时候,数据包上的tag会被删除。这样就实现了交换机内部的一个隔离。
但是流表就像三体中的归零者一样,可以打破物理定律,在不修改报文信息的情况下,实现在任意vlan之间转发报文。
做个测试:
[root@localhost ~]# ovs-vsctl show
84b2b2a2-c947-409b-aef4-20ca802a2238
Bridge br0
Port veth21
Interface veth21
Port br0
Interface br0
type: internal
Port veth11
tag: 2
Interface veth11
Port veth31
tag: 3
Interface veth31
veth11 和 veth31属于打了不同的vlan tag,使用“NORMAL”action时,网络时隔离的。
配置如下流表,未修改vlan头,也是能通的。
[root@localhost ~]# ovs-ofctl dump-flows br0
cookie=0x0, duration=23.064s, table=0, n_packets=7, n_bytes=574, priority=90,in_port=veth31 actions=output:veth11
cookie=0x0, duration=15.975s, table=0, n_packets=7, n_bytes=574, priority=90,in_port=veth11 actions=output:veth31
配置如下流表,strip掉vlan头也是ok的。
[root@localhost ~]# ovs-ofctl dump-flows br0
cookie=0x0, duration=29.602s, table=0, n_packets=7, n_bytes=574, priority=90,in_port=veth31 actions=strip_vlan,output:veth11
cookie=0x0, duration=12.287s, table=0, n_packets=7, n_bytes=574, priority=90,in_port=veth11 actions=output:veth31
网友评论