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オーバーヘッドがあり、通常はMTU 1420です。仮想LAN親インターフェイスの MTU から 50 バイト (20 (IP ヘッダー) + 8 (UDP ヘッダー) + 8 (VXLAN 固有のヘッダー) + 14 (MAC ヘッダー) = 50) を引いた値を使用します。1420-50=1370 MTU。いくつかのテストでは、VXLAN の MTU を初期値の 1370 (ただし、低く設定することは可能) より高く設定できないか、EINVAL を取得することが示されています。
vxlan100
をスレーブとして設定する場合bond0
、カーネルはスレーブ インターフェイスの MTU をデフォルトの 1500 であるマスター インターフェイスの MTU に設定しようとしますが、上記の理由により失敗します。vxlan100
の MTU は 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
vxlan100
のMTUをコピーするコマンド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
もちろん、他の関連する場所 ( の他のスレーブbond0
や が通信するピア リンクなどbond0
) でも同様の MTU を使用する必要があります。そうしないと、他の MTU 関連の問題が発生することが予想されます。 の MTU を 1500 に維持するという逆の方法bond0
、つまり WireGuard を MTU 1550 に設定し、外部レイヤーの MTU を 1630 にすることは、簡単には実現できないようです。