Como configurar um túnel de recebimento GUE no Linux para IPv6

Como configurar um túnel de recebimento GUE no Linux para IPv6

Estou tentando configurar um túnel GUE para receber pacotes IPv6 que contêm pacotes IPv4 encapsulados em GUE, mas estou tendo problemas para desencapsular os pacotes. Os pacotes IPv6 possuem um pacote encapsulado GUE dentro do qual contém um pacote IPv4. Eu configurei um túnel de recebimento no meu lado.

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

Esta é a aparência do ip6tnl0 resultante:

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

Na minha outra máquina posso enrolar o $VIP que é um endereço IPv4 e na minha máquina através do tcp-dump posso ver os pacotes encapsulados

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

Portanto, quando esse pacote UDP for descapsulado corretamente, eu esperaria que ele contivesse um pacote IPv4 correspondente ao IPv4 de origem de $VIP. Mas quando eu corro

tcpdump -i any host $VIP -n

Eu não vejo nada.

Repeti exatamente a mesma configuração para IPv4 (pacote IPv4 encapsulado dentro de pacote IPv4 usando GUE) para o qual a configuração do túnel de recebimento é semelhante:

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

Nesse caso, posso ver os pacotes decapados

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 acima é um endereço IPv4 virtual que atende ao tráfego http.

Alguma idéia do que há de errado com a configuração do meu túnel de recebimento IPv6?

Responder1

Acontece que tive que definir o modo na interface ip6tnl0, pois estava encapsulando IPv4 em IPv6. Fazer isso funcionou:

ip -6 tunnel change ip6tnl0 mode ipip6

informação relacionada