Как я могу создать более 20 интерфейсов vxlan в Ubuntu / Debian?
В ядре Linux 3.16 я обнаружил, что могу создать более 20 интерфейсов vxlan, но они не будут работать должным образом, так как отправка сообщений arp не работает.
в Linux Kernel 4.4 я получаю это сообщение об ошибке "RTNETLINK отвечает: нет свободного места в буфере"при создании 21-го интерфейса
Я проверил это, создав небольшой сценарий оболочки, который создает интерфейсы на свежих версиях 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
Как я могу увеличить это буферное пространство или это вообще возможно?
Поскольку вы используете многоадресные vxlan, ограничение на самом деле является максимальным количеством участников IGMP:
[root@cpu1 ~]# cat /proc/sys/net/ipv4/igmp_max_memberships
20
Вы можете поднять этот лимит и получить более 20 vxlans:
[root@cpu1 ~]# echo 100 >/proc/sys/net/ipv4/igmp_max_memberships
Если вы хотите, чтобы это изменение сохранялось при перезагрузке, вам необходимо добавить следующий фрагмент в ваш /etc/sysctl.conf или /etc/sysctl.d/:
net.ipv4.igmp_max_memberships = 100
Мы много работали с многоадресными vxlans, имеющими 200+ в одном узле, с igmp_max_memberships
установлен на 400 ...
Помимо множества отчетов igmp, некоторые вещи имели тенденцию вызывать проблемы с отслеживанием igmp на коммутаторах, которые могут это делать.
Поэтому мы создавали новую группу каждые 256 новых vxlans, разделяя арендаторов по vni.
YMMV, но отслеживание - это хороший способ ограничить домен многоадресной рассылки, даже на коммутаторах elcheapo, которые имеют ограниченную таблицу отслеживания. в любом случае поле vni имеет размер 16 бит, поэтому вы можете легко разместить 65535 vxlans в одной группе MC.
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