VxLAN有两种实现方式:
- 基于组播的VxLAN,它是一种数据驱动式的泛洪与学习(driven flood-&-learn),没有控制面,通过组播来传送VxLAN 广播,未知单播和组播流量(Broadcast, Unknown Unicast and Multicast)
- 以EVPN作为控制面的VxLAN,EVPN通过MP-BGP来自动发现和认证VTEP邻居,通过MP-BGP来通告主机MAC/IP地址
在RFC 7348定义的VXLAN泛洪学习模式下,终端主机信息学习和VTEP发现都是基于数据平面的,没有控制协议在VTEP之间分配终端主机可达性信息。为了克服flood的局限性并学习VXLAN,Cisco VXLAN MP-BGP EVPN spine and leaf架构使用多协议边界网关协议以太网虚拟专用网(MP-BGP EVPN)作为VXLAN的控制平面。该技术为VXLAN覆盖网络中的第2层和第3层转发提供了控制平面和数据平面分离以及统一的控制平面
VXLAN的封装:
原始的第2层帧被封装在一个VXLAN报头中,然后放置在UDP-IP包中,并通过IP网络传输。
将EVPN作为VXLAN的控制平面
MP-BGP(MultiProtocol BGP)
传统的BGP-4使用Update报文在对等体之间交换路由信息。一条Update报文可以通告一类具有相同路径属性的可达路由,这些路由放在NLRI(Network Layer Reachable Information,网络层可达信息)字段中。
因为BGP-4只能管理IPv4单播路由信息,为了提供对多种网络层协议的支持(例如IPv6、组播),发展出了MP-BGP。MP-BGP在BGP-4基础上对NLRI作了新扩展。玄机就在于新扩展的NLRI上,扩展之后的NLRI增加了地址族的描述,可以用来区分不同的网络层协议,例如IPv6单播地址族、VPN实例地址族等。
类似的,EVPN也是借用了MP-BGP的机制,在L2VPN地址族下定义了新的子地址族——EVPN地址族,在这个地址族下又新增了一种NLRI,即EVPN NLRI。EVPN NLRI定义了几种BGP EVPN路由类型,这些路由可以携带主机IP、MAC、VNI、VRF等信息。这样,当一个VTEP学习到下挂的主机的IP、MAC地址信息后,就可以通过MP-BGP路由将这些信息发送给其他的VTEP,从而在控制平面实现主机IP、MAC地址的学习,抑制了数据平面的泛洪。
采用EVPN作为VXLAN的控制平面具有以下优势:
- 可实现VTEP自动发现、VXLAN隧道自动建立,从而 降低网络部署、扩展的难度。
- EVPN可以同时发布二层MAC信息和三层路由信息。
- 可以减少网络中的泛洪流量
EVPN中定义的五种路由类型
EVPN NLRI定义了五种EVPN路由类型。其中Type1~Type4是在RFC7432中定义的,Type5是在后来的草案中定义的。
路由类型 | 路由描述 | RFC/Draft |
---|---|---|
Type1 | Ethernet auto-discovery (AD) route,以太自动发现路由 | RFC 7432 |
Type2 | MAC/IP advertisement route,MAC/IP路由 | N/A |
Type3 | Inclusive multicast Ethernet tag route,Inclusive Multicast路由 | N/A |
Type4 | Ethernet segment route,以太网段路由 | N/A |
Type5 | IP prefix route,IP前缀路由 | draft-ietf-bess-evpn-prefix-advertisement |
其中Type1和Type4是用于EVPN ESI(Ethernet Segment Identifier)多活场景,该场景是一种按照RFC标准定义的方式实现的VXLAN网关多归多活方案,可有效提升VXLAN接入侧的可靠性
常见的是EVPN中Type2、Type3、Type5类型的路由
EVPN Type2路由 - MAC/IP advertisement route,MAC/IP路由
EVPN Type2路由,也就是MAC/IP路由,主要用于VTEP之间相互通告主机IP、MAC信息。Type2路由的NLRI部分格式:
Route Distinguisher ( 8 字节 )
Ethernet Segment Identifier ( 10字节 )
Ethernet Tag ID (4字节 )
MAC Address Length ( 1 字节)
MAC Address ( 6字节 )
IP Address Length ( 1字节 )
IP Address ( 0/4/16字节 )
MPLS Labell (3字节 )
MPLS Labe12 ( 0/3 字节)
- Route Distinguisher: 该字段为EVPN实例下设置的RD(Route Distinguisher)值。作用类似于L3VPN的RD值,这里的RD是区分不同的EVPN实例。一个二层广播域BD就对应一个EVPN实例。
- Ethernet Segment Identifier: 该字段为当前设备与对端连接定义的唯一标识。
- Ethernet Tag ID: 该字段为当前设备上实际配置的VLAN ID。
- MAC Address Length: 该字段为此路由携带的主机MAC地址的长度。
- MAC Address: 该字段为此路由携带的主机MAC地址。
- IP Address Length: 该字段为此路由携带的主机IP地址的掩码长度。
- IP Address: 该字段为此路由携带的主机IP地址。
- MPLS Label1: 该字段为此路由携带的二层VNI,用于标识不同的BD。
- MPLS Label2: 该字段为此路由携带的三层VNI,用于标识不同的VRF。VXLAN网络中为了实现不同租户之间的隔离,需要通过不同的VRF(L3VPN)来隔离不同租户的路由表,从而将不同租户的路由存放在不同的私网路由表中,而三层VNI就是用来标识这些VRF的。
Type2路由在VXLAN网络中的使用场景和作用
场景 | Type2路由功能说明 |
---|---|
通告主机MAC地址 | 要实现同子网主机的二层互访,两端VTEP需要相互学习主机MAC。作为BGP EVPN对等体的VTEP之间借助Type2路由,可以相互通告已经获取到的主机MAC。 |
通告主机ARP | MAC/IP路由可以同时携带主机MAC地址 主机IP地址,因此该路由可以用来在VTEP之间传递主机ARP表项,实现主机ARP通告,可应用于以下两个子场景:场景1:ARP广播抑制。当三层网关学习到其子网下的主机ARP时,生成主机信息(包含主机IP地址、主机MAC地址、二层VNI、网关VTEP IP地址),然后通过传递ARP类型路由将主机信息同步到二层网关上。这样当二层网关再收到ARP请求时,先查找是否存在目的IP地址对应的主机信息,如果存在,则直接将ARP请求报文中的广播MAC地址替换为目的单播MAC地址,实现广播变单播,达到ARP广播抑制的目的。ARP广播抑制的详情可参见本文中的VXLAN BGP EVPN网络中的ARP广播抑制。 场景2:分布式网关场景下的虚拟机迁移。当一台虚拟机从当前网关迁移到另一个网关下之后,新网关学习到该虚拟机的ARP(一般通过虚拟机发送免费ARP实现),并生成主机信息(包含主机IP地址、主机MAC地址、二层VNI、网关VTEP IP地址),然后通过传递ARP类型路由将主机信息发送给虚拟机的原网关。原网关收到后,感知到虚拟机的位置发生变化,触发ARP探测,当探测不到原位置的虚拟机时,撤销原位置虚拟机的ARP和主机路由。 |
通告主机IP路由 | 在分布式网关场景中,要实现跨子网主机的三层互访,两端VTEP(作为三层网关)需要互相学习主机IP路由。作为BGP EVPN对等体的VTEP之间通过交换Type2路由,可以相互通告已经获取到的主机IP路由。 |
ND表项扩散 | Type2路由可以同时携带主机MAC地址 主机IPv6地址,因此该路由可以用来在VTEP之间传递ND表项,实现ND表项扩散,可用于实现NS组播抑制、防止ND欺骗攻击、分布式网关场景下的IPv6虚拟机迁移。 |
通告主机IPv6路由 | 在分布式网关场景中,要实现跨子网IPv6主机的三层互访,网关设备需要互相学习主机IPv6路由。作为BGP EVPN对等体的VTEP之间通过交换Type2路由,可以相互通告已经获取到的主机IPv6路由。 |
EVPN Type3路由 - Inclusive multicast Ethernet tag route,Inclusive Multicast路由
EVPN Type3路由主要用于在VTEP之间相互通告二层VNI、VTEP IP信息,以建立头端复制列表,即用于VTEP的自动发现和VXLAN隧道的动态建立:如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道。同时,如果对端VNI与本端相同,则创建一个头端复制表,用于后续BUM(Broadcast, Unknown Unicast and Multicast)报文转发。
Type3路由的NLRI是由“前缀”和“PMSI”属性组成,其中VTEP IP信息体现在NLRI的Originating Router's IP Address字段中,二层VNI信息则体现在PMSI属性的MPLS Label中。
前缀:
Route Distinguisher (8 )
Ethernet Tag ID (4 )
IP Address Length ( 1 )
Originating Routers IP Address ( )
PMSI属性:
Flags (1
Tunnel Type ( 1 )
MPLS Label ( 3 )
Tunnel Identifier ( variable )
各字段的解释
Route Distinguisher: 该字段为EVPN实例下设置的RD(Route Distinguisher)值。
Ethernet Tag ID: 该字段为当前设备上的VLAN ID。在此路由中为全0。
IP Address Length: 该字段为此路由携带的本端VTEP IP地址的掩码长度。
Originating Router's IP Address: 该字段为此路由携带的本端VTEP IP地址。
Flags: 该字段为标志位,标识当前隧道是否需要叶子节点信息。
在VXLAN场景中,该字段没有实际意义。
Tunnel Type: 该字段为此路由携带的隧道类型。目前,在VXLAN场景中,支持的类型只有“6:Ingress Replication”,即头端复制,用于BUM报文转发。
MPLS Label: 该字段为此路由携带的二层VNI。
Tunnel Identifier: 该字段为此路由携带的隧道信息。目前,在VXLAN场景中,该字段也是本端VTEP IP地址。
应用说明
该类型路由在VXLAN控制平面中主要用于VTEP的自动发现和VXLAN隧道的动态建立。作为BGP EVPN对等体的VTEP,通过Inclusive Multicast路由互相传递二层VNI和VTEP IP地址信息。其中,Originating Router's IP Address字段为本端VTEP IP地址,MPLS Label字段为二层VNI。如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道。同时,如果对端VNI与本端相同,则创建一个头端复制表,用于后续BUM报文转发。
EVPN Type5路由
EVPN Type5路由又称IP前缀路由,主要用于传递网段路由。不同于Type2路由只传递32(IPv4)/128(IPv6)位的主机路由,Type5路由可传递0~32/0~128掩码长度的网段路由。
Route Distinguisher ( 8 字节 )
Ethernet Segment Identifier ( 10 字节 )
Ethernet Tag ID (4 字节 )
IP Prefix Length ( 1 字节 )
Ip prefix (4/16 字节 )
GW IP Address (4/16 字节 )
MPLS Label (3 字节 )
各字段的解释如下
Route Distinguisher: 该字段为EVPN实例下设置的RD(Route Distinguisher)值。
Ethernet Segment Identifier: 该字段为当前设备与对端连接定义的唯一标识。
Ethernet Tag ID: 该字段为当前设备上实际配置的VLAN ID。
IP Prefix Length: 该字段为此路由携带的IP前缀掩码长度。
IP Prefix: 该字段为此路由携带的IP前缀。
GW IP Address: 该字段为默认网关地址。该字段在VXLAN场景中没有实际意义。
MPLS Label: 该字段为此路由携带的三层VNI。
应用说明
该类型路由的IP Prefix Length和IP Prefix字段既可以携带主机IP地址,也可以携带网段地址:
• 当携带主机IP地址时,主要用于分布式网关场景中的主机/网段路由通告
• 当携带网段地址时,通过传递该类型路由,可以实现VXLAN网络中的主机访问外部网络。
EVPN路由在发布时,会携带RD(Route Distinguisher,路由标识符)和VPN Target(也称为Route Target)。RD用来区分不同的VXLAN EVPN路由。VPN Target是一种BGP扩展团体属性,用于控制EVPN路由的发布与接收。也就是说,VPN Target定义了本端的EVPN路由可以被哪些对端所接收,以及本端是否接收对端发来的EVPN路由。
VPN Target属性分为两类:
- Export Target:本端发送EVPN路由时,将消息中携带的VPN Target属性设置为Export Target。
- Import Target:本端在接收到对端的EVPN路由时,将消息中携带的Export Target与本端的Import Target进行比较,只有两者相等时才接收该路由,否则丢弃该路由。
BGP EVPN作为VXLAN控制面的工作过程
在用BGP EVPN方式部署分布式VXLAN网络的场景中,
控制平面的流程包括VXLAN隧道建立、MAC地址动态学习;
转发平面的流程包括同子网已知单播报文转发、同子网BUM报文转发、跨子网报文转发。
BGP EVPN方式实现的功能全面:
- 支持主机IP路由通告、
- 主机MAC地址通告、
- 主机ARP通告等,
- 使能ARP广播抑制功能。
如果在VXLAN网络中采用分布式网关,推荐使用BGP EVPN方式。
本文下面的内容以Underlay网络和Overlay网络均为IPv4为例,介绍EVPN作为VXLAN控制面的工作过程。
使用EVPN学习MAC地址
使用EVPN作为VXLAN的控制平面,可以用EVPN来进行MAC学习,以替代数据平面泛洪方式的MAC学习,减少泛洪流量。使用EVPN来进行MAC学习的过程,是通过在VTEP之间传递Type2路由完成的。
下面以图为例,介绍VTEP之间是如何通过EVPN来实现远程主机的MAC学习的
图中Leaf1和Leaf2作为VTEP,分别连接同网段的主机Host1和Host2,以Leaf1向Leaf2发送Type2路由为例:
- Host1在连接至Leaf1时,通常会触发ARP、DHCP等行为。通过这些流量,Leaf1上就会学习到Host1的MAC信息,记录在本地MAC表中。
- Leaf1学习到本地主机的MAC表项后,会向其对等体Leaf2发送EVPN Type2路由。该路由会携带本端EVPN实例的ERT、VTEP IP地址、二层VNI、Host1的MAC地址等信息。其中本端的EVPN实例的ERT、VTEP IP地址、二层VNI这些信息来源于本端VTEP上的配置,样例如下:
[Leaf1]
bridge-domain 10
vxlan vni 10 //二层VNI
evpn
route-distinguisher 10:1
vpn-target 0:10 export-extcommunity //EVPN实例的ERT
vpn-target 100:5000 export-extcommunity
vpn-target 0:10 import-extcommunity
#
interface Nve1
source 1.1.1.1 //Leaf1的VTEP IP地址
vni 10 head-end peer-list protocol bgp
#
- Leaf2收到Leaf1发来的Type2路由后,能够学习到Host1的MAC地址信息,并将其保存在MAC表中,其下一跳为Leaf1的VTEP IP地址。 需要说明的是,Leaf2收到Leaf1发送的EVPN路由时,能否接纳该路由信息,是需要通过EVPN实例的RT(Route Target)值是否匹配来判断的。RT是一种BGP扩展团体属性,用于控制EVPN路由的发布与接收。也就是说,RT决定了本端的EVPN路由可以被哪些对端所接收,以及本端是否接收对端发来的EVPN路由。 RT属性分为两类: ERT(Export RT):本端发送EVPN路由时,携带的RT属性设置为ERT。 IRT(Import RT):本端在收到对端的EVPN路由时,将路由中携带的ERT与本端的IRT进行比较,只有两者相等时才接收该路由,否则丢弃该路由。
在本例中,Leaf2上接收Leaf1发过来的EVPN路由,则需保证Leaf2上配置的IRT(Import RT)与Leaf1配置的ERT(Export RT)一致,例如Leaf2上EVPN中的IRT配置为0:10,与上文中Leaf1上的ERT一致:
代码语言:bash复制[Leaf2]
bridge-domain 10
vxlan vni 10 //二层VNI
evpn
route-distinguisher 10:2
vpn-target 0:10 export-extcommunity
vpn-target 100:5000 export-extcommunity
vpn-target 0:10 import-extcommunity //EVPN实例的IRT
#
经过以上的流程,在未发送广播请求的情况下,Leaf2就可以学习到Host1的MAC地址。类似的,Leaf1也可以学习到Host2的MAC地址。
另外需要强调的是,EVPN只是减少了网络中的流量泛洪,并不会完全避免,例如在以下一些场景:
- 网络中存在“静默”主机的情况,这种情况下主机不会触发ARP、DHCP等行为,导致VTEP学习不到本地主机MAC地址,从而也就无法发送MAC地址信息让其他VTEP学习到。
- 主机首次通信的过程中,主机会发送ARP广播请求报文,这种也会产生泛洪。这种情况还可以通过ARP广播抑制功能来避免泛洪
参考整理自: https://support.huawei.com/enterprise/zh/doc/EDOC1100164807