Nota aggiunta il 30/9/2013: a questa soluzione è da preferire quella descritta in un articolo successivo con pfSense e KVM.
(alcune parti sono state modificate dopo la pubblicazione)
Questo articolo spiega come impostare un tunnel IPv6 con Linux CentOS 5 configurato come gateway, NAT e firewall di una LAN.
Lo scenario è il seguente: un router ADSL con IPv4 pubblico collegato ad un Linux che fa da NAT/firewall per la LAN. In questo esempio eth0 è l’interfaccia WAN con un IPv4 pubblico /29 e eth1 è l’interfaccia LAN con un IPv4 /24.
Alla fine della procedura la classe /64 di IPv6 pubblici con reverse DNS potrà essere utilizzata per assegnare indirizzi pubblici ai dispositivi IPv6 in LAN, incluso il gateway Linux.
Innanzi tutto bisogna abilitare IPv6 su CentOS senza assegnare, per ora, indirizzi alle interfacce. È però necessario aggiungere questa riga al file /etc/sysconfig/network
per abilitare il routing IPv6 dalla LAN al tunnel:
IPV6FORWARDING=yes
Fatto questo, bisogna attivare su TunnelBroker un tunnel IPv6 gratuito. Se il firewall sul Linux blocca i ping, bisogna abilitarli almeno sull’interfaccia pubblica perché la raggiungibilità ICMP dell’endpoint locale è condizione necessaria per l’attivazione del tunnel. Diversamente dall’esperienza di Fabrizio (che mi ha aiutato a mettere a punto alcune parti della configurazione presentata di seguito), nel mio caso l’endpoint più veloce è quello britannico. Il fornitore mi assegna un IPv6 per il tunneling (IPv6 Tunnel Endpoints) e una classe da assegnare agli indirizzi locali (Routed IPv6 Prefixes), che sarà la classe pubblica da utilizzare.
HE fornisce degli script di net-tools di esempio, ma non funzionano correttamente se si vuole assegnare un IPv6 pubblico al server Linux. Se si configura l’indirizzo IPv6 di tunneling sull’interfaccia sit1, le connessioni IPv6 originate dal Linux uscirebbero con l’IPv6 del tunnel e non con un IPv6 della classe assegnata da HE.
Dal momento che il server Linux deve avviare correttamente i servizi al boot senza intervento umano, bisogna predisporre uno script di avvio che attivi il tunnel IPv6 appena dopo l’avvio della rete, ma prima che partano i demoni che usano IPv6. Diversamente, un programma potrebbe tentare di fare binding ad un indirizzo che non esiste e non avviarsi correttamente. Per fare questo si crea un file /etc/init.d/ipv6tunnel
(o un altro nome a scelta) con questo contenuto:
#!/bin/bash # # ipv6tunnel This shell script takes care of starting and stopping # IPv6 tunnel with HE # # chkconfig: - 12 88 # description: HE supplies free IPv6 tunnel # probe: true # Source function library. . /etc/rc.d/init.d/functions #RETVAL=0 start() { echo "Starting IPv6 tunnel " ifconfig sit0 up # nella riga successiva sostituire 216.66.80.26 # con l'IP dell'endpoint scelto ifconfig sit0 inet6 tunnel ::216.66.80.26 ifconfig sit1 up route -A inet6 add ::/0 dev sit1 echo 1 > /proc/sys/net/ipv6/conf/all/forwarding return 0 } stop() { # Stop daemons. echo "Stopping IPv6 tunnel " ifconfig sit1 down ifconfig sit0 down return 0 } restart() { stop sleep 1 start } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo $"Usage: $0 {start|stop|restart}" exit 2 esac exit $?
Si può attivare lo script all’avvio con gli appositi comandi:
chkconfig --add ipv6tunnel
chkconfig --level 35 ipv6tunnel on
Bisogna, quindi, assegnare un IPv6 pubblico della classe Routed IPv6 Prefixes alla scheda di rete della LAN aggiungendo queste righe a /etc/sysconfig/network-scripts/ifcfg-eth1
:
IPV6INIT=yes
IPV6ADDR=2001:470:1f09:203::dead:beef
Nella situazione in cui è stata testata questa procedura, l’IPv6 qui sopra è quello che viene usato per le connessioni esterne. Vale sempre la pena di fare un po’ di test perché ci sono molte variabili in gioco e l’IPv6 in CentOS 5 ogni tanto è goffo o erratico come un fulminatore.
A questo punto si può riavviare il Linux per verificare se il tunnel viene aperto nel momento giusto e per vedere se il tutto funziona. Se tutto è configurato correttamente, il comando
ping6 ipv6.google.com
eseguito sul Linux dovrebbe funzionare come ci si aspetta: ipv6.google.com è un host che ha solamente un indirizzo IPv6 e non IPv4.
Il passo successivo è predisporre la configurazione automatica degli host IPv6 della LAN. A questo scopo si installa radvd con il comando
yum install radvd
Quindi si modifica /etc/radvd.conf
in questo modo:
interface eth1 { AdvSendAdvert on; MinRtrAdvInterval 200; MaxRtrAdvInterval 600; prefix 2001:470:1f09:203::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr off; }; };
dove prefix
è la classe indicata sotto Routed IPv6 Prefixes. Il demone si avvia con service radvd start
. Le macchine Linux e Windows (incluse le VM con la rete in bridge) che hanno attivo il protocollo IPv6 e la configurazione automatica dell’indirizzo dovrebbero acquisire automaticamente un IPv6.
Per eseguire un test con il browser si può visitare test-ipv6.com, che dovrebbe restituire un punteggio di 10/10, oppure ipv6test.google.com, o anche ipv6-test.com oppure ipv6eyechart.ripe.net per eseguire tanti test contemporaneamente. Ci sono, comunque, moltissimi siti che eseguono test IPv6.
Un ultimo passo, facoltativo, è la creazione di un reverse DNS sugli IP assegnati da HE. Per fare questo bisogna prima delegare he.net per la gestione del reverse nella stessa schermata in cui sono elencati gli IPv6 assegnati, poi andare su dns.he.net e collegarsi con il proprio account di HE. Qui il proprio blocco risulterà incomplete perché la zona è ancora vuota. Per popolarla cliccare sull’icona a sinistra della zona e specificare indirizzo e nome dell’host. Le modifiche sono attive immediatamente.
Vale sempre la pena di ricordare che gli IPv6 sono pubblici, quindi accessibili da chiunque abbia IPv6. La protezione del firewall IPv4 non si applica ad IPv6, per il quale vanno create e manutenute regole ad hoc. Ma questo è un argomento per un altro articolo.
Un ultimo consiglio: se fate delle prove a botte di configurazione e sconfigurazione di interfacce può succedere che ci si incasini, sia per quanto riguarda il Linux che fa da firewall/gateway sia per i client. Il consiglio è di fare poche modifiche per volta e ogni tanto di verificare la configurazione spegnendo e riaccendendo tutto.
Il tunneling è un buon sistema per impratichirsi dell’IPv6, fermo restando il fatto che la situazione migliore si avrà quando ci saranno ISP che daranno il blocco IPv6 disponibile sul router esattamente come i blocchi IPv4.
Lascia un commento