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通告,可应用于以下两个子场景:

  • 场景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路由。

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掩码长度的网段路由

image

 

字段

说明

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地址:

image

 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隧道 

image

 在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就无法学习到该主机的路由信息,从而没法进行三层转发

image

 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信息,处理过程如下

  1. 检查该路由的ERT与接收端EVPN实例的IRT是否相同。如果相同,则接收该路由,同时EVPN实例提取其中包含的主机IP+MAC信息,用于主机ARP通告。
  2. 检查该路由的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路由类似,

image

 

  1. Leaf1收集到本地IP网段路由,把该IP网段路由通过EVPN Type5路由发送给Leaf2。路由中携带有IP前缀、掩码长度、对应VRF的三层VNI等信息(如上图表格所示)。
  2. 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网络中的转发流程

image

 

  1. Host1发送目的地址为Host2的报文。如果Host1没有Host2的MAC地址,会先发送广播ARP请求来获取Host2的MAC地址,此处该过程不再详述,认为Host1已经获取了Host2的MAC地址。
  2. Leaf1收到Host1的报文后,根据报文入端口或VLAN信息判断其所属的BD,并在该BD内查找出接口(Leaf1上会学习到Host2的MAC地址,出接口为VTEP 2.2.2.2)。然后Leaf1会对报文进行VXLAN封装后转发。
  3. Leaf2接收到VXLAN报文后,根据报文中VNI获取二层广播域,进行VXLAN解封装,获取内层的二层报文。
  4. Leaf2根据内层报文的目的MAC地址,从本地MAC表中找到对应的出接口,然后转发给对应的主机Host2。

同子网BUM报文转发

如果是同子网的BUM报文(广播、组播、未知单播),则会向同子网的所有VTEP发送一份报文。

跨子网报文转发

在分布式网关场景下,Leaf1、Leaf2作为VXLAN的三层网关,进行VXLAN封装及三层转发,Spine仅作为VXLAN报文转发节点,不进行VXLAN报文的处理。

image

 

以Host1向Host2发送报文为例介绍报文在VXLAN网络中的转发流程:

  1. 因为Host1与Host2属于不同网段,所以Host1会先将报文发送给网关(Leaf1),交由网关进行转发。
  2. Leaf1接收到来自Host1的报文,根据报文的目的地址判断需要进行三层转发。Leaf1根据报文入端口或VLAN信息判断其所属的BD,找到绑定该BD的L3VPN实例,然后在该L3VPN实例下查找路由表。在分布式网关场景下,网关Leaf1会学习到Host2的主机路由。Leaf1根据路由获取三层VNI、下一跳等信息,然后进行VXLAN封装,将报文转发至Leaf2。
  3. 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

posted @ 2025-12-05 13:22  hopeccie  阅读(60)  评论(0)    收藏  举报