無法將 vxlan 新增到 bond 接口

無法將 vxlan 新增到 bond 接口

我正在嘗試將 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,並且VXLAN將使用父介面的 MTU 減去 50 個位元組(20(IP 標頭)+ 8(UDP 標頭)+ 8(VXLAN 特定標頭)+ 14(MAC 標頭)= 50)。 1420-50=1370 MTU。一些測試表明,VXLAN 的 MTU 不能設定得高於其初始值:1370(但可以設定得更低),否則會得到 EINVAL。

當設定vxlan100為 的從bond0機時,核心嘗試將從機介面的 MTU 設定為其主介面的 MTU(預設值為 1500),但由於上述原因而失敗:vxlan100的 MTU 無法增加到超過 1370。

為了使操作成功,必須事先降低master的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

當然,類似的 MTU 應該用在所有其他相關的地方(例如:其他從站bond0和與之通訊的對等連結bond0),否則會出現其他與 MTU 相關的問題。保持 1500 MTU 的另一種方法是bond0:將 WireGuard 設定為 MTU 1550,因此外層的 MTU 為 1630 看起來並不容易實現。

相關內容