O roteador Ubuntu retorna ICMP proibida administrativamente para todos os IPv6

1

Estou usando uma máquina Ubuntu 14.04, denominada ubu1404-150805-3, como um roteador dual-stacked (IPv4 e IPv6). Eu tenho uma máquina cliente, chamada ubu1404-150805-2, que também é o Ubuntu 14.04 e cujo único acesso à rede é através desse roteador Ubuntu. Isso tudo funciona bem para o IPv4. Mas sempre que o cliente tenta enviar um pacote IPv6 para qualquer coisa além do roteador, o roteador retorna um pacote ICMP do tipo 3, código 9 (proibida administrativamente). O cliente pode ping6 do roteador. O que está errado e como faço para corrigir isso?

No roteador Ubuntu não há regras ip6tables, e a única regra iptables faz SNAT:

root@ubu1404-150805-3:~# iptables-save
# Generated by iptables-save v1.4.21 on Sun Sep 27 03:35:36 2015
*nat
:PREROUTING ACCEPT [33:3275]
:INPUT ACCEPT [4:744]
:OUTPUT ACCEPT [17:1207]
:POSTROUTING ACCEPT [1:60]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Sun Sep 27 03:35:36 2015
root@ubu1404-150805-3:~# ip6tables-save
root@ubu1404-150805-3:~# 

O roteador tem duas NICs, uma para upstream e uma para downstream. Ele não tem nenhum serviço IPv6 nativo do upstream, então eu também instalei o miredo lá. O roteador não tem problema em fazer as coisas do IPv6:

root@ubu1404-150805-3:~# ping6 -c 1 2001:4860:4860::8844
PING 2001:4860:4860::8844(2001:4860:4860::8844) 56 data bytes
64 bytes from 2001:4860:4860::8844: icmp_seq=1 ttl=57 time=289 ms

--- 2001:4860:4860::8844 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 289.616/289.616/289.616/0.000 ms

Para comparação, aqui está o cliente falhando:

mspreitz@ubu1404-150805-2:~$ ping6 -c 1 2001:4860:4860::8844
PING 2001:4860:4860::8844(2001:4860:4860::8844) 56 data bytes
From fddf:2::1 icmp_seq=1 Destination unreachable: Administratively prohibited

--- 2001:4860:4860::8844 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

tcpdump -i eth1 no roteador mostra a solicitação de ping chegando e o "administrativamente proibido" voltando para o cliente.

tcpdump -i teredo no roteador mostra que encaminha a solicitação de ping do cliente! E nenhuma resposta de ping é vista.

root@ubu1404-150805-3:~# tcpdump -nne -i teredo
tcpdump: WARNING: teredo: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on teredo, link-type RAW (Raw IP), capture size 65535 bytes
03:57:39.349401 ip: fddf:2::b9ca:b0dc:8ae:4002 > 2001:4860:4860::8844: ICMP6, echo request, seq 1, length 64

Aqui está ip addr do roteador:

root@ubu1404-150805-3:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:e0:d0:b2 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fee0:d0b2/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:f7:66:4a brd ff:ff:ff:ff:ff:ff
    inet 10.0.100.1/24 brd 10.0.100.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fddf:2::1/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fef7:664a/64 scope link 
       valid_lft forever preferred_lft forever
5: teredo: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none 
    inet6 2001:0:53aa:64c:28fd:345a:d0ed:e570/32 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::ffff:ffff:ffff/64 scope link 
       valid_lft forever preferred_lft forever

E aqui está a configuração no cliente:

mspreitz@ubu1404-150805-2:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:72:df:14 brd ff:ff:ff:ff:ff:ff
    inet 10.0.100.2/24 brd 10.0.100.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fddf:2::b9ca:b0dc:8ae:4002/64 scope global temporary dynamic 
       valid_lft 85988sec preferred_lft 13988sec
    inet6 fddf:2::a00:27ff:fe72:df14/64 scope global dynamic 
       valid_lft 85988sec preferred_lft 13988sec
    inet6 fe80::a00:27ff:fe72:df14/64 scope link 
       valid_lft forever preferred_lft forever

O roteador está configurado para encaminhar pacotes IPv4 e IPv6 unicast:

root@ubu1404-150805-3:~# sysctl -a | grep forward
net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.all.mc_forwarding = 0
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.default.mc_forwarding = 0
net.ipv4.conf.eth0.forwarding = 1
net.ipv4.conf.eth0.mc_forwarding = 0
net.ipv4.conf.eth1.forwarding = 1
net.ipv4.conf.eth1.mc_forwarding = 0
net.ipv4.conf.lo.forwarding = 1
net.ipv4.conf.lo.mc_forwarding = 0
net.ipv4.conf.teredo.forwarding = 1
net.ipv4.conf.teredo.mc_forwarding = 0
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.mc_forwarding = 0
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.default.mc_forwarding = 0
net.ipv6.conf.eth0.forwarding = 1
net.ipv6.conf.eth0.mc_forwarding = 0
net.ipv6.conf.eth1.forwarding = 1
net.ipv6.conf.eth1.mc_forwarding = 0
net.ipv6.conf.lo.forwarding = 1
net.ipv6.conf.lo.mc_forwarding = 0
net.ipv6.conf.teredo.forwarding = 1
net.ipv6.conf.teredo.mc_forwarding = 0

E o roteador tem a privacidade do IPv6 desativada:

root@ubu1404-150805-3:~# sysctl -a | grep tempaddr
net.ipv6.conf.all.use_tempaddr = 0
net.ipv6.conf.default.use_tempaddr = 0
net.ipv6.conf.eth0.use_tempaddr = 0
net.ipv6.conf.eth1.use_tempaddr = 0
net.ipv6.conf.lo.use_tempaddr = 0
net.ipv6.conf.teredo.use_tempaddr = -1

Eu duvido que seja importante, mas estou executando o radvd e o rdnssd no roteador. O cliente é configurado em /etc/network/interfaces usando o método estático para IPv4 e IPv6, com autoconf 1 (ou seja, habilitando o SLAAC) no caso v6.

Aqui está a informação da versão do servidor:

root@ubu1404-150805-3:~# uname -a
Linux ubu1404-150805-3 3.13.0-61-generic #100-Ubuntu SMP Wed Jul 29 11:21:34 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

E é o mesmo no cliente:

mspreitz@ubu1404-150805-2:~$ uname -a
Linux ubu1404-150805-2 3.13.0-61-generic #100-Ubuntu SMP Wed Jul 29 11:21:34 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

BTW, ambas as máquinas são VMs do VirtualBox (versão 4.3.30). Eu uso uma rede interna do VirtualBox na eth1 do servidor e eth0 do cliente. A eth0 do servidor é NATted para o host, um Mac rodando o MacOS 10.10.5.

    
por user3473000 27.09.2015 / 10:05

1 resposta

0

O Teredo fornece apenas o IPv6 para o próprio host, portanto você não pode usá-lo para fornecer IPv6 na sua LAN. Se você quiser sub-redes que você pode rotear você deve usar um serviço de túnel como o tunnelbroker.net ou SixXS.

Além disso, Teredo é um protocolo terrivelmente não confiável.

    
por Sander Steffann 27.09.2015 / 13:12