Linux foo-over-udp 隧道创建问题

Linux foo-over-udp 隧道创建问题

我想创造(foo-over-udp) 在 linux 4.4.10 上使用 iproute2 4.5.0 建立隧道,在尝试创建隧道时出现以下错误:

sudo ip link add dev tun0 type ipip remote 172.19.0.9 local 172.19.0.8 encap fou encap-sport auto encap-dport 4444
RTNETLINK answers: Invalid argument

虽然这通常表明我提供了错误的参数,但设备仍然以奇怪的名称创建并且未配置:

10: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT
group default qlen 1
     link/ipip 0.0.0.0 brd 0.0.0.0

我还应该提到,fou 和 ipip 内核模块已加载:

fou                     9093  0
ip6_udp_tunnel          1967  1 fou
udp_tunnel              2547  1 fou
ipip                    5260  0
ip_tunnel              13315  1 ipip
tunnel4                 2389  1 ipip

我没有尝试任何其他内核版本,但我尝试了最新版本的 iproute2。我还应该提到,我尝试在 Linux 网络命名空间中进行此设置,但如果我在命名空间之外进行此设置,也会遇到同样的问题。是什么原因导致了这个问题,还有其他配置隧道的替代方法吗?根据我的观察,iproute2 是有问题的。

答案1

我能够在运行未修改的 ubuntu 16.04.01 的同一 LAN 上的两个虚拟机之间设置 FOU 隧道。它们从网络方面开始采用以下配置:

jeff@jeff-VirtualBox-ubuntu-16:~$ ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

   valid_lft forever preferred_lft forever

inet6 ::1/128 scope host 

   valid_lft forever preferred_lft forever

2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:97:1d:bb brd ff:ff:ff:ff:ff:ff

inet 192.168.1.137/24 brd 192.168.1.255 scope global dynamic enp0s3

   valid_lft 86358sec preferred_lft 86358sec

inet6 fe80::3675:b335:4de3:9d6c/64 scope link 

   valid_lft forever preferred_lft forever

jeff@jeff-VirtualBox-ubuntu-16:~$ 

jeff@jeff-VirtualBox-ubuntu-16-2:~$ ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

   valid_lft forever preferred_lft forever

inet6 ::1/128 scope host 

   valid_lft forever preferred_lft forever

2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
 state UP group default qlen 1000
link/ether 08:00:27:40:13:85 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.135/24 brd 192.168.1.255 scope global dynamic enp0s3

   valid_lft 86352sec preferred_lft 86352sec

inet6 fe80::7086:fe13:ab8:b44f/64 scope link 

   valid_lft forever preferred_lft forever

然后我运行以下命令,使用 FOU 隧道在 10 网络中配置两个虚拟机:

root@jeff-VirtualBox-ubuntu-16:~# modprobe fou

root@jeff-VirtualBox-ubuntu-16:~# ip fou add port 55137 ipproto 4

root@jeff-VirtualBox-ubuntu-16:~# ip link add name fou0 type ipip remote 192.168.1.135 local 192.168.1.137 encap fou encap-sport 55137 encap-dport 55135 dev enp0s3

root@jeff-VirtualBox-ubuntu-16:~# ip link set up dev tunl0

root@jeff-VirtualBox-ubuntu-16:~# ip link set up dev fou0

root@jeff-VirtualBox-ubuntu-16:~# ip addr add 10.0.0.137/24 dev fou0

root@jeff-VirtualBox-ubuntu-16:~#


root@jeff-VirtualBox-ubuntu-16-2:~# modprobe fou

root@jeff-VirtualBox-ubuntu-16-2:~# ip fou add port 55135 ipproto 4

root@jeff-VirtualBox-ubuntu-16-2:~# ip link add name fou0 type ipip remote 192.168.1.137 local 192.168.1.135 encap fou encap-sport 55135 encap-dport 55137 dev enp0s3

root@jeff-VirtualBox-ubuntu-16-2:~# ip link set up dev tunl0

root@jeff-VirtualBox-ubuntu-16-2:~# ip link set up dev fou0

root@jeff-VirtualBox-ubuntu-16-2:~# ip addr add 10.0.0.135/24 dev fou0

root@jeff-VirtualBox-ubuntu-16-2:~#

对我来说效果很好。您的里程可能会有所不同。8^)

答案2

确保已启用 CONFIG_NET_FOU_IP_TUNNELS,如果没有,请使用此配置重建内核。

以下命令对我有用。ip link add name fou-ipip type ipip remote 192.168.1.2 local 192.168.1.1 encap fou encap-sport auto encap-dport 6635

答案3

根据我的经验,该命令具有以下格式,与您的不匹配:

ip link add name {name} type ipip ...

一般来说,没有任何东西是“用奇怪的名称创建的”,即用一个字符序列(在本例中为“tunl0”)创建的名称,该名称不会出现在软件的输入中。因此,tunl0 设备很可能与您的操作完全无关;它可能之前就在那里。此外,它建议对您尝试创建的设备使用不同的名称,以减少与状态报告相关的混淆。

答案4

我在 Raspberry Pi 上遇到了同样的错误。我在 PC Ubuntsu 上尝试了相同的“ip link”命令,并且成功了。

原因似乎是 Vijaya 评论的 CONFIG_NET_FOU_IP_TUNNELS。

Ubuntu 电脑:

$ lsmod | grep fou
fou                    28672  0
ip6_udp_tunnel         16384  1 fou
udp_tunnel             16384  1 fou
ip_tunnel              24576  3 fou,ipip,ip_gre

树莓派:

$ lsmod | grep tunnel
ip6_udp_tunnel         16384  1 fou
udp_tunnel             28672  1 fou
ip_tunnel              32768  1 ip_gre

请注意,Raspberry Pi 上的 fou 不使用 ip_tunnel mod。看来我需要自己构建内核模块。

相关内容