No se puede agregar vxlan a la interfaz de enlace

No se puede agregar vxlan a la interfaz de enlace

Estoy intentando agregar vxlan100 a la interfaz bond0 pero no parece funcionar

Aquí están los comandos. Tengo una interfaz wg0 (wireguard) en la que estoy creando 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

Sin embargo, la última línea "sudo ip link set vxlan100 master bond0" me da un error

RTNETLINK answers: Invalid argument

Por favor ayuda, no estoy seguro de dónde me equivoqué.

Respuesta1

Al reproducir esto, se recibe un mensaje del kernel específico a través de dmesg:

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

(y tenemos EINVAL = 22 = Argumento no válido)

Entonces se trata de MTU. De hecho, WireGuard tiene una sobrecarga de MTU, por lo que normalmente está en MTU 1420, yVXLANutilizará la MTU de la interfaz principal menos 50 bytes (20 (encabezado IP) + 8 (encabezado UDP) + 8 (encabezado específico de VXLAN) + 14 (encabezado MAC) = 50). 1420-50=1370 MTU. Algunas pruebas muestran que la MTU de VXLAN no se puede configurar por encima de su valor inicial: 1370 (pero se puede configurar por debajo) o obtendría un EINVAL.

Cuando se configura vxlan100como bond0esclavo, el kernel intenta configurar la MTU de la interfaz esclava en la MTU de su interfaz maestra con su valor predeterminado de 1500, pero esto falla debido a lo anterior: vxlan100la MTU de no se puede aumentar más allá de 1370.

Para que la operación tenga éxito, es necesario bajar previamente la MTU del maestro:

ip link set dev bond0 mtu 1370

Entonces, los siguientes comandos (reordenados, acortados y corregidos para usar el puerto 4789 asignado por IANA) funcionarán:

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

Nota: la información sobre la MTU máxima no parece estar disponible ip -d link show dev vxlan100donde hay maxmtu 65535. No sé si es un error u otra propiedad no disponible.

Para evitar tener que adivinar la MTU correcta, se puede usar la salida JSON y eljqcomando para copiar vxlan100la MTU a 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

Por supuesto, se deben utilizar MTU similares en todos los demás lugares relacionados (por ejemplo, los otros esclavos bond0y el enlace de pares con el que bond0se comunica), o se esperan otros problemas relacionados con la MTU. Al revés, mantener una MTU de 1500 bond0: tener WireGuard en MTU 1550 y, por lo tanto, con la capa exterior con una MTU de 1630 no parece fácil de lograr.

información relacionada