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

10

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 algo a ver com isso, é só que notei esse problema depois de instalá-lo.

Minha rota padrão está configurada para expirar após ca. 1800seg. 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 2016-05-14 16:08]

Adicionar uma rota padrão manualmente parece funcionar bem. Ele fica parado. Mas eu preciso ter uma rota não expirada após a inicialização.

[editar 14/05/2016 16:13]

A máquina está sendo executada em um host KVM hospedado pelo netcup.de. Ele 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

[edit 2016-05-14 15:34] Parece que eu perdi o que net.ipv6.conf.default.autoconffoi definido como 1. Agora eu adicionei um arquivo no /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
lajuette
fonte
Exceto pela janela de encaixe, não há muitos outros aplicativos em execução nesta máquina.
Lajuette 14/05

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, 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.

lajuette
fonte
Finalmente eu consegui a solução!
precisa saber é o seguinte
4

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

Meu primeiro palpite seria que existe um roteador Cisco na rede configurado com ipv6 nd ra suppressa 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 ativar 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 ( ipv6 nd ra suppress all). A configuração ipv6 nd ra suppressintermediária causa um comportamento estranho como esse e não deve ser usada.

Sander Steffann
fonte
root @ wopr: ~ # cat / proc / sys / net / ipv6 / conf / eth0 / accept_ra produz 0. Acho que isso significa que eth0 está ignorando os RAs?
Lajuette
1
Sim, nesse caso, não está usando os RAs. Ele já pode ter aceito um antes de accept_ra=0ser definido.
Sander Steffann
0

Na verdade, a resposta marcada está errada. O problema é que o docker habilita o encaminhamento nas interfaces e faz com que o kernel do Linux ignore os RAs nessa interface específica, consulte: https://www.mattb.net.nz/blog/2011/05/12/linux-ignores -ipv6-router-propagandas-quando-encaminhamento-está-ativado /

Portanto, a solução correta nesse caso é definir accept_racomo 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.

oerdnj
fonte
Eu adicionei isso, ainda o host executando o docker não obtém uma rota padrão. Outro host que não é o docker obtém uma rota padrão.
Lenne