Linux

如何使用 iproute2 為 IPv6 配置傳輸 GUE 隧道

  • June 9, 2021

我正在嘗試在 linux 中使用 IPV6 地址添加以 GRE 作為標頭的傳輸 GUE 隧道,如下所示:

ip -6 link add name gue1 type ip6gre remote $REMOTE_IPV6 local $LOCAL_IPV6 dev eth0 encap gue encap-dport 42424

兩個都 $ REMOTE_IPV6 and $ LOCAL_IPV6 是有效的 IPV6 地址。但我不斷收到此錯誤:

RTNETLINK answers: Invalid argument

如果我刪除encap gue,那麼它不會給出該錯誤,因為它預設為無封裝類型。但是,來自的幫助文本ip link help ip6gre似乎暗示有效的封裝類型是encap { fou | gue | none }. 導致封裝類型在這裡無效的問題可能是什麼?

TL;博士:

首先執行這個:

modprobe fou6

更多細節

在 Linux 核心 5.10.x 上測試

有兩個問題,一個可能是配置問題(不會導致錯誤,但可能會阻止以後的正確操作),另一個我只能考慮一個小錯誤。

  • GUE接收埠似乎必須首先聲明

根據線上部落格,如Linux 虛擬介面簡介:隧道 | 紅帽開發人員

# ip fou add port 5555 gue
# ip link add name tun1 type ipip remote 192.168.1.1 local 192.168.1.2 ttl 225 encap gue encap-sport auto encap-dport 5555

這將為綁定到 5555 的 IPIP 設置一個 GUE 接收埠,並為 GUE 封裝配置一個 IPIP 隧道。

因此,必須首先使用命令聲明接收埠,並將在第二個命令的部分ip fou add port XXXX gue重用它。encap-dport XXXX第一個命令是在ip fou(8)需要添加更多限制的情況下描述的。

  • ip fou add port 42424 gue也不起作用
# ip fou add port 42424 gue
RTNETLINK answers: No such file or directory
Error talking to the kernel

看來,這對我來說似乎是一個錯誤,核心模組fou不是通過使用此命令自動載入的。GUE 只是由同一核心模組處理的 FOU 的一種附加模式fou

# modprobe fou
# ip fou add port 42424 gue
# ip -6 link add name gue1 type ip6gre remote $REMOTE_IPV6 local $LOCAL_IPV6 dev eth0 encap gue encap-dport 42424
RTNETLINK answers: Invalid argument

也沒有為fou6IPv6 部分載入核心模組……

實際上,-6必須將選項添加到ip fou命令中,否則埠將在 IPv4 套接字上打開。

# modprobe fou6
# ip -6 fou add port 42424 gue
# ip -6 link add name gue1 type ip6gre remote $REMOTE_IPV6 local $LOCAL_IPV6 dev eth0 encap gue encap-dport 42424
#

引用自:https://unix.stackexchange.com/questions/653469