我正在尝试在 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 和 $LOCAL_IPV6 都是有效的 IPV6 地址。但我不断收到此错误:
RTNETLINK answers: Invalid argument
如果我删除,encap gue
那么它不会给出该错误,因为它默认为无封装类型。然而,帮助文本ip link help ip6gre
似乎暗示有效的 encap 类型是encap { fou | gue | none }
。导致 encap 类型无效的问题可能是什么?
答案1
长话短说:
首先运行这个:
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
fou6
也没有为 IPv6 部分加载内核模块...实际上,
-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 #