Debian / IPv6: il percorso predefinito scade dopo 1800 secondi, perdendo la connettività


10

Sto eseguendo Debian 8 su un vServer. Dopo aver installato la finestra mobile e aver abilitato IPv6, ho notato qualcosa di strano. Non so se la finestra mobile abbia qualcosa a che fare con questo, è solo che ho notato questo problema dopo averlo installato.

Il mio percorso predefinito è configurato per scadere dopo ca. 1800secs. In realtà svanisco dopo questo timeout. Questo è quando i (ovviamente) perdo la connettività 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

Perché la rotta è configurata per scadere dopo 1800 s? Dove posso configurarlo?

[modifica 14/05/2016 16:08]

L'aggiunta manuale di una route predefinita sembra funzionare correttamente. Rimane fermo. Ma ho bisogno di avere un percorso non in scadenza dopo l'avvio.

[modifica 14/05/2016 16:13]

La macchina è in esecuzione su un host KVM ospitato da netcup.de. Sta usando il driver virtio, come raccomandato dal mio provider.

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-cosa dice:

root@wopr:~# virt-what
kvm

[modifica 14/05/2016 15:34] Sembra che mi sia perso che net.ipv6.conf.default.autoconfera impostato su 1. Ora ho aggiunto un file in /etc/sysctl.d per sopprimerlo all'avvio:

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

Fatta eccezione per la finestra mobile, non ci sono molte altre applicazioni in esecuzione su questa macchina.
lajuette,

Risposte:


8

Sembra che mi sia perso il fatto che net.ipv6.conf.default.autoconf fosse impostato su 1. L'aggiunta di un file in /etc/sysctl.d per sopprimerlo all'avvio ha risolto il problema per me:

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

Ora ottengo un percorso predefinito che non scadrà al momento dell'avvio. Problema risolto. Grazie per avermi indicato nella giusta direzione, Sander.


Finalmente ho ottenuto la soluzione!
schnawel007,

4

1800 secondi sembra un timeout predefinito per un annuncio router.

La mia prima ipotesi sarebbe che sulla rete sia presente un router Cisco configurato con ipv6 nd ra suppressl'interfaccia. In quella modalità il router invierà un RA quando un host ne richiede uno con un RS, ma non lo aggiorna regolarmente. Un host invia un RS quando visualizza l'interfaccia, il che spiega perché ottiene una route predefinita dopo l'avvio.

Quell'impostazione è una strana impostazione inutile di Cisco. Un router dovrebbe inviare RA quando richiesto + regolarmente (impostazione predefinita su Cisco) o per niente ( ipv6 nd ra suppress all). L'impostazione a metà strada ipv6 nd ra suppressprovoca comportamenti strani come questo e non deve essere utilizzata.


root @ wopr: ~ # cat / proc / sys / net / ipv6 / conf / eth0 / accept_ra produce 0. Suppongo che significhi che eth0 sta ignorando le RA?
lajuette,

1
Sì, in tal caso non utilizza gli RA. Potrebbe averne già accettato uno prima che accept_ra=0sia impostato.
Sander Steffann,

0

In realtà, la risposta contrassegnata è errata. Il problema è che la finestra mobile abilita l'inoltro su interfaccia (e) e che fa sì che il kernel Linux ignori le RA su quella particolare interfaccia, vedi: https://www.mattb.net.nz/blog/2011/05/12/linux-ignores -ipv6-router-annunci-quando-forwarding-è-enabled /

Pertanto, la soluzione corretta in questo caso è impostare accept_rasu 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

invece di disabilitare completamente il rilevamento del percorso.


Ho aggiunto questo, tuttavia l'host che esegue la finestra mobile non ottiene una route predefinita Un altro host non docker ottiene una route predefinita.
Lenne,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.