子网间路由

EVPN 包括多种用于在不同子网(VLAN)之间进行路由的模型,也称为 VLAN 间路由。您选择的模型取决于每个 VTEP 是否充当第 3 层网关并执行路由,或者是否只有特定的 VTEP 执行路由,以及路由是仅在 VXLAN 隧道的入口处发生还是在 VXLAN 隧道的入口和出口处都发生。

Cumulus Linux 支持以下模型

  • 集中式路由:特定的 VTEP 充当指定的第 3 层网关,并在子网之间执行路由;其他 VTEP 仅执行桥接。

  • 分布式非对称路由:每个 VTEP 都参与路由,但所有路由都在入口 VTEP 处发生;出口 VTEP 仅执行桥接。

  • 分布式对称路由:每个 VTEP 都参与路由,并在入口 VTEP 和出口 VTEP 处都执行路由。

    您通常使用 VTEP 部署分布式路由,这些 VTEP 为每个子网都具有任播 IP 和 MAC 地址;具有特定子网的每个 VTEP 对于该子网都具有相同的 IP/MAC。这种模型有助于轻松实现主机和 VM 移动性,因为当主机或 VM 从一个 VTEP 移动到另一个 VTEP 时,无需更改主机或 VM 配置。

    所有路由都在租户 VRF(虚拟路由和转发)的上下文中发生。Cumulus Linux 为每个租户配置一个 VRF 实例,并将租户的子网与该 VRF 相关联(相应的 SVI 连接到 VRF)。每个租户的子网间路由都在该租户的 VRF 上下文中发生,并且与其他租户的路由分开。

集中式路由

在集中式路由中,您可以配置特定的 VTEP 以充当整个 EVPN Fabric 中特定子网中所有主机的默认网关。通常,将一对 VTEP 以主动-主动模式配置为默认网关,并为每个子网使用任播 IP 和 MAC 地址。您需要在这样的网关 VTEP 上配置所有子网。当一个子网中的主机想要与另一个子网中的主机通信时,它会将数据包寻址到网关 VTEP。入口 VTEP(源主机连接到的 VTEP)通过相应的 VXLAN 隧道将数据包桥接到网关 VTEP。网关 VTEP 路由到目标主机,并且在路由后,数据包桥接到出口 VTEP(目标主机连接到的 VTEP)。然后,出口 VTEP 将数据包桥接到目标主机。

要启用集中式路由,您必须配置网关 VTEP 以通告其 IP 和 MAC 地址。

cumulus@leaf01:~$ nv set evpn route-advertise default-gateway on
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh

leaf01# configure terminal
leaf01(config)# router bgp 65101
leaf01(config-router)# address-family l2vpn evpn
leaf01(config-router-af)# advertise-default-gw
leaf01(config-router-af)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

vtysh 命令在 /etc/frr/frr.conf 文件中创建以下配置代码段。

...
router bgp 65101
...
  address-family l2vpn evpn
    advertise-default-gw
  exit-address-family
...

您可以在 VNI 级别部署集中式路由,在 VNI 级别,您可以为每个 VNI 配置 advertise-default-gw 命令;您可以将集中式路由用于某些 VNI,将分布式对称路由(如下所述)用于其他 VNI。NVIDIA 不建议使用这种类型的配置。

当您使用集中式路由时,即使源主机和目标主机连接到同一个 VTEP,数据包也会传输到网关 VTEP,交换机路由数据包,然后数据包返回。

非对称路由

在分布式非对称路由中,每个 VTEP 都充当第 3 层网关,为其连接的主机执行路由。只有入口 VTEP 执行路由,出口 VTEP 仅执行桥接。您可以使用仅主机路由来实现非对称路由,这不涉及任何互连 VNI。但是,您必须为每个 VTEP 配置所有 VLAN 和相应的 VNI(进行通信的子网之间),即使特定 VLAN 没有本地连接的主机也是如此。

要实现非对称路由,除了上述第 2 层 VTEP 的标准配置之外,唯一需要的额外配置是确保每个 VTEP 都配置了所有 VLAN(和相应的 VNI),并且您为每个 VLAN 配置了带有任播 IP 或 MAC 地址的 SVI。

  • NVIDIA 建议您使用对称路由或集中式路由,而不是非对称路由。
  • 非对称路由不支持 EVPN 多宿主。

对称路由

在分布式对称路由中,每个 VTEP 都充当第 3 层网关,为其连接的主机执行路由;但是,入口 VTEP 和出口 VTEP 都路由数据包(类似于路由到下一跳路由器的传统路由行为)。在 VXLAN 封装的数据包中,内部目标 MAC 地址是出口 VTEP 的路由器 MAC 地址,以指示出口 VTEP 是下一跳,并且也需要执行路由。所有路由都在租户(VRF)的上下文中发生。对于入口 VTEP 从本地连接的主机接收的数据包,与 VLAN 对应的 SVI 接口确定 VRF。对于出口 VTEP 通过 VXLAN 隧道接收的数据包,数据包中的 VNI 必须指定 VRF。对于对称路由,这是一个与租户对应的 VNI,并且与源 VNI 或目标 VNI 都不同。此 VNI 是第 3 层 VNI 或互连 VNI。常规 VNI(映射 VLAN)是第 2 层 VNI。

  • Cumulus Linux 在 NVIDIA Spectrum-A1 及更高版本上支持对称路由。
  • Cumulus Linux 使用第 3 层 VNI 和租户(VRF)之间的一对一映射。
  • VRF 到第 3 层 VNI 的映射在所有 VTEP 上都必须保持一致。
  • 第 3 层 VNI 和第 2 层 VNI 不能具有相同的 ID。如果 VNI ID 相同,则 Cumulus Linux 不会创建第 2 层 VNI。
  • 在 MLAG 配置中,第 3 层 VNI 的 SVI 不能是桥的一部分。这确保了交换机不会在对等链路或其他中继链路上转发标记有该 VLAN ID 的流量。

在 EVPN 对称路由配置中,当交换机通告类型 2(MAC、IP)路由时,除了包含两个 VNI(第 2 层 VNI 和第 3 层 VNI)之外,路由还包含用于第 2 层和第 3 层的单独 RT。第 3 层 RT 将路由与租户 VRF 相关联。默认情况下,这是使用第 3 层 VNI 而不是第 2 层 VNI 自动派生的;但是您也可以配置它。

对于 EVPN 对称路由,您需要执行以下额外的配置。可选配置包括为租户 VRF 配置 RD 和 RT 以及通告本地连接的子网

指定 VRF 到第 3 层 VNI 的映射。此配置用于 BGP 控制平面。

cumulus@leaf01:~$ nv set vrf RED evpn vni 4001
cumulus@leaf01:~$ nv config apply

当您运行 nv set vrf RED evpn vni 4001 命令时,NVUE

  • 如果之前未配置第 3 层 VNI,则创建一个名为 br_l3vni 的第 3 层桥
  • 在 VRF RED 中创建一个名为 vni4001 的第 3 层 VNI
  • 自动为 vni4001 分配一个 VLAN,并在 VRF RED 中创建一个接口名称末尾带有 _l3(第 3 层)的 VLAN 接口(例如,vlan220_l3)。NVUE 将 VLAN 添加到桥 br_l3vni
  • vni4001 添加到桥 br_l3vni 中单个 VXLAN 设备的 VLAN-VNI 映射

在 MLAG 环境中,此行为有所不同。如果您配置了 MLAG 并且运行了 nv set vrf RED evpn vni 4001 命令,则 NVUE

  • 在 VRF RED 中创建一个名为 vni4001 的第 3 层 VNI
  • 从全局保留的第 3 层 VNI VLAN 范围中自动为 vni4001 分配一个 VLAN,并在 VRF RED 中创建一个接口名称末尾带有 _l3(第 3 层)的 VLAN 接口(例如,vlan220_l3)。NVUE 将 VLAN 添加到桥 br_default
  • vni4001 添加到桥 br_default 中单个 VXLAN 设备的 VLAN-VNI 映射

全局保留的第 3 层 VNI VLAN 范围与交换机内部保留的 VLAN 范围不同。您可以使用nv set system global reserved vlan l3-vni-vlan 命令配置它。

  1. 为每个租户配置 VNI 接口和与 VNI 关联的 VLAN。在放置在第 3 层 VNI 桥中的 VXLAN 设备的映射中配置 VNI 和 VLAN。VTEP 的路由器 MAC 地址安装在 VNI 接口上,对称路由的远程主机路由安装在 VLAN 接口上

    编辑 /etc/network/interfaces 文件。例如

cumulus@leaf01:~$ sudo nano /etc/network/interfaces
...
auto vni4001
iface vni4001
  bridge-access 220
  bridge-learning off
  vxlan-id 4001

auto vlan220_l3
iface vlan220_l3
  vrf RED
  vlan-raw-device br_l3vni
  vlan-id 220

auto vxlan99
iface vxlan99
  bridge-vlan-vni-map 220=4001
  bridge-learning off

auto br_l3vni
iface br_l3vni
  bridge-ports vxlan99
  hwaddress 44:38:39:22:01:7a
  bridge-vlan-aware yes
   ...

当您使用 MLAG 时,VNI 和 VXLAN 设备必须与您的 MLAG 对等链路属于同一桥。在未配置 MLAG 的环境中,您可以为 L3VNI 配置单独的桥,如上所示。

  1. 指定 VRF 到第 3 层 VNI 的映射。此配置用于 BGP 控制平面。

    编辑 /etc/frr/frr.conf 文件。例如

    cumulus@leaf01:~$ sudo nano /etc/frr/frr.conf
    ...
    vrf RED
      vni 4001
    !
    ...
    

  • 不要将第 3 层 VNI VLAN ID 添加到第 2 层桥配置中的桥 vids 列表。
  • 当两个 VTEP 在 VXLAN 主动-主动 模式下运行并执行对称路由时,您需要配置与每个第 3 层 VNI 对应的路由器 MAC,以确保两个 VTEP 使用相同的 MAC 地址。为与第 3 层 VNI 对应的 SVI 指定 address-virtual(MAC 地址)。在 MLAG 对中的两个交换机上使用相同的地址。使用 MLAG 系统 MAC 地址。请参阅通告主 IP 地址

如果您需要将第 2 层 VNI 转换为第 3 层 VNI,请参阅将第 2 层 VNI 更改为第 3 层

为租户 VRF 配置 RD 和 RT

如果您不想让 Cumulus Linux 自动派生租户 VRF 的 RDRT(第 3 层 RT),您可以手动配置它们,方法是在该特定 VRF 的 l2vpn evpn 地址族下指定它们。

您可以配置 RD、当将主机或前缀路由导入到 EVPN 时要附加的 RT,以及当将主机或前缀路由导入到 VRF 时要附加的 RT。

租户 VRF RD 和 RT 与第 2 层 VNI 的 RD 和 RT 不同。要定义第 2 层 VNI 的 RD 和 RT,请参阅定义 RD 和 RT

cumulus@leaf01:~$ nv set vrf RED router bgp rd 10.1.20.2:5
cumulus@leaf01:~$ nv set vrf RED router bgp route-import from-evpn route-target 65102:4001
cumulus@leaf01:~$ nv set vrf RED router bgp route-export to-evpn route-target 65101:4002
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh

leaf01# configure terminal
leaf01(config)# router bgp 65101 vrf RED
leaf01(config-router)# address-family l2vpn evpn
leaf01(config-router-af)# rd 10.1.20.2:5
leaf01(config-router-af)# route-target import 65102:4001
leaf01(config-router-af)# route-target export 65101:4002
leaf01(config-router-af)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

vtysh 命令在 /etc/frr/frr.conf 文件中创建以下配置代码段

...
router bgp 65101 vrf RED
  address-family l2vpn evpn
  rd 10.1.20.2:5
  route-target import 65102:4001
  route-target export 65101:4002
...

对称路由在存在静默主机的情况下会出现问题。如果入口 VTEP 没有目标子网,并且主机路由未通告目标主机,则入口 VTEP 无法将数据包路由到其目的地。您可以通过让 VTEP 除了通告主机路由之外,还通告与其连接的子网对应的子网前缀来克服此问题。Cumulus Linux 将这些路由通告为 EVPN 前缀(类型 5)路由。

要通告本地连接的子网

  1. 启用 EVPN 前缀(类型 5)路由的通告。请参阅下面的基于前缀的路由 - EVPN 类型 5 路由
  2. 通过使用 network 命令注入路由或使用 redistribute connected 命令重新分发路由,确保与连接的子网对应的路由位于 BGP VRF 路由表中。

仅当您有静默主机时,并且仅在每个子网的一个 VTEP(或两个用于冗余)上使用此配置。

基于前缀的路由

Cumulus Linux 中的 EVPN 使用 EVPN 类型 5(前缀)路由支持基于前缀的路由。类型 5 路由(或前缀路由)主要路由到数据中心 Fabric 外部的目的地。

EVPN 前缀路由携带第 3 层 VNI 和路由器 MAC 地址,并遵循对称路由模型路由到目标前缀。

  • 当连接到 WAN 边缘路由器以访问数据中心外部的目的地时,请部署特定的边界或出口叶交换机以发起类型 5 路由。
  • 在带有 Spectrum ASIC 的交换机上,集中式路由、对称路由和基于前缀的路由仅适用于 Spectrum-A1 及更高版本。

安装 EVPN 类型 5 路由

为了让交换机将 EVPN 类型 5 路由安装到路由表中,您必须配置第 3 层 VNI 相关信息。此配置与对称路由的配置相同。您需要

  1. 配置每个租户的 VXLAN 接口,该接口指定租户的第 3 层 VNI。此 VXLAN 接口是桥的一部分;远程 VTEP 的路由器 MAC 地址安装在此接口上。
  2. 配置与每个租户的 VXLAN 接口对应的 SVI(第 3 层接口)。这连接到租户的 VRF。远程前缀路由安装在此 SVI 上。
  3. 指定 VRF 到第 3 层 VNI 的映射。此配置用于 BGP 控制平面。

通告 EVPN 类型 5 路由

租户 VRF 需要以下配置才能在 BGP RIB 中将 IP 前缀通告为 EVPN 类型 5 路由。

cumulus@leaf01:~$ nv set vrf RED router bgp address-family ipv4-unicast route-export to-evpn enable on
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh

leaf01# configure terminal
leaf01(config)# router bgp 65101 vrf RED
leaf01(config-router)# address-family l2vpn evpn
leaf01(config-router-af)# advertise ipv4 unicast
leaf01(config-router-af)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

vtysh 命令在 /etc/frr/frr.conf 文件中创建以下代码段

...
router bgp 65101 vrf RED
  address-family l2vpn evpn
    advertise ipv4 unicast
  exit-address-family
end
...

控制 RIB 路由

默认情况下,当在 BGP RIB 中将 IP 前缀通告为 EVPN 类型 5 路由时,交换机选择 BGP RIB 中的所有路由以通告为 EVPN 类型 5 路由。您可以使用路由映射来允许从 BGP RIB 中选择性地通告路由。

以下命令将路由映射过滤器添加到 IPv4 EVPN 类型 5 路由通告

cumulus@leaf01:~$ nv set vrf RED router bgp address-family ipv4-unicast route-export to-evpn route-map map1
cumulus@leaf01:~$ sudo vtysh

leaf01# configure terminal
leaf01(config)# router bgp 65101 vrf RED
leaf01(config-router)# address-family l2vpn evpn
leaf01(config-router-af)# advertise ipv4 unicast route-map map1
leaf01(config-router-af)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

发起默认 EVPN 类型 5 路由

Cumulus Linux 支持发起 EVPN 默认类型 5 路由。默认类型 5 路由从边界(出口)叶子发起,并通告到 Pod 内的所有其他叶子。Pod 内的任何叶子都遵循指向边界叶子的默认路由,以处理所有外部流量(指向 Internet 或不同 Pod 的流量)。

要在 EVPN 中发起默认类型 5 路由

cumulus@leaf01:~$ nv set vrf RED router bgp address-family ipv4-unicast route-export to-evpn default-route-origination on
cumulus@leaf01:~$ nv set vrf RED router bgp address-family ipv6-unicast route-export to-evpn default-route-origination on
cumulus@leaf01:~$ sudo vtysh

leaf01# configure terminal
leaf01(config)# router bgp 65101 vrf RED
leaf01(config-router)# address-family l2vpn evpn
leaf01(config-router-af)# default-originate ipv4
leaf01(config-router-af)# default-originate ipv6
leaf01(config-router-af)# end
leaf01# write memory

在具有 VXLAN 主动-主动(MLAG)的 EVPN 对称路由配置中,所有 EVPN 路由都使用任播 IP 地址作为下一跳 IP 地址,并使用任播 MAC 地址作为路由器 MAC 地址进行通告。在故障情况下,交换机可能会将流量转发到没有目标路由的叶子交换机。为了防止在这种故障情况下丢弃流量,Cumulus Linux 默认启用“通告主 IP 地址”功能,以便交换机根据路由类型有条件地处理 VTEP 的下一跳 IP 地址:主机类型 2(MAC/IP 通告)或类型 5(IP 前缀路由)。

  • 对于主机类型 2 路由,任播 IP 地址是下一跳 IP 地址,任播 MAC 地址是路由器 MAC 地址。
  • 对于类型 5 路由,系统 IP 地址(VTEP 的唯一主环回 IP 地址)是下一跳 IP 地址,VTEP 的唯一路由器 MAC 地址是路由器 MAC 地址。

有关 VXLAN 主动-主动的更多信息,请参阅VXLAN 主动-主动模式

设置任播 MAC 地址

您可以在 MLAG 对中的两个交换机上设置任播 MAC 地址。

NVUE 提供了两个命令来全局设置任播 MAC 地址。您可以

  • 将任播 MAC 地址设置为 44:38:39:ff:00:00 和 44:38:39:ff:ff:ff 之间的保留范围内的值。请务必使用此保留范围内的地址,以防止 MAC 地址与同一桥接网络中的其他接口冲突。
  • 设置任播 MAC ID,Cumulus Linux 从中派生 MAC 地址。您可以指定一个介于 1 和 65535 之间的数字。Cumulus Linux 将该数字添加到十六进制 MAC 地址 44:38:39:ff:00:00。例如,如果您指定 225,则任播 MAC 地址为 44:38:39:ff:00:FF。

如果您使用 Linux 命令而不是 NVUE 配置交换机,请在 /etc/network/interfaces 文件中每个 VLAN 接口下添加 address-virtual <anycast-mac> 选项。Cumulus Linux 在 /etc/network/interfaces 文件中不提供全局任播 MAC 地址或 MAC ID 选项。

要设置任播 MAC 地址

cumulus@leaf01:~$ nv set system global anycast-mac 44:38:39:ff:00:ff
cumulus@leaf01:~$ nv config apply

要设置任播 MAC ID

cumulus@leaf01:~$ nv set system global anycast-id 255
cumulus@leaf01:~$ nv config apply

编辑 /etc/network/interfaces 文件,并在每个 VLAN 接口下添加 address-virtual <anycast-mac>。例如

cumulus@leaf01:~$ sudo nano /etc/network/interfaces
...
auto vlan4001
iface vlan4001
    address-virtual 44:38:39:FF:00:AA
    vrf RED
    vlan-raw-device bridge
    vlan-id 4001
...

任播 MAC 地址与Fabric 范围的 VRR MAC 地址不同,后者在 Fabric 范围内的交换机上分发相同的 VLAN 接口 VRR 网关。下图显示了任播 MAC 地址或 ID(对于每个主动-主动对都是唯一的)与 Fabric MAC 地址或 ID(在整个 Fabric 中是一致的)之间的关系。

当使用 MLAG 和 EVPN 配置第三方网络设备以实现互操作性时,您必须为每个通告的下一跳 IP 地址配置和通告单个共享路由器 MAC 值。

禁用通告主 IP 地址

MLAG 对中的每个交换机都使用其自己的系统 IP 通告类型 5 路由,这会在远程 VTEP 上创建额外的下一跳。在大型多租户 EVPN 部署中,如果额外资源是一个问题,您可以禁用此功能。

要禁用通告主 IP 地址

cumulus@leaf01:~$ nv set evpn route-advertise nexthop-setting shared-ip-mac
cumulus@leaf01:~$ nv config apply

要重新启用通告主 IP 地址,请运行 nv set evpn route-advertise nexthop-setting system-ip-mac 命令。

cumulus@leaf01:~$ sudo vtysh
leaf01# configure terminal
leaf01(config)# router bgp 65101 vrf RED
leaf01(config)# address-family l2vpn evpn
leaf01(config)# no advertise-pip
leaf01(config-router-af)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

要重新启用通告主 IP 地址

cumulus@leaf01:~$ sudo vtysh

leaf01# configure terminal
leaf01(config)# router bgp 65101 vrf RED
leaf01(config)# address-family l2vpn evpn
leaf01(config)# advertise-pip
leaf01(config-router-af)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

显示通告主 IP 地址信息

要显示通告主 IP 地址参数,请运行 vtysh show bgp l2vpn evpn vni <vni> 命令。例如

cumulus@leaf01:~$ sudo vtysh
...
leaf01# show bgp l2vpn evpn vni 4001
VNI: 4001 (known to the kernel)
  Type: L3
  Tenant VRF: RED
  RD: 10.1.20.2:5
  Originator IP: 10.0.1.1
  Advertise-gw-macip : n/a
  Advertise-svi-macip : n/a
  Advertise-pip: Yes
  System-IP: 10.10.10.1
  System-MAC: 44:38:39:FF:00:aa
  Router-MAC: 44:38:39:FF:00:aa
  Import Route Target:
    65101:4001
  Export Route Target:
    65101:4001

要显示带有主 IP 通告的 EVPN 路由,请运行 vtysh show bgp l2vpn evpn route 命令。例如

cumulus@leaf01:~$ sudo vtysh
leaf01# show bgp l2vpn evpn route
...
Route Distinguisher: 10.10.10.1:3
*> [2]:[0]:[48]:[00:60:08:69:97:ef]
                    10.0.1.1                           32768 i
                    ET:8 RT:65101:10 RT:65101:4001 Rmac:44:38:39:FF:00:aa
*> [2]:[0]:[48]:[26:76:e6:93:32:78]
                    10.0.1.1                           32768 i
                    ET:8 RT:65101:10 RT:65101:4001 Rmac:44:38:39:FF:00:aa
*> [2]:[0]:[48]:[26:76:e6:93:32:78]:[32]:[10.1.10.101]
                    10.0.1.1                           32768 i
                    ET:8 RT:65101:10 RT:65101:4001 Rmac:44:38:39:FF:00:aa
...

要显示从外部路由器学习到的作为类型 5 路由注入的路由,请运行 vtysh show bgp vrf <vrf> ipv4 unicast 命令。

下游 VNI

下游 VNI(对称 EVPN 路由泄露)使您能够通过 EVPN 路由从下游远程 VTEP 分配 VNI,而不是在整个网络中全局配置第 3 层 VNI。

要配置下游 VNI,您可以像往常一样配置租户 VRF;但是,要配置所需的路由泄露,您需要定义路由目标导入和/或导出语句。

配置路由目标

路由目标导入或导出语句的格式为 route-target import|export <asn>:<vni>;例如,route-target import 65101:6000。对于路由目标导入语句,您可以为 NVUE 命令使用 route-target import ANY:<vni>,或在 /etc/frr/frr.conf 文件中使用 route-target import *:<vni>。NVUE 命令中的 ANY/etc/frr/frr.conf 文件中的星号 (*) 将任何 ASN 用作通配符。

NVUE 命令如下:

  • 要配置路由导入语句:nv set vrf <vrf> router bgp route-import from-evpn route-target <asn>:<vni>
  • 要配置路由导出语句:nv set vrf <vrf> router bgp route-export from-evpn route-target <asn>:<vni>

  • EVPN 对称模式仅支持具有第 3 层 VNI 和单个 VXLAN 设备的下游 VNI。
  • 您可以在一个 VRF 中配置多个导入和导出路由目标。
  • 您可以为各个前缀使用路由策略配置选择性路由目标。
  • 您不能将重叠的租户前缀泄露(导入)到同一个目标 VRF 中。

以下示例展示了在 leaf01 到 leaf04 以及 border01 上配置下游 VNI 的情况。

VRF RED 和 VRF 10 之间的流量流

  1. server01 将流量转发到 leaf01。
  2. leaf01 使用其路由目标导入语句 (6000) 中的 VNI 封装数据包,并将流量隧道传输到 border01。
  3. border01 使用从 leaf01 接收到的 VNI 转发数据包。
  4. 从 border01 到 server01 的反向流量使用 border01 上路由目标导入语句 (4001) 中的 VNI 封装,并隧道传输到 leaf01,然后在 VRF RED 中进行路由。

以下是示例的配置。

  • 在 leaf01 上,您可以在 /etc/frr/frr.conf 文件的 router bgp 65101 vrf REDrouter bgp 65101 vrf BLUE 节下看到路由目标 (route-target import 65163:6000)。
  • 在 border01 上,您可以在 /etc/frr/frr.conf 文件的 router bgp 65163 vrf VRF10 节下看到路由目标 (route-target import 65101:4001route-target import 65101:4002)。

由于所有 leaf 上的配置都相似,因此示例仅显示 leaf01 和 border01 的配置文件。为了简洁起见,示例未显示 spine 配置文件。

cumulus@leaf01:~$ nv set interface lo ip address 10.10.10.1/32
cumulus@leaf01:~$ nv set interface swp1-3,swp51-52
cumulus@leaf01:~$ nv set interface bond1 bond member swp1
cumulus@leaf01:~$ nv set interface bond2 bond member swp2
cumulus@leaf01:~$ nv set interface bond3 bond member swp3
cumulus@leaf01:~$ nv set interface bond1 bond lacp-bypass on
cumulus@leaf01:~$ nv set interface bond2 bond lacp-bypass on
cumulus@leaf01:~$ nv set interface bond3 bond lacp-bypass on
cumulus@leaf01:~$ nv set interface bond1 link mtu 9000
cumulus@leaf01:~$ nv set interface bond2 link mtu 9000
cumulus@leaf01:~$ nv set interface bond3 link mtu 9000
cumulus@leaf01:~$ nv set interface bond1-3 bridge domain br_default
cumulus@leaf01:~$ nv set interface bond1 bridge domain br_default access 10
cumulus@leaf01:~$ nv set interface bond2 bridge domain br_default access 20
cumulus@leaf01:~$ nv set interface bond3 bridge domain br_default access 30
cumulus@leaf01:~$ nv set bridge domain br_default vlan 10,20,30
cumulus@leaf01:~$ nv set interface vlan10 ip address 10.1.10.2/24
cumulus@leaf01:~$ nv set interface vlan10 ip vrr address 10.1.10.1/24
cumulus@leaf01:~$ nv set interface vlan10 ip vrr mac-address 00:00:00:00:00:10
cumulus@leaf01:~$ nv set interface vlan10 ip vrr state up
cumulus@leaf01:~$ nv set interface vlan20 ip address 10.1.20.2/24
cumulus@leaf01:~$ nv set interface vlan20 ip vrr address 10.1.20.1/24
cumulus@leaf01:~$ nv set interface vlan20 ip vrr mac-address 00:00:00:00:00:20
cumulus@leaf01:~$ nv set interface vlan20 ip vrr state up
cumulus@leaf01:~$ nv set interface vlan30 ip address 10.1.30.2/24
cumulus@leaf01:~$ nv set interface vlan30 ip vrr address 10.1.30.1/24
cumulus@leaf01:~$ nv set interface vlan30 ip vrr mac-address 00:00:00:00:00:30
cumulus@leaf01:~$ nv set interface vlan30 ip vrr state up
cumulus@leaf01:~$ nv set vrf RED
cumulus@leaf01:~$ nv set vrf BLUE
cumulus@leaf01:~$ nv set bridge domain br_default vlan 10 vni 10
cumulus@leaf01:~$ nv set bridge domain br_default vlan 20 vni 20
cumulus@leaf01:~$ nv set bridge domain br_default vlan 30 vni 30
cumulus@leaf01:~$ nv set interface vlan10 ip vrf RED
cumulus@leaf01:~$ nv set interface vlan20 ip vrf RED
cumulus@leaf01:~$ nv set interface vlan30 ip vrf BLUE
cumulus@leaf01:~$ nv set nve vxlan source address 10.10.10.1
cumulus@leaf01:~$ nv set nve vxlan arp-nd-suppress on 
cumulus@leaf01:~$ nv set vrf RED evpn vni 4001
cumulus@leaf01:~$ nv set vrf BLUE evpn vni 4002
cumulus@leaf01:~$ nv set system global anycast-mac 44:38:39:FF:00:AA
cumulus@leaf01:~$ nv set evpn enable on
cumulus@leaf01:~$ nv set router bgp autonomous-system 65101
cumulus@leaf01:~$ nv set router bgp router-id 10.10.10.1
cumulus@leaf01:~$ nv set vrf default router bgp peer-group underlay remote-as external
cumulus@leaf01:~$ nv set vrf default router bgp neighbor swp51 peer-group underlay
cumulus@leaf01:~$ nv set vrf default router bgp neighbor swp52 peer-group underlay
cumulus@leaf01:~$ nv set vrf default router bgp peer-group underlay address-family l2vpn-evpn enable on
cumulus@leaf01:~$ nv set vrf default router bgp address-family ipv4-unicast redistribute connected enable on
cumulus@leaf01:~$ nv set vrf RED router bgp autonomous-system 65101
cumulus@leaf01:~$ nv set vrf RED router bgp router-id 10.10.10.1
cumulus@leaf01:~$ nv set vrf RED router bgp address-family ipv4-unicast redistribute connected enable on
cumulus@leaf01:~$ nv set vrf RED router bgp address-family ipv4-unicast route-export to-evpn
cumulus@leaf01:~$ nv set vrf RED router bgp route-import from-evpn route-target 65163:6000
cumulus@leaf01:~$ nv set vrf BLUE router bgp autonomous-system 65101
cumulus@leaf01:~$ nv set vrf BLUE router bgp router-id 10.10.10.1
cumulus@leaf01:~$ nv set vrf BLUE router bgp address-family ipv4-unicast redistribute connected enable on
cumulus@leaf01:~$ nv set vrf BLUE router bgp address-family ipv4-unicast route-export to-evpn
cumulus@leaf01:~$ nv set vrf BLUE router bgp route-import from-evpn route-target 65163:6000
cumulus@leaf01:~$ nv set evpn multihoming enable on
cumulus@leaf01:~$ nv set interface bond1 evpn multihoming segment local-id 1
cumulus@leaf01:~$ nv set interface bond2 evpn multihoming segment local-id 2
cumulus@leaf01:~$ nv set interface bond3 evpn multihoming segment local-id 3
cumulus@leaf01:~$ nv set interface bond1-3 evpn multihoming segment mac-address 44:38:39:FF:00:AA
cumulus@leaf01:~$ nv set interface bond1-3 evpn multihoming segment df-preference 50000
cumulus@leaf01:~$ nv set interface swp51-52 evpn multihoming uplink on
cumulus@leaf01:~$ nv config apply
cumulus@border01:~$ nv set interface lo ip address 10.10.10.63/32
cumulus@border01:~$ nv set interface swp1-3,swp51-52
cumulus@border01:~$ nv set interface bond1 bond member swp1
cumulus@border01:~$ nv set interface bond2 bond member swp2
cumulus@border01:~$ nv set interface bond3 bond member swp3
cumulus@border01:~$ nv set interface bond1 bond lacp-bypass on
cumulus@border01:~$ nv set interface bond2 bond lacp-bypass on
cumulus@border01:~$ nv set interface bond3 bond lacp-bypass on
cumulus@border01:~$ nv set interface bond1 link mtu 9000
cumulus@border01:~$ nv set interface bond2 link mtu 9000
cumulus@border01:~$ nv set interface bond3 link mtu 9000
cumulus@border01:~$ nv set interface bond1-3 bridge domain br_default
cumulus@border01:~$ nv set interface bond1 bridge domain br_default access 2001
cumulus@border01:~$ nv set interface bond2 bridge domain br_default access 2002
cumulus@border01:~$ nv set interface bond3 bridge domain br_default access 2010
cumulus@border01:~$ nv set interface vlan2001 ip address 10.1.201.1/24
cumulus@border01:~$ nv set interface vlan2002 ip address 10.1.202.1/24
cumulus@border01:~$ nv set interface vlan2010 ip address 10.1.210.1/24
cumulus@border01:~$ nv set bridge domain br_default vlan 2001,2002,2010
cumulus@border01:~$ nv set vrf VRF10
cumulus@border01:~$ nv set vrf EXTERNAL1
cumulus@border01:~$ nv set vrf EXTERNAL2
cumulus@border01:~$ nv set bridge domain br_default vlan 2001 vni 2001
cumulus@border01:~$ nv set bridge domain br_default vlan 2002 vni 2002
cumulus@border01:~$ nv set bridge domain br_default vlan 2010 vni 2010
cumulus@border01:~$ nv set interface vlan2001 ip vrf EXTERNAL1
cumulus@border01:~$ nv set interface vlan2002 ip vrf EXTERNAL2
cumulus@border01:~$ nv set interface vlan2010 ip vrf VRF10
cumulus@border01:~$ nv set nve vxlan source address 10.10.10.63
cumulus@border01:~$ nv set nve vxlan arp-nd-suppress on 
cumulus@border01:~$ nv set vrf VRF10 evpn vni 6000
cumulus@border01:~$ nv set system global anycast-mac 44:38:39:FF:00:FF
cumulus@border01:~$ nv set evpn enable on
cumulus@border01:~$ nv set router bgp autonomous-system 65163
cumulus@border01:~$ nv set router bgp router-id 10.10.10.63
cumulus@border01:~$ nv set vrf default router bgp peer-group underlay remote-as external
cumulus@border01:~$ nv set vrf default router bgp neighbor swp51 peer-group underlay
cumulus@border01:~$ nv set vrf default router bgp neighbor swp52 peer-group underlay
cumulus@border01:~$ nv set vrf default router bgp peer-group underlay address-family l2vpn-evpn enable on
cumulus@border01:~$ nv set vrf default router bgp address-family ipv4-unicast redistribute connected enable on
cumulus@border01:~$ nv set vrf VRF10 router bgp autonomous-system 65163
cumulus@border01:~$ nv set vrf VRF10 router bgp router-id 10.10.10.63
cumulus@border01:~$ nv set vrf VRF10 router bgp address-family ipv4-unicast redistribute connected enable on
cumulus@border01:~$ nv set vrf VRF10 router bgp peer-group underlay address-family l2vpn-evpn enable on
cumulus@border01:~$ nv set vrf VRF10 router bgp address-family ipv4-unicast route-export to-evpn
cumulus@border01:~$ nv set vrf VRF10 router bgp route-import from-evpn route-target 65101:4001
cumulus@border01:~$ nv set vrf VRF10 router bgp route-import from-evpn route-target 65101:4002
cumulus@border01:~$ nv set vrf EXTERNAL1 router bgp autonomous-system 65163
cumulus@border01:~$ nv set vrf EXTERNAL1 router bgp router-id 10.10.10.63
cumulus@border01:~$ nv set vrf EXTERNAL1 router bgp address-family ipv4-unicast redistribute connected enable on
cumulus@border01:~$ nv set vrf EXTERNAL1 router bgp peer-group underlay address-family l2vpn-evpn enable on
cumulus@border01:~$ nv set vrf EXTERNAL1 router bgp address-family ipv4-unicast route-export to-evpn
cumulus@border01:~$ nv set vrf EXTERNAL2 router bgp autonomous-system 65163
cumulus@border01:~$ nv set vrf EXTERNAL2 router bgp router-id 10.10.10.63
cumulus@border01:~$ nv set vrf EXTERNAL2 router bgp address-family ipv4-unicast redistribute connected enable on
cumulus@border01:~$ nv set vrf EXTERNAL2 router bgp peer-group underlay address-family l2vpn-evpn enable on
cumulus@border01:~$ nv set vrf EXTERNAL2 router bgp address-family ipv4-unicast route-export to-evpn
cumulus@border01:~$ nv config apply
cumulus@leaf01:~$ sudo cat /etc/nvue.d/startup.yaml
- set:
    bridge:
      domain:
        br_default:
          vlan:
            '10':
              vni:
                '10': {}
            '20':
              vni:
                '20': {}
            '30':
              vni:
                '30': {}
    evpn:
      enable: on
      multihoming:
        enable: on
    interface:
      bond1:
        bond:
          lacp-bypass: on
          member:
            swp1: {}
        bridge:
          domain:
            br_default:
              access: 10
        evpn:
          multihoming:
            segment:
              df-preference: 50000
              enable: on
              local-id: 1
              mac-address: 44:38:39:FF:00:AA
        link:
          mtu: 9000
        type: bond
      bond2:
        bond:
          lacp-bypass: on
          member:
            swp2: {}
        bridge:
          domain:
            br_default:
              access: 20
        evpn:
          multihoming:
            segment:
              df-preference: 50000
              enable: on
              local-id: 2
              mac-address: 44:38:39:FF:00:AA
        link:
          mtu: 9000
        type: bond
      bond3:
        bond:
          lacp-bypass: on
          member:
            swp3: {}
        bridge:
          domain:
            br_default:
              access: 30
        evpn:
          multihoming:
            segment:
              df-preference: 50000
              enable: on
              local-id: 3
              mac-address: 44:38:39:FF:00:AA
        link:
          mtu: 9000
        type: bond
      eth0:
        ip:
          address:
            dhcp: {}
          vrf: mgmt
        type: eth
      lo:
        ip:
          address:
            10.10.10.1/32: {}
        type: loopback
      swp1:
        type: swp
      swp2:
        type: swp
      swp3:
        type: swp
      swp51:
        evpn:
          multihoming:
            uplink: on
        type: swp
      swp52:
        evpn:
          multihoming:
            uplink: on
        type: swp
      vlan10:
        ip:
          address:
            10.1.10.2/24: {}
          vrf: RED
          vrr:
            address:
              10.1.10.1/24: {}
            enable: on
            mac-address: 00:00:00:00:00:10
            state:
              up: {}
        type: svi
        vlan: 10
      vlan20:
        ip:
          address:
            10.1.20.2/24: {}
          vrf: RED
          vrr:
            address:
              10.1.20.1/24: {}
            enable: on
            mac-address: 00:00:00:00:00:20
            state:
              up: {}
        type: svi
        vlan: 20
      vlan30:
        ip:
          address:
            10.1.30.2/24: {}
          vrf: BLUE
          vrr:
            address:
              10.1.30.1/24: {}
            enable: on
            mac-address: 00:00:00:00:00:30
            state:
              up: {}
        type: svi
        vlan: 30
    nve:
      vxlan:
        arp-nd-suppress: on
        enable: on
        source:
          address: 10.10.10.1
    router:
      bgp:
        autonomous-system: 65101
        enable: on
        router-id: 10.10.10.1
      vrr:
        enable: on
    service:
      ntp:
        mgmt:
          server:
            0.cumulusnetworks.pool.ntp.org: {}
            1.cumulusnetworks.pool.ntp.org: {}
            2.cumulusnetworks.pool.ntp.org: {}
            3.cumulusnetworks.pool.ntp.org: {}
    system:
      aaa:
        class:
          nvapply:
            action: allow
            command-path:
              /:
                permission: all
          nvshow:
            action: allow
            command-path:
              /:
                permission: ro
          sudo:
            action: allow
            command-path:
              /:
                permission: all
        role:
          nvue-admin:
            class:
              nvapply: {}
          nvue-monitor:
            class:
              nvshow: {}
          system-admin:
            class:
              nvapply: {}
              sudo: {}
        user:
          cumulus:
            full-name: cumulus,,,
            hashed-password: $6$yJf4CI.6MAcRaFk7$w4JpnsELzwZ.2IQmDCNbTOzXvn8tigF53ZQr5bev5HkZqcrvT6s/uV.NN3ejCXAEVS0B6Erm2gDAZmoZjhiiR0
            role: system-admin
      api:
        state: enabled
      config:
        auto-save:
          enable: on
      control-plane:
        acl:
          acl-default-dos:
            inbound: {}
          acl-default-whitelist:
            inbound: {}
      global:
        anycast-mac: 44:38:39:FF:00:AA
        system-mac: 44:38:39:22:01:7a
      hostname: leaf01
      reboot:
        mode: cold
      ssh-server:
        state: enabled
      wjh:
        channel:
          forwarding:
            trigger:
              l2: {}
              l3: {}
              tunnel: {}
        enable: on
    vrf:
      BLUE:
        evpn:
          enable: on
          vni:
            '4002': {}
        router:
          bgp:
            address-family:
              ipv4-unicast:
                enable: on
                redistribute:
                  connected:
                    enable: on
                route-export:
                  to-evpn:
                    enable: on
              l2vpn-evpn:
                enable: on
            autonomous-system: 65101
            enable: on
            peer-group:
              underlay:
                address-family:
                  l2vpn-evpn:
                    enable: on
            route-import:
              from-evpn:
                route-target:
                  65163:6000: {}
            router-id: 10.10.10.1
      RED:
        evpn:
          enable: on
          vni:
            '4001': {}
        router:
          bgp:
            address-family:
              ipv4-unicast:
                enable: on
                redistribute:
                  connected:
                    enable: on
                route-export:
                  to-evpn:
                    enable: on
              l2vpn-evpn:
                enable: on
            autonomous-system: 65101
            enable: on
            peer-group:
              underlay:
                address-family:
                  l2vpn-evpn:
                    enable: on
            route-import:
              from-evpn:
                route-target:
                  65163:6000: {}
            router-id: 10.10.10.1
      default:
        router:
          bgp:
            address-family:
              ipv4-unicast:
                enable: on
                redistribute:
                  connected:
                    enable: on
              l2vpn-evpn:
                enable: on
            enable: on
            neighbor:
              swp51:
                peer-group: underlay
                type: unnumbered
              swp52:
                peer-group: underlay
                type: unnumbered
            peer-group:
              underlay:
                address-family:
                  l2vpn-evpn:
                    enable: on
                remote-as: external
cumulus@border01:~$ sudo cat /etc/nvue.d/startup.yaml
- set:
    bridge:
      domain:
        br_default:
          vlan:
            '2001':
              vni:
                '2001': {}
            '2002':
              vni:
                '2002': {}
            '2010':
              vni:
                '2010': {}
    evpn:
      enable: on
      multihoming:
        enable: on
    interface:
      bond1:
        bond:
          lacp-bypass: on
          member:
            swp1: {}
        bridge:
          domain:
            br_default:
              access: 2001
        evpn:
          multihoming: {}
        link:
          mtu: 9000
        type: bond
      bond2:
        bond:
          lacp-bypass: on
          member:
            swp2: {}
        bridge:
          domain:
            br_default:
              access: 2002
        evpn:
          multihoming: {}
        link:
          mtu: 9000
        type: bond
      bond3:
        bond:
          lacp-bypass: on
          member:
            swp3: {}
        bridge:
          domain:
            br_default:
              access: 2010
        evpn:
          multihoming: {}
        link:
          mtu: 9000
        type: bond
      eth0:
        ip:
          address:
            dhcp: {}
          vrf: mgmt
        type: eth
      lo:
        ip:
          address:
            10.10.10.63/32: {}
        type: loopback
      swp1:
        type: swp
      swp2:
        type: swp
      swp3:
        type: swp
      swp51:
        evpn:
          multihoming: {}
        type: swp
      swp52:
        evpn:
          multihoming: {}
        type: swp
      vlan2001:
        ip:
          address:
            10.1.201.1/24: {}
          vrf: EXTERNAL1
        type: svi
        vlan: 2001
      vlan2002:
        ip:
          address:
            10.1.202.1/24: {}
          vrf: EXTERNAL2
        type: svi
        vlan: 2002
      vlan2010:
        ip:
          address:
            10.1.210.1/24: {}
          vrf: VRF10
        type: svi
        vlan: 2010
    nve:
      vxlan:
        arp-nd-suppress: on
        enable: on
        source:
          address: 10.10.10.63
    router:
      bgp:
        autonomous-system: 65163
        enable: on
        router-id: 10.10.10.63
    service:
      ntp:
        mgmt:
          server:
            0.cumulusnetworks.pool.ntp.org: {}
            1.cumulusnetworks.pool.ntp.org: {}
            2.cumulusnetworks.pool.ntp.org: {}
            3.cumulusnetworks.pool.ntp.org: {}
    system:
      aaa:
        class:
          nvapply:
            action: allow
            command-path:
              /:
                permission: all
          nvshow:
            action: allow
            command-path:
              /:
                permission: ro
          sudo:
            action: allow
            command-path:
              /:
                permission: all
        role:
          nvue-admin:
            class:
              nvapply: {}
          nvue-monitor:
            class:
              nvshow: {}
          system-admin:
            class:
              nvapply: {}
              sudo: {}
        user:
          cumulus:
            full-name: cumulus,,,
            hashed-password: $6$sz.v3Uf8h2bL19/6$zxzdafQL5gqGp63/t/Vmg34IuZ6ztC3ie3g08KwmhWRBnFrb52d2qzMUJxn4dUpJZSwkkDmScJwSvljH1RwYj.
            role: system-admin
      api:
        state: enabled
      config:
        auto-save:
          enable: on
      control-plane:
        acl:
          acl-default-dos:
            inbound: {}
          acl-default-whitelist:
            inbound: {}
      global:
        anycast-mac: 44:38:39:FF:00:FF
        system-mac: 44:38:39:22:01:74
      hostname: border01
      reboot:
        mode: cold
      ssh-server:
        state: enabled
      wjh:
        channel:
          forwarding:
            trigger:
              l2: {}
              l3: {}
              tunnel: {}
        enable: on
    vrf:
      EXTERNAL1:
        router:
          bgp:
            address-family:
              ipv4-unicast:
                enable: on
                redistribute:
                  connected:
                    enable: on
                route-export:
                  to-evpn:
                    enable: on
              l2vpn-evpn:
                enable: on
            autonomous-system: 65163
            enable: on
            peer-group:
              underlay:
                address-family:
                  l2vpn-evpn:
                    enable: on
            router-id: 10.10.10.63
      EXTERNAL2:
        router:
          bgp:
            address-family:
              ipv4-unicast:
                enable: on
                redistribute:
                  connected:
                    enable: on
                route-export:
                  to-evpn:
                    enable: on
              l2vpn-evpn:
                enable: on
            autonomous-system: 65163
            enable: on
            peer-group:
              underlay:
                address-family:
                  l2vpn-evpn:
                    enable: on
            router-id: 10.10.10.63
      VRF10:
        evpn:
          enable: on
          vni:
            '6000': {}
        router:
          bgp:
            address-family:
              ipv4-unicast:
                enable: on
                redistribute:
                  connected:
                    enable: on
                route-export:
                  to-evpn:
                    enable: on
              l2vpn-evpn:
                enable: on
            autonomous-system: 65163
            enable: on
            peer-group:
              underlay:
                address-family:
                  l2vpn-evpn:
                    enable: on
            route-import:
              from-evpn:
                route-target:
                  65101:4001: {}
                  65101:4002: {}
            router-id: 10.10.10.63
      default:
        router:
          bgp:
            address-family:
              ipv4-unicast:
                enable: on
                redistribute:
                  connected:
                    enable: on
              l2vpn-evpn:
                enable: on
            enable: on
            neighbor:
              swp51:
                peer-group: underlay
                type: unnumbered
              swp52:
                peer-group: underlay
                type: unnumbered
            peer-group:
              underlay:
                address-family:
                  l2vpn-evpn:
                    enable: on
                remote-as: external
cumulus@leaf01:~$ sudo cat /etc/network/interfaces
...
auto lo
iface lo inet loopback
    address 10.10.10.1/32
    vxlan-local-tunnelip 10.10.10.1
auto mgmt
iface mgmt
    address 127.0.0.1/8
    address ::1/128
    vrf-table auto
auto RED
iface RED
    vrf-table auto
auto BLUE
iface BLUE
    vrf-table auto
auto eth0
iface eth0 inet dhcp
    ip-forward off
    ip6-forward off
    vrf mgmt
auto swp1
iface swp1
auto swp2
iface swp2
auto swp3
iface swp3
auto swp51
iface swp51
auto swp52
iface swp52
auto bond1
iface bond1
    mtu 9000
    es-sys-mac 44:38:39:FF:00:AA
    bond-slaves swp1
    bond-mode 802.3ad
    bond-lacp-bypass-allow yes
    bridge-access 10
auto bond2
iface bond2
    mtu 9000
    es-sys-mac 44:38:39:FF:00:AA
    bond-slaves swp2
    bond-mode 802.3ad
    bond-lacp-bypass-allow yes
    bridge-access 20
auto bond3
iface bond3
    mtu 9000
    es-sys-mac 44:38:39:FF:00:AA
    bond-slaves swp3
    bond-mode 802.3ad
    bond-lacp-bypass-allow yes
    bridge-access 30
auto vlan10
iface vlan10
    address 10.1.10.2/24
    address-virtual 00:00:00:00:00:10 10.1.10.1/24
    hwaddress 44:38:39:22:01:b1
    vrf RED
    vlan-raw-device br_default
    vlan-id 10
auto vlan20
iface vlan20
    address 10.1.20.2/24
    address-virtual 00:00:00:00:00:20 10.1.20.1/24
    hwaddress 44:38:39:22:01:b1
    vrf RED
    vlan-raw-device br_default
    vlan-id 20
auto vlan30
iface vlan30
    address 10.1.30.2/24
    address-virtual 00:00:00:00:00:30 10.1.30.1/24
    hwaddress 44:38:39:22:01:b1
    vrf BLUE
    vlan-raw-device br_default
    vlan-id 30
auto vxlan48
iface vxlan48
    bridge-vlan-vni-map 10=10 20=20 30=30
    bridge-vids 10 20 30
    bridge-learning off
auto vlan220_l3
iface vlan220_l3
    vrf RED
    vlan-raw-device br_l3vni
    vlan-id 220
auto vlan297_l3
iface vlan297_l3
    vrf BLUE
    vlan-raw-device br_l3vni
    vlan-id 297
auto vxlan99
iface vxlan99
    bridge-vlan-vni-map 220=4001 297=4002
    bridge-vids 220 297
    bridge-learning off
auto br_default
iface br_default
    bridge-ports bond1 bond2 bond3 vxlan48
    hwaddress 44:38:39:22:01:b1
    bridge-vlan-aware yes
    bridge-vids 10 20 30
    bridge-pvid 1
auto br_l3vni
iface br_l3vni
    bridge-ports vxlan99
    hwaddress 44:38:39:22:01:b1
    bridge-vlan-aware yes
cumulus@border01:~$ sudo cat /etc/network/interfaces
...
auto lo
iface lo inet loopback
    address 10.10.10.63/32
    vxlan-local-tunnelip 10.10.10.63
auto mgmt
iface mgmt
    address 127.0.0.1/8
    address ::1/128
    vrf-table auto
auto EXTERNAL1
iface EXTERNAL1
    vrf-table auto
auto EXTERNAL2
iface EXTERNAL2
    vrf-table auto
auto VRF10
iface VRF10
    vrf-table auto
auto eth0
iface eth0 inet dhcp
    ip-forward off
    ip6-forward off
    vrf mgmt
auto bond1
iface bond1
    mtu 9000
    bond-slaves swp1
    bond-mode 802.3ad
    bond-lacp-bypass-allow yes
    bridge-access 2001
auto bond2
iface bond2
    mtu 9000
    bond-slaves swp2
    bond-mode 802.3ad
    bond-lacp-bypass-allow yes
    bridge-access 2002
auto bond3
iface bond3
    mtu 9000
    bond-slaves swp3
    bond-mode 802.3ad
    bond-lacp-bypass-allow yes
    bridge-access 2010
auto swp1
iface swp1
auto swp2
iface swp2
auto swp3
iface swp3
auto swp51
iface swp51
auto swp52
iface swp52
auto vlan2001
iface vlan2001
    address 10.1.201.1/24
    hwaddress 44:38:39:22:01:74
    vrf EXTERNAL1
    vlan-raw-device br_default
    vlan-id 2001
auto vlan2002
iface vlan2002
    address 10.1.202.1/24
    hwaddress 44:38:39:22:01:74
    vrf EXTERNAL2
    vlan-raw-device br_default
    vlan-id 2002
auto vlan2010
iface vlan2010
    address 10.1.210.1/24
    hwaddress 44:38:39:22:01:74
    vrf VRF10
    vlan-raw-device br_default
    vlan-id 2010
auto vxlan48
iface vxlan48
    bridge-vlan-vni-map 2001=2001 2002=2002 2010=2010
    bridge-learning off
auto vlan336_l3
iface vlan336_l3
    vrf VRF10
    vlan-raw-device br_l3vni
    vlan-id 336
auto vxlan99
iface vxlan99
    bridge-vlan-vni-map 336=6000
    bridge-learning off
auto br_default
iface br_default
    bridge-ports bond1 bond2 bond3 vxlan48
    hwaddress 44:38:39:22:01:74
    bridge-vlan-aware yes
    bridge-vids 2001 2002 2010
    bridge-pvid 1
auto br_l3vni
iface br_l3vni
    bridge-ports vxlan99
    hwaddress 44:38:39:22:01:74
    bridge-vlan-aware yes
cumulus@leaf01:~$ sudo cat /etc/frr/frr.conf
...
evpn mh mac-holdtime 1080
evpn mh neigh-holdtime 1080
evpn mh startup-delay 180
interface bond1
evpn mh es-df-pref 50000
evpn mh es-id 1
evpn mh es-sys-mac 44:38:39:FF:00:AA
interface bond2
evpn mh es-df-pref 50000
evpn mh es-id 2
evpn mh es-sys-mac 44:38:39:FF:00:AA
interface bond3
evpn mh es-df-pref 50000
evpn mh es-id 3
evpn mh es-sys-mac 44:38:39:FF:00:AA
interface swp51
evpn mh uplink
interface swp52
evpn mh uplink
vrf BLUE
vni 4002
exit-vrf
vrf RED
vni 4001
exit-vrf
vrf default
exit-vrf
vrf mgmt
exit-vrf
router bgp 65101 vrf default
bgp router-id 10.10.10.1
timers bgp 3 9
bgp deterministic-med
! Neighbors
neighbor underlay peer-group
neighbor underlay remote-as external
neighbor underlay timers 3 9
neighbor underlay timers connect 10
neighbor underlay advertisement-interval 0
no neighbor underlay capability extended-nexthop
neighbor swp51 interface peer-group underlay
neighbor swp51 timers 3 9
neighbor swp51 timers connect 10
neighbor swp51 advertisement-interval 0
neighbor swp51 capability extended-nexthop
neighbor swp52 interface peer-group underlay
neighbor swp52 timers 3 9
neighbor swp52 timers connect 10
neighbor swp52 advertisement-interval 0
neighbor swp52 capability extended-nexthop
! Address families
address-family ipv4 unicast
redistribute connected
maximum-paths ibgp 64
maximum-paths 64
distance bgp 20 200 200
neighbor swp51 activate
neighbor swp52 activate
neighbor underlay activate
exit-address-family
address-family l2vpn evpn
advertise-all-vni
neighbor swp51 activate
neighbor swp52 activate
neighbor underlay activate
exit-address-family
! end of router bgp 65101 vrf default
router bgp 65101 vrf RED
bgp router-id 10.10.10.1
timers bgp 3 9
bgp deterministic-med
! Neighbors
! Address families
address-family ipv4 unicast
redistribute connected
maximum-paths ibgp 64
maximum-paths 64
distance bgp 20 200 200
exit-address-family
address-family l2vpn evpn
advertise ipv4 unicast
route-target import 65163:6000
exit-address-family
! end of router bgp 65101 vrf RED
router bgp 65101 vrf BLUE
bgp router-id 10.10.10.1
timers bgp 3 9
bgp deterministic-med
! Neighbors
! Address families
address-family ipv4 unicast
redistribute connected
maximum-paths ibgp 64
maximum-paths 64
distance bgp 20 200 200
exit-address-family
address-family l2vpn evpn
advertise ipv4 unicast
route-target import 65163:6000
exit-address-family
! end of router bgp 65101 vrf BLUE
cumulus@border01:~$ sudo cat /etc/frr/frr.conf
vrf EXTERNAL1
exit-vrf
vrf EXTERNAL2
exit-vrf
vrf VRF10
vni 6000
exit-vrf
vrf default
exit-vrf
vrf mgmt
exit-vrf
router bgp 65163 vrf default
bgp router-id 10.10.10.63
timers bgp 3 9
bgp deterministic-med
! Neighbors
neighbor underlay peer-group
neighbor underlay remote-as external
neighbor underlay timers 3 9
neighbor underlay timers connect 10
neighbor underlay advertisement-interval 0
no neighbor underlay capability extended-nexthop
neighbor swp51 interface peer-group underlay
neighbor swp51 timers 3 9
neighbor swp51 timers connect 10
neighbor swp51 advertisement-interval 0
neighbor swp51 capability extended-nexthop
neighbor swp52 interface peer-group underlay
neighbor swp52 timers 3 9
neighbor swp52 timers connect 10
neighbor swp52 advertisement-interval 0
neighbor swp52 capability extended-nexthop
! Address families
address-family ipv4 unicast
redistribute connected
maximum-paths ibgp 64
maximum-paths 64
distance bgp 20 200 200
neighbor swp51 activate
neighbor swp52 activate
neighbor underlay activate
exit-address-family
address-family l2vpn evpn
advertise-all-vni
neighbor swp51 activate
neighbor swp52 activate
neighbor underlay activate
exit-address-family
! end of router bgp 65163 vrf default
router bgp 65163 vrf EXTERNAL1
bgp router-id 10.10.10.63
timers bgp 3 9
bgp deterministic-med
! Neighbors
neighbor underlay peer-group
neighbor underlay timers 3 9
neighbor underlay timers connect 10
neighbor underlay advertisement-interval 0
no neighbor underlay capability extended-nexthop
! Address families
address-family ipv4 unicast
redistribute connected
maximum-paths ibgp 64
maximum-paths 64
distance bgp 20 200 200
neighbor underlay activate
exit-address-family
address-family l2vpn evpn
advertise ipv4 unicast
neighbor underlay activate
exit-address-family
! end of router bgp 65163 vrf EXTERNAL1
router bgp 65163 vrf EXTERNAL2
bgp router-id 10.10.10.63
timers bgp 3 9
bgp deterministic-med
! Neighbors
neighbor underlay peer-group
neighbor underlay timers 3 9
neighbor underlay timers connect 10
neighbor underlay advertisement-interval 0
no neighbor underlay capability extended-nexthop
! Address families
address-family ipv4 unicast
redistribute connected
maximum-paths ibgp 64
maximum-paths 64
distance bgp 20 200 200
neighbor underlay activate
exit-address-family
address-family l2vpn evpn
advertise ipv4 unicast
neighbor underlay activate
exit-address-family
! end of router bgp 65163 vrf EXTERNAL2
router bgp 65163 vrf VRF10
bgp router-id 10.10.10.63
timers bgp 3 9
bgp deterministic-med
! Neighbors
neighbor underlay peer-group
neighbor underlay timers 3 9
neighbor underlay timers connect 10
neighbor underlay advertisement-interval 0
no neighbor underlay capability extended-nexthop
! Address families
address-family ipv4 unicast
redistribute connected
maximum-paths ibgp 64
maximum-paths 64
distance bgp 20 200 200
neighbor underlay activate
exit-address-family
address-family l2vpn evpn
advertise ipv4 unicast
route-target import 65101:4001
route-target import 65101:4002
neighbor underlay activate
exit-address-family
! end of router bgp 65163 vrf VRF10

此模拟正在运行 Cumulus Linux 5.11。Cumulus Linux 5.12 模拟即将推出。

此模拟以示例下游 VNI 配置开始。为了简化示例,拓扑中只有一个 spine。演示已使用 NVUE 命令预先配置。

  • fw1 在 VRF10 中,于 border01 之外配置了 IP 地址 10.1.210.254。
  • server01 的 IP 地址为 10.1.10.101,与示例中相同。

要验证配置,请运行下面显示的验证命令。

验证配置

要验证配置,请检查路由是否已正确接收和标记

以下在 leaf01 上的 vtysh 命令显示了来自 border01 的路由,该路由使用路由目标 6000 标记

cumulus@leaf01:~$ sudo vtysh
leaf01# show bgp l2vpn evpn route type prefix
...
Route Distinguisher: 10.10.10.63:3
*> [5]:[0]:[24]:[10.1.210.0]
                    10.10.10.63                            0 65222 65163 ?
                    RT:65163:6000 ET:8 Rmac:44:38:39:22:01:b3
...

以下在 leaf01 上的 Linux 命令显示了路由上的封装 ID (6000)

cumulus@leaf01:mgmt:~$ ip route show vrf RED 10.1.210.0/24
10.1.210.0/24  encap ip id 6000 src 0.0.0.0 dst 10.10.10.63 ttl 0 tos 0 via 10.10.10.63 dev vxlan99 proto bgp metric 20 onlink

以下在 border01 上的 vtysh 命令显示了来自 leaf01 的路由,这些路由使用路由目标 4001 和 4002 标记

cumulus@border01:~$ sudo vtysh
border01# show bgp l2vpn evpn route type prefix
...
Route Distinguisher: 10.10.10.1:2
*> [5]:[0]:[24]:[10.1.10.0]
                    10.10.10.1                             0 65222 65101 ?
                    RT:65101:4001 ET:8 Rmac:44:38:39:22:01:b1
*> [5]:[0]:[24]:[10.1.20.0]
                    10.10.10.1                             0 65222 65101 ?
                    RT:65101:4001 ET:8 Rmac:44:38:39:22:01:b1
Route Distinguisher: 10.10.10.1:3
*> [5]:[0]:[24]:[10.1.30.0]
                    10.10.10.1                             0 65222 65101 ?
                    RT:65101:4002 ET:8 Rmac:44:38:39:22:01:b1
...

以下在 border01 上的 Linux 命令显示了路由上的封装 ID (4001 和 4002)

cumulus@border01:mgmt:~$ ip route show vrf VRF10
10.1.10.0/24  encap ip id 4001 src 0.0.0.0 dst 10.10.10.1 ttl 0 tos 0 via 10.10.10.1 dev vxlan99 proto bgp metric 20 onlink 
10.1.20.0/24  encap ip id 4001 src 0.0.0.0 dst 10.10.10.1 ttl 0 tos 0 via 10.10.10.1 dev vxlan99 proto bgp metric 20 onlink 
10.1.30.0/24  encap ip id 4002 src 0.0.0.0 dst 10.10.10.1 ttl 0 tos 0 via 10.10.10.1 dev vxlan99 proto bgp metric 20 onlink 
...

注意事项

在网关上启用 ARP 抑制的集中式路由

在 EVPN 集中式路由配置中,当第 2 层网络扩展到 VTEP 之外时(例如,具有网桥的主机),当网关上存在 ARP 抑制时,网关 MAC 地址不会在网络中刷新。要解决此问题,请在集中式网关上禁用 ARP 抑制。

对称路由和跨机架的相同 SVI IP 地址

在 EVPN 对称路由中,如果您在跨机架使用相同的 SVI IP 地址(例如,如果特定 VLAN 接口(如 vlan100)的 SVI IP 地址在存在此 SVI 的所有 VTEP 上都相同)

  • 您不能使用 SVI IP 地址之间的 ping 来验证 VTEP 之间的连接,因为本地机架本身或远程机架都可能使用 ping 目标 IP 地址。
  • 如果您从主机 ping SVI IP 地址,有时,如果主机具有来自远程网关的 ARP 条目,则本地 VTEP(网关)不会回复。

主机到主机的流量没有这些问题。