Как настроить туннель приема GUE в Linux для IPv6

Как настроить туннель приема GUE в Linux для IPv6

Я пытаюсь настроить туннель GUE для получения пакетов IPv6, содержащих инкапсулированные пакеты IPv4 GUE, но у меня возникают проблемы с деинкапсуляцией пакетов. Пакеты IPv6 содержат инкапсулированный пакет GUE, внутри которого находится пакет IPv4. Я настраиваю туннель приема на своем конце.

sysctl net.ipv4.conf.all.rp_filter=2
modprobe fou
modprobe fou6
ip -6 fou add port 42428 gue -6
ip addr add $VIP/32 dev ip6tnl0
ip -6 link set ip6tnl0 up

Вот как выглядит получившийся ip6tnl0:

4: ip6tnl0@NONE: <NOARP,UP,LOWER_UP> mtu 1452 qdisc noqueue state UNKNOWN group default qlen 1000
    link/tunnel6 :: brd ::
    inet $VIP/32 scope global ip6tnl0
       valid_lft forever preferred_lft forever
    inet6 $LINK_LOCAL/64 scope link
       valid_lft forever preferred_lft forever

На другой машине я могу скрутить $VIP, который является адресом IPv4, и на своей машине через tcp-dump я могу увидеть зашифрованные пакеты.

tcpdump: listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
21:32:09.183750 IP6 (hlim 60, next-header UDP (17) payload length: 72) $IPV6_A.53322 > $IPV6_B.42428: [udp sum ok] UDP, length 64

Итак, когда этот UDP-пакет правильно декапируется, я ожидаю, что он будет содержать пакет IPv4, соответствующий исходному IPv4 $VIP. Но когда я запускаю

tcpdump -i any host $VIP -n

Я не вижу ничего.

Я повторил эту же самую настройку для IPv4 (пакет IPv4, инкапсулированный внутри пакета IPv4 с помощью GUE), для которого настройка туннеля приема аналогична:

sysctl net.ipv4.conf.all.rp_filter=2
modprobe fou
ip fou add port 42428 gue
ip addr add $VIP/32 dev tunl0
ip link set tunl0 up

В этом случае я могу увидеть вскрытые пакеты.

root@ipv4-control:~# tcpdump -i any host $VIP -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
23:12:04.749247 IP $VIP.43830 > $VIP.80: Flags [S], seq 2247712115, win 65495, options [mss 65495,sackOK,TS val 2120453320 ecr 0,nop,wscale 7], length 0

$VIP выше — это виртуальный адрес IPv4, обслуживающий http-трафик.

Есть идеи, что не так с настройкой моего принимающего туннеля IPv6?

решение1

Оказывается, мне пришлось установить режим на интерфейсе ip6tnl0, поскольку я инкапсулировал IPv4 в IPv6. Это сработало:

ip -6 tunnel change ip6tnl0 mode ipip6

Связанный контент