问题描述
在简单场景中,通过 VBDIF 实现 BD 间跨子网转发
在分布式网关组网中,VTEP 设备既是 L2 网关(完成同子网间的转发),又是 L3 网关(完成跨子网间的路由);
WIP 补充图示说明
在复杂环境中,通过 VBDIF 实现 BD 间跨子网转发
在分布式网关组网下,VTEP1、VTEP2 上都能创建 VBDIF 10、20,那么两端的 VBDIF 都会绑定地址,那么跨子网通信是如何完成的路由过程呢?
解决方案
回顾:在 VLAN 中,跨子网转发
如图,在 VLAN 中,跨子网通信的解决方案:
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;
在 VLAN 转发过程中,SW 通过数据帧的 DST-MAC-ADDR 来判断报文是否为自身三层转发处理(如果 DST-MAC-ADDR 为自身 MAC,则执行 L3 查表转发,否则 L2 查表转发),该细节对于理解对称 IRB、非对称 IRB 都会涉及到该知识点;
在 VXLAN 中,跨子网通信
在分布式网关下,跨子网通信,需要通过 TYPE-2-ROUTE 的 HOST IP Route Advertisement 完成。
当进行主机 IP 路由通告时,其用于分布式网关部署不同子网互访场景下,进行 IRB 类型路由通告。它包括主机 MAC 信息、IP 信息、二层 VNI 和三层 VNI;
在该组网下跨子网通信的实现方式并不唯一,根据接收报文的 VTEP(Ingress VTEP)处理方式不同,可以划分为:
1)非对称 IRB 转发(Asymmetric Integrated Routing and Bridging);
2)对称 IRB 转发(Symmetric Integrated Routing and Bridging);
Ingress VTEP:流量进入 VXLAN 网络的 VTEP 设备;
Egress VTEP:流量从 VTEP 离开 VXLAN 网络的设备;
报文格式
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(三层)
Asymmetric 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 转发;
Symmetric IRB
对称 IRB 转发:Ingress VTEP、Egress VTEP 都执行 L3 查表转发;
华为实现方式为对称 IRB 转发;
相比较于非对称 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 值,只是对端收到路由之后的处理行为存在区别:
1)检查该路由携带的 RT,如果与本端 EVPN 实例的 Import RT 相同,则接收该路由。EVPN 实例获取到 IRB 类型路由后,还能提取到其中包含的 ARP 类型路由,用于主机 ARP 通告;
2)检查该路由携带的 RT,如果与本端 IP VPN 实例的 Import RT(EVPN)相同,则接收该路由。然后,VPN 实例获取到该路由携带的 IRB 类型路由,从中提取的主机 IP 地址、三层 VNI,在其路由表中保存主机 IP 路由,并根据路由的下一跳迭代出接口,最终迭代结果是指向 VTEP 的 VXLAN 隧道;
在 BGP EVPN 的场景中,如果希望通过 IP VPN 实例的 RT 值控制 EVPN 路由的发送、接收,此时可以使用 vpn-target evpn 进行 RT 值的配置,此时出方向的 RT 属性会携带在 EVPN 路由中发送到远端的 BGP EVPN 对等体,入方向 RT 属性通过与 EVPN 路由中携带的 RT 属性匹配来决定哪些 EVPN 路由能交叉到本地的 IP VPN 实例地址族的路由表中;
注:为了和普通的 RT 值配置区分开,这里我们把通过 vpn-target evpn 命令配置的 RT 值称为 RT(EVPN);
只有当路由携带的 RT 值与 EVPN IRT、IP VPN IRT(EVPN)都不相同时,该路由才会被丢弃;
VTEP1 发送一条 Type 2 的 BGP EVPN 路由(IRB 类型),在该路由中携带所属 BD 绑定的 EVPN 实例 ERT 值(20:1);
VTEP2 收到之后,检查 BGP Update 中扩展属性所携带的 RT 值(20:1),与本地的 EVPN 实例中的 IRT、IP VPN 实例中的 IRT(EVPN)进行比较,发现与 BD 20、VBDIF 20 所绑定的 EVPN 实例、 IP VPN 实例的 IRT 相同,将 EVPN 路由放入 BD 20 所属的 EVPN 路由表中,同时将 EVPN 路由中包含的 IP 路由放入 VBDIF 20 所对应的 IP VPN 实例路由表中;
主机 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;