VXLAN kann nicht zur Bond-Schnittstelle hinzugefügt werden

VXLAN kann nicht zur Bond-Schnittstelle hinzugefügt werden

Ich versuche, vxlan100 zur Bond0-Schnittstelle hinzuzufügen, aber es scheint nicht zu funktionieren

Hier sind die Befehle. Ich habe eine wg0-Schnittstelle (Wireguard), auf der ich L2 vxlan100 erstelle.

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

Allerdings gibt mir die letzte Zeile "sudo ip link set vxlan100 master bond0" einen Fehler

RTNETLINK answers: Invalid argument

Bitte helfen Sie mir, ich bin nicht sicher, wo ich einen Fehler gemacht habe.

Antwort1

Bei der Reproduktion wird eine spezielle Kernel-Meldung ausgegeben dmesg:

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

(und wir haben EINVAL = 22 = ungültiges Argument)

Es geht also um MTU. Tatsächlich hat WireGuard MTU-Overhead, liegt also typischerweise bei MTU 1420, undVXLANverwendet die MTU der übergeordneten Schnittstelle minus 50 Bytes (20 (IP-Header) + 8 (UDP-Header) + 8 (VXLAN-spezifischer Header) + 14 (MAC-Header) = 50). 1420-50 = 1370 MTU. Einige Tests zeigen, dass die MTU des VXLAN nicht höher als der Anfangswert 1370 eingestellt werden kann (könnte aber niedriger eingestellt werden) oder ein EINVAL erhalten würde.

Bei der Einstellung vxlan100als bond0Slave versucht der Kernel, die MTU der Slave-Schnittstelle auf die MTU der Master-Schnittstelle mit dem Standardwert 1500 einzustellen. Dies schlägt jedoch aus folgendem Grund fehl: vxlan100Die MTU von kann nicht über 1370 erhöht werden.

Damit die Operation erfolgreich ist, muss vorab die MTU des Masters gesenkt werden:

ip link set dev bond0 mtu 1370

Daher funktionieren die folgenden Befehle (neu geordnet, gekürzt und korrigiert, um den von der IANA zugewiesenen Port 4789 zu verwenden):

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

Hinweis: Die Informationen zur maximalen MTU scheinen dort, ip -d link show dev vxlan100wo sie vorhanden sind, nicht verfügbar zu sein maxmtu 65535. Ich weiß nicht, ob es sich um einen Fehler oder eine andere nicht verfügbare Eigenschaft handelt.

Um nicht die richtige MTU erraten zu müssen, kann man die JSON-Ausgabe verwenden und diejqBefehl zum Kopieren vxlan100der MTU nach 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

Natürlich sollte an allen anderen damit verbundenen Stellen eine ähnliche MTU verwendet werden (z. B.: die anderen Slaves bond0und der Peer-Link, mit dem bond0kommuniziert wird), sonst sind andere MTU-bezogene Probleme zu erwarten. Umgekehrt eine MTU von 1500 beizubehalten bond0: WireGuard mit einer MTU von 1550 und damit mit einer MTU von 1630 für die äußere Schicht zu haben, scheint nicht einfach zu erreichen.

verwandte Informationen