Quando si comincia ad utilizzare IPv6 in produzione su una configurazione LAN eterogenea iniziano i comportamenti a cui non siamo abituati.
Con IPv4 un host impostato per la configurazione automatica si assegna un indirizzo link-local (169.254.0.0/16, RFC3927) contatta il server DHCP per avere un indirizzo e, quando lo ottiene, scarta l’indirizzo link-local e avrà sempre solamente quell’indirizzo fino alla scadenza dell’affitto dello stesso.
Innanzi tutto, IPv6 mantiene l’indirizzo link-local fe80::/10 di ogni interfaccia diversa dal localhost. Questo è il problema minore perché generalmente i programmi non utilizzano il link-local se non istruiti espressamente per farlo.
Il problema vero e proprio si verifica quando c’è un metodo di configurazione automatica e un host viene configurato con un IPv6 fisso. In questo caso un host si potrebbe prendere sia l’IPv6 fisso sia uno autoconfigurato. Inoltre per default Windows assegna un ulteriore indirizzo IPv6 per sfruttare la privacy della connessione e ridurre la tracciabilità quando si va online (RFC4941).
Il risultato finale è che un host ha una babele di indirizzi. E il SysAdmin invoca le divinità.
Vale la pena di ribadire che siamo all’inizio dell’utilizzo di IPv6 in produzione e che standard e default possono cambiare. Le istruzioni che seguono sono frutto dell’esperienza (chiamiamola così…) mia e di Fabrizio e possono cambiare nel tempo, quando l’adozione di IPv6 sarà più capillare.
Nei client Windows si può utilizzare netsh per controllare quali sono gli IPv6 assegnati:
netsh interface ipv6 show addresses
Se c’è qualche indirizzo di troppo questi comandi dati una volta sola dovrebbero risolvere ogni problema:
netsh interface ipv6 set privacy state=disabled store=active netsh interface ipv6 set privacy state=disabled store=persistent netsh interface ipv6 set global randomizeidentifiers=disabled store=active netsh interface ipv6 set global randomizeidentifiers=disabled store=persistent
e riavviare il sistema, come è indicato qui. Microsoft mantiene anche una lista di troubleshooting sull’IPv6.
Su Linux l’autoconfigurazione può essere disabilitata aggiungendo queste righe a /etc/sysctl.conf
:
net.ipv6.conf.all.autoconf=0 net.ipv6.conf.all.accept_ra=0
e riavviare il sistema. In Linux le modifiche possono essere fatte anche in maniera temporanea utilizzando sysctl -w
. Al posto di all
può essere indicata una sola interfaccia (eth0
, eth1
…). Se l’host Linux è lui stesso un router, l’autoconfigurazione viene abilitata solamente se accept_ra
è vale 2
, da cui apprendiamo che accept_ra
è un boolean (come indicato nella documentazione) un po’ sui generis.
Queste regole valgono per le ultime versioni di Linux, su quelle meno recenti come CentOS/RedHat 5 bisogna fare qualche lavoretto in più per convincere il sistema a non prendere indirizzi non desiderati.
Lascia un commento