BGP EVPN方式部署集中式网关
在BGP EVPN方式部署集中式网关的场景中,控制平面的流程包括VXLAN隧道建立、MAC地址动态学习;转发平面的流程包括同子网已知单播报文转发、同子网BUM(Broadcast&Unknown-unicast&Multicast)报文转发、跨子网报文转发。该方式通过部署EVPN协议实现VTEP自动发现和VXLAN隧道的动态创建,灵活性高,适合大规模的VXLAN组网场景,如果在VXLAN网络中采用集中式网关,推荐使用该方式。
组合类别 |
实现差异 |
---|---|
IPv6 over IPv4 |
|
IPv4 over IPv6 |
不支持 |
IPv6 over IPv6 |
不支持 |
VXLAN隧道建立
VXLAN隧道由一对VTEP IP地址确定,创建VXLAN隧道实际上是两端VTEP获取对端VTEP IP地址的过程,只要对端VTEP IP地址是三层路由可达的,VXLAN隧道就可以建立成功。通过BGP EVPN方式动态建立VXLAN隧道,就是在两端VTEP之间建立BGP EVPN对等体,然后对等体之间利用BGP EVPN路由来互相传递VNI和VTEP IP地址信息,从而实现动态建立VXLAN隧道。
如图1-19所示,VTEP2上部署了两个Host,VTEP3上部署了一个Host,VTEP1上部署三层网关。为了实现Host3和Host2之间的通信,需要在VTEP2和VTEP3之间创建VXLAN隧道;为了实现Host1和Host2之间的通信,需要在VTEP2和VTEP1之间以及VTEP1和VTEP3之间创建VXLAN隧道。对于Host1和Host3之间的通信,虽然都属于VTEP2,但由于属于不同子网,需要经过三层网关VTEP1,因此也需要在VTEP2和VTEP1之间创建VXLAN隧道。
下面结合图1-20,以VTEP2和VTEP3为例,介绍一下通过BGP EVPN方式动态建立VXLAN隧道的过程:
首先在VTEP2和VTEP3之间建立BGP EVPN对等体。然后,在VTEP2和VTEP3上分别创建二层广播域,并在二层广播域下配置关联的VNI。接下来在二层广播域下创建EVPN实例,配置本端EVPN实例的RD、出方向VPN-Target(ERT)、入方向VPN-Target(IRT)。在配置完本端VTEP IP地址后,VTEP2和VTEP3会生成BGP EVPN路由并发送给对端,该路由携带本端EVPN实例的出方向VPN-Target和BGP EVPN协议新定义的Type3路由即Inclusive Multicast路由。其中,Inclusive Multicast路由如图1-21所示,由前缀和PMSI属性组成,VTEP IP地址存放在前缀的Originating Router's IP Address字段中,VNI存放在PMSI属性的MPLS Label字段中。
VTEP2和VTEP3在收到对端发来的BGP EVPN路由后,首先检查该路由携带的EVPN实例的出方向VPN-Target,如果与本端EVPN实例的入方向VPN-Target相等,则接收该路由,否则丢弃该路由。在接收该路由后,VTEP2和VTEP3将获取其中携带的对端VTEP IP地址和VNI,如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道;同时,如果对端VNI与本端相同,则创建一个头端复制表,用于后续BUM报文转发。
VTEP2和VTEP1之间、VTEP3和VTEP1之间通过BGP EVPN方式动态建立VXLAN隧道的过程与上述相同,这里不再赘述。
VPN-Target是一种BGP扩展团体属性,一个EVPN实例可以配置出方向和入方向两类VPN-Target,两端EVPN实例的VPN-Target要相互匹配(即本端EVPN实例配置的出方向VPN-target值需要与对端EVPN实例配置的入方向VPN-target值相等),才能相互交换EVPN路由,否则VXLAN隧道无法建立成功。如果仅有一端匹配成功可以接收路由,则此端设备上可以建立通往另一端设备的隧道,但是无法传输数据报文,因为另一端设备在收到报文后,将会检查本端是否有通往对端的VXLAN隧道,如果没有的话,将会丢弃报文。
关于VPN-Target更详细的描述,具体请参考《S12700, S12700E V200R019C10 配置指南-VPN》 BGP/MPLS IP VPN配置 中的“基本概念”。
MAC地址动态学习
在VXLAN网络中,为了实现终端租户的互通,支持MAC地址动态学习,不需要网络管理员手工维护,大大减少了维护工作量。下面结合图1-22,详细介绍一下同子网主机互通时,MAC地址动态学习的过程。
Host3首次与VTEP2通信时,通过动态ARP报文,VTEP2学习到Host3的MAC地址、BD ID(二层广播域标识)和报文入接口的对应关系,并在本地MAC表中生成Host3的MAC表项,其出接口为Port1。同时,VTEP2根据Host3的ARP表项生成BGP EVPN路由并发送给对等体VTEP3,该路由携带本端EVPN实例的出方向VPN-Target、路由下一跳属性以及BGP EVPN协议新定义的Type2路由即MAC/IP路由。其中,路由下一跳属性携带的是本端VTEP IP地址;MAC/IP路由如图1-23所示,Host3的MAC地址存放在MAC Address Length和MAC Address字段中,二层VNI存放在MPLS Label1字段中。
VTEP3收到VTEP2发来的BGP EVPN路由后,首先检查该路由携带的EVPN实例的出方向VPN-Target,如果与本端EVPN实例的入方向VPN-Target相等,则接收该路由,否则丢弃该路由。在接收该路由后,VTEP3获得Host3的MAC地址、BD ID和VTEP2上VTEP IP地址(下一跳属性)的对应关系,并在本地的MAC表中生成Host3的MAC表项,其出接口需根据下一跳进行迭代,最终迭代结果是指向VTEP2的VXLAN隧道。
VTEP2学习Host2的主机MAC的过程与上述过程相同,这里不再赘述。
Host3初次与Host2通信时,首先发送目的MAC为全F、目的IP为IP2的ARP请求报文,请求Host2的MAC地址。缺省情况下,VTEP2收到该ARP请求后将在本网段进行广播,为了减少广播报文,此时可以在VTEP2上使能ARP广播抑制功能。这样当VTEP2收到该ARP请求报文时,先根据目的IP检查本地是否有Host2的MAC地址,如果有则将目的MAC替换为Host2的MAC地址,将ARP请求的广播报文变为单播报文,然后通过VXLAN隧道发给VTEP3。VTEP3收到后转发给Host2,Host2收到该ARP请求后学习到Host3的MAC地址,并以单播形式进行ARP应答。Host3收到ARP应答报文后学习到Host2的MAC地址。至此,Host3和Host2互相学习到对方的MAC地址,后续双方将采用单播通信。
在跨子网主机互通时,只需在主机和三层网关之间进行MAC地址动态学习,与上述过程相同。
VTEP节点也可以通过数据转发过程学习主机MAC地址,但是依赖于设备从数据报文中学习MAC地址的能力。在BGP EVPN方式建立VXLAN隧道的场景中,VTEP节点之间可以通过BGP EVPN路由动态学习主机MAC地址,不再依赖数据转发过程。
同子网已知单播报文转发
同子网已知单播报文转发只在VXLAN二层网关之间进行,三层网关无需感知。报文转发流程如图1-24所示。
- VTEP2收到来自Host3的报文,根据报文接入的端口和携带的VLAN信息获取对应的二层广播域,并在该二层广播域内查找出接口和封装信息。
- VTEP2根据查找到的封装信息对数据报文进行VXLAN封装,然后根据查找到的出接口进行报文转发。
- VTEP3收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。然后依据VNI获取对应的二层广播域,进行VXLAN解封装,获取内层的二层报文。
- VTEP3根据内层二层报文的目的MAC,从本地MAC表找到对应的出接口和封装信息,对报文进行VLAN Tag的相应处理,转发给对应的主机Host2。
Host2向Host3发送报文的过程类似,这里不再赘述。
同子网BUM报文转发
同子网BUM报文转发只在VXLAN二层网关之间进行,三层网关无需感知。同子网BUM报文转发采用头端复制方式。
- VTEP1收到来自终端A的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域。
- VTEP1根据对应的二层广播域获取对应VNI的头端复制列表,依据获取的列表进行报文复制,并进行VXLAN封装。然后将封装后的报文从出接口转发出去。
- VTEP2/VTEP3收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。然后依据VNI获取对应的二层广播域,进行VXLAN解封装,获取内层二层报文。
- VTEP2/VTEP3检查内层二层报文的目的MAC,发现是BUM MAC,在对应的二层广播域内的非VXLAN隧道侧进行广播处理,即:VTEP2/VTEP3分别从本地MAC表中找到非VXLAN隧道侧的所有出接口和封装信息,对报文进行VLAN Tag的相应处理,转发给对应的终端B/C。
跨子网报文转发
跨子网报文转发需要通过三层网关实现。在集中式网关场景中,跨子网报文转发的流程如图1-26所示。
- VTEP2收到来自Host1的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域,在对应的二层广播域内查找出接口和封装信息。
- VTEP2根据查找到的出接口和封装信息进行VXLAN封装,向VTEP1转发报文。
- VTEP1收到VXLAN报文后进行解封装,发现内层报文中的目的MAC是三层网关接口VBDIF10的MAC地址MAC3,判断需要进行三层转发。
- VTEP1剥除内层报文的以太封装,解析目的IP。根据目的IP查找路由表,找到目的IP的下一跳地址,再根据下一跳地址查找ARP表项,获取目的MAC、VXLAN隧道出接口及VNI等信息。
- VTEP1重新封装VXLAN报文,向VTEP3转发。其中内层报文以太头中的源MAC是三层网关接口VBDIF20的MAC地址MAC4。
- VTEP3收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。依据VNI获取对应的二层广播域,然后进行VXLAN解封装,获取内层二层报文,并在对应的二层广播域内查找出接口和封装信息。
- VTEP3根据查找到的出接口和封装信息,对报文进行VLAN Tag的相应处理,转发给对应的Host2。
Host2向Host1发送报文的过程类似,这里不再赘述。