在 Linux 上创建超过 20 个 VXLAN 接口

在 Linux 上创建超过 20 个 VXLAN 接口

如何在 Ubuntu/Debian 中创建超过 20 个 vxlan 接口?

  • 在 Linux 内核 3.16 中,我发现我可以创建超过 20 个 vxlan 接口,但它们无法正常工作,因为发送 arp 消息不起作用。

  • 在 Linux 内核 4.4 中我收到此错误消息“RTNETLINK 回答:没有可用的缓冲区空间“在创建 21 世纪界面时

我已经通过创建一个小型 shell 脚本对此进行了测试,该脚本在全新的 ubuntu 14.04 和 16.04 上创建接口,并且还在 Debian 8 上进行了测试。

脚本 testvxlan.sh 如下所示:

#!/bin/bash

for i in {1..30}
do
    echo "Setting up interface br0.$i"
    ip link add br0.$i type vxlan id $i group 239.0.0.$i dev eth0 dstport 4789
    ip addr add 192.168.$i.1/24 dev br0.$i
    ip link set dev br0.$i up
    #ip link delete br0.$i
done

在全新的 Ubuntu 16.04 上运行时,它看起来像这样:

root@ubuntu-xenial:~# ./testvxlan.sh
Setting up interface br0.1
Setting up interface br0.2
Setting up interface br0.3
Setting up interface br0.4
Setting up interface br0.5
Setting up interface br0.6
Setting up interface br0.7
Setting up interface br0.8
Setting up interface br0.9
Setting up interface br0.10
Setting up interface br0.11
Setting up interface br0.12
Setting up interface br0.13
Setting up interface br0.14
Setting up interface br0.15
Setting up interface br0.16
Setting up interface br0.17
Setting up interface br0.18
Setting up interface br0.19
Setting up interface br0.20
Setting up interface br0.21
RTNETLINK answers: No buffer space available
Setting up interface br0.22
RTNETLINK answers: No buffer space available
Setting up interface br0.23
RTNETLINK answers: No buffer space available
Setting up interface br0.24
RTNETLINK answers: No buffer space available
Setting up interface br0.25
RTNETLINK answers: No buffer space available
Setting up interface br0.26
RTNETLINK answers: No buffer space available
Setting up interface br0.27
RTNETLINK answers: No buffer space available
Setting up interface br0.28
RTNETLINK answers: No buffer space available
Setting up interface br0.29
RTNETLINK answers: No buffer space available
Setting up interface br0.30
RTNETLINK answers: No buffer space available

我怎样才能增加这个缓冲空间?或者这是否可能?

答案1

由于您使用多播 vxlan,因此限制实际上是 IGMP 成员的最大数量:

[root@cpu1 ~]# cat /proc/sys/net/ipv4/igmp_max_memberships 
20

您可以提高此限制,并且应该能够启动超过 20 个 vxlan:

[root@cpu1 ~]# echo 100 >/proc/sys/net/ipv4/igmp_max_memberships

如果您希望此更改在重新启动后仍然有效,则需要将以下代码片段添加到 /etc/sysctl.conf 或 /etc/sysctl.d/:

net.ipv4.igmp_max_memberships = 100

答案2

我们一直在广泛使用多播 vxlan,单个节点上有 200 多个,igmp_max_memberships设置为 400……

除了大量的 igmp 报告之外,在能够执行此操作的交换机上,往往会出现 igmp 侦听问题。

因此,我们每 256 个新 vxlan 创建一个新组,通过 vni 分隔租户。

YMMV,但侦听是限制多播广播域的好方法,即使在具有有限侦听表的 elcheapo 交换机上也是如此。无论如何,vni 字段是 16 位,因此您可以轻松地在一个 mc 组中容纳 65535 个 vxlan。

for grp in `seq 1 4` ; do
   for vni in `seq 1 64` ; do
      echo ip link add vx-`printf "%04x" $(($grp*$vni))` type vxlan id $vni group 239.0.1.$grp dev bkpln dstport 4789
   done
done | sh -x

相关内容