
Estou executando o Debian 8 em um vServer. Depois de instalar o docker e ativar o IPv6, notei algo estranho. Não sei se o docker tem alguma coisa a ver com isso, só que percebi esse problema após instalá-lo.
Minha rota padrão está configurada para expirar após ca. 1800 segundos. Na verdade, eu desapareço após esse tempo limite. É quando eu (obviamente) perco a conectividade IPv6.
root@wopr:~# ip -6 route
xxxx:yyyy:zzz:xxxx::/64 dev eth0 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
fe80::/64 dev br-5c1ce68ea951 proto kernel metric 256
fe80::/64 dev br-61f6bbfdbe87 proto kernel metric 256
[a lot more routed for my docker containers]
default via fe80::1 dev eth0 proto ra metric 1024 expires 1259sec hoplimit 64
Por que a rota está configurada para expirar após 1800 s? Onde posso configurar isso?
[editar 14/05/2016 16:08]
Adicionar uma rota padrão manualmente parece funcionar bem. Ele permanece parado. Mas preciso ter uma rota que não expire após a inicialização.
[editar 14/05/2016 16:13]
A máquina está rodando em um host KVM hospedado por netcup.de. Está usando o driver virtio, conforme recomendado pelo meu provedor.
root@wopr:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback
iface lo inet6 loopback
auto eth0
iface eth0 inet dhcp
iface eth0 inet6 static
address xxxx:yyyy:zzz:xxxx::1
netmask 64
gateway fe80::1
virt-o que diz:
root@wopr:~# virt-what
kvm
[editar 14/05/2016 15:34]
Parece que perdi o net.ipv6.conf.default.autoconf
valor 1. Agora adicionei um arquivo em /etc/sysctl.d para suprimir isso na inicialização:
root@wopr:~# cat /etc/sysctl.d/ipv6.conf
net.ipv6.conf.default.accept_ra=0
net.ipv6.conf.default.autoconf=0
net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.all.autoconf=0
net.ipv6.conf.eth0.accept_ra=0
net.ipv6.conf.eth0.autoconf=0
Responder1
Parece que perdi que net.ipv6.conf.default.autoconf estava definido como 1. Adicionar um arquivo em /etc/sysctl.d para suprimir isso na inicialização resolveu o problema para mim:
root@wopr:~# cat /etc/sysctl.d/ipv6.conf
net.ipv6.conf.default.accept_ra=0
net.ipv6.conf.default.autoconf=0
net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.all.autoconf=0
net.ipv6.conf.eth0.accept_ra=0
net.ipv6.conf.eth0.autoconf=0
Agora recebo uma rota padrão que não expira no momento da inicialização. Problema resolvido. Obrigado por me apontar na direção certa, Sander.
Responder2
1.800 segundos parece o tempo limite padrão para um anúncio de roteador.
Meu primeiro palpite seria que existe um roteador Cisco na rede configurado ipv6 nd ra suppress
na interface. Nesse modo, o roteador enviará um RA quando um host solicitar um com RS, mas não o atualizará regularmente. Um host envia um RS ao abrir a interface, o que explicaria por que ele obtém uma rota padrão após a inicialização.
Essa configuração é uma configuração estranha e inútil da Cisco. Um roteador deve enviar RAs quando solicitado + regularmente (o padrão na Cisco) ou não enviar ( ipv6 nd ra suppress all
). A configuração intermediária ipv6 nd ra suppress
causa um comportamento estranho como esse e não deve ser usada.
Responder3
Na verdade, a resposta marcada está errada. O problema é que o docker permite o encaminhamento em interface(s) e isso faz com que o kernel do Linux ignore RAs nessa interface específica, veja:https://www.mattb.net.nz/blog/2011/05/12/linux-ignores-ipv6-router-advertisements-when-forwarding-is-enabled/
Portanto, a solução correta neste caso é definir accept_ra
como 2
:
# cat /etc/sysctl.d/ipv6.conf
net.ipv6.conf.default.accept_ra=2
net.ipv6.conf.all.accept_ra=2
net.ipv6.conf.eth0.accept_ra=2
em vez de desabilitar completamente a descoberta de rota.