EVPN VXLAN 运行机制

EVPN与VXLAN

EVPN(Ethernet Virtual Private Network)是一种用于二层网络互联的VPN技术。EVPN技术采用类似于BGP/MPLS IP VPN的机制,在BGP协议的基础上定义了一种新的网络层可达信息NLRI(Network Layer Reachability Information)即EVPN NLRI,EVPN NLRI定义了几种新的BGP EVPN路由类型,用于处在二层网络的不同站点之间的MAC地址学习和发布。

原有的VXLAN实现方案没有控制平面,是通过数据平面的流量泛洪进行VTEP发现和主机信息(包括IP地址、MAC地址、VNI、网关VTEP IP地址)学习的,这种方式导致VXLAN网络存在很多泛洪流量。为了解决这一问题,VXLAN引入了EVPN作为控制平面,通过在VTEP之间交换BGP EVPN路由实现VTEP的自动发现、主机信息相互通告等功能,从而避免了不必要的数据流量泛洪。

在EVPN VXLAN场景中,控制平面的流程包括VXLAN隧道建立、MAC地址动态学习;转发平面的流程包括同子网已知单播报文转发、同子网BUM(Broadcast&Unknown-unicast&Multicast)报文转发、跨子网报文转发。EVPN VXLAN有集中式网关部署和分布式网关部署两种部署场景,下面分别对两场景的各个流程进行介绍。

VXLAN隧道建立

VXLAN隧道由一对VTEP IP地址确定,创建VXLAN隧道实际上是两端VTEP获取对端VTEP IP地址的过程,只要对端VTEP IP地址是三层路由可达的,VXLAN隧道就可以建立成功。

通过BGP EVPN方式动态建立VXLAN隧道,就是在两端VTEP之间建立BGP EVPN对等体,然后对等体之间利用BGP EVPN路由来互相传递VNI和VTEP IP地址信息,从而实现动态建立VXLAN隧道。

集中式网关场景

如下图所示,VTEP2上部署了两个Host,VTEP3上部署了一个Host,VTEP1上部署三层网关。

  • 为了实现Host3和Host2之间的通信,需要在VTEP2和VTEP3之间创建VXLAN隧道;

  • 为了实现Host1和Host2之间的通信,需要在VTEP2和VTEP1之间以及VTEP1和VTEP3之间创建VXLAN隧道。

  • 对于Host1和Host3之间的通信,虽然都属于VTEP2,但由于属于不同子网,需要经过三层网关VTEP1,因此也需要在VTEP2和VTEP1之间创建VXLAN隧道。

下面以VTEP2和VTEP3为例,介绍一下通过BGP EVPN方式动态建立VXLAN隧道的过程:

  1. 首先在VTEP2和VTEP3之间建立BGP EVPN对等体。然后,在VTEP2和VTEP3上分别创建二层广播域,并在二层广播域下配置关联的VNI。接下来在二层广播域下创建EVPN实例,配置本端EVPN实例的RD、出方向VPN-Target(ERT)、入方向VPN-Target(IRT)。

  2. 在配置完本端VTEP IP地址后,VTEP2和VTEP3会生成BGP EVPN路由并发送给对端,该路由携带本端EVPN实例的出方向VPN-Target和BGP EVPN协议新定义的Type3路由(Inclusive Multicast路由)。
    如下图所示,Type3路由由前缀和PMSI属性组成,VTEP IP地址存放在前缀的Originating Router's IP Address字段中,VNI存放在PMSI属性的MPLS Label字段中。

  3. VTEP2和VTEP3在收到对端发来的BGP EVPN路由后,首先检查该路由携带的EVPN实例的出方向VPN-Target,如果与本端EVPN实例的入方向VPN-Target相等,则接收该路由,否则丢弃该路由。

  4. 在接收该路由后,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隧道无法建立成功。

分布式网关场景

如下图所示,VTEP同时作为二层网关和三层网关,Switch1节点不感知VXLAN隧道,只作为VXLAN报文的转发节点。控制平面只需在VTEP之间建立VXLAN隧道。

  • VTEP1与VTEP2之间建立VXLAN隧道用于Host1和Host2、Host3和Host2之间的通信。

  • 对于Host1和Host3之间的通信,由于都属于VTEP1,所以互访的流量只需在VTEP1上处理,无需通过VXLAN隧道转发。

当处于同一子网的Host3与Host2互通时,只需要进行二层转发。通过BGP EVPN方式建立VXLAN隧道的过程和集中式网关部署场景建立VXLAN的过程相同。

当处于不同子网的Host1与Host2互通时,需要进行三层转发,因此在通过BGP EVPN方式建立VXLAN隧道的过程中,网关VTEP1和VTEP2需要发布下属主机的IP路由。建立VXLAN隧道之前,需要在VTEP1和VTEP2上进行如下配置准备:

配置任务

作用

创建二层广播域(BD),并在二层广播域下配置关联的二层VNI。

创建VXLAN网络转发数据报文的实体。

在VTEP1和VTEP2之间建立BGP EVPN对等体。

用于交换BGP EVPN路由。

创建EVPN实例并绑定BD域,配置EVPN实例的RD、出方向VPN-Target(ERT)、入方向VPN-Target(IRT)。

用于生成BGP EVPN路由。

为不同租户创建VPN实例,将VPN实例绑定到指定二层广播域的VBDIF接口上。

用于区分和隔离不同租户的IP路由表。

为VPN实例指定关联的三层VNI。

用于VTEP节点在收到数据报文时判断使用哪个VPN实例的路由表指导转发。

配置VPN实例到EVPN实例的出方向VPN-Target(eERT),以及从EVPN实例到VPN实例的入方向VPN-Target(eIRT)。

用于控制本端VPN实例与对端EVPN实例之间BGP EVPN路由的发布和接收。

配置VTEP1和VTEP2之间发布的路由类型。

用于发布Host1和Host2的主机IP路由。这里有IRB和IP前缀两种路由类型,可根据如下原则进行选择:

  • IRB类型路由只能发布32位主机IP路由。由于IRB类型路由包含着ARP类型路由,因此选择发布IRB类型路由后,可直接在VTEP节点上使能ARP广播抑制功能,无需其他配置。如果只需发布32位主机IP路由,建议选择发布IRB类型路由。

  • IP前缀类型路由既能发布32位主机IP路由又能发布网段路由。因为在VXLAN网络中,不同的VTEP节点可能连接着相同的网段,所以如果VTEP节点发布的是下属主机IP所在的网段路由,则可能与其他VTEP节点发布的网段路由冲突,进而导致某些VTEP节点的下属主机不可达。因此,如果只需发布32位主机IP路由,不建议选择IP前缀类型路由。只有需要发布网段路由时,才需选择IP前缀类型路由。

根据主机IP路由发布方式的不同,动态建立VXLAN隧道的过程有以下两种:

通过IRB类型路由发布主机IP路由

  1. Host1首次与VTEP1通信时,通过动态ARP报文,VTEP1学习到Host1的ARP表项。同时,VTEP1根据Host1所在的二层广播域找到绑定VBDIF接口的VPN实例,获取关联的三层VNI。然后VTEP1上的EVPN实例根据上述信息生成IRB类型路由,如下图所示。其中,主机IP地址存放在IP Address Length和IP Address字段中,三层VNI存放在MPLS Label2字段中。

  2. VTEP1上的EVPN实例从IRB类型路由中获取Host1的主机IP地址、三层VNI,发给本端VPN实例,VPN实例在其路由表中保存Host1的主机IP路由,如下图所示。

  3. VTEP1向VTEP2发送BGP EVPN路由,该路由携带本端EVPN实例的ERT、扩展团体属性、路由下一跳属性以及IRB类型路由。其中,扩展团体属性携带的是隧道类型(取值是VXLAN隧道)、本端VTEP的MAC地址;路由下一跳属性携带的是本端的VTEP IP地址。

  4. VTEP2收到VTEP1发来的BGP EVPN路由后,同时进行如下处理:

  • 检查该路由携带的ERT,如果与本端EVPN实例的IRT相同,则接收该路由。EVPN实例获取到IRB类型路由后,还能提取到其中包含的ARP类型路由,用于主机ARP通告。

  • 检查该路由携带的ERT,如果与本端VPN实例的eIRT相同,则接收该路由。然后,VPN实例获取到该路由携带的IRB类型路由,从中提取Host1的主机IP地址、三层VNI,在其路由表中保存Host1的主机IP路由,并根据路由的下一跳迭代出接口,最终迭代结果是指向VTEP1的VXLAN隧道,如下图所示。

说明:

只有当BGP EVPN路由携带的ERT与本端EVPN实例的IRT、本端VPN实例的eIRT都不同时,才会丢弃该路由。

  • 在通过EVPN实例或VPN实例接收该路由后,VTEP2通过下一跳属性获取VTEP1的VTEP IP地址,如果该VTEP IP地址是三层路由可达的,则建立一条到VTEP1的VXLAN隧道。

VTEP1建立到VTEP2的VXLAN隧道的过程与上述相同。

通过IP前缀类型路由发布主机IP路由

  1. 首先在VTEP1上将Host1的主机IP地址生成直连路由,然后在VTEP1上配置VPN实例引入直连路由,这样Host1的主机IP路由就保存到VPN实例的路由表中,并添加VPN实例关联的三层VNI。

  2. 在VTEP1上配置VPN实例向EVPN实例发布IP路由后,VPN实例下Host1的主机IP路由将发布给EVPN实例。然后由EVPN实例生成IP前缀类型路由,如下图所示。其中,主机IP地址存放在IP Prefix Length和IP Prefix字段中,三层VNI存放在MPLS Label字段中。

  3. VTEP1向VTEP2发送BGP EVPN路由,该路由携带本端VPN实例的eERT、扩展团体属性、路由下一跳属性以及IP前缀类型路由。其中,扩展团体属性携带的是隧道类型(取值是VXLAN隧道)、本端VTEP的MAC地址;路由下一跳属性携带的是本端的VTEP IP地址。

  4. VTEP2收到VTEP1发来的BGP EVPN路由后,进行如下处理:

  • 检查该路由携带的eERT,如果与本端VPN实例的eIRT相同,则接收该路由,否则丢弃该路由。然后,VPN实例获取到该路由携带的IP前缀类型路由,从中提取Host1的主机IP地址、三层VNI,在其路由表中保存Host1的主机IP路由,并将路由的下一跳迭代出接口设置为VXLAN隧道接口,如下图所示。

  • 在通过VPN实例接收该路由后,VTEP2通过下一跳属性获取VTEP1的VTEP IP地址,如果该VTEP IP地址是三层路由可达的,则建立一条到VTEP1的VXLAN隧道。

VTEP1建立到VTEP2的VXLAN隧道的过程与上述相同。

MAC地址动态学习

在VXLAN网络中,为了实现终端租户的互通,支持MAC地址动态学习,不需要网络管理员手工维护,大大减少了维护工作量。

在集中式网关场景和分布式网关场景中,MAC地址动态学习的过程相同。MAC地址动态学习的过程如下:

  1. Host3首次与VTEP2通信时,通过动态ARP报文,VTEP2学习到Host3的MAC地址、BD ID(二层广播域标识)和报文入接口的对应关系,并在本地MAC表中生成Host3的MAC表项,其出接口为Port1。

  2. VTEP2根据Host3的ARP表项生成BGP EVPN路由并发送给对等体VTEP3,该路由携带本端EVPN实例的出方向VPN-Target、路由下一跳属性以及BGP EVPN协议的Type2路由即MAC/IP路由。其中,路由下一跳属性携带的是本端VTEP IP地址;
    Type2路由如下图所示,Host3的MAC地址存放在MAC Address Length和MAC Address字段中,二层VNI存放在MPLS Label1字段中。

  3. VTEP3收到VTEP2发来的BGP EVPN路由后,首先检查该路由携带的EVPN实例的出方向VPN-Target,如果与本端EVPN实例的入方向VPN-Target相等,则接收该路由,否则丢弃该路由。

  4. 在接收该路由后,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地址动态学习,MAC地址动态学习过程与与上述过程相同。

同子网已知单播报文转发

同子网已知单播报文转发只在VXLAN二层网关之间进行,三层网关无需感知。在集中式网关场景和分布式网关场景中,同子网已知单播报文转发流程相同。报文转发流程如下:

  1. VTEP2收到来自Host3的报文,根据报文接入的端口和携带的VLAN信息获取对应的二层广播域,并在该二层广播域内查找出接口和封装信息。

  2. VTEP2根据查找到的封装信息对数据报文进行VXLAN封装,然后根据查找到的出接口进行报文转发

  3. VTEP3收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。然后依据VNI获取对应的二层广播域,进行VXLAN解封装,获取内层的二层报文。

  4. VTEP3根据内层二层报文的目的MAC,从本地MAC表找到对应的出接口和封装信息,对报文进行VLAN Tag的相应处理,转发给对应的主机Host2。

Host2向Host3发送报文的过程类似

同子网BUM报文转发

同子网BUM报文转发只在VXLAN二层网关之间进行,三层网关无需感知。在集中式网关场景和分布式网关场景中,同子网BUM报文转发方式相同,采用头端复制方式。转发流程如下:

  1. VTEP1收到来自终端A的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域。

  2. VTEP1根据对应的二层广播域获取对应VNI的头端复制列表,依据头端复制列表进行报文的VXLAN封装,并将报文发送给头端复制列表中的所有出端口VTEP。

  3. VTEP2/VTEP3收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。然后依据VNI获取对应的二层广播域,进行VXLAN解封装,获取内层二层报文。

  4. VTEP2/VTEP3检查内层二层报文的目的MAC,发现是BUM MAC,在对应的二层广播域内的非VXLAN隧道侧进行广播处理,即:VTEP2/VTEP3分别从本地MAC表中找到非VXLAN隧道侧的所有出接口和封装信息,对报文进行VLAN Tag的相应处理,转发给对应的终端B/C。

说明:

终端B/C向终端A回应报文,参考同子网已知单播报文转发。

跨子网报文转发

跨子网报文转发需要通过三层网关实现。

集中式网关场景

在集中式网关场景中,跨子网报文转发的流程如下图所示:

  1. VTEP2收到来自Host1的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域,在对应的二层广播域内查找出接口和封装信息。

  2. VTEP2根据查找到的出接口和封装信息进行VXLAN封装,向VTEP1转发报文。

  3. VTEP1收到VXLAN报文后进行解封装,发现内层报文中的目的MAC是三层网关接口VBDIF10的MAC地址MAC3,判断需要进行三层转发。

  4. VTEP1剥除内层报文的以太封装,解析目的IP。根据目的IP查找路由表,找到目的IP的下一跳地址,再根据下一跳地址查找ARP表项,获取目的MAC、VXLAN隧道出接口及VNI等信息。

  5. VTEP1重新封装VXLAN报文,向VTEP3转发。其中内层报文以太头中的源MAC是三层网关接口VBDIF20的MAC地址MAC4。

  6. VTEP3收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。依据VNI获取对应的二层广播域,然后进行VXLAN解封装,获取内层二层报文,并在对应的二层广播域内查找出接口和封装信息。

  7. VTEP3根据查找到的出接口和封装信息,对报文进行VLAN Tag的相应处理,转发给对应的Host2。

Host2向Host1发送报文的过程类似。

分布式网关场景

在分布式网关场景中,跨子网报文转发的流程如下:

  • VTEP1收到来自Host1的报文,检测到报文的目的MAC是网关接口MAC,判断该报文需要进行三层转发。

  • VTEP1根据报文的入接口找到对应的二层广播域,然后找到绑定该广播域VBDIF接口的VPN实例。根据报文的目的IP地址,查找该VPN实例下的路由表(如下图所示),获取该路由对应的三层VNI,以及下一跳地址。再根据出接口是VXLAN隧道,判断需要进行VXLAN封装:

  1. 根据VXLAN隧道的目的IP和源IP地址,获取对应的MAC地址,并将内层目的MAC和源MAC替换。

  2. 将三层VNI封装到报文中。

  3. 外层封装VXLAN隧道的目的IP和源IP地址,源MAC地址为VTEP1的VBDIF接口MAC地址,目的MAC地址为网络下一跳的MAC地址。

  • 封装后的报文根据外层MAC和IP信息在IP网络中传输,送达VTEP2。

  • VTEP2收到VXLAN报文后进行解封装,检测到报文的目的MAC是自己的MAC地址,判断该报文需要进行三层转发。

  • VTEP2根据报文携带的三层VNI找到对应的VPN实例,通过查找该VPN实例下的路由表(如下图所示),获取报文的下一跳是网关接口地址,然后将目的MAC地址替换为Host2的MAC地址,源MAC地址替换为VTEP2的MAC地址,转发给Host2。

Host2向Host1发送报文的过程类似。

猜你喜欢

转载自blog.csdn.net/qq_32044265/article/details/129221839
今日推荐