一、说明
- 本篇主要描述BGP EVPN VxLAN VNI间(同租户,不同VNI)互通的控制层面操作,同时也描述了BGP EVPN VxLAN相同VNI内主机互通的过程;
- 本篇也描述了数据层面的转发过程;
- 本篇网络拓扑和配置信息全部基于前两篇“4 基于BGP EVPN实现Cisco VxLAN实验 & 分布式任播网关”和“5 基于BGP EVPN实现Cisco VxLAN控制层面之MAC学习”;
- 本篇新加了ARP抑制配置,另外与之前不同,本篇VRF名称由"Tenant-A"变更为"ta"。
二、拓扑
image.png
三、控制层面操作
3.1 MAC-IP学习过程
- 本节详细介绍了本端VTEP交换机如何从终端主机生成的免费ARP消息中了解其本地连接的主机的IP地址,以及Host Mobility Manager(HMM-主机移动管理器)组件如何将信息装载进相关VNI的L2RIB中(保留MAC-IP地址信息的L2RIB数据库也被称为IP VRF);
- 本节展示了如何使用BGP EVPN Route Type 2(MAC/MAC-IP通告路由)将路由从L2RIB导出到BGP Loc-RIB,再通过BGP Adj-RIB-Out通告给远端VTEP交换机;
- 本节展示了路由信息如何最终到达远端VTEP的L2RIB中。
3.1.1 本端VTEP的ARP学习
- PC1启动后,它会发送Gratuitous ARP(GARP-免费ARP)来验证其IP地址的唯一性,VTEP交换机Leaf-1从接口E1/3接收到GARP消息,并将来自PC1 MAC的MAC-IP地址绑定信息和来自GARP有效载荷的PC1 IP字段装载进ARP表中;
- 下方展示了VRF ta的ARP表。在NX-OS中,本地学习的ARP条目的默认老化时间为1500秒,比MAC地址老化计时器短300秒。当ARP老化计时器超时后,交换机会通过向主机发送ARP请求来检查主机的存在。如果主机响应ARP请求,则交换机将重置老化计时器。如果主机未响应ARP请求,则该条目将从ARP表中删除,但在发送删除消息之前,会在BGP EVPN表中额外保留1800秒(MAC老化计时器)。MAC地址老化定时器应大于ARP老化定时器,这是因为ARP刷新进程还将更新MAC表,并且可以避免不必要的泛洪。
3.1.2 本端VTEP的MAC-IP
- 主机移动管理器组件(HMM)将MAC-IP信息作为本地路由进行学习;
- HMM将信息装载进本地主机数据库中,并将MAC-IP信息转发到L2RIB;
- 本地主机数据库包含有关IP地址(/32)、MAC地址、SVI和本地接口的信息。L2RIB中具有相同的信息(除了没有SVI外);
- 下方展示了Leaf-1上部分MAC-IP的学习过程;
- 下方展示了Leaf-上VRF ta的本地主机数据库中与PC1的MAC-IP相关绑定信息;
- 下方表明了有关L2RIB下IP VRF中PC1的MAC-IP的信息是由HMM组件产生的
3.1.3 本端VTEP的BGP路由导出
- VTEP交换机Leaf-1将来自L2RIB的MAC-IP路由装载进BGP Loc-RIB中;
- MAC-IP信息被作为单独的BGP EVPN Route Type 2更新进行通告(使用MAC-only和MAC IP的专用NLRI更新),MAC-only和MAC-IP路由更新携带的NLRI信息的区别在于:MAC-IP通告除了携带主机的MAC地址外,还携带了主机的IP地址、掩码信息以及MPLS标签栈2的信息,该信息定义了VRF ta中使用的L3VNI;
- 另外MAC-IP更新消息中还有两个扩展团体属性,包含RT 65234:13960和路由器MAC 5e00.0000.0007;
- 下方展示了VTEP交换机Leaf-1如何接收MAC-IP路由信息并将其安装到RIB和BGP Loc-RIB中的内部过程,掩码长度包括RD(8×8bit)+MAC地址(6×8bit)+IP地址(4×8bit)=18个8bit即144bit;
- 下方展示有关PC1的MAC-IP NLRI的BGP Loc-RIB;
- 上方输出中的前缀信息解释可参考下表;
前缀信息 | 说明 | 备注 |
2 | BGP EVPN Route-Type 2 | MAC/MAC-IP路由通告 |
0 | Ethernet Segment Identifier (ESI) | 全部置零=单宿主站点 |
0 | Ethernet Tag Id | EVPN路由必须使用0 |
48 | MAC地址长度 | / |
0050.7966.6806 | MAC地址 | / |
32 | IP地址长度 | / |
172.16.1.1 | IP地址 | / |
/272 | MAC-IP VRF NLRI的长度(以bit为单位) | RD(8×8bit) + MAC address(6×8bit) + L2VNI Id(3×8bit) + L3VNI Id(3×8bit) + IP address(4×8bit) + ESI(10×8bit) = 34×8bit即272bits |
- 上方输出中的L2VNI信息显示在“Received label”字段中,另外还有三个BGP扩展团体属性;
BGP扩展团体 | 说明 | 备注 |
RT:65234:10010 | 用于导出/导入策略(L2VNI) | VNI 10010对应VLAN 10 |
RT:65234:13960 | 用于导出/导入策略(L3VNI) | VNI 13960对应VLAN 3960 |
ENCAP:8 | 定义数据层面的封装类型为VxLAN | / |
Router MAC:5000.0003.0007 | 用于路由数据包的内层MAC头源地址 | 这是必要的,因为VxLAN为MAC in UDP封装机制,并且L3边界上的数据有效负载不携带源主机的MAC地址,所以使用RMAC。 |
3.1.4 远端VTEP的BGP路由导入
- VTEP交换机Leaf-2接收BGP EVPN MAC路由通告并将其装载进BGP Adj-RIB-In数据库中,并且无需进行任何修改;
- Leaf-2从BGP Adj-RIB-In数据库中将路由导入到BGP Loc-RIB,并通过最佳路径选择进程将其装载进L2RIB;
- 当远端VTEP交换机Leaf-2将路由从BGP Adj-RIB装载进BGP Loc-RIB时,它将根据其BGP RID:VLAN ID组合将RD更改为4.4.4.4:32777,此过程与MAC-only路由导入相同,并且基于相同的RT 65234:10010;
- 下方展示了内部导入过程,Leaf-2将接收到的MAC-IP路由装载进RD 3.3.3.3:32777的BGP Adj-RIB-In中,再将此路由导入到RD 4.4.4.4:32777的BGP Adj-RIB-In中,并装载进BGP Loc-RIB中,最后将其导入L2RIB中。请注意,下方输出还包含L3RIB的装载过程;
- 下方展示了Leaf-2上BGP-RIB(BRIB)的部分输出(Adj-RIB-In和Loc-RIB)。输出的上半部分描述了从Spine-1接收到的原始、未修改的NLRI,该NLRI装载在Adj-RIB-In中。输出的中间部分显示了已装载进BGP Loc-RIB中并且修改了RD值的相同NLRI,此NLRI基于RT 65234:10010实现路由的正确导入。输出的下半部分显示了与中间部分相同的NLRI(此NLRI与RD 4.4.4.4:3一同装载),它用于VNI间(L3VNI)的流量转发,基于在VRF Context中的配置自动生成的RT 65234:13960导入到相关的L3VNI Loc-RIB。
3.1.5 远端VTEP的IP VRF
- 远端VTEP Leaf-2会验证从NLRI找到的下一跳IP地址的可达性,HMM组件将MAC-IP路由装载进L2RIB中。这时本地拓扑ID为10(基于VLAN 10),路由信息的来源是BGP,下一跳接口信息指向VTEP交换机Leaf-1的NVE1接口绑定的源IP地址;
- 在此阶段,两个VTEP交换机在其L2RIB以及BGP表中都具有了PC1的MAC-IP信息,但是只有本端VTEP交换机Leaf-1才将MAC-IP绑定信息装载进ARP表中;
- 下方展示了Leaf-2上的部分MAC-IP学习过程;
- 下方表明了L2RIB中的MAC-IP信息是由BGP产生的;
- 经过以上阶段,两个VTEP交换机都具有了PC1的MAC-IP信息。
3.2 ARP抑制
- 章节3.1说明了如何在BGP EVPN VxLAN Fabric中传播MAC-IP地址信息。本节介绍了VTEP交换机的ARP抑制机制如何利用MAC-IP绑定信息来减少VxLAN Fabric中不必要的2层BUM(广播、未知单播、组播)流量。
3.2.1 配置Leaf交换机:启用ARP抑制
Leaf-1配置:
Leaf-2配置:
Leaf-3配置:
3.2.2 查看ARP抑制缓存
- 从启动PC1的阶段开始,当PC1开机后,PC1将GARP/ARP消息发送到网络,Leaf-1将MAC-IP绑定信息安装载进VRF ta的ARP表中,下方展示了Leaf-1的ARP表;
- 当在本端VTEP交换机上启用基于VNI的ARP抑制时,MAC-IP地址绑定信息也会从ARP表装载进本地ARP抑制缓存中,下方展示了Leaf-1的ARP抑制缓存表;
- 在远端VTEP交换机(Leaf-2)上启用ARP抑制后,ARP抑制缓存信息将从L2RIB中获取。下方展示了Leaf-2上关于PC1的ARP抑制缓存表;
3.2.3 抑制场景对比:
- 无抑制:当收到ARP请求报文时,本地所有ARP请求都发往VNI所关联的组播组,并且所有加入该组播组的VTEP交换机都会接收ARP请求消息,并将其转发到数据包VxLAN包头中VNI ID所定义的广播域的端口;
- ARP抑制:当收到ARP请求报文时,本地VTEP交换机检查请求的MAC-IP绑定信息是否存储在本地ARP抑制缓存中。如果检查通过,则本地交换机直接将ARP回复发送给请求者,而不会将ARP请求泛洪到网络中。如果ARP抑制缓存检查未命中,则将ARP请求泛洪到网络中(建议在Intra-VNI访问可达性测试之通过后再启用ARP抑制);
- ARP和未知单播抑制:在命中ARP抑制检查的情况下,其工作原理与ARP抑制相同。但是如果未命中,则会丢弃ARP请求,所以此特性要求VxLAN Fabric中不能有静默主机。
3.3 主机路由通告:VNI间路由(L3VNI)
上篇和本篇前半部分介绍了终端主机的MAC和MAC-IP信息如何在VxLAN Fabirc中传播以及如何利用这些信息实现VNI内交换和MAC地址解析,也介绍了利用ARP抑制机制减少BUM流量。本节将说明如何将主机路由导入L3RIB,以及如何利用此信息实现VNI间路由。
3.3.1 本端VTEP RIB中的主机路由
- 章节3.1介绍了本地VTEP交换机如何将MAC-IP地址绑定信息装载进ARP表中,以及HMM(主机移动管理器)组件如何将信息装载进L2RIB中。除了此过程之外,HMM组件还会将ARP表中的MAC-IP信息装载进L3RIB中;
- 下方展示了本地VTEP交换机Leaf-1中的VRF ta的RIB。该路由是从VLAN 10中获悉的,并由HMM装载进RIB中;
3.3.2 本端VTEP上BGP进程中的主机路由
- 章节3.1还介绍了如何将MAC-IP信息从L2RIB发送到Loc-RIB,再从Loc-RIB发送到Adj-RIB-Out,然后将其通告为BGP EVPN Route type 2,发送至到远端VTEP交换机;
- 下方展示了与PC1的IP地址相关的BGP Loc-RIB;
3.3.3 远端VTEP上BGP进程中的主机路由
- 章节3.1没有说明MAC-IP路由信息如何最终进入远端VTEP交换机的L3RIB;
- 有关PC1 MAC-IP NLRI的BGP EVPN Route Type 2更新还包含了RT 65234:13960(L3VNI);
- 接收到的NLRI信息通过BGP的Import Policy Engine(基于RT 65234:13960导入)发送,最终将L3VNI条目发送到Loc-RIB;
- 在Input Policy处理期间,原始RD 3.3.3.3:32777更改为VRF ta特定的RD 4.4.4.4:3:3(3 = VRF ta的VRF ID),RD用于在不同的VRF中的区分重叠的IP地址;
- 下方展示了Leaf-2的BGP表,可以看到上方描述的所有详细信息(其中包含了原始的信息、修改RD后的信息、L3VNI信息等);
- 下方展示了Leaf-2上的VRF信息,其中包含了VRF ID;
3.3.4 将主机路由装载进远端VTEP的RIB
- 该路由已从BGP Loc-RIB装载进L3 RIB。RIB条目包括有关下一跳地址和隧道ID、封装类型(VxLAN)、网段ID和路由来源(BGP)信息;
- 在此阶段,本端VTEP交换机Leaf-1和远端VTEP交换机Leaf-2都能够将来自不同L2VNI主机的流量(VNI间流量)路由到PC1(属于L2VNI 10010)。
- 下方展示了Leaf-2上VRF ta RIB中有关172.16.1.1/32的路由条目;
- 下方展示了BGP递归数据库,其中3.3.3.3用于目标172.16.1.1的下一跳;
- 下方展示了Leaf-2上关于VRF ta的完整路由表;
四、数据层面操作
4.1 ARP抑制过程
- 当PC1开机后,即使我们在VTEP Leaf-1的NVE1接口下启用了ARP抑制,从主机PC1接收到的GARP也会被VxLAN封装并泛洪到组播组239.0.0.1;
- 这是因为VTEP Leaf-1在ARP表和ARP抑制缓存中都没有有关主机PC1的IP/MAC地址信息;
- 从下方VTEP Leaf-1的Debug输出中也可以看到上方关于ARP的描述过程,Leaf-从主机PC1接收GARP,它没有172.16.1.1的缓存条目,因此必须泛洪该帧,然后Leaf-将更新其ARP抑制缓存和L2RIB;
- 下方展示了Leaf-2上的Debug ARP中关于PC1的输出;
- 下方展示了Leaf-1的ARP缓存抑制表;
- 下方展示了Leaf-2的ARP缓存抑制表;
4.2 ARP抑制验证
- 在PC3(172.16.1.3)上ping PC1(172.16.1.1)
- 这时本地VTEP Leaf-2能够应答ARP请求消息,因为它具有存储在ARP抑制缓存中的信息。 因此,当主机首次加入网络时,它会发送一条GARP消息,以确保分配给它的IP地址是唯一的;
- 由于ARP表或ARP抑制高速缓存都没有关于要求的IP-mac绑定的条目,因此该消息将泛洪到其他VTEP叶子交换机。但在这些表完成更新后,下次主机间通讯时无需再进行ARP请求泛洪;
- 下方展示了Leaf-2发送ARP回复消息的过程;
4.3 同VRF,不同VNI下的主机互通
- 关于同VNI下主机互通已在上篇展示,本篇不再展示;
- 本节以PC1(172.16.1.1) ping PC2(172.162.2.)为例。
4.3.1 Leaf-1的VNI内交换
- 因为目标IP地址在另一个子网中,所以PC1使用Anycast Gateway MAC(AGM) 1234.1234.1234作为目标MAC地址,PC1向其默认网关Leaf-1发送ICMP请求消息,可参考下图;
- image.png
4.3.2 Leaf-1上将数据包从L2VNI 10010路由到L3VNI 13960
- 本地VTEP交换机Leaf-1接收帧。目标IP地址172.16.2.2(主机PC3)是通过BGP学习的,并与下一跳IP地址4.4.4.4(Leaf-2)一起装载进RIB中,并在数据平面中也封装了其他信息,例如L3VNI和封装类型;
- Leaf-1对下一跳地址进行递归路由查找,封装原始数据包并加上包含VNI ID(13960)的VxLAN包头,并通过Spine-1和Spine2将数据包路由到Leaf-2(外层MAC地址属于Spine-1和Spine-2);
- 因为VxLAN属于MAC in UDP封装类型,所以必须有内层源MAC地址和目标MAC地址。内层源MAC地址是从Inter-VNI路由中使用的SVI(SVI VLAN 3960)中获取的,内层目标地址是BGP扩展团体通过BGP更新接收到的RMAC。
4.3.3 Leaf-2上将数据包从L3VNI 13960路由到L2VNI 10020
- 当VTEP交换机Leaf-2收到VxLAN封装的数据包时,它将拆掉VxLAN包头。由于VNI 13960已关联到VRF ta,因此路由决策基于VRF ta的RIB;
- Leaf-2将原始ICMP请求路由到VLAN 20,并通过接口E1/3转发出去;
- 以上过程描述了对称式集成路由与桥接(IRB)模型,其中数据包首先由本地VTEP交换,然后通过使用VxLAN包头中的公用L3VNI在VxLAN Fabric中进行路由。接收方VTEP交换机收到数据包后拆掉VxLAN封装,并根据原始IP数据包的目标IP地址做出路由决策。在路由选择决定之后,数据包被转发到目的地(bridge-route-route-bridge),数据包回程遵循相同的模型;
- 使用对称式IRB提供了设计上的灵活性,因为与非对称式IRB不同,无需将所有VNI配置到所有的VTEP交换机。非对称式IRB基于"bridge-route-bridge"模型,其中没有公用的L3VNI用于VNI间路由。例如:如果我们在VxLAN Fabric中使用非对称式IRB,则主机PC1会将数据包发送至默认网关(bridge部分),就像在对称式IRB中一样。本地VTEP交换机Leaf-1做出路由决策,但不是使用的公用L3VNI,而是使用VxLAN包头中的VNI 10020,该包头关联到VLAN 20(VNI 10020关联的VLAN),这是“route”部分。接收方VTEP交换机Leaf-2收到数据包后拆掉VxLAN包头,并基于VxLAN 10020将数据包转发至VLAN 20,最终到达主机PC3。
- 测试PC1 ping PC3,并在Spine与Leaf之间抓包,下方展示了抓包结果;
- image.png
- 以上说明了如何在VxLAN Fabric中传播主机的IP地址以及如何将其装载进L3RIB中。
五、总结
image.png
六、引用参考
膜拜大佬:Toni Pasanenhttps://nwktimes.blogspot.com/2018/05/vxlan-part-vii-vxlan-bgp-evpn-control.html