
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.autoconf
estaba 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 suppress
en 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 suppress
provoca 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_ra
establecer 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.