Проблемы с созданием туннеля foo-over-udp в Linux

Я хочу создать fou (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 network, но у меня такая же проблема, если я делаю это за пределами пространства имен. Что может быть причиной этой проблемы, и есть ли другая альтернатива для настройки туннеля fou? По моим наблюдениям, iproute2 проблематичен.

1
задан 13 November 2016 в 16:13
5 ответов

Мне удалось настроить туннель FOU между двумя виртуальными машинами в одной локальной сети с неизмененным Ubuntu 16.04.01. Они начали со следующей конфигурации сети:

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

Затем я выполнил следующее, чтобы настроить обе виртуальные машины в 10-сети с использованием туннеля FOU:

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 ^)

1
ответ дан 3 December 2019 в 23:38

По моему опыту, команда имеет следующий формат, который не совпадает с вашим:

ip ссылка добавить имя {имя} тип ipip ...

В общем, ничего " создан со странным именем », т. е. создан с именем, которое представляет собой последовательность символов (в данном случае« tunl0 »), которая не появляется во входных данных программы. Поэтому весьма вероятно, что устройство tunl0 совершенно не связано с вашими действиями; вероятно, это было раньше. Кроме того, предлагается использовать другое имя для устройства, которое вы пытаетесь создать, чтобы избежать путаницы с отчетами о состоянии.

0
ответ дан 3 December 2019 в 23:38

Убедитесь, что у вас включен CONFIG_NET_FOU_IP_TUNNELS, и перестройте ядро, если нет, с этой конфигурацией.

Следующая команда работает для мне. ip ссылка добавить имя fou-ipip тип ipip удаленный 192.168.1.2 локальный 192.168.1.1 encap fou encap-sport auto encap-dport 6635

0
ответ дан 3 December 2019 в 23:38

Хотя это обычно означает, что я предоставил неправильные аргументы, устройство по-прежнему создается со странным именем, а unconfigured

tunl0 является устройством по умолчанию ipip и создается автоматически при загрузке модуля ядра ipip. Он загружается автоматически, когда вы выполняете свою команду, даже если она не удалась. Вы не можете избавиться от этого устройства, если используете туннелирование ipip, вы можете либо настроить его, либо оставить ненастроенным. Если вы больше не используете ipip, просто выгрузите модуль с помощью modprobe -r ipip, чтобы избавиться от него.

Ответы RTNETLINK: Недопустимый аргумент

Это может означать, что некоторые параметры не поддерживаются вашим ядром или ip.

Процитирую инструкцию по созданию туннеля IPIP over FOU из репозитория ipipou. Он достаточно всеобъемлющий, поэтому включает и ваш случай, стоит попробовать, просто замените примерные значения на свои.

на стороне сервера:

# Load FOU kernel module
modprobe fou

# Create IPIP tunnel encapsulated to FOU,
# ipip kernel module will be loaded automatically.
ip link add name ipipou0 type ipip \
    remote 198.51.100.2 local 203.0.113.1 \
    encap fou encap-sport 10000 encap-dport 20001 \
    mode ipip dev eth0

# Add FOU listener for this tunnel
ip fou add port 10000 ipproto 4 local 203.0.113.1 dev eth0

# Assign IP address to the tunnel
ip address add 172.28.0.0 peer 172.28.0.1 dev ipipou0

# Up tunnel
ip link set ipipou0 up

на стороне клиента (клиент может находиться за NAT):

modprobe fou

ip link add name ipipou1 type ipip \
    remote 203.0.113.1 local 192.168.0.2 \
    encap fou encap-sport 10001 encap-dport 10000 encap-csum \
    mode ipip dev eth0

# Options "local", "peer", "peer_port", "dev" can be not supported
# by old kernels and can be skipped.
ip fou add port 10001 ipproto 4 \
    local 192.168.0.2 peer 203.0.113.1 peer_port 10000 dev eth0

ip address add 172.28.0.1 peer 172.28.0.0 dev ipipou1

ip link set ipipou1 up

где:

  • ipipou* — имя туннельного интерфейса
  • 203.0.113.1 — публичный IP-адрес сервера
  • 198.51.100.2 — публичный IP-адрес клиента
  • 192.168.0.2 — IP-адрес клиента, назначенный eth0
  • 10001 — локальный порт FOU клиента
  • 20001 — порт публичного FOU клиента
  • 10000 — порт общедоступного FOU сервера
  • encap-csum — опция добавления контрольной суммы к внутренним UDP-пакетам; можно заменить на noencap-csum, чтобы избежать вычислений и оставить его пустым, целостность пакетов будет контролироваться внешним уровнем UDP (пока пакет находится в туннеле).
  • eth0 — локальный базовый интерфейс для туннеля
  • 172.28.0.1 — частный IP-адрес клиента туннеля
  • 172.28.0.0 — частный IP-адрес сервера туннеля
0
ответ дан 27 October 2020 в 12:52

У меня такая же ошибка на Raspberry Pi. Я попробовал ту же команду «ip link» на ПК с Ubuntu, и это сработало.

Похоже, причина в CONFIG_NET_FOU_IP_TUNNELS, который прокомментировал Виджая.

PC 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

Raspberry Pi:

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

Обратите внимание, что мод ip_tunnel не используется fou на Raspberry Pi. Кажется, мне нужно собрать модуль ядра самостоятельно.

0
ответ дан 2 August 2021 в 01:18

Теги

Похожие вопросы