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 vxlan100
como bond0
esclavo, 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: vxlan100
la 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 vxlan100
donde 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 eljq
comando para copiar vxlan100
la 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 bond0
y el enlace de pares con el que bond0
se 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.