如何在同一(默认)网络命名空间中创建具有相同远程 IP 地址但不同端口的多个 GUE 隧道?
到目前为止,我已经成功地在每个命名空间中创建了一个 GUE 隧道。作为解决 1 隧道/命名空间僵局的一种解决方法,我为每个隧道设置了一个 netns,并根据其端口号转发数据包。
但是,我不想被迫在网络名称空间之间维护转发数据包,只是为了让它们返回默认名称空间,因为最多可以有 1 个具有相同远程和本地 IP 的 GUE 接口。在单个命名空间(默认命名空间)中,可以将 FOU 设置为监听不同的端口而不会出现错误:
sudo ip fou show
port 1037 gue local 10.0.0.252 peer REMOTE_IP peer_port 1037 dev eth0
port 1036 gue local 10.0.0.252 peer REMOTE_IP peer_port 1036 dev eth0
但是,当第一个端口 1036 已在同一(默认)netns 中配置时,添加第二个 GUE 设备会返回错误:
sudo ip link add name guetun1 type ipip remote REMOTE_IP local 10.0.0.252 encap fou encap-sport 1037 encap-dport 1037 mode ipip dev eth0
RTNETLINK answers: File exists
仅当先前的 GUE 隧道已建立时此操作才会失败,否则有效。当在不同的网络中设置时,这也适用。只需删除现有的 gue 链接即可使上面引用的命令起作用:sudo ip link del guetun0
。
重命名链接(gue0 为 guetun0,tunl0 为tunnel0)并不能消除该错误。
到目前为止,我怀疑 Linux 内核中存在一个错误,它会根据本地和远程 IP 地址以某种方式识别 GUE 和 FOU 接口,同时忽略端口号,但也许有办法解决这个问题?