Debian / IPv6: la ruta predeterminada caduca después de 1800 segundos, perdiendo conectividad

10

Estoy ejecutando Debian 8 en un vServer. Después de instalar Docker y habilitar IPv6, noté algo extraño. No sé si Docker tiene algo que ver con esto, es solo que noté este problema después de instalarlo.

Mi ruta predeterminada está configurada para caducar después de ca. 1800secs. De hecho, me desvanezco después de este tiempo de espera. Esto es cuando (obviamente) pierdo la conectividad 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 qué la ruta está configurada para caducar después de 1800 s? ¿Dónde puedo configurar esto?

[editar 2016-05-14 16:08]

Agregar una ruta predeterminada manualmente parece funcionar bien. Se queda quieto. Pero necesito tener una ruta que no caduque después del arranque.

[editar 2016-05-14 16:13]

La máquina se ejecuta en un host KVM alojado por netcup.de. Está utilizando el controlador virtio, según lo recomendado por mi proveedor.

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-lo que dice:

root@wopr:~# virt-what
kvm

[edit 2016-05-14 15:34] Parece que me perdí que net.ipv6.conf.default.autoconfestaba configurado en 1. Ahora agregué un archivo en /etc/sysctl.d para suprimir esto en el arranque:

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
fuente
A excepción de Docker, no hay muchas otras aplicaciones ejecutándose en esta máquina.
lajuette

Respuestas:

8

Parece que me perdí que net.ipv6.conf.default.autoconf se estableció en 1. Agregar un archivo en /etc/sysctl.d para suprimir esto en el arranque resolvió el problema para mí:

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

Ahora obtengo una ruta predeterminada que no caducará en el momento del arranque. Problema resuelto. Gracias por señalarme en la dirección correcta, Sander.

lajuette
fuente
¡Finalmente obtuve la solución!
schnawel007
4

1800 segundos suena como un tiempo de espera predeterminado para un anuncio de enrutador.

Mi primera suposición sería que hay un enrutador Cisco en la red que está configurado ipv6 nd ra suppressen la interfaz. En ese modo, el enrutador enviará un RA cuando un host solicite uno con un RS, pero no lo actualiza regularmente. Un host envía un RS al abrir la interfaz, lo que explicaría por qué obtiene una ruta predeterminada después del arranque.

Esa configuración es una extraña configuración inútil de Cisco. Un enrutador debe enviar RA cuando se le pregunta + regularmente (el valor predeterminado en Cisco) o no enviarlo ( ipv6 nd ra suppress all). La configuración a mitad de camino ipv6 nd ra suppresscausa un comportamiento extraño como este y no debe usarse.

Sander Steffann
fuente
root @ wopr: ~ # cat / proc / sys / net / ipv6 / conf / eth0 / accept_ra produce 0. ¿Supongo que eso significa que eth0 ignora los RA?
lajuette
1
Sí, en ese caso no está utilizando los RA. Es posible que ya haya aceptado uno antes de accept_ra=0configurarlo.
Sander Steffann
0

En realidad, la respuesta marcada es incorrecta. El problema es que la ventana acoplable habilita el reenvío en las interfaces y eso hace que el kernel de Linux ignore los RA en esa interfaz en particular, consulte: https://www.mattb.net.nz/blog/2011/05/12/linux-ignores -ipv6-router-advertments-when-forwarding-is-enabled /

Entonces, la solución correcta en este caso es establecer accept_raa 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

en lugar de deshabilitar completamente el descubrimiento de ruta.

oerdnj
fuente
Agregué esto, aún el host que ejecuta Docker no obtiene una ruta predeterminada Otro host que no es Docker obtiene una ruta predeterminada.
Lenne