2

inter-subnet Routing

EVPN中实现不同子网(vlans)之间的路由(又叫跨vlan路由)有多种模型。这些模型之间的区别来自于如下因素:

  • 是否每一个VTEP都进行三层路由还是只有指定的几个VTEP进行路由?
  • 是否只在输入VTEP侧进行路由还是在输入和输出侧VTEP都进行路由?

基于如上两个维度,有如下三种模型:

  • 集中式路由:指定几个特定的VTEP作为三层网关,进行跨子网三层路由。其它VTEP只进行二层FDB转发。
  • 分布式非对称路由:所有的VTEP都参与跨子网路由,而且只有输入VTEP进行路由,输出VTEP只进行FDB转发。
  • 分布式对称路由:所有VTEP都参与跨子网路由,而且输入输出VTEP都进行路由。

分布式路由在部署的时候,需要在VTEP上为每一个子网配置一个任播的IP/MAC地址对作为网关的IP和MAC地址。而且同一个子网在不同的VTEP上的任播IP/MAC地址对必须一样。这样做的好处是,当一个host/VM进行迁移的时候(从一个VTEP上迁移到另外一个VTEP上)不需要变更迁移的HOST/VM的配置。

FRR在linux上支持上面的三种模型。

所有的路由都发生在一个VRF上下文。在配置的时候,每一个租户都会配置一个VRF。租户的每一个子网都需要关联到对应的VRF中(在linux中,通过将每一个子网的svi接口从属于对应的vrf设备来实现)。跨子网路由发生在租户的VRF中,从而隔离不同租户之间的路由转发信息。

注意:在使用vxlan路由功能的时候,推荐开启arp一致或者arp代答功能,因为分布式路由的出现,每一个子网在所有的vtep上都有一个相同的任播IP/MAC对,当host/vm查询网关的mac地址的时候,头端复制将会导致所有的vtep都会受到该arp请求报文,将会导致源host/vm收到多个arp应答。

集中式路由

在集中式路由模型中,一个特定的VTEP被指定为特定子网中所有host(这些host可以分布在不同的vtep上)的默认网关。更常用的模型是,使用active-active模式配置一个VTEP集群作为集中式网关。在集中式网关VTEPS上,需要为整个数据中心的所有子网配置默认网关。当一个主机想要和另外一个子网中的主机进行通信的时候,它发送的报文的目的mac为其对应子网网关的mac地址(集中式网关VTEP上的mac地址)。输入VTEP(host依附的VTEP)通过FDB表将该报文使用vxlan隧道转发到集中式网关VTEP上,网关进行目的路由查询,路由后,将报文的目的MAC改为目的主机的mac,通过vxlan隧道将报文传送到目的主机所在的VTEP上,目的主机所在VTEP通过二层转发将报文送给目的主机。

发布默认网关

为了使能集中式路由,必须使用命令advertise-default-gw使能网关设备发布网关IP/MAC地址对信息。

router bgp 65000
    address-family l2vpn evpn
        advertise-default-gw
    exit-address-family

集中式路由可以是VNI级别的,也就是说在部署的时候,可以指定某些VNI采用集中式路由,而其它的子网则采用分布式路由。这种混搭模型也是支持的,但是不推荐使用。

使用集中式路由时,当跨子网的源主机和目的主机在同一个VTEP上时,它们之间的通信也会先转发到网关VTEP,然后再转发回来。
图片.png

如上图所示:server与server2在同一个VTEP上(leaf1),它们之间需要通信,需要借助三层集中式网关集群(spine1和spine2)。

分布式非对称路由

在分布式非对称路由模型中,每一个VTEP都作为三层转发器,它位依附在它上面的主机进行跨子网流量路由转发。在这种模中,只有源主机所在的VTEP会进行路由,目的主机所在的VTEP进行二层转发。源VTEP进行路由后,会将报文的目的mac直接填写为目的主机的mac,然后使用目的主机所在子网的vni进行vxlan报文封装,发送到目的VTEP上。目的VTEP进行mac转发报文给目的主机。分布式非对称路由模式非常容易部署,相比于集中式和分布式对称模式来说,不需要而外的配置。分布式非对称模型需要所有VTEP上配置所有子网的vni,即使VTEP本地没有该子网的主机也需要配置一个这样的VNI。
图片.png


ouyangxibao
189 声望162 粉丝

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