MP-BGP EVPN方式部署Vxlan分布式网关
在BGP EVPN方式部署分布式网关的场景中,控制平面的流程包括VXLAN隧道建立、MAC地址动态学习;转发平面的流程包括同子网已知单播报文转发、同子网BUM报文转发、跨子网报文转发。该方式实现的功能全面,支持主机IP路由通告、主机MAC地址通告、主机ARP通告,可以直接使能ARP广播抑制功能。如果在VXLAN网络中采用分布式网关,推荐使用此方式。
1.VXLAN隧道建立
VXLAN隧道由一对VTEP IP地址确定,创建VXLAN隧道实际上是两端VTEP获取对端VTEP IP地址的过程,只要对端VTEP IP地址是三层路由可达的,VXLAN隧道就可以建立成功。通过BGP EVPN方式动态建立VXLAN隧道,就是在两端VTEP之间建立BGP EVPN对等体,然后对等体之间利用BGP EVPN路由来互相传递VNI和VTEP IP地址信息,从而实现动态建立VXLAN隧道。
在分布式网关的场景中,Leaf同时作为二层网关和三层网关,Spine节点不感知VXLAN隧道,只作为VXLAN报文的转发节点。控制平面只需在Leaf之间建立VXLAN隧道,如图1所示,Leaf1与Leaf2之间建立VXLAN隧道用于Host1和Host2、Host3和Host2之间的通信。对于Host1和Host3之间的通信,由于都属于Leaf1,所以互访的流量只需在Leaf1上处理,无需通过VXLAN隧道转发。
图1 VXLAN隧道示意图
在分布式网关场景中,通过BGP EVPN方式动态建立VXLAN隧道有以下两种情况:
1.1 同子网-建立vxlan隧道:通过type3路由
如图2所示,当处于同一子网的Host3与Host2互通时,只需要进行二层转发。通过BGP EVPN方式建立VXLAN隧道的过程如下:
图2 动态建立VXLAN隧道示意图-1
预先配置:
(1)在Leaf1和Leaf2之间建立BGP EVPN对等体。
(2)在Leaf1和Leaf2上分别创建EVPN实例,配置二层VNI,RD、出方向VPN-Target(ERT)、入方向VPN-Target(IRT)。
1.Leaf1和Leaf2会生成BGP EVPN路由并发送给对端,该路由携带本端EVPN实例的出方向VPN-Target和BGP EVPN协议新定义的Type3路由即Inclusive Multicast路由。其中,Inclusive Multicast路由如图3所示,由前缀和PMSI属性组成,VTEP IP地址存放在前缀的Originating Router's IP Address字段中,二层VNI存放在PMSI属性的MPLS Label字段中。
2、Leaf1和Leaf2在收到对端发来的BGP EVPN路由后,首先检查该路由携带的EVPN实例的出方向VPN-Target,如果与本端EVPN实例的入方向VPN-Target相等,则接收该路由,否则丢弃该路由。在接收该路由后,Leaf1和Leaf2将获取其中携带的对端VTEP IP地址和二层VNI,如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道;同时,如果对端二层VNI与本端相同,则创建一个头端复制表,用于后续BUM(Broadcast&Unknown-unicast&Multicast)报文转发。
1.2 不同子网建立vxlan隧道
当处于不同子网的Host1与Host2互通时,需要进行三层转发,因此在通过BGP EVPN方式建立VXLAN隧道的过程中,网关Leaf1和Leaf2需要发布下属主机的IP路由。一般情况下,这里发布的是32位主机IP路由,因为在VXLAN网络中,不同的Leaf节点可能连接着相同的网段,所以如果Leaf节点发布的是下属主机IP所在的网段路由,则可能与其他Leaf节点发布的网段路由冲突,进而导致某些Leaf节点的下属主机不可达。
建立VXLAN隧道之前,需要在Leaf1和Leaf2上进行如下配置准备:
配置任务
|
作用
|
创建二层广播域(BD),并在二层广播域下配置关联的二层VNI。
|
创建VXLAN网络转发数据报文的实体。
|
在Leaf1和Leaf2之间建立BGP EVPN对等体。
|
用于交换BGP EVPN路由。
|
在二层广播域下创建EVPN实例,配置EVPN实例的RD、出方向VPN-Target(ERT)、入方向VPN-Target(IRT)。
|
用于生成BGP EVPN路由。
|
为不同租户创建L3VPN实例,将L3VPN实例绑定到指定二层广播域的VBDIF接口上。
|
用于区分和隔离不同租户的IP路由表。
|
为L3VPN实例指定关联的三层VNI。
|
用于Leaf节点在收到数据报文时判断使用哪个L3VPN实例的路由表指导转发。
|
配置L3VPN实例到EVPN实例的出方向VPN-Target(eERT),以及从EVPN实例到L3VPN实例的入方向VPN-Target(eIRT)。
|
用于控制本端L3VPN实例与对端EVPN实例之间BGP EVPN路由的发布和接收。
|
配置Leaf1和Leaf2之间发布的路由类型。
|
用于发布Host1和Host2的主机IP路由。这里有IRB(Integrated Routing and Bridge)和IP前缀两种路由类型,可根据如下原则进行选择:
IRB类型路由只能发布32位主机IP路由。由于IRB类型路由包含着ARP类型路由,因此选择发布IRB类型路由后,可直接在Leaf节点上使能ARP广播抑制功能,无需其他配置,同时也利于虚拟机的迁移(详情可参见EVPN基本原理)。如果只需发布32位主机IP路由,建议选择发布IRB类型路由。
IP前缀类型路由既能发布32位主机IP路由又能发布网段路由。但是,在发布32位主机IP路由时,需先将主机IP地址生成直连路由,这会影响虚拟机的迁移。因此,如果只需发布32位主机IP路由,不建议选择IP前缀类型路由。只有需要发布网段路由时(场景见上文),才需选择IP前缀类型路由。
|
1.Host1首次与Leaf1通信时,通过动态ARP报文,Leaf1学习到Host1的ARP表项。同时,Leaf1根据Host1所在的二层广播域找到绑定VBDIF接口的L3VPN实例,获取关联的三层VNI。Leaf1上的EVPN实例根据上述信息生成IRB类型路由,如图2-29所示。其中,主机IP地址存放在IP Address Length和IP Address字段中,三层VNI存放在MPLS Label2字段中。
图2-29 IRB类型路由
图2-30 本端主机IP路由
3.Leaf1向Leaf2发送BGP EVPN路由,该路由携带本端EVPN实例的ERT、扩展团体属性、路由下一跳属性以及IRB类型路由。其中,扩展团体属性携带的是隧道类型(取值是VXLAN隧道)、本端VTEP的MAC地址;路由下一跳属性携带的是本端的VTEP IP地址。
4.Leaf2收到Leaf1发来的BGP EVPN路由后,同时进行如下处理:
- 检查该路由携带的ERT,如果与本端EVPN实例的IRT相同,则接收该路由,否则丢弃该路由。EVPN实例获取到IRB类型路由后,还能提取到其中包含的ARP类型路由,用于主机ARP通告。
- 检查该路由携带的ERT,如果与本端L3VPN实例的IRT相同,则接收该路由,否则丢弃该路由。然后,L3VPN实例获取到该路由携带的IRB类型路由,从中提取Host1的主机IP地址、三层VNI,在其路由表中保存Host1的主机IP路由,并将路由的下一跳迭代出接口设置为VXLAN隧道接口,如图2-31所示。
图2-31 远端主机IP路由
- 在通过EVPN实例或L3VPN实例接收该路由后,Leaf2通过下一跳属性获取Leaf1的VTEP IP地址,如果该VTEP IP地址是三层路由可达的,则建立一条到Leaf1的VXLAN隧道。
Leaf1建立到Leaf2的VXLAN隧道的过程与上述相同,这里不再赘述。
1.2.2 通过IP前缀类型路由发布主机IP路由(如图2-32所示)
1.3 MAC地址动态学习
在VXLAN网络中,为了实现终端租户的互通,支持MAC地址动态学习,不需要网络管理员手工维护,大大减少了维护工作量。在分布式网关场景中,跨子网互通需要进行三层转发,MAC地址学习只在本端主机和网关之间通过动态ARP报文实现,这里不再详述。下面结合图12,详细介绍一下同子网主机互通时,MAC地址动态学习的过程:
图12 MAC地址动态学习
1、Host3首次与Leaf1通信时,通过动态ARP报文,Leaf1学习到Host3的MAC地址、BDID(二层广播域标识)和报文入接口(即二层子接口对应的物理接口Port1)的对应关系,并在本地MAC表中生成Host3的MAC表项,其出接口为Port1。同时,Leaf1根据Host3的ARP表项生成BGP EVPN路由并发送给对等体Leaf2,该路由携带本端EVPN实例的出方向VPN-Target、路由下一跳属性以及BGP EVPN协议新定义的Type2路由即MAC/IP路由。其中,路由下一跳属性携带的是本端VTEP IP地址;Host3的MAC地址存放在MAC Address Length和MAC Address字段中,二层VNI存放在MPLS Label1字段中。
2、Leaf2收到Leaf1发来的BGP EVPN路由后,首先检查该路由携带的EVPN实例的出方向VPN-Target,如果与本端EVPN实例的入方向VPN-Target相等,则接收该路由,否则丢弃该路由。在接收该路由后,Leaf2获得Host3的MAC地址、BDID和Leaf1上VTEP IP地址(下一跳属性)的对应关系,并在本地的MAC表中生成Host3的MAC表项,其出接口需根据下一跳进行迭代,最终迭代结果是指向Leaf1的VXLAN隧道。
Leaf1学习Host2的主机MAC的过程与上述过程相同,这里不再赘述。
1.4 报文转发
1.4.1 同子网报文转发
1.转发已知单播流量:查mac表
2.转发BUM流量:头端复制
1.4.2 不同子网报文转发
跨子网报文转发需要通过三层网关实现。在分布式网关场景中,跨子网报文转发的流程如图17所示。
图17 跨子网报文转发示意图
- Leaf1收到来自Host1的报文,检测到报文的目的MAC是网关接口MAC,判断该报文需要进行三层转发。
- Leaf1根据报文的入接口找到对应的二层广播域,然后找到绑定该广播域VBDIF接口的L3VPN实例。根据报文的目的IP地址,查找该L3VPN实例下的路由表(如图18所示),获取该路由对应的三层VNI,以及下一跳地址。再根据出接口是VXLAN隧道,判断需要进行VXLAN封装:
- 根据VXLAN隧道的目的IP和源IP地址,获取对应的MAC地址,并将内层目的MAC和源MAC替换。
- 将三层VNI封装到报文中。
- 外层封装VXLAN隧道的目的IP和源IP地址,源MAC地址为Leaf1的NVE1接口MAC地址,目的MAC地址为网络下一跳的MAC地址。
图18 L3VPN实例下的主机路由
3、封装后的报文根据外层MAC和IP信息在IP网络中传输,送达Leaf2。
4、Leaf2收到VXLAN报文后进行解封装,检测到报文的目的MAC是自己的MAC地址,判断该报文需要进行三层转发。
5、Leaf2根据报文携带的三层VNI找到对应的L3VPN实例,通过查找该L3VPN实例下的路由表(如图19所示),获取报文的下一跳是网关接口地址,然后将目的MAC地址替换为Host2的MAC地址,源MAC地址替换为Leaf2的MAC地址,转发给Host2。
图19 L3VPN实例下的主机路由
Host2向Host1发送报文的过程类似,这里不再赘述。