VXLAN 设备

Cumulus Linux 支持单 VXLAN 设备和传统 VXLAN 设备。

  • 您只能在支持 VLAN 的桥接模式下配置单 VXLAN 设备。
  • 您不能同时使用单 VXLAN 设备和传统 VXLAN 设备。
  • 传统 VXLAN 设备配置最多支持 2000 个 VNI,而单 VXLAN 设备配置最多支持 4000 个 VNI。
  • NVIDIA 建议您使用单 VXLAN 设备而不是传统 VXLAN 设备。

单 VXLAN 设备

使用单 VXLAN 设备时,一组 VNI 代表单个设备模型。单 VXLAN 设备具有一组属于 VXLAN 构造的属性。各个 VNI 包括 VLAN 到 VNI 的映射,您可以指定哪些 VLAN 映射到关联的 VNI。单 VXLAN 设备通过用单个 VXLAN 设备替换多个传统 VXLAN 设备,从而简化了配置并减少了开销。

当配置多个支持 VLAN 的网桥时,Cumulus Linux 支持多个单 VXLAN 设备。配置多个单 VXLAN 设备的方式与配置单个 VXLAN 设备的方式相同。确保不要跨单 VXLAN 设备配置重复 VNI。

多个支持 VLAN 的网桥列出的限制也适用于多个单 VXLAN 设备。

您可以使用 NVUE 配置单 VXLAN 设备,也可以手动编辑 /etc/network/interfaces 文件。当您使用 NVUE 配置单 VXLAN 设备时,Cumulus Linux 会以 vxlan<id> 格式为设备创建唯一的名称。Cumulus Linux 使用网桥名称作为哈希键生成 ID。

以下静态 VXLAN 示例配置

  • 创建一个单 VXLAN 设备 (vxlan48)
  • 将 VLAN 10 映射到 VNI 10,并将 VLAN 20 映射到 VNI 20
  • 将 VXLAN 设备添加到默认网桥 br_default
  • 将 VNI 10 的洪泛组播组设置为 239.1.1.110,并将 VNI 20 的组播组设置为 239.1.1.120
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 set bridge domain br_default vlan 10 vni 10 flooding multicast-group 239.1.1.110
cumulus@leaf01:~$ nv set bridge domain br_default vlan 20 vni 20 flooding multicast-group 239.1.1.120
cumulus@leaf01:~$ nv set interface swp1 bridge domain br_default access 10
cumulus@leaf01:~$ nv set interface swp2 bridge domain br_default access 20
cumulus@leaf01:~$ nv config apply

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

cumulus@leaf01:~$ sudo cat /etc/nvue.d/startup.yaml
- set:
    bridge:
      domain:
        br_default:
          vlan:
            '10':
              vni:
                '10':
                  flooding:
                    multicast-group: 239.1.1.110
                    enable: on
            '20':
              vni:
                '20':
                  flooding:
                    multicast-group: 239.1.1.120
                    enable: on
    nve:
      vxlan:
        enable: on
        source:
          address: 10.10.10.1
    interface:
      swp1:
        bridge:
          domain:
            br_default:
              access: 10
        type: swp
      swp2:
        bridge:
          domain:
            br_default:
              access: 20
        type: swp

编辑 /etc/network/interfaces 文件,然后运行 ifreload -a 命令。

cumulus@leaf01:~$ sudo nano /etc/network/interfaces
...
auto swp1
iface swp1
    bridge-access 10

auto swp2
iface swp2
    bridge-access 20

auto vxlan48
iface vxlan48
    vxlan-mcastgrp-map 10=239.1.1.110 20=239.1.1.120
    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 vxlan48
    hwaddress 44:38:39:22:01:ab
    bridge-vlan-aware yes
    bridge-vids 10 20
    bridge-pvid 1
cumulus@leaf01:~$ ifreload -a

传统 VXLAN 设备

使用传统 VXLAN 设备时,每个 VNI 都是一个单独的设备(例如,vni10、vni20、vni30)。您可以通过手动编辑 /etc/network/interfaces 文件来配置传统 VXLAN 设备。

以下示例配置

  • 创建两个唯一的 VXLAN 设备(vni10 和 vni20)
  • 将每个 VXLAN 设备(vni10 和 vni20)添加到网桥 bridge
  • 将本地隧道 IP 地址配置为交换机的环回地址
您不能使用 NVUE 命令来配置传统 VXLAN 设备。

编辑 /etc/network/interfaces 文件,然后运行 ifreload -a 命令。

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 mgmt
iface mgmt
    address 127.0.0.1/8
    vrf-table auto

auto swp1
iface swp1
    bridge-access 10

auto swp2
iface swp2
    bridge-access 20

auto vni10
iface vni10
    bridge-access 10
    mstpctl-bpduguard yes
    mstpctl-portbpdufilter yes
    vxlan-id 10

auto vni20
iface vni20
    bridge-access 20
    mstpctl-bpduguard yes
    mstpctl-portbpdufilter yes
    vxlan-id 20

auto bridge
iface bridge
    bridge-ports swp1 swp2 vni10 vni20
    bridge-vlan-aware yes
    bridge-vids 10 20
    bridge-pvid 1
cumulus@leaf01:~$ ifreload -a

自动 VLAN 到 VNI 映射

在 EVPN VXLAN 环境中,您需要将各个 VLAN 映射到 VNI。对于单 VXLAN 设备,您可以使用每个 VLAN 的单独 NVUE 命令来执行此操作;但是,如果您必须配置许多 VLAN 或需要隔离租户并重用 VLAN,这可能会很麻烦。为了简化配置,您可以改用以下两个命令

  • nv set bridge domain <bridge> vlan <vlans> vni auto 将指定的 VLAN 配置为使用自动映射。
  • nv set bridge domain <bridge> vlan-vni-offset 配置您要用于 VNI 的偏移量。例如,如果您指定偏移量为 10000,则 VNI 为 VLAN 加 10000。

以下命令自动将默认网桥 (br_default) 上的 VLAN 10、20、30、40 和 50 的 VNI 设置为 1000010、1000020、1000030、1000040 和 1000050,并将网桥 br_01 上的 VLAN 10、20、30、40 和 50 的 VNI 设置为 2000010、2000020、2000030、2000040 和 2000050

cumulus@switch:mgmt:~$ nv set bridge domain br_default vlan 10,20,30,40,50 vni auto
cumulus@switch:mgmt:~$ nv set bridge domain br_default vlan-vni-offset 10000
cumulus@switch:mgmt:~$ nv set bridge domain br_01 vlan 10,20,30,40,50 vni auto
cumulus@switch:mgmt:~$ nv set bridge domain br_01 vlan-vni-offset 20000
cumulus@switch:mgmt:~$ nv config apply

您不能使用自动 NVUE VLAN 到 VNI 映射命令来配置静态 VXLAN 隧道。

以下配置示例配置了 VLAN 10、20 和 30。VLAN 自动映射到 VNI,偏移量为 10000。

cumulus@switch:mgmt:~$ nv set interface lo ip address 10.10.10.1/32
cumulus@switch:mgmt:~$ nv set interface swp1-2 bridge domain br_default
cumulus@switch:mgmt:~$ nv set bridge domain br_default vlan 10,20,30
cumulus@switch:mgmt:~$ nv set interface vlan10
cumulus@switch:mgmt:~$ nv set interface vlan20
cumulus@switch:mgmt:~$ nv set interface vlan30
cumulus@switch:mgmt:~$ nv set bridge domain br_default vlan 10,20,30 vni auto
cumulus@switch:mgmt:~$ nv set bridge domain br_default vlan-vni-offset 10000
cumulus@switch:mgmt:~$ nv config apply

要取消设置上述配置,请以相反的顺序运行 nv unset 命令。您必须从 nv unset interface swp1-2 bridge domain br_default 命令中省略网桥名称,并从 nv unset bridge domain br_default vlan 10,20,30 vni auto 命令中省略 auto

cumulus@switch:mgmt:~$ nv unset bridge domain br_default vlan-vni-offset
cumulus@switch:mgmt:~$ nv unset bridge domain br_default vlan 10,20,30 vni
cumulus@switch:mgmt:~$ nv unset interface vlan30
cumulus@switch:mgmt:~$ nv unset interface vlan20
cumulus@switch:mgmt:~$ nv unset interface vlan10
cumulus@switch:mgmt:~$ nv unset bridge domain br_default vlan 10,20,30
cumulus@switch:mgmt:~$ nv unset interface swp1-2 bridge domain
cumulus@switch:mgmt:~$ nv unset interface lo ip address 10.10.10.1/32
cumulus@switch:mgmt:~$ nv config apply
cumulus@switch:mgmt:~$ sudo cat /etc/nvue.d/startup.yaml
- set:
    bridge:
      domain:
        br_default:
          vlan:
            '10':
              vni:
                auto: {}
            '20':
              vni:
                auto: {}
            '30':
              vni:
                auto: {}
          vlan-vni-offset: 10000
    interface:
      lo:
        ip:
          address:
            10.10.10.1/32: {}
        type: loopback
      swp1:
        bridge:
          domain:
            br_default: {}
        type: swp
      swp2:
        bridge:
          domain:
            br_default: {}
        type: swp
      vlan10:
        type: svi
        vlan: 10
      vlan20:
        type: svi
        vlan: 20
      vlan30:
        type: svi
        vlan: 30
    nve:
      vxlan:
        enable: on
cumulus@switch:mgmt:~$ 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 eth0
iface eth0 inet dhcp
    ip-forward off
    ip6-forward off
    vrf mgmt

auto swp1
iface swp1

auto swp2
iface swp2

auto vlan10
iface vlan10
    hwaddress 44:38:39:22:01:ab
    vlan-raw-device br_default
    vlan-id 10

auto vlan20
iface vlan20
    hwaddress 44:38:39:22:01:ab
    vlan-raw-device br_default
    vlan-id 20

auto vlan30
iface vlan30
    hwaddress 44:38:39:22:01:ab
    vlan-raw-device br_default
    vlan-id 30

auto vxlan48
iface vxlan48
    bridge-vlan-vni-map 10=10010 20=10020 30=10030
    bridge-learning off

auto br_default
iface br_default
    bridge-ports swp1 swp2 vxlan48
    hwaddress 44:38:39:22:01:ab
    bridge-vlan-aware yes
    bridge-vids 10 20 30
    bridge-pvid 1

VXLAN UDP 端口

您可以更改 Cumulus Linux 用于 VXLAN 封装的 UDP 端口。默认端口为 4789。

以下示例将 VXLAN 封装的 UDP 端口更改为 1024

cumulus@switch:mgmt:~$ nv set nve vxlan port 1024

VXLAN 标头中的保留字段

默认情况下,Cumulus Linux 会丢弃入口处标头中设置了保留位的 VXLAN 数据包。您可以更改转发行为以忽略入口处的保留位,而不是丢弃数据包。

NVUE 不提供用于配置交换机以忽略 VXLAN 数据包中保留位的命令。

要配置交换机以忽略入口处的保留位

  1. 创建 /etc/cumulus/switchd.d/vxlan.conf 文件并添加 vxlan_reserved_fields_ignore=True 参数。此参数配置交换机 ASIC 以忽略入口处的保留字段。

    cumulus@switch:mgmt:~$ sudo nano /etc/cumulus/switchd.d/vxlan.conf
    vxlan_reserved_fields_ignore=True
    
  2. 使用 sudo systemctl reload switchd.service 命令重新加载 switchd

  3. 创建 /etc/modprobe.d/vxlan.conf 文件并添加 options vxlan reserved_fields_ignore=1 参数。此参数配置交换机内核以忽略入口处的保留字段。

    cumulus@switch:mgmt:~$ sudo nano /etc/modprobe.d/vxlan.conf
    options vxlan reserved_fields_ignore=1
    
  4. 重新启动交换机以使内核更改生效,或运行 echo 1 > /sys/module/vxlan/parameters/reserved_fields_ignore 命令以实时启用该设置。

要将交换机配置回默认行为(丢弃入口处标头中设置了保留位的 VXLAN 数据包)

  1. 编辑 /etc/cumulus/switchd.d/vxlan.conf 文件以将 vxlan_reserved_fields_ignore 参数更改为 False

    cumulus@switch:mgmt:~$ sudo nano /etc/cumulus/switchd.d/vxlan.conf
    vxlan_reserved_fields_ignore=False
    
  2. 使用 sudo systemctl reload switchd.service 命令重新加载 switchd

  3. 编辑 /etc/modprobe.d/vxlan.conf 文件以将 options vxlan reserved_fields_ignore 参数更改为 0。

    cumulus@switch:mgmt:~$ sudo nano /etc/modprobe.d/vxlan.conf
    options vxlan reserved_fields_ignore=0
    
  4. 重新启动交换机以使内核更改生效,或运行 echo 0 > /sys/module/vxlan/parameters/reserved_fields_ignore 命令以实时禁用该设置。

  • 有关 VXLAN 设备和静态 VXLAN 隧道的信息,请参阅静态 VXLAN 隧道
  • 有关 VXLAN 设备和 EVPN 的信息,请参阅EVPN