Невозможно добавить vxlan в интерфейс связи

Невозможно добавить vxlan в интерфейс связи

Я пытаюсь добавить vxlan100 к интерфейсу bond0, но, похоже, это не работает.

Вот команды. У меня есть интерфейс wg0 (wireguard), на котором я создаю L2 vxlan100.

sudo ip link add vxlan100 type vxlan id 100 dev wg0 
sudo ip link add bond0 type bond
echo 0 > /sys/class/net/bond0/bonding/mode

sudo ip link set vxlan100 master bond0

Однако последняя строка «sudo ip link set vxlan100 master bond0» выдает мне ошибку

RTNETLINK answers: Invalid argument

Помогите, пожалуйста. Я не уверен, где я ошибся.

решение1

Воспроизведение этого приводит к появлению определенного сообщения ядра dmesg:

bond0: (slave vxlan100): Error -22 calling dev_set_mtu

(и у нас EINVAL = 22 = Недопустимый аргумент)

Так что это о MTU. Действительно, WireGuard имеет MTU overhead, поэтому обычно он составляет 1420, иVXLANбудет использовать MTU родительского интерфейса минус 50 байт (20 (заголовок IP) + 8 (заголовок UDP) + 8 (специфический заголовок VXLAN) + 14 (заголовок MAC) = 50). 1420-50=1370 MTU. Несколько тестов показывают, что MTU VXLAN не может быть установлен выше его начального значения: 1370 (но может быть установлен ниже) или будет получено значение EINVAL.

При настройке vxlan100в качестве bond0подчиненного ядра ядро ​​пытается установить MTU подчиненного интерфейса равным MTU главного интерфейса, значение которого по умолчанию составляет 1500, но это не удается по следующей причине: vxlan100MTU не может быть увеличено более чем до 1370.

Для успешного выполнения операции необходимо заранее снизить MTU ведущего устройства:

ip link set dev bond0 mtu 1370

Итак, следующие команды (переупорядоченные, сокращенные и исправленные для использования назначенного IANA порта 4789) будут работать:

ip link add name bond0 mtu 1370 type bond mode balance-rr
ip link add name vxlan100 master bond0 type vxlan id 100 dev wg1 dstport 4789

Примечание: информация о максимальном MTU, похоже, недоступна там, ip -d link show dev vxlan100где есть maxmtu 65535. Я не знаю, ошибка ли это или другое недоступное свойство.

Чтобы избежать необходимости угадывать правильный MTU, можно использовать вывод JSON иjqкоманда для копирования vxlan100MTU в bond0:

ip link add name vxlan100 type vxlan id 100 dev wg0 dstport 4789
ip link add name bond0 mtu $(ip -json link show dev vxlan100 | jq -r '.[].mtu') type bond mode balance-rr
ip link set dev vxlan100 master bond0

Конечно, аналогичный MTU должен использоваться во всех других связанных местах (например: другие подчиненные устройства bond0и одноранговая связь, с которой bond0осуществляется связь), иначе можно ожидать других проблем, связанных с MTU. Наоборот, сохранить MTU 1500 для bond0: имея WireGuard с MTU 1550 и, таким образом, с внешним слоем с MTU 1630, не выглядит легкодостижимым.

Связанный контент