VXLAN
RFC定义了VLAN扩展方案VXLAN(Virtual eXtensible Local Area Network
,虚拟扩展局域网)。VXLAN采用MAC in UDP
封装方式,是NVO3(Network Virtualization over Layer 3
)中的一种网络虚拟化技术。
VXLAN早已被广泛应用于数据中心网络。随着园区网络的业务需求越来越灵活、园区网络虚拟化的需求及网络自动化的需求越来越强烈,VXLAN开始进入园区网络,搭配园区SDN控制器实现更多用户价值。
1. 网络虚拟化技术背景
虚拟化技术具有降低IT成本、提高业务部署灵活性和降低运维成本等优势。越来越多的企业选择在数据中心或园区IT设施使用云计算或虚拟化技术。
在企业选择虚拟化架构后,业务将以虚拟机方式部署于服务器集群中。
网络需求:二层扩展
虚拟化/云计算集群内允许虚拟机任意迁移,导致相同业务(相同网段)虚拟机可能运行在不同的服务器,或同一个虚拟机(一个IP)先后运行在不同的服务器(物理位置)。
物理服务器可能分布在地理位置跨度非常大的机房,因此需要使用三层进行互联。
网络需求:多租户隔离
云化场景一般支持多租户,即不同用户共享物理资源。这对网络提出两个需求,租户间隔离和租户内互访。
- 租户间隔离:租户可能配置相同的MAC和IP地址,需要考虑物理网络承载隔离的问题,并且存在海量的用户需要进行隔离。
- 租户内互访:租户内相同网段能够直接进行二层通信,即便处于不同物理位置的机房中。
传统网络的问题
- 虚拟机规模受设备表项规格限制
服务器虚拟化后,VM的数量比原有的物理机发生了巨大的增长,而接入侧二层设备的MAC地址表规格较小,无法满足快速增长的VM数量。
- 网络隔离能力限制
VLAN Tag只有12 bit。对于大型虚拟化云计算服务的场景而言,租户数目远大于VLAN可用个数。传统二层网络中的VLAN无法满足网络动态调整的需求。
- 虚拟机迁移范围受限
虚拟机迁移必须发生在一个二层网络中。传统的二层网络,将虚拟机迁移限制在了一个较小的局部范围内。
2. VXLAN的基本概念
VXLAN在本质上是一种VPN技术,能够在任意路由可达的物理网络(Underlay网络)上叠加二层虚拟网络(Overlay网络),通过VXLAN网关之间的VXLAN隧道实现VXLAN网络内部的互通,同时,也可以实现与传统的非VXLAN网络的互通。
VXLAN通过采用MAC in UDP封装来延伸二层网络,将以太报文封装在IP报文之上,通过路由在网络中传输,无需关注虚拟机的MAC地址。且三层网络无网络结构限制,具备大规模扩展能力。通过路由网络,虚拟机迁移不受网络架构限制。
VXLAN解决传统网络遇到的问题
- 虚拟机规模受网络规格限制
VXLAN将虚拟机发出的数据包封装在UDP中,并使用物理网络的IP、MAC地址作为外层头进行封装,对网络只表现为封装后的参数。
除VXLAN网络边缘设备,网络中的其他设备不需要识别虚拟机的MAC地址,减轻了设备的MAC地址学习压力,提升了设备性能。
- 网络隔离能力限制
VXLAN引入了类似VLAN ID的用户标识(VNI),由24 bit组成,支持多达16 M的VXLAN段的网络隔离,对用户进行隔离和标识不再受到限制,可满足海量租户。
- 虚拟机迁移范围受网络架构限制
对于具有同一网段IP地址的VM而言,即使其物理位置不在同一个二层网络中,但从逻辑上看,相当于处于同一个二层域。即VXLAN技术在三层网络之上,构建出了一个虚拟的大二层网络。
VXLAN在园区网中的应用
通过引入虚拟化技术,在园区网络中基于一张物理网络创建多张虚拟网络(Virtual Network,VN)。不同的虚拟网络应用于不同的业务,例如办公、视讯、安防等。
VXLAN的价值
技术选择 | Underlay网络 | Overlay网络 | 配置及管理 | 用户信息携带 | 组网要求 |
---|---|---|---|---|---|
VLAN | L2 | L2 | 命令行或基于控制器 | 无 | 设备广泛支持 |
MPLS VPN | L3 | L2/L3 | 运营商级别的技术要求 | 无 | 需端到端支持MPLS |
VXLAN | L2/L3 | L2/L3 | 命令行或基于控制器 | 可以 | 隧道端节点支持VXLAN即可 |
- VXLAN可构建在任意复杂的三层网络之上。
- 支持三层虚拟网络。
- 搭配SDN控制器实现集中部署及自动化,已有成功实践。
华为设备上VXLAN的报文格式
VXLAN的基本概念
1.NVE-Network Virtualization Edge
是实现网络虚拟化功能的网络实体,可以是硬件交换机也可以是软件交换机。
NVE在三层网络上构建二层虚拟网络,是运行VXLAN的设备。图中SW1和SW2都是NVE。
2.VTEP-VXLAN Tunnel Endpoints
VTEP是VXLAN隧道端点,位于NVE中,用于VXLAN报文的封装和解封装。
VXLAN报文(其外层IP头部)中源IP地址为源端VTEP的IP地址,目的IP地址为目的端VTEP的IP地址。
3.VNI(VXLAN Network Identifier) and BD(Bridge Domain)
VNI
- 类似VLAN ID,用于区分VXLAN段。不同VXLAN段的虚拟机不能直接二层相互通信。
- 一个租户可以有一个或多个VNI,VNI长度为24 bit,支持多达16 M的租户。
BD
- 类似传统网络中采用VLAN划分广播域,在VXLAN网络中一个BD就标识一个大二层广播域。
- VNI以1:1方式映射到广播域BD,同一个BD内的终端可以进行二层互通。
BD是华为独有的概念,只在本地有效,主要用来替换VLAN,是为了解决VLAN ID最大只能到4096的问题
4.VAP-Virtual Access Point
实现VXLAN的业务接入。
VAP有两种配置方式,二层子接口方式或者VLAN绑定方式:
- 二层子接口方式接入,例如在SW1创建二层子接口关联BD 10,则这个子接口下的特定流量会被注入到BD 10。
- VLAN绑定方式接入,例如在SW2配置VLAN 10与广播域BD 10关联,则所有VLAN10的流量会被注入到BD 10。
传统网络的流量进入VXLAN网络之后,通过二层子接口或者VLAN绑定的方式,与BD进行绑定,在BD中会指定VXLAN VNI,实现从传统的VLAN网络到VXLAN网络的映射。
5. Border and Edge
Edge:VXLAN网络的边缘接入设备,传统网络的流量由此进入VXLAN网络。
Border:VXLAN网络和外部网络通信的节点,用于外部流量进入VXLAN网络或VXLAN内部流量访问外部,一般连接具有三层转发能力的设备(如Router、Firewall)。
6. L2网关和L3网关
二层(L2)网关:实现流量进入VXLAN网络,也可用于同一VXLAN网络内终端的同子网通信。
三层(L3)网关:用于VXLAN网络内终端的跨子网通信以及终端对外部网络(非VXLAN网络)的访问。
7. VBDIF
类似于传统网络中采用VLANIF实现不同广播域互通,在VXLAN中引入了VBDIF的概念。
VBDIF接口在VXLAN三层网关上配置,是基于BD创建的三层逻辑接口。
通过VBDIF接口可实现不同网段的用户通过VXLAN网络通信,及VXLAN网络和非VXLAN网络间的通信,也可实现二层网络接入三层网络。
8. 分布式与集中式网关
集中式网关
L3网关部署在一台设备上,所有跨子网的流量都通过该设备转发,实现流量的集中管理。
- 优点:跨子网流量集中管理,简化网关部署和管理。
- 缺点:转发路径并非最优。ARP表项规格瓶颈:由于采用集中式网关,网关上需要维护大量通过VXLAN接入网络的终端其ARP。
分布式网关
VTEP设备既是L2网关,又是L3网关。非网关节点对VXLAN隧道不感知,仅作为VXLAN报文的转发节点。
- 优点:VTEP节点只学习连接在本节点下终端的ARP表项,解决了集中式三层网关带来的ARP表项瓶颈问题,网络规模扩展能力强。
- 缺点:相对集中式部署配置、实现复杂,部署工程量大。
3. VXLAN的工作原理
3.1 隧道建立
VXLAN隧道由一对VTEP确定,报文在VTEP设备进行封装之后在VXLAN隧道中依靠路由进行传输。只要VXLAN隧道的两端VTEP是三层路由可达的,VXLAN隧道就可以建立成功。
根据VXLAN隧道的创建方式将VXLAN隧道分为以下两种:
- 静态隧道:通过用户手工配置本端和远端的VNI、VTEP IP地址和头端复制列表(head-end peer-list)来完成。
- 动态隧道:通过BGP EVPN(Ethernet VPN,以太网虚拟私有网络)方式动态建立VXLAN隧道。在VTEP之间建立BGP EVPN对等体,然后对等体之间利用BGP EVPN路由来互相传递VNI和VTEP IP地址信息,从而实现动态地建立VXLAN隧道。
静态VXLAN隧道
静态VXLAN隧道并不是一个有状态的隧道(如IPsec VPN),只是数据传输时的隧道封装,类似于GRE VPN。
头端复制列表中的地址,即进行隧道封装传输时可封装的隧道目的地址。
3.2 MAC表项
VXLAN实现的是在Overlay网络中进行二层转发,转发单播数据帧依赖的依旧是MAC地址表项。
VTEP接收到BD内来自本地的数据帧,将数据帧的源MAC地址添加到该BD的MAC地址表中,出接口为收到数据帧的接口。
该表项用于指导发往本VTEP下连接终端的数据帧的转发。
<S1>display mac-address bridge-domain 10
-------------------------------------------------------------------------------
MAC Address VLAN/VSI/BD Learned-From Type
-------------------------------------------------------------------------------
0000-0000-000a -/-/10 GE1/0/1.10 dynamic
<S1>display mac-address bridge-domain 20
-------------------------------------------------------------------------------
MAC Address VLAN/VSI/BD Learned-From Type
-------------------------------------------------------------------------------
0000-0000-000b -/-/20 GE1/0/1.20 dynamic
MAC地址学习
转发属于远端VTEP下所连接设备的数据帧,需要先学习到远端设备的MAC地址。
该过程与传统MAC地址表形成过程类似,依赖于主机之间的报文交互,一般通过ARP报文交互形成MAC地址表项。
PC1与PC2通信过程如下:
- PC1欲与PC2通信,PC1发送ARP请求广播帧,试图请求PC2的MAC地址。
- SW1收到该帧后,根据VAP信息判断出流量所属的BD ID、需进入的VXLAN隧道及对应的VNI;同时学习PC1的MAC地址,将其与该BD ID、接收帧的接口等绑定。
- SW1对ARP请求广播帧进行VXLAN封装,按头端复制列表进行转发。
- SW2收到VXLAN报文后,将其解封装,得到原始数据帧;同时学习PC1的MAC地址,将该地址与SW1的VTEP地址进行绑定。
- SW2将该ARP帧在本地广播域内泛洪。然后,PC2收到了该帧并学习到了PC1的ARP信息。
- PC2发送单播的ARP回应。
- SW2此时已经拥有PC1的MAC地址表项,因此将会单播转发,并且学习PC2的源MAC地址到MAC地址表项中。
- SW2为该ARP响应加上VXLAN封装,发送到远端VTEP 1.1.1.1。
- SW1收到VXLAN报文之后解封装,将PC2的源MAC地址记录到MAC地址表,出接口为远端VTEP。
- SW1将数据帧转发给PC1。
3.3 报文转发
已知单播
根据上图:
- PC1发送单播帧给PC2。
- SW1在MAC地址表中查询PC2的MAC地址,找到匹配的表项。
- SW1将报文进行VXLAN封装,然后增加新的IP包头,报文的目的IP地址为远端VTEP SW2的地址2.2.2.2。
- SW2在MAC地址表中查询PC2的MAC地址,找到匹配的表项。
- SW2将报文转发给PC2。
BUM流量
传输BUM(Broadcast、Unknown、Multicast)流量时,VTEP会将流量复制多份发送到头端复制列表中的对端VTEP,从而在Overlay网络中实现泛洪转发的效果。
跨子网
- PC1希望与PC2进行通信,本地计算发现对端与自身不在同一个子网,此时将报文发送给网关。
- PC1发往PC2的数据帧,目的MAC为:00AB-09FF-1111(网关MAC地址),SW1收到之后执行L2查表发现出接口为远端VTEP(即L3网关),将报文加上VXLAN头部封装(VNI =1000)之后发往SW3。
- SW3收到报文之后解VXLAN封装发现,内部原始数据帧其目的MAC为:00AB-09FF-1111,为自身接口VBDIF 10的MAC地址,此时需要执行L3查表转发。
- SW3查找路由表,发现目的IP:192.168.2.1,与本地接口VBDIF 20产生的直连路由相匹配,查找ARP表项确定报文目的MAC,再查找MAC地址表确定报文的出接口。SW3中前往192.168.2.1所对应MAC地址的出接口为远端VTEP 2.2.2.2,将报文加上VXLAN封装,送往SW2。
- SW2收到报文之后解VXLAN封装发现目的MAC并非自身任何接口的MAC地址,执行L2查表转发,依据MAC地址表将报文从本地接口转发出去。
4. BGP EVPN
对于静态VXLAN,该方案没有控制平面,是通过数据平面的流量泛洪进行VTEP发现和主机信息(包括IP地址、MAC地址、VNI、网关VTEP IP地址)学习的,这种方式导致VXLAN网络存在很多泛洪流量。为了解决这一问题,VXLAN引入了BGP EVPN作为控制平面,通过在VTEP之间交换BGP EVPN路由实现VTEP的自动发现、主机信息相互通告等,从而避免了不必要的数据流量泛洪。
静态方式配置VXLAN的问题:
- N台设备建立VXLAN隧道,手工配置方式最高达到 N*(N-1)/2 次头端列表配置。
- 静态VXLAN隧道只有数据转发平面。
- 只能通过ARP广播的方式学习远端MAC地址。
4.1 基本概念
BGP EVPN的引入,是为了作为控制面协议,具体的控制过程如下:
- 设备使能BGP EVPN,建立BGP EVPN对等体关系。
- 设备之间通过BGP EVPN路由通告,完成VXLAN控制面的相关工作。
- VXLAN隧道通过BGP EVPN自动建立,转发表项通过BGP EVPN动态刷新。
BGP EVPN通过扩展BGP协议新定义了几种BGP EVPN路由(在MP_REACH_NLRI属性中新定义了几种NLRI,称作EVPN NLRI)。
这些BGP EVPN路由可以用于传递VTEP地址和主机信息,因此BGP EVPN应用于VXLAN网络中,可以使VTEP发现和主机信息学习从数据平面转移到控制平面。
- Type 2路由(MAC/IP路由):用于主机MAC地址/ARP/IP路由通告。
- Type 3路由(Inclusive Multicast路由):用于传递二层VNI和VTEP IP地址信息,实现VTEP的自动发现和VXLAN隧道的动态建立,实现BUM报文转发。
- Type 5路由(IP前缀路由):用于主机ARP/IP路由通告,外部网络路由通告。
EVPN NLRI
EVPN NLRI通过路径属性MP_REACH_NLRI携带,地址族标识符(AFI)为25,代表L2VPN,子地址族标识符(SAFI)为70。
Path Attribute - MP_REACH_NLRI |
---|
Flags:Optional, Non-transitive |
Type Code: MP_REACH_NLRI (14) |
Length |
Address family identifier (AFI): Layer-2 VPN (25) |
Subsequent address family identifier (SAFI): EVPN (70) |
Next hop network address (4 Byte) |
Route Type (1 octet) |
Length (1 octet) |
Route Type specific (variable) |
Extended Community
BGP EVPN与MPLS VPN类似,为了控制路由的发送、接收,BGP EVPN同样存在VPN实例的概念(EVPN实例),与传统的IP VPN实例相同,EVPN实例存在RD和RT值,传递路由时使用扩展团体属性携带EVPN实例RT值。
除了RT值之外,为了支持一些特性,BGP EVPN在扩展团体属性中增加了一些新子类型:MAC Mobility、EVPN Router’s MAC Extended Community。
Path Attribute - EXTENDED_COMMUNITIES |
---|
Flags:Optional, Transitive |
Type Code: EXTENDED_COMMUNITIES(16) |
Length |
RT(Route Target) |
MAC Mobility |
EVPN Router's MAC Extended Community |
EVPN instance
EVPN实例与BD进行绑定,BD下的MAC地址表项会通过BGP EVPN路由进行传递,在传递时会携带BD绑定的EVPN实例ERT值,对端收到之后对比本地EVPN实例的IRT值,将EVPN路由放入对应的EVPN实例路由表,同时解析EVPN路由表获取MAC地址表项,放入本端与该EVPN实例绑定的BD的MAC地址表中。
4.2 BGP EVPN路由
Type2路由
Type 2路由(MAC/IP路由):主要用于MAC地址通告、ARP信息通告以及主机IP路由通告。
Route Distinguisher(8 Byte) | EVPN实例下设置的RD(Route Distinguisher)值 |
Ethernet Segment Identifier(10 Byte) | 当前设备与对端连接定义的唯一标识 |
Ethernet Tag ID(4 Byte) | 当前设备上实际配置的VLAN ID |
MAC Address Length(1 Byte) | 此路由携带的主机MAC地址的长度 |
MAC Address(6 Byte) | 此路由携带的主机MAC地址 |
IP Address Length(1 Byte) | 此路由携带的主机IP地址的掩码长度 |
IP Address(0或4或16 Byte) | 此路由携带的主机IP地址 |
MPLS Label1(3 Byte) | 此路由携带的二层VNI |
MPLS Label2(0或3 Byte) | 此路由携带的三层VNI |
Type 2类路由描述
- 主机MAC地址通告
Route Distinguisher |
Ethernet Segment Identifier |
Ethernet Tag ID |
MAC Address Length = MAC地址长度 |
MAC Address = MAC地址 |
IP Address Length |
IP Address |
MPLS Label1 = VNI(二层) |
MPLS Label2 |
相同子网主机互访场景下进行主机MAC地址通告,包含主机MAC信息和二层VNI。
- 主机ARP通告
Route Distinguisher |
Ethernet Segment Identifier |
Ethernet Tag ID |
MAC Address Length = MAC地址长度 |
MAC Address = MAC地址 |
IP Address Length = IP地址长度 |
IP Address = IP地址 |
MPLS Label1 = VNI(二层) |
MPLS Label2 |
集中式网关部署场景下通告ARP类型路由,包含主机IP信息、MAC信息和二层VNI。
- 主机IP路由通告
Route Distinguisher |
Ethernet Segment Identifier |
Ethernet Tag ID |
MAC Address Length = MAC地址长度 |
MAC Address = MAC地址 |
IP Address Length = IP地址长度 |
IP Address = IP地址 |
MPLS Label1 = VNI(二层) |
MPLS Label2 = VNI(三层) |
分布式网关部署不同子网互访场景下,进行IRB类型路由通告。它包括主机MAC信息、IP信息、二层VNI和三层VNI。
主机MAC地址通告
同子网主机MAC地址通告:
- PC1产生数据流量并发往SW1。
- SW1获知了PC1的MAC地址,它在MAC地址表中创建一个表项,记录该MAC地址、BD ID及入接口。
- SW1根据该表项生成BGP EVPN路由并发送给SW2。该路由携带本端EVPN实例的RT值(扩展团体属性)以及Type 2路由( MAC路由)。在MAC路由中,PC1的MAC地址存放在MAC Address字段中,二层VNI存放在MPLS Label1字段中。
- SW2收到SW1发来的BGP EVPN路由后,首先检查该路由携带的RT(类似MPLS VPN中的RT的概念),如果与本端EVPN实例的入站RT相等,则接收该路由,否则丢弃。在接收该路由后,SW2获得PC1的MAC地址、BD ID和SW1上VTEP IP地址(MP_REACH_NLRI中Next hop network address字段携带)的对应关系,并在本地的MAC表中生成MAC表项,其出接口需根据下一跳进行迭代,最终迭代结果是指向SW1的VXLAN隧道。
主机ARP通告
MAC/IP路由可以同时携带主机MAC地址+主机IP地址,因此该路由可以用来在VTEP之间传递主机ARP表项,实现主机ARP通告。其中,MAC Address和MAC Address Length字段为主机MAC地址,IP Address和IP Address Length字段为主机IP地址。此时的MAC/IP路由也称为ARP类型路由。主机ARP通告主要用于以下两种场景:
- ARP广播抑制。当三层网关学习到其子网下的主机ARP时,生成主机信息(包含主机IP地址、主机MAC地址、二层VNI、网关VTEP IP地址),然后通过传递ARP类型路由将主机信息同步到二层网关上。这样当二层网关再收到ARP请求时,先查找是否存在目的IP地址对应的主机信息,如果存在,则直接将ARP请求报文中的广播MAC地址替换为目的单播MAC地址,实现广播变单播,达到ARP广播抑制的目的。
- 分布式网关场景下的虚拟机迁移。当一台虚拟机从当前网关迁移到另一个网关下之后,新网关学习到该虚拟机的ARP(一般通过虚拟机发送免费ARP实现),并生成主机信息(包含主机IP地址、主机MAC地址、二层VNI、网关VTEP IP地址),然后通过传递ARP类型路由将主机信息发送给虚拟机的原网关。原网关收到后,感知到虚拟机的位置发生变化,触发ARP探测,当探测不到原位置的虚拟机时,撤销原位置虚拟机的ARP和主机路由。
主机ARP通告主要在VXLAN集中式网关+BGP EVPN场景下使用,在BGP EVPN中向对等体通告ARP路由或者IRB路由为互斥选项,只能配置其中一种路由对外发布,一般在VXLAN集中式网关+BGP EVPN场景下选择发布ARP路由,而且VXLAN分布式网关+BGP EVPN场景下选择发布IRB路由。
主机IP通告
分布式网关下的跨子网通信
分布式网关组网中VTEP设备既是L2网关,又是L3网关。在该组网下跨子网通信的实现方式并不唯一,根据接收报文的VTEP(Ingress VTEP)处理方式不同,可以划分为:非对称IRB转发(Asymmetric Integrated Routing and Bridging)、对称IRB转发(Symmetric Integrated Routing and Bridging)。
VLANIF实现VLAN跨子网转发细节回顾:
- PC1通过本地IP地址、本地掩码、对端IP地址进行计算,发现目的设备PC2与自身不在同一个网段,判断该通信为三层通信,将去往PC2的流量发给网关。PC1发送的数据帧:源MAC = MAC1,目的MAC = MAC2。
- 交换机收到PC1发送的去往PC2的报文,经解封装发现目的MAC为VLANIF 10接口的MAC地址,则认为该报文是发给交换机本身的,所以将报文交给路由模块继续处理。
- 路由模块解析发现目的IP为192.168.20.2,非本地接口存在的IP地址,因此需要对该报文三层转发。查找路由表后,匹配中VLANIF 20产生的直连路由。
- 因为匹配的为直连路由,说明已经到达最后一跳,所以交换机在ARP表中查找192.168.20.2,获取192.168.20.2的MAC地址,交由交换模块重新封装为数据帧。
- 交换模块查找MAC地址表以明确报文出接口、是否需要携带VLAN Tag。最终交换模块发送的数据帧:源MAC = MAC2,目的MAC = MAC3,VLAN Tag = None。
- 非对称IRB转发
非对称IRB转发:Ingress VTEP同时执行L3、L2查表转发,Egress VTEP只需要进行L2查表、转发,因为Ingress、Egress所执行操作不一致,被称为非对称转发。
在非对称IRB转发过程中,VTEP之间不会传递主机IP路由,即VTEP1、VTEP2之间不会传递本地下连PC生成的32位主机路由(由ARP信息生成),所以在第2步中VTEP1查找路由表,只能匹配到由VBDIF 10生成的直连路由。
在第5步中,VTEP2解封装VXLAN报文,目的MAC不是该BD所对应的本地VBDIF接口MAC地址,所以此时VTEP会执行L2查表,根据报文携带的VNI查找对应的BD的MAC地址表项,之后进行L2转发。
- 对称IRB转发
对称IRB转发:Ingress VTEP、Egress VTEP都执行L3查表转发。
相比较于非对称IRB转发,新增了一个IP VPN实例以及其所绑定的L3 VNI概念(非对称IRB转发时VTEP之间传输的报文其VXLAN头部中VNI值为L2 VNI),VBDIF接口需要绑定IP VPN实例,此时该VBDIF接口的路由学习、数据转发都被限制在该IP VPN实例中,与MPLS VPN类似。
EVPN RT、IP VPN RT
新增IP VPN实例之后,BGP EVPN在传递Type 2路由时携带的RT值依旧是EVPN RT值,只是对端收到路由之后的处理行为存在区别:
- 检查该路由携带的RT,如果与本端EVPN实例的Import RT相同,则接收该路由。EVPN实例获取到IRB类型路由后,还能提取到其中包含的ARP类型路由,用于主机ARP通告。
- 检查该路由携带的RT,如果与本端IP VPN实例的Import RT(EVPN)相同,则接收该路由。然后,VPN实例获取到该路由携带的IRB类型路由,从中提取的主机IP地址、三层VNI,在其路由表中保存主机IP路由,并根据路由的下一跳迭代出接口,最终迭代结果是指向VTEP的VXLAN隧道。
只有当路由携带的RT值与EVPN IRT、IP VPN IRT(EVPN)都不相同时,该路由才会被丢弃。
主机IP路由通告 (IRB路由)
通过EVPN Router’s MAC Extended Community这一扩展团体属性子属性,BGP EVPN传递VTEP自身的Router MAC,该MAC地址为NVE接口的MAC地址。
通信过程
对称IRB转发时,VTEP之间会传递由ARP生成的32位主机路由,因此VTEP1在进行路由查表时会匹配中由VETP2传递过来的32位主机路由,即便VTEP1上存在VBDIF 10,存在对应的直连路由,此时根据最长匹配原则依旧会根据32位主机路由进行转发。
在第4步中,VTEP2解封装VXLAN报文,发现内层数据帧的目的MAC地址为VTEP2的Router MAC(MAC B),判断自身需要进行L3路由查表转发,根据VNI 1000找到对应IP VPN实例,在该IP VPN实例路由表中查找对应的路由,发现匹配中VBDIF 10接口的直连路由,之后查找本地MAC地址表项,将报文发送给连接在本地的PC2。
Type3路由
该类型路由在VXLAN控制平面中主要用于VTEP的自动发现和VXLAN隧道的动态建立。
作为BGP EVPN对等体的VTEP,通过Inclusive Multicast路由互相传递二层VNI和VTEP IP地址信息。
其中,Originating Router’s IP Address字段为本端VTEP IP地址,MPLS Label字段为二层VNI。
NLRI格式 | Route Distinguisher(8 Byte) | EVPN实例下设置的RD值 |
Ethernet Tag ID(4 Byte) | 当前设备上的VLAN ID。在此路由中为全0 | |
IP Address Length(1 Byte) | 此路由携带的本端VTEP IP地址的掩码长度 | |
Originating Router's IP Address(4 or 16 Byte) | 此路由携带的本端VTEP IP地址 | |
PMSI属性 | Flags(1 Byte) | 在VXLAN场景中,该字段没有实际意义 |
Tunnel Type(1 Byte) | 在VXLAN场景中,支持的类型为“6:Ingress Replication” | |
MPLS Label(1 Byte) = 二层VNI | 此路由携带的二层VNI | |
Tunnel Identifier(变长) | 在VXLAN场景中,该字段也是本端VTEP IP地址 |
建立VXLAN隧道
VTEP通过Type 3路由互相传递二层VNI和VTEP IP地址信息。如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道。同时,如果对端VNI与本端相同,则创建一个头端复制列表,用于后续BUM报文转发
Type5路由
该类型路由的IP Prefix Length和IP Prefix字段既可以携带主机IP地址,也可以携带网段地址。
当携带主机IP地址时,该类型路由在VXLAN控制平面中的作用与IRB类型路由是一样的,主要用于分布式网关场景中的主机IP路由通告。
当携带网段地址时,通过传递该类型路由,可以实现VXLAN网络中的主机访问外部网络。
Route Distinguisher(8 Byte) | EVPN实例下设置的RD值 |
Ethernet Segment Identifier(10 Byte) | 当前设备与对端连接定义的唯一标识 |
Ethernet Tag ID(4 Byte) | 当前设备上实际配置的VLAN ID |
IP Prefix Length(1 Byte) | 此路由携带的IP前缀掩码长度 |
IP Prefix (4 or 16 Byte) | 此路由携带的IP前缀 |
GW IP Address (4 or 16 Byte) | 默认网关地址,在VXLAN场景中没有实际意义 |
MPLS Label(3 Byte) | 此路由携带的三层VNI |
对于VXLAN外部网络,VTEP可以通过Type 5类路由将外部路由通告到整个VXLAN网络中,用于指导VXLAN内部主机访问外部网络。
4.3 BGP EVPN特性
ARP广播抑制
BGP EVPN的Type 2路由使得VTEP可以不依赖主机之间的通信过程完成MAC地址表的学习,但是主机间的ARP信息依旧需要在VXLAN Overlay中进行泛洪转发,这会占用大量的网络资源。
为此可以通过BGP EVPN路由实现ARP广播抑制功能,减少广播流量。
主机信息收集
ARP广播抑制功能的实现依赖于ARP广播抑制表,该表项的形成依赖于BGP EVPN携带的Type 2路由(IRB路由、主机ARP通告)。
默认情况下L3网关不会由本地的ARP信息生成BGP EVPN路由,需要手动使能BGP EVPN主机信息收集功能。之后VTEP会依据ARP信息生成IRB路由。
- 开启BGP EVPN主机信息收集,生成IRB路由。
- 通过BGP EVPN Type 2 IRB路由传递ARP信息。
- VTEP2使用IRB路由生成IRB主机信息表。
本地ARP代理
全网开启BGP EVPN主机信息收集功能之后,L3网关上将学习到全部主机的32位主机路由,这使得L3网关在转发属于同一个BD之间的流量时完全可以依赖主机路由进行三层IRB对称转发。
为此可以在L3网关的VBDIF接口上开启本地ARP代理,VBDIF接口会响应下连主机对同网段IP地址的ARP请求,之后对该同网段IP的访问可以由L3网关进行三层转发完成。
通过本地ARP代理机制,ARP报文的传递将会被抑制在本地VTEP之下,同时减少了VTEP之间的不必要流量交互。
分布式网关
在开启本地代理ARP的场景下,VTEP只需要维护本地的ARP表项,其他VTEP通过BGP EVPN路由传递的ARP信息在转发时并不会被用到,此时VTEP无需维护从其他VTEP学习到的ARP表项。
开启分布式网关之后,VTEP只处理收到的用户侧主机发送的ARP报文,删除已经学到的网络侧的ARP表项。
一般将不同VTEP上相同编号的VBDIF的接口MAC地址配置为相同的MAC地址,开启分布式网关之后,VBDIF虽然具有相同的IP地址、MAC地址,但是并不会上报ARP冲突,并且主机、VM迁移到不同的VTEP下时,无需重新进行网关的ARP解析。
MAC Mobility
MAC Mobility扩展属性用于当一个主机/VM从一个VTEP启动到另外一个VTEP之下时,对外宣告该主机的位置移动。
- VTEP1学习到VM1的ARP信息,生成IRB路由对外通告。通告的BGP EVPN路由扩展团体属性:MAC Mobility的序列号为0。
- VM1移动到VTEP2下。
- VTEP2通过ARP信息感知到VM1,生成一条新的IRB路由,该路由与VTEP1传递的路由相同。
- VTEP2通过BGP EVPN对外通告VM1的新IRB路由,此时扩展团体属性:MAC Mobility的序列号为1。
- VTEP1收到BGP路由更新,通过MAC Mobility携带序列号意识到下连VM已经发生了迁移,对外发送BGP Update报文撤销之前发送的路由更新。