1

分布式对称路由

在前面的文章中,我们分析了集中式路由和分布式非对称路由模型。分布式非对称模型有一个很严重的缺点:

每一个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可以使用networkredistribute connected命令发布VTEP本地依附的网段路由。

对称式路由转发模型

图片.png

  1. Leaf1收到来自Host1的报文,检测到报文的目的MAC是网关接口MAC,判断该报文需要进行三层转发。
  2. Leaf1根据报文的入接口找到对应的二层广播域,然后找到绑定该广播域VBDIF接口的L3VPN实例。根据报文的目的IP地址,查找该L3VPN实例下的路由表(如上图所示),获取该路由对应的三层VNI,以及下一跳地址。再根据出接口是VXLAN隧道,判断需要进行VXLAN封装:
    – 根据VXLAN隧道的目的IP和源IP地址,获取对应的MAC地址,并将内层目的MAC和源MAC替换。
    – 将三层VNI封装到报文中。
    – 外层封装VXLAN隧道的目的IP和源IP地址。
  3. 封装后的报文根据外层MAC和IP信息在IP网络中传输,送达Leaf2。
  4. Leaf2收到VXLAN报文后进行解封装,检测到报文的目的MAC是自己的MAC地址,判断该报文需要进行三层转发。
  5. Leaf2根据报文携带的三层VNI找到对应的L3VPN实例,通过查找该L3VPN实例下的路由表,获取报文的下一跳是网关接口地址,然后将报文转发给Host2。
    Host2向Host1发送报文的过程类似,这里不再赘述 。

ouyangxibao
189 声望162 粉丝

不生产代码,只是代码的搬运工