Debian / IPv6: la route par défaut expire après 1800 secondes, perdant la connectivité

10

J'utilise Debian 8 sur un vServer. Après avoir installé Docker et activé IPv6, j'ai remarqué quelque chose d'étrange. Je ne sais pas si Docker a quelque chose à voir avec cela, c'est juste que j'ai remarqué ce problème après l'avoir installé.

Mon itinéraire par défaut est configuré pour expirer après env. 1800secs. En fait, je disparais après ce délai. C'est alors que je perds (évidemment) la connectivité 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

Pourquoi la déroute est-elle configurée pour expirer après 1800 s? Où puis-je configurer cela?

[modifier le 2016-05-14 16:08]

L'ajout manuel d'un itinéraire par défaut semble très bien fonctionner. Il reste en place. Mais j'ai besoin d'avoir une route non expirante après le démarrage.

[modifier 2016-05-14 16:13]

La machine fonctionne sur un hôte KVM hébergé par netcup.de. Il utilise le pilote virtio, comme recommandé par mon fournisseur.

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-ce qui dit:

root@wopr:~# virt-what
kvm

[edit 2016-05-14 15:34] On dirait que j'ai raté ce qui net.ipv6.conf.default.autoconfétait réglé sur 1. Maintenant, j'ai ajouté un fichier dans /etc/sysctl.d pour supprimer cela au démarrage:

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
la source
À l'exception de Docker, il n'y a pas beaucoup d'autres applications en cours d'exécution sur cette machine.
lajuette

Réponses:

8

Il semble que j'ai raté que net.ipv6.conf.default.autoconf était réglé sur 1. L'ajout d'un fichier dans /etc/sysctl.d pour supprimer cela au démarrage a résolu le problème pour moi:

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

Maintenant, je reçois un itinéraire par défaut qui n'expirera pas au démarrage. Problème résolu. Merci de m'avoir pointé dans la bonne direction, Sander.

lajuette
la source
Enfin j'ai la solution!
schnawel007
4

1800 secondes sonne comme un délai d'expiration par défaut pour une annonce de routeur.

Ma première supposition serait qu'il y a un routeur Cisco sur le réseau configuré avec ipv6 nd ra suppressl'interface. Dans ce mode, le routeur enverra un RA lorsqu'un hôte en demande un avec un RS, mais ne le rafraîchit pas régulièrement. Un hôte envoie un RS lors de la mise en place de l'interface, ce qui expliquerait pourquoi il obtient une route par défaut après le démarrage.

Ce paramètre est un paramètre Cisco étrange et inutile. Un routeur doit soit envoyer des AR lorsqu'il lui est demandé + régulièrement (par défaut sur Cisco), soit pas du tout ( ipv6 nd ra suppress all). Le paramètre à mi-chemin ipv6 nd ra suppressprovoque un comportement étrange comme celui-ci et ne doit pas être utilisé.

Sander Steffann
la source
root @ wopr: ~ # cat / proc / sys / net / ipv6 / conf / eth0 / accept_ra donne 0. Je suppose que cela signifie que eth0 ignore les AR?
lajuette
1
Oui, dans ce cas, il n'utilise pas les AR. Il pourrait en avoir déjà accepté un avant qu'il ne accept_ra=0soit défini.
Sander Steffann
0

En fait, la réponse marquée est fausse. Le problème est que Docker permet le transfert sur les interfaces et que le noyau Linux ignore les RA sur cette interface particulière, voir: https://www.mattb.net.nz/blog/2011/05/12/linux-ignores -ipv6-router-advertising-when-forwarding-is-enabled /

Ainsi, la bonne solution dans ce cas est de définir accept_rasur 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

au lieu de désactiver complètement la découverte d'itinéraire.

oerdnj
la source
J'ai ajouté ceci, toujours l'hôte exécutant le docker n'obtient pas une route par défaut Un autre hôte non-docker obtient une route par défaut.
Lenne