Debian / IPv6: Trasa domyślna wygasa po 1800 sekundach, tracąc łączność

10

Używam Debian 8 na serwerze vServer. Po zainstalowaniu dokera i włączeniu protokołu IPv6 zauważyłem coś dziwnego. Nie wiem, czy doker ma z tym coś wspólnego, po prostu zauważyłem ten problem po jego zainstalowaniu.

Moja domyślna trasa jest skonfigurowana do wygaśnięcia po ok. 1800secs. Właściwie znika po tym czasie. To wtedy (oczywiście) tracę łączność 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

Dlaczego trasa jest skonfigurowana tak, aby wygasała po 1800 s? Gdzie mogę to skonfigurować?

[edycja 2016-05-14 16:08]

Ręczne dodanie domyślnej trasy wydaje się działać dobrze. Pozostaje na miejscu. Ale po uruchomieniu muszę mieć nie wygasającą trasę.

[edycja 2016-05-14 16:13]

Maszyna działa na hoście KVM hostowanym przez netcup.de. Korzysta ze sterownika virtio, zgodnie z zaleceniami mojego dostawcy.

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-co mówi:

root@wopr:~# virt-what
kvm

[edytuj 2016-05-14 15:34] Wygląda na to, że tęskniłem za tym net.ipv6.conf.default.autoconfustawionym na 1. Teraz dodałem plik w /etc/sysctl.d, aby ukryć to podczas bootowania:

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
źródło
Z wyjątkiem dokera, na tym komputerze nie działa wiele innych aplikacji.
lajuette

Odpowiedzi:

8

Wygląda na to, że spóźniłem się na ustawienie net.ipv6.conf.default.autoconf na 1. Dodanie pliku w /etc/sysctl.d w celu wyeliminowania tego problemu podczas rozruchu rozwiązało problem:

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

Teraz dostaję domyślną trasę, która nie wygasa w czasie uruchamiania. Problem rozwiązany. Dzięki, że wskazałeś mi właściwy kierunek, Sander.

lajuette
źródło
Wreszcie mam rozwiązanie!
schnawel007
4

1800 sekund brzmi jak domyślny limit czasu dla reklamy routera.

Najpierw sądzę, że w sieci jest router Cisco skonfigurowany ipv6 nd ra suppressw interfejsie. W tym trybie router wyśle ​​RA, gdy host zażąda RS z RS, ale nie odświeża go regularnie. Host wysyła RS podczas uruchamiania interfejsu, co wyjaśnia, dlaczego dostaje domyślną trasę po uruchomieniu.

To ustawienie jest dziwnym, bezużytecznym ustawieniem Cisco. Router powinien albo regularnie wysyłać RA na żądanie + regularnie (domyślnie w Cisco), albo wcale ( ipv6 nd ra suppress all). Ustawienie w połowie ipv6 nd ra suppresspowoduje takie dziwne zachowanie i nie należy go używać.

Sander Steffann
źródło
root @ wopr: ~ # cat / proc / sys / net / ipv6 / conf / eth0 / accept_ra daje 0. Myślę, że to oznacza, że ​​eth0 ignoruje RA?
lajuette
1
Tak, w takim przypadku nie korzysta z RA. Być może już go wcześniej zaakceptowano accept_ra=0.
Sander Steffann
0

Właściwie zaznaczona odpowiedź jest zła. Problem polega na tym, że doker umożliwia przekazywanie na interfejsie (interfejsach) i powoduje, że jądro Linuksa ignoruje RA na tym konkretnym interfejsie, patrz: https://www.mattb.net.nz/blog/2011/05/12/linux-ignores -ipv6-router-adsments-when-forwarding-is-enabled /

Więc poprawnym rozwiązaniem w tym przypadku jest do zestawu accept_rado 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

zamiast całkowicie wyłączać wykrywanie trasy.

oerdnj
źródło
Dodałem to, ale host działający jako okno dokowane nie otrzymuje domyślnej trasy Inny host inny niż doker otrzymuje trasę domyślną.
Lenne