Debian / IPv6: a rota padrão expira após 1800 segundos, perdendo conectividade

9

Estou executando o Debian 8 em um vServer. Depois de instalar o docker e ativar o IPv6, notei algo estranho. Eu não sei se o docker tem algo a ver com isso, é só que eu notei esse problema depois de instalá-lo.

Minha rota padrão está configurada para expirar depois de ca. 1800s. Eu realmente desaparece após esse tempo limite. Isso é quando eu (obviamente) solto 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 2016-05-14 16:08]

Adicionar manualmente uma rota padrão parece funcionar bem. Ele fica parado. Mas eu preciso ter uma rota que não expira depois da inicialização.

[editar 2016-05-14 16:13]

A máquina está sendo executada em um host KVM hospedado pelo netcup.de. Está usando o driver virtio, como 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 2016-05-14 15:34] Parece que eu perdi que net.ipv6.conf.default.autoconf foi definido como 1. Agora eu adicionei um arquivo em /etc/sysctl.d para suprimir isso no boot:

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
    
por lajuette 14.05.2016 / 15:40

3 respostas

8

Parece que eu perdi que net.ipv6.conf.default.autoconf foi 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 eu recebo uma rota incorreta que não expira no momento da inicialização. Problema resolvido. Obrigado por me apontar na direção certa, Sander.

    
por 14.05.2016 / 17:59
4

1800 segundos soam como um tempo limite padrão para um anúncio de roteador.

Meu primeiro palpite é que existe um roteador Cisco na rede que está configurado com ipv6 nd ra suppress na interface. Nesse modo, o roteador envia um RA quando um host solicita um com um RS, mas não o atualiza regularmente. Um host envia um RS ao exibir a interface, o que explica por que ele recebe uma rota padrão após a inicialização.

Essa configuração é uma configuração Cisco estranha e inútil. Um roteador deve enviar RAs quando solicitado + regularmente (o padrão na Cisco) ou não ( ipv6 nd ra suppress all ). A configuração do meio caminho ipv6 nd ra suppress causa um comportamento estranho como esse e não deve ser usado.

    
por 14.05.2016 / 16:20
0

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 em particular, veja: link

Portanto, a solução correta nesse caso é definir accept_ra para 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 desativar completamente a descoberta de rotas.

    
por 13.03.2018 / 11:29