分布式对称路由
在前面的文章中,我们分析了集中式路由和分布式非对称路由模型。分布式非对称模型有一个很严重的缺点:
每一个VTEP需要配置所有的VNI,即使该VTEP上没有对应的子网。为了克服这个缺陷,产生了一种新的模型分布式对称路由模型。
分布式对称路由模型是三种模型中最复杂的一种模型,该模型中引入了一种新的VNI:L3 VNI(又叫互联VNI)。同时引入了一种新的EVPN路由:前缀路由(又叫type-5路由)。本文将详细分析该模型。
L3 VNI
在分布式对称模型中,每一个VTEP都作为一个三层网关,为依附在它上面的主机进行跨子网路由,这一点与非对称模型是一致的。差异在于,在对称模型总,不仅源VTEP需要进行路由,目的VTEP也需要进行路由。因此这种模型更像传统路由器行为:将报文路由到另外一个路由器。在vxlan封装中,报文在离开源VTEP时,其内层报文的目的mac是目的路由器的overlay网关mac,而不是目的host的mac,所以目的VTEP收到该报文后,会继续进行路由,找到最终的目的主机。
所有的路由都发生在租户对应的vrf上下文。在源VETP上通过收到的报文所在vlan的svi接口决定其所属的VRF,然后进行路由,在目的VTEP上收到该报文后,通过报文中的VNI决定租户的VRF。在对称路由模型中,在源目的VTEP之间的vxlan隧道的VNI是不同于源主机所在的vlan对应的VNI,也不同于目的主机所在vlan对应的VNI。这个特殊的VNI,称之为Layer 3 VNI或者为互联VNI。这个VNI需要操作人员进行配置,然后通过EVPN控制面进行传播。L3 VNI与二层VNI是完全不同的。L2 VNI映射的是一个VLAN,或者一个子网;L3 VNI映射的是一个VRF。
L3VNI特点
- L3VNI与租户(一个VRF)是一一对应的。(这句表述不是很正确,一个租户可能有多个VRF,还可以进行VRF之间路由(路由泄漏))
- L3VNI需要操作人员进行配置,而且在所有的VTEP上要一致。
- L3VNI不能和L2VNI相同。
在对称式模型中,一个IP/MAC路由(type-2路由)发布的时候,会携带两个VNI:l2vni和l3vni。同时也会携带对应的RT。三层的RT对应到一个租户,二层的RT对应到一个子网。
配置
对称路由模型需要一些而外的配置:
- 为每一个租户配置一个VXLAN接口,设置对应的L3VNI。这个vxlan接口也是桥的一部分,将来安装三层路由的时候,出接口为vxlan接口。(这个配置在linux层面和二层vxlan接口是无差异的,差别在FRR的配置上)
- 为三层vxlan接口所在的桥配置一个svi接口,将该接口依附到VRF设备上。
- 在BGP上将vxlan接口关联到VRF上。
在linux上配置接口如下
#配置vxlan接口
auto vni104001
iface vni104001
bridge-access 4001
bridge-arp-nd-suppress on #开启arp抑制
bridge-learning off #禁止mac学习
vxlan-id 104001 #vxlan vni
vxlan-local-tunnelip 10.0.0.11 #tunnel sip
#将vxlan设备依附于一个桥
auto bridge
iface bridge
bridge-ports vni104001 #将vxlan接口vni104001依附于桥
bridge-vlan-aware yes #vlan敏感
#创建svi接口,是一个vlanif
auto vlan4001
iface vlan4001
vlan-id 4001
vlan-raw-device bridge #该vlanif依附在bridge上
vrf turtle #将svi关联到vrf设备turtle上。
在bgp上的配置
#在bgp上将vni 104001指定为L3 VNI,真正的差别在这,linux上的配置l2vni与l3vni无差别。
vrf turtle
vni 104001
!
为租户VRF配置RTs和RD
默认情况下,BGP会为VRF自动派生RD和RTS,其生成规则与L2VNI是一样的。也可以手动配置,手动配置时其上下文不是在VNI下:
router bgp <as> vrf tenant1
address-family l2vpn evpn
rd 172.16.100.1:20
route-target import 65100:20
发布本地依附的子网路由
在evpn中,如果本地没有配置某一个子网的VNI,当收到IP/MAC路由的时候是不会安装到对应的路由表中的,这就导致本地主机不能和本地没有配置的VNI段中的主机进行通信。在对称模型中,为了克服这个问题,引入了一种新的路由type-5路由。VTEP需要通过发布本VTEP上依附的子网路由给其它VTEP,从而让其它VTEP可以通过网段路由与自己通信。
BGP可以使用network和redistribute connected命令发布VTEP本地依附的网段路由。
对称式路由转发模型
- Leaf1收到来自Host1的报文,检测到报文的目的MAC是网关接口MAC,判断该报文需要进行三层转发。
- Leaf1根据报文的入接口找到对应的二层广播域,然后找到绑定该广播域VBDIF接口的L3VPN实例。根据报文的目的IP地址,查找该L3VPN实例下的路由表(如上图所示),获取该路由对应的三层VNI,以及下一跳地址。再根据出接口是VXLAN隧道,判断需要进行VXLAN封装:
– 根据VXLAN隧道的目的IP和源IP地址,获取对应的MAC地址,并将内层目的MAC和源MAC替换。
– 将三层VNI封装到报文中。
– 外层封装VXLAN隧道的目的IP和源IP地址。 - 封装后的报文根据外层MAC和IP信息在IP网络中传输,送达Leaf2。
- Leaf2收到VXLAN报文后进行解封装,检测到报文的目的MAC是自己的MAC地址,判断该报文需要进行三层转发。
- Leaf2根据报文携带的三层VNI找到对应的L3VPN实例,通过查找该L3VPN实例下的路由表,获取报文的下一跳是网关接口地址,然后将报文转发给Host2。
Host2向Host1发送报文的过程类似,这里不再赘述 。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。