ボンドインターフェースにvxlanを追加できません

ボンドインターフェースにvxlanを追加できません

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 vxlan100maxmtu 65535これがバグなのか、それとも他の利用できないプロパティなのかはわかりません。

正しいMTUを推測する必要がないように、JSON出力とjqvxlan100の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 にすることは、簡単には実現できないようです。

関連情報