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 vxlan100
als bond0
Slave 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: vxlan100
Die 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 vxlan100
wo 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 diejq
Befehl zum Kopieren vxlan100
der 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 bond0
und der Peer-Link, mit dem bond0
kommuniziert 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.