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

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

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. 1800 segundos. De hecho, desaparezco después de este tiempo de espera. Aquí 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 ahí. 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 en netcup.de. Está utilizando el controlador virtio, 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

[editar 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

Respuesta1

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

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 indicarme la dirección correcta, Sander.

Respuesta2

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 cuando abre la interfaz, lo que explicaría por qué obtiene una ruta predeterminada después del arranque.

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

Respuesta3

En realidad, la respuesta marcada es incorrecta. El problema es que Docker permite 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-advertisements-when-forwarding-is-enabled/

Entonces, la solución correcta en este caso es accept_raestablecer 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 desactivar completamente el descubrimiento de rutas.

información relacionada