前面我们在学习VXLAN(Virtual eXtensible LAN,虚拟可扩展局域网)时了解到(VXLAN小实验:VXLAN头端复制配置),通过使用VXLAN隧道在跨三层的underlay网络上构建二层overlay网络,可以实现二层桥接域(bridge domains,BD)跨越多个网络设备或公网。这使得在地理位置上分离的服务器也可以共同位于同一数据中心,只要它们可以通过底层的三层网络访问即可。
VPP中的VTEP(VXLAN Tunnel End Points,VXLAN隧道端点)设备就是VPP,VTEP是在创建VXLAN隧道时指定的,每个VXLAN隧道的源IP地址和目标IP地址就是本地服务器VTEP地址和目标服务器VTEP地址。
和H3C设备一样,VTEP设备负责对VXLAN流量进行封装和解封装操作,封装和解封装过程如下图所示:
原理大家都已经非常清楚了,我们进来来测试用VPP配置一下VXLAN隧道,组网图如下所示:
我们首先按组网图所示,配置互联接口和路由信息,调通底层网络。
vppctl set int state eth2 up
vppctl set int ip address eth2 12.1.1.1/24
vppctl ip route add 23.1.1.0/24 via 12.1.1.2
在VPP72上创建一个BD ID为11的桥接域,同时配置启用学习、转发、未知单播泛洪和泛洪,禁用ARP代答。
vppctl create bridge-domain 11 learn 1 forward 1 uu-flood 1 flood 1 arp-term 0
VPP提供了创建VXLAN隧道接口的能力,该隧道接口可以添加到桥接域中作为桥接端口参与二层转发。然后我们创建一个VXLAN隧道(源地址为VPP72的接口eth2,目的地址为VPP73的接口eth2),将其绑定BD ID为11的桥接域:
vppctl create vxlan tunnel src 12.1.1.1 dst 23.1.1.3 vni 11 decap-next l2
vppctl set interface l2 bridge vxlan_tunnel0 11
注意,VXLAN封装中的UDP目标端口号必须使用IANA为VXLAN分配的4789,不可更改。
VPP中的一个BD只能拥有一个BVI(Bridge Virtual Interface,桥接虚拟接口),BVI接口可能绑定多个VXLAN隧道和以太网桥接接口。BVI、VXLAN和以太网的桥接接口都必须正确配置才能相互转发流量。BVI允许不同BD或VXLAN网段上的虚拟机通过IRB(Integrated Routing and Bridging,集成路由和桥接)相互连接。
BD的BVI是通过创建和设置环回口来设置的,如果VPP分配的环回口MAC地址用于BVI,则在使用VXLAN隧道连接服务器之间的多个BD时,可能会发生MAC地址冲突,所以建议在创建环回口时手工配置MAC地址。然后将环回口添加到BD 11作为其BVI接口,并为其分配IP地址。
vppctl loopback create mac 1a:2b:3c:4d:5e:6f
vppctl set interface l2 bridge loop0 11 bvi
vppctl set interface state loop0 up
vppctl set interface ip address loop0 13.1.1.1/24
然后将接口eth1也加入到BD下。
vppctl set interface state eth1 up
vppctl set interface l2 bridge eth1 11
同样的,我们配置VPP73设备。
vppctl set int state eth2 up
vppctl set int ip address eth2 23.1.1.3/24
vppctl ip route add 12.1.1.0/24 via 23.1.1.2
vppctl create bridge-domain 11 learn 1 forward 1 uu-flood 1 flood 1 arp-term 0
vppctl create vxlan tunnel src 23.1.1.3 dst 12.1.1.1 vni 11 decap-next l2
vppctl set interface l2 bridge vxlan_tunnel0 11
vppctl loopback create mac a1:b2:c3:d4:e5:f6
vppctl set interface l2 bridge loop0 11 bvi
vppctl set interface state loop0 up
vppctl set interface ip address loop0 13.1.1.3/24
vppctl set interface state eth1 up
vppctl set interface l2 bridge eth1 11
查看VXLAN隧道信息。
vppctl show vxlan tunnel
查看桥接域信息。
vppctl show bridge-domain 11
vppctl show bridge-domain 11 int
vppctl show bridge-domain 11 arp
vppctl show bridge-domain 11 detail
查看接口信息。
vppctl show interface
在主机上测试业务情况。
打个流测试一下。
3.91 Gbps,就那么回事吧。
VPP官网还特别强调,在将VXLAN隧道接口、BVI/环回口和以太网口添加到BD时,必须为它们配置相同且非零的水平分割组(Split Horizon Group,SHG)编号。否则,泛洪数据包可能会在具有相同VXLAN标识的服务器之间产生环路。
但是实际情况是,我把SHG都配置为了1,结果两端的主机无法互通,又都改回0才正常的。
此外,我们开始配置的BD关闭了ARP代答功能,我们也可以使用以下命令启用 ARP代答功能。
vppctl set bridge-domain arp term 11
开启ARP代答功能之后,我们就可以向BD中添加ARP表项条目。
vppctl set bridge-domain arp entry 11 13.1.1.22 00:50:56:8e:c9:ad
vppctl set bridge-domain arp entry 11 13.1.1.11 00:50:56:8e:4d:bd
此时我们就可以通过命令查看BD的ARP信息了。