基本配置
以下部分提供了在基于 BGP-EVPN 的第 2 层扩展部署中使用 EVPN 作为 VXLAN 控制平面所需的基本配置。有关第 3 层多租户配置,请参阅 子网间路由。有关其他 EVPN 配置,请参阅 EVPN 增强功能。
基本 EVPN 配置命令
在基于 BGP-EVPN 的第 2 层扩展部署中的基本配置需要您执行以下操作:
- 配置 VXLAN 接口
- 配置 BGP
- 激活 EVPN 地址族并在 BGP 邻居之间启用 EVPN
对于仅参与 EVPN 路由交换的非 VTEP 设备,例如网络部署使用逐跳 eBGP 的 Spine 交换机或交换机充当 iBGP 路由反射器的情况,则不需要配置 VXLAN 接口。
配置 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 设备。
配置 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
- 激活 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
编辑 /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 设备。
- 使用 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:~$
- 激活 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。