基本配置

以下部分提供了在基于 BGP-EVPN 的第 2 层扩展部署中使用 EVPN 作为 VXLAN 控制平面所需的基本配置。有关第 3 层多租户配置,请参阅 子网间路由。有关其他 EVPN 配置,请参阅 EVPN 增强功能

基本 EVPN 配置命令

在基于 BGP-EVPN 的第 2 层扩展部署中的基本配置需要您执行以下操作:

  • 配置 VXLAN 接口
  • 配置 BGP
  • 激活 EVPN 地址族并在 BGP 邻居之间启用 EVPN

对于仅参与 EVPN 路由交换的非 VTEP 设备,例如网络部署使用逐跳 eBGP 的 Spine 交换机或交换机充当 iBGP 路由反射器的情况,则不需要配置 VXLAN 接口。

  1. 配置 VXLAN 接口。以下示例创建一个 VXLAN 设备 (vxlan0),将 VLAN 10 映射到 vni10,将 VLAN 20 映射到 vni20,将 VXLAN 设备添加到默认网桥 br_default,并将 VXLAN 本地隧道 IP 地址设置为 10.10.10.1。

    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 nve vxlan source address 10.10.10.1
    cumulus@leaf01:~$ nv config apply
    

    要创建传统的 VXLAN 设备,其中每个 VNI 代表一个单独的设备,而不是单个设备模型中的一组 VNI,请参阅 VXLAN 设备

  2. 配置 BGP。以下示例命令为 leaf01 和 spine01 分配 ASN 和路由器 ID,指定两个 BGP 对等体之间的接口,以及要通告的前缀。有关如何配置 BGP 的完整信息,请参阅 边界网关协议 - BGP

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 neighbor swp51 remote-as external
cumulus@leaf01:~$ nv set vrf default router bgp address-family ipv4-unicast network 10.10.10.1/32
cumulus@leaf01:~$ nv config apply
cumulus@spine01:~$ nv set router bgp autonomous-system 65199
cumulus@spine01:~$ nv set router bgp router-id 10.10.10.101
cumulus@spine01:~$ nv set vrf default router bgp neighbor swp1 remote-as external
cumulus@spine01:~$ nv set vrf default router bgp address-family ipv4-unicast network 10.10.10.101/32
cumulus@spine01:~$ nv config apply
  1. 激活 EVPN 地址族并在 BGP 邻居之间启用 EVPN。以下示例命令在 leaf01 和 spine01 之间启用 EVPN
cumulus@leaf01:~$ nv set evpn enable on
cumulus@leaf01:~$ nv set vrf default router bgp address-family l2vpn-evpn enable on
cumulus@leaf01:~$ nv set vrf default router bgp neighbor swp51 address-family l2vpn-evpn enable on
cumulus@leaf01:~$ nv config apply

您无需使用 NVUE 和 advertise-all-vni 选项为交换机上配置的所有 VNI 启用 BGP 控制平面。FRR 知道任何本地 VNI 和 MAC,以及与这些 VNI 关联的主机(邻居)。

NVUE 在 /etc/nvue.d/startup.yaml 文件中创建以下配置代码段

cumulus@leaf01:~$ sudo cat /etc/nvue.d/startup.yaml
- set:
    interface:
      lo:
        ip:
          address:
            10.10.10.1/32: {}
        type: loopback
    bridge:
      domain:
        br_default:
          vlan:
            '10':
              vni:
                '10': {}
            '20':
              vni:
                '20': {}
    nve:
      vxlan:
        enable: on
        source:
          address: 10.10.10.1
    router:
      bgp:
        autonomous-system: 65101
        enable: on
        router-id: 10.10.10.1
    vrf:
      default:
        router:
          bgp:
            peer:
              swp51:
                remote-as: external
                type: unnumbered
            enable: on
            address-family:
              ipv4-unicast:
                network:
                  10.10.10.1/32: {}
                enable: on
cumulus@spine01:~$ nv set vrf default router bgp address-family l2vpn-evpn enable on
cumulus@spine01:~$ nv set vrf default router bgp neighbor swp1 address-family l2vpn-evpn enable on
cumulus@spine01:~$ nv config apply

NVUE 在 /etc/nvue.d/startup.yaml 文件中创建以下配置代码段

cumulus@spine01:~$ sudo cat /etc/nvue.d/startup.yaml
- set:
    interface:
      lo:
        ip:
          address:
            10.10.10.101/32: {}
        type: loopback
    bridge:
      domain:
        br_default:
          vlan:
            '10':
              vni:
                '10': {}
            '20':
              vni:
                '20': {}
    nve:
      vxlan:
        enable: on
        source:
          address: 10.10.10.101
    router:
      bgp:
        autonomous-system: 65199
        enable: on
        router-id: 10.10.10.101
    vrf:
      default:
        router:
          bgp:
            peer:
              swp1:
                remote-as: external
                type: unnumbered
            enable: on
            address-family:
              ipv4-unicast:
                network:
                  10.10.10.101/32: {}
                enable: on
  1. 编辑 /etc/network/interfaces 文件以创建一个 VXLAN 设备,将其附加到网桥,将 VLAN 映射到 VNI,并设置 VXLAN 本地隧道 IP 地址。以下示例创建一个 VXLAN 接口 (vxlan0),将 VLAN 10 映射到 vni10,将 VLAN 20 映射到 vni20,并将 VXLAN 本地隧道 IP 地址设置为 10.10.10.1。

    cumulus@leaf01:~$ sudo nano /etc/network/interfaces
    ...
    auto lo
    iface lo inet loopback
            address 10.10.10.1/32
            vxlan-local-tunnelip 10.10.10.1
    ...
    auto vxlan0
    iface vxlan0
     bridge-vlan-vni-map 10=10 20=20
     bridge-vids 10 20
     bridge-learning off
    
    auto br_default
    iface br_default
            bridge-ports swp1 swp2 vxlan0
            bridge-vlan-aware yes
            bridge-vids 10 20
            bridge-pvid 1
    

要创建传统的 VXLAN 设备,其中每个 VNI 代表一个单独的设备,而不是单个设备模型中的一组 VNI,请参阅 VXLAN 设备

  1. 使用 vtysh 命令配置 BGP。以下示例命令为 leaf01 和 spine01 分配 ASN 和路由器 ID,指定两个 BGP 对等体之间的接口,以及要通告的前缀。有关如何配置 BGP 的完整信息,请参阅 边界网关协议 - BGP
cumulus@leaf01:~$ sudo vtysh
leaf01# configure terminal
leaf01(config)# router bgp 65101
leaf01(config-router)# bgp router-id 10.10.10.1
leaf01(config-router)# neighbor swp51 remote-as external
leaf01(config-router)# address-family ipv4
leaf01(config-router-af)# network 10.10.10.1/32
leaf01(config-router-af)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$
cumulus@spine01:~$ sudo vtysh
spine01# configure terminal
spine01(config)# router bgp 65199
spine01(config-router)# bgp router-id 10.10.10.101
spine01(config-router)# neighbor swp1 remote-as external
spine01(config-router)# address-family ipv4
spine01(config-router-af)# network 10.10.10.101/32
spine01(config-router-af)# end
spine01# write memory
spine01# exit
cumulus@spine01:~$
  1. 激活 EVPN 地址族并在 BGP 邻居之间启用 EVPN。以下示例命令在 leaf01 和 spine01 之间启用 EVPN。这些命令自动配置所有本地配置的 VNI,以便 BGP 控制平面可以通告它们。
cumulus@leaf01:~$ sudo vtysh

leaf01# configure terminal leaf01(config)# router bgp 65101 leaf01(config-router)# bgp router-id 10.10.10.1 leaf01(config-router)# neighbor swp51 interface remote-as external leaf01(config-router)# address-family l2vpn evpn leaf01(config-router-af)# neighbor swp51 activate leaf01(config-router-af)# advertise-all-vni leaf01(config-router-af)# end leaf01# write memory leaf01# exit cumulus@leaf01:~$

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

...
router bgp 65101
  bgp router-id 10.10.10.1
  neighbor swp51 interface remote-as external
  address-family l2vpn evpn
neighbor swp51 activate
  advertise-all-vni
...
cumulus@spine01:~$ sudo vtysh

spine01# configure terminal spine01(config)# router bgp 65199 spine01(config-router)# bgp router-id 10.10.10.101 spine01(config-router)# neighbor swp1 interface remote-as external spine01(config-router)# address-family l2vpn evpn spine01(config-router-af)# neighbor swp1 activate spine01(config-router-af)# end spine01# write memory spine01# exit cumulus@spine01:~$

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

...
router bgp 65199
  bgp router-id 10.10.10.101
  neighbor swp1 interface remote-as external
  address-family l2vpn evpn
neighbor swp1 activate
...

您只需要在作为 VTEP 的叶交换机上设置 advertise-all-vni 选项。即使没有此选项,交换机也会接受来自 BGP 对等体的 EVPN 路由。这些路由位于全局 EVPN 路由表中,但 Cumulus Linux 仅在接收到的路由对应的 VNI 在本地已知时才将其导入到每个 VNI 的路由表中,并在内核中安装相应的条目。

显示 EVPN 配置

要显示交换机上当前的 EVPN 配置,请运行 nv show evpn 命令

cumulus@leaf01:~$ nv show evpn  
                       operational   applied      
---------------------  ------------  -------------
enable                               on           
route-advertise                                   
  nexthop-setting                    system-ip-mac
  svi-ip               off           off          
  default-gateway      off           off          
dad                                               
  enable               on            on           
  mac-move-threshold   5             5            
  move-window          180           180          
  duplicate-action     warning-only  warning-only 
[vni]                                             
multihoming                                       
  enable                             off          
  mac-holdtime         1080                       
  neighbor-holdtime    1080                       
  startup-delay        180                        
  startup-delay-timer  --:--:--                   
  uplink-count         0                          
  uplink-active        0                          
l2vni-count            3                          
l3vni-count            2

您还可以使用 nv show evpn -o json 命令以 json 格式显示 EVPN 配置,或使用 nv show evpn -o yaml 命令以 yaml 格式显示。

EVPN 和 VXLAN 主动-主动模式

对于 VXLAN 主动-主动模式下的 EVPN,MLAG 对中的两台交换机都与其他 EVPN 对等体(例如,如果使用逐跳 eBGP,则与 spine 交换机)建立 EVPN 对等连接,并告知其本地已知的 VNI 和 MAC。当 MLAG 处于活动状态时,两台交换机都使用共享的任播 IP 地址通告此信息。

对于主动-主动配置,请确保:

  • clagd-vxlan-anycast-ip 和 vxlan-local-tunnelip 参数都位于两个对等体上的环回配置节下。
  • 两个对等体都将任播地址通告到路由网络。
  • 两个对等体上的 VNI 配置必须相同。
  • 对等链路属于网桥。

MLAG 同步 MLAG 对中两台交换机之间的信息;EVPN 不会同步。

对于 VXLAN 主动-主动模式下的 EVPN 对称配置中的类型 5 路由,Cumulus Linux 使用主 IP 地址通告。有关配置主 IP 地址通告的信息,请参阅 通告主 IP 地址

有关主动-主动 VTEP 和任播 IP 行为以及故障场景的信息,请参阅 VXLAN 主动-主动模式

注意事项

  • 当您在 VTEP 上启用 EVPN 时,交换机会将其所有本地定义的 VNI 和其他信息(例如 MAC 地址)通告给 EVPN 对等体。没有仅通告某些 VNI 的规定。
  • 您只能在 Spectrum_A1 及更高版本上使用 ND 抑制。
  • Cumulus Linux 默认启用 ARP 抑制。但是,在 VXLAN 主动-主动 配置中,如果交换机不抑制 ARP,则控制平面不会同步以主动-主动模式运行的两台交换机之间的邻居条目。您不会看到对转发有任何影响。
  • 您必须在特定的 VRF 中配置 overlay(租户),并与位于默认 VRF 中的 underlay 分开。Cumulus Linux 不支持默认 VRF 的第 3 层 VNI 映射。
  • 您不能将 EVPN 与 重分发邻居 一起配置。同时启用这两个功能会导致 IPv4 和 IPv6 邻居条目不稳定。
  • 为了符合 RFC 6514,Cumulus Linux 对接收到的 type-3 路由执行更严格的检查,以确保 PMSI 属性是 ingress-replication。