vxlan
1、RD和RT介绍
RD值,只在本地有效,不同的EVPN实例使用不同的RD值,在本地不能冲突。
相同网段用户通信时,发布EVPN路由时,发送端VTEP会携带本地EVPN实例出方向VPN-Target属性列表中的所有VPN-Target属性。当接收端VTEP收到的EVPN路由携带的VPN-Target属性,与自己在EVPN实例的入方向VPN-Target属性列表有相同条目时,才允许接收该EVPN路由。所以本地EVPN实例出方向VPN-Target属性值(ERT)需要与对端的EVPN实例入方向VPN-Target属性值(IRT)有相同的值。
VTEP1: evpn route-distinguisher 10:1 vpn-target 100:5010 export-extcommunity vpn-target 100:5020 import-extcommunity VTEP2: evpn route-distinguisher 10:3 vpn-target 100:5020 export-extcommunity vpn-target 100:5010 import-extcommunity
跨网段用户通信,发送端发布Type2的路由时,会携带本地EVPN实例出方向VPN-Target属性列表中的所有VPN-Target属性(ERT)。当该EVPN路由与接收端中对应的L3VPN实例(L3VPN实例由L3 VNI确定)中的入方向VPN-Target属性列表中的条目相同时,才允许EVPN路由交叉到L3VPN实例路由表。所以发送端EVPN实例出方向VPN-Target属性值(ERT)需要与接收端的L3VPN实例入方向VPN-Target属性值(eIRT)有相同的值。
跨网段用户通信,发送端发布Type5的网段路由时,会携带L3VPN实例出方向VPN-Target属性列表中的所有VPN-Target属性(ERT)。当该EVPN路由与接收端中对应的L3VPN实例(L3VPN实例由L3 VNI确定)中的入方向VPN-Target属性列表中的条目相同时,才允许EVPN路由交叉到L3VPN实例路由表。所以发送端L3VPN实例出方向VPN-Target属性值(ERT)需要与接收端的L3VPN实例入方向VPN-Target属性值(eIRT)有相同的值。
VTEP1
evpn
route-distinguisher 10:2
vpn-target 100:5020 export-extcommunity
ip vpn-instance vpn1
ipv4-family
route-distinguisher 20:2
vpn-target 100:5030 import-extcommunity evpn
vxlan vni 5010
interface Vbdif10
ip binding vpn-instance vpn1
ip address 10.1.1.1 255.255.255.0
mac-address 0000-5e00-0102
vxlan anycast-gateway enable
arp collect host enable
VTEP2
evpn
route-distinguisher 10:3
vpn-target 100:5030 export-extcommunity
ip vpn-instance vpn1
ipv4-family
route-distinguisher 20:2
vpn-target 100:5020 import-extcommunity evpn
vxlan vni 5010
interface Vbdif20
ip binding vpn-instance vpn1
ip address 20.1.1.1 255.255.255.0
vxlan anycast-gateway enable
arp collect host enable
2、报文格式
Type2路由的报文格式
|
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路由功能说明 |
|---|---|
|
通告主机MAC地址 |
要实现同子网主机的二层互访,两端VTEP需要相互学习主机MAC。作为BGP EVPN对等体的VTEP之间借助Type2路由,可以相互通告已经获取到的主机MAC。详细的说明请参见本文的使用EVPN学习MAC地址。 |
|
通告主机ARP |
MAC/IP路由可以同时携带主机MAC地址+主机IP地址,因此该路由可以用来在VTEP之间传递主机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路由。 |
Type3路由的报文格式
EVPN Type3路由主要用于在VTEP之间相互通告二层VNI、VTEP IP信息,以建立头端复制列表,即用于VTEP的自动发现和VXLAN隧道的动态建立:如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道。同时,如果对端VNI与本端相同,则创建一个头端复制表,用于后续BUM报文转发。
![]()
字段说明:
|
字段 |
说明 |
|---|---|
|
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地址。 |
EVPN Type5路由
EVPN Type5路由又称IP前缀路由,主要用于传递网段路由。不同于Type2路由只传递32(IPv4)/128(IPv6)位的主机路由,Type5路由可传递0~32/0~128掩码长度的网段路由

|
字段 |
说明 |
|---|---|
|
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。 |
EVPN学习MAC地址:

Host1在连接至Leaf1时,通常会触发ARP、DHCP等行为。通过这些流量,Leaf1上就会学习到Host1的MAC信息,记录在本地MAC表中。
Leaf1学习到本地主机的MAC表项后,会向其对等体Leaf2发送EVPN Type2路由。该路由会携带本端EVPN实例的ERT、VTEP IP地址、二层VNI、Host1的MAC地址等信息。
[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发送的EVPN路由时,能否接纳该路由信息,是需要通过EVPN实例的RT(Route Target)值是否匹配来判断的。在本例中,Leaf2上接收Leaf1发过来的EVPN路由,则需保证Leaf2上配置的IRT(Import RT)与Leaf1配置的ERT(Export RT)一致,例如Leaf2上EVPN中的IRT配置为0:10,与上文中Leaf1上的ERT一致
[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 #
###同子网隧道建立
只需要在同一个二层广播域(BD)内互通,所以只要两端VTEP的IP地址路由可达,VXLAN隧道就可以建立。通过EVPN动态建立VXLAN隧道,就是在两端VTEP之间建立BGP EVPN对等体,然后对等体之间通过交互Type3路由来互相传递VNI和VTEP IP地址信息,从而实现动态建立VXLAN隧道

在Leaf1上完成VTEP IP、二层VNI、EVPN实例等相关配置后(这些配置的样例如下所示),Leaf1会向对等体Leaf2、Leaf3分别发送EVPN Type3路由。路由中会携带二层VNI、本端VTEP IP、EVPN实例的RD、出方向VPN-Target(ERT)等信息
[Leaf1] bridge-domain 10 vxlan vni 10 //二层VNI evpn route-distinguisher 1:10 //EVPN实例的RD 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、Leaf3收到Leaf1发来的Type3路由后,如果Leaf1的VTEP IP三层路由可达,则建立一条到Leaf1的二层VXLAN隧道;同时,如果本地有相同的VNI,则建立一条头端复制列表,用于后续广播、组播、未知单播报文的转发。
在Leaf2、Leaf3收到Leaf1发送的EVPN路由时,会基于路由携带的RT值(EVPN实例的ERT值)是否与本地EVPN实例的IRT值匹配,来判断是否接纳该路由。
####跨子网VXLAN隧道的建立和路由发布
主机路由发布
EVPN Type2路由不仅可以发布主机MAC地址,还可以发布主机路由信息,这是因为Type2路由还可以携带32位掩码的主机IP地址信息。主机路由的发布可以实现分布式网关场景下跨网段主机之间的互通。VTEP之间需要发布下属主机的IP路由,否则对端VTEP就无法学习到该主机的路由信息,从而没法进行三层转发

Host1在连接至Leaf1时,通常会触发ARP、DHCP等行为。通过这些流量,Leaf1上就会学习到Host1的ARP信息。同时,还可以根据Host1所属的BD域,获取相应的二层VNI、L3VPN实例及L3VPN实例关联的三层VNI信息。为什么会有L3VPN和三层VNI呢?因为同一个Leaf下可能接入多个租户的服务器,而为了实现不同租户之间的隔离,所以就在Leaf上通过创建不同的L3VPN来隔离不同租户的路由表,从而将不同租户的路由存放在不同的私网路由表中。而三层VNI就是用来标识这些L3VPN的,当Leaf节点收到对端发送来的数据报文时(报文会携带三层VNI),就根据其三层VNI找到相应的L3VPN,通过查找该L3VPN实例下的路由表来进行转发。
[Leaf1] ip vpn-instance vpn1 //L3VPN实例 ipv4-family route-distinguisher 20:4 vpn-target 100:5000 export-extcommunity evpn vpn-target 100:5000 import-extcommunity evpn vxlan vni 5000 //L3VPN实例关联的三层VNI # bridge-domain 10 vxlan vni 10 //二层VNI evpn route-distinguisher 10:4 vpn-target 0:10 export-extcommunity vpn-target 100:5000 export-extcommunity vpn-target 0:10 import-extcommunity # interface Vbdif10 //根据BD信息获取三层Vbdif接口和此接口绑定的L3VPN实例 ip binding vpn-instance vpn1 ip address 192.168.1.1 255.255.255.0 mac-address 0000-5e00-0102 vxlan anycast-gateway enable arp collect host enable #
Leaf2收到Leaf1发来的Type2路由后,能够学习到Host1的IP地址信息,并将其保存在相应的路由表中,其下一跳为Leaf1的VTEP IP地址,同时记录对应的三层VNI信息,处理过程如下
- 检查该路由的ERT与接收端EVPN实例的IRT是否相同。如果相同,则接收该路由,同时EVPN实例提取其中包含的主机IP+MAC信息,用于主机ARP通告。
- 检查该路由的ERT与接收端L3VPN实例的IRT是否相同(如下表中的举例所示)。如果相同,则接收该路由,同时L3VPN实例提取其中的主机IP地址+三层VNI信息,在其路由表中生成Host1的路由。该路由的下一跳会被设置为Leaf1的VXLAN隧道接口。
Leaf1(发送端) ip vpn-instance vpn1 ipv4-family route-distinguisher 20:2 vpn-target 100:5000 export-extcommunity evpn vpn-target 100:5000 import-extcommunity evpn vxlan vni 5000 # bridge-domain 10 vxlan vni 10 evpn route-distinguisher 10:2 vpn-target 100:10 export-extcommunity vpn-target 100:5000 export-extcommunity //发送端EVPN中的ERT vpn-target 100:10 import-extcommunity #
ip vpn-instance vpn1 ipv4-family route-distinguisher 20:3 vpn-target 100:5000 export-extcommunity evpn vpn-target 100:5000 import-extcommunity evpn //接收端L3VPN中的IRT(eIRT) vxlan vni 5000 # bridge-domain 20 vxlan vni 20 evpn route-distinguisher 10:3 vpn-target 100:20 export-extcommunity vpn-target 100:5000 export-extcommunity vpn-target 100:20 import-extcommunity #
###网段路由发布
网段路由的发布流程与主机路由类似,区别在于网段路由是通过Type5路由发布的,Type2路由只能发布32/128位的主机路由。Type5路由也可以发布32/128位的主机路由,在发布32/128位的主机路由时,功能与Type2路由类似,

- Leaf1收集到本地IP网段路由,把该IP网段路由通过EVPN Type5路由发送给Leaf2。路由中携带有IP前缀、掩码长度、对应VRF的三层VNI等信息(如上图表格所示)。
- Leaf2收到Leaf1发来的Type5路由后,能够学习到IP网段路由信息,并将其保存在相应的路由表中,其下一跳为Leaf1的VTEP IP地址,同时记录对应的三层VNI信息。
Leaf2收到Leaf1发送的EVPN路由时,根据EVPN路由携带的RT值(Type 5路由使用L3VPN实例的ERT值填充)是否与本地L3VPN实例的IRT值匹配,来将网段路由添加到对应VRF的路由表中。如果某VRF的IRT值与EVPN路由携带的RT值相同,则接收该路由,同时提取其中的网段路由+三层VNI信息,在其路由表中生成网段路由。该路由的下一跳会被设置为Leaf1的VTEP IP地址。同时,如果Leaf1的VTEP IP地址三层路由可达,则建立一条到Leaf1的VXLAN隧道。
Leaf1(发送端) ip vpn-instance vpn1 ipv4-family route-distinguisher 20:2 vpn-target 100:5000 export-extcommunity evpn //Type5路由中发送端的ERT使用L3VPN实例中的ERT(eERT) vpn-target 100:5000 import-extcommunity evpn vxlan vni 5000 # bridge-domain 10 vxlan vni 10 evpn route-distinguisher 10:2 vpn-target 100:10 export-extcommunity vpn-target 100:5000 export-extcommunity vpn-target 100:10 import-extcommunity
ip vpn-instance vpn1 ipv4-family route-distinguisher 20:3 vpn-target 100:5000 export-extcommunity evpn vpn-target 100:5000 import-extcommunity evpn //接收端L3VPN实例中的IRT(eIRT) vxlan vni 5000 # bridge-domain 20 vxlan vni 20 evpn route-distinguisher 10:3 vpn-target 100:20 export-extcommunity vpn-target 100:5000 export-extcommunity vpn-target 100:20 import-extcommunity #
###VXLAN BGP EVPN网络中流量的转发过程
同子网报文转发
同子网报文转发为二层转发,只在VXLAN二层网关之间进行,三层网关无需感知
Host1和Host2同属于一个子网,下面以Host1向Host2发送已知单播报文为例介绍报文在VXLAN网络中的转发流程

- Host1发送目的地址为Host2的报文。如果Host1没有Host2的MAC地址,会先发送广播ARP请求来获取Host2的MAC地址,此处该过程不再详述,认为Host1已经获取了Host2的MAC地址。
- Leaf1收到Host1的报文后,根据报文入端口或VLAN信息判断其所属的BD,并在该BD内查找出接口(Leaf1上会学习到Host2的MAC地址,出接口为VTEP 2.2.2.2)。然后Leaf1会对报文进行VXLAN封装后转发。
- Leaf2接收到VXLAN报文后,根据报文中VNI获取二层广播域,进行VXLAN解封装,获取内层的二层报文。
- Leaf2根据内层报文的目的MAC地址,从本地MAC表中找到对应的出接口,然后转发给对应的主机Host2。
同子网BUM报文转发
如果是同子网的BUM报文(广播、组播、未知单播),则会向同子网的所有VTEP发送一份报文。
跨子网报文转发
在分布式网关场景下,Leaf1、Leaf2作为VXLAN的三层网关,进行VXLAN封装及三层转发,Spine仅作为VXLAN报文转发节点,不进行VXLAN报文的处理。

以Host1向Host2发送报文为例介绍报文在VXLAN网络中的转发流程:
- 因为Host1与Host2属于不同网段,所以Host1会先将报文发送给网关(Leaf1),交由网关进行转发。
- Leaf1接收到来自Host1的报文,根据报文的目的地址判断需要进行三层转发。Leaf1根据报文入端口或VLAN信息判断其所属的BD,找到绑定该BD的L3VPN实例,然后在该L3VPN实例下查找路由表。在分布式网关场景下,网关Leaf1会学习到Host2的主机路由。Leaf1根据路由获取三层VNI、下一跳等信息,然后进行VXLAN封装,将报文转发至Leaf2。
- Leaf2收到VXLAN报文后进行解封装,根据报文携带的三层VNI找到对应的L3VPN实例,通过查找该L3VPN实例下的路由表,获取报文的下一跳是网关接口地址,然后将目的MAC地址替换为Host2的MAC地址,源MAC地址替换为Leaf2网关的MAC地址,转发给Host2。
Host2向Host1发送报文的过程与上述过程相同。
VXLAN BGP EVPN网络中的ARP广播抑制
ARP广播抑制有两种方式,一种是ARP广播变单播的功能,另一种是ARP二层代答功能。
参考链接:
https://support.huawei.com/enterprise/zh/doc/EDOC1100164807/597dc958?idPath=24030814|21782165|21782239|22318540|7597815
浙公网安备 33010602011771号