如何使用 IPv6 的 iproute2 配置传输 GUE 隧道

如何使用 IPv6 的 iproute2 配置传输 GUE 隧道

我正在尝试在 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
    #
    

相关内容