[>a2122.html>] [<a2120.html<] [^a2.html^]
L'inconveniente principale per chi desidera fare degli esperimenti con IPv6 sta nel fatto che è difficile trovare una distribuzione GNU/Linux predisposta per questo. Per tale motivo viene in aiuto il documento IPv6 & Linux HOWTO di Peter Bieringer che viene aggiornato frequentemente dall'autore e che riporta tutti i passi necessari ad attivare la gestione di IPv6 a scopo sperimentale nel proprio sistema GNU/Linux.
<http://www.bieringer.de/linux/IPV6.zip>
<http://www.bieringer.de/linux/IPV6.tar.gz>
<ftp://ftp.bieringer.de/pub/linux/www-pages/>
Chi non vuole fare i conti con la compilazione dei pacchetti sorgenti necessari, può provare a cercare di ottenere il software già compilato. In questo momento dovrebbe essere disponibile un lavoro preparato in formato RPM presso l'URI seguente:
<ftp://ftp.jcu.cz/pub/ten.cz/ipv6/>
I pacchetti indispensabili dovrebbero avere nomi simili a: net-tools*
, inet6-apps*
, libpcap+ipv6*
e tcpdump+ipv6*
; inoltre è opportuno procurarsi anche il pacchetto del demone radvd: radvd*
. Molto probabilmente, il pacchetto corrispondente al modello net-tools*
andrà a sostituirsi a quello corrispondente della propria distribuzione, mentre gli altri vengono installati normalmente al di sotto della directory /usr/inet6/
, per evitare la sovrapposizione con gli altri pacchetti normali.
Per poter fare qualunque cosa con IPv6, è necessario che il file /etc/protocols
risulti corretto anche per le finalità di questo protocollo. In particolare, è importante che appaiano le righe seguenti:
ipv6 41 IPv6 # IPv6 ipv6-route 43 IPv6-Route # Routing Header for IPv6 ipv6-frag 44 IPv6-Frag # Fragment Header for IPv6 ipv6-crypt 50 IPv6-Crypt # Encryption Header for IPv6 ipv6-auth 51 IPv6-Auth # Authentication Header for IPv6 icmpv6 58 IPv6-ICMP # ICMP for IPv6 ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6 ipv6-opts 60 IPv6-Opts # Destination Options for IPv6
Mancando queste indicazioni, lo stesso eco ICMP (ping) non può funzionare, perché non si trova la definizione del protocollo icmpv6.
Per poter gestire IPv6 occorre un kernel adatto, dove eventualmente la gestione di questo protocollo sia stata affidata a un modulo:
Prompt for development and/or incomplete code/drivers (21.2.1) Y
Kernel/User netlink socket (21.2.7) Y
Routing messages (21.2.7) Y
The IPv6 protocol (21.2.7) M/Y
IPv6: enable EUI-64 token format (21.2.7) Y
IPv6: disable provider based addresses (21.2.7) Y
Se la gestione di IPv6 viene inserita in un modulo, per abilitarla occorrerà attivare il modulo, per esempio attraverso il comando seguente che potrebbe essere inserito all'interno degli script della procedura di inizializzazione del sistema:
/sbin/modprobe ipv6
A questo punto, l'indirizzo locale di loopback e gli indirizzi link-local sono già fissati automaticamente. Lo si può osservare con ifconfig:
#
ifconfig
[Invio]
eth0 Link encap:Ethernet HWaddr 00:A0:24:77:49:97 inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::2a0:24ff:fe77:4997/10 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:101 errors:1 dropped:1 overruns:0 frame:1 TX packets:68 errors:0 dropped:0 overruns:0 carrier:1 collisions:0 txqueuelen:100 Interrupt:12 Base address:0xff80 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:3924 Metric:1 RX packets:24 errors:0 dropped:0 overruns:0 frame:0 TX packets:24 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
Eventualmente, gli indirizzi IPv6 attivi sono visibili anche all'interno del file virtuale /proc/net/if_inet6
:
#
cat /proc/net/if_inet6
[Invio]
00000000000000000000000000000001 01 80 10 80 lo fe8000000000000002a024fffe774997 04 0a 20 80 eth0
Secondo la filosofia di IPv6, questi indirizzi devono avere già il loro instradamento naturale, di conseguenza sono già pronti per essere usati. Si può verificare con ping (si deve usare quello adatto a IPv6):
#
/usr/inet6/bin/ping -a inet6 ::1
#
/usr/inet6/bin/ping -a inet6 fe80::2a0:24ff:fe77:4997
In entrambi i casi, si dovrebbe osservare l'eco regolarmente. Se si ha la possibilità di predisporre anche un altro elaboratore, connesso alla stessa rete fisica, si può osservare che l'eco ICMP dovrebbe funzionare correttamente anche verso quel nodo, pur senza avere dichiarato l'instradamento.(1)
Per verificare le regole di instradamento, anche se queste non sono state inserite attraverso un comando apposito, si può utilizzare route nel modo seguente (il risultato che si ottiene deriva dagli esempi già visti):
#
route -A inet6
[Invio]
Kernel IPv6 routing table Destination Next Hop Flags Metric Ref Use Iface ::1/128 :: U 0 4 0 lo fe80::2a0:24ff:fe77:4997/128 :: U 0 236 1 lo fe80::/10 :: UA 256 0 0 eth0 ff00::/8 :: UA 256 0 0 eth0 ::/0 :: UDA 256 0 0 eth0
Gli indirizzi site-local devono essere dichiarati esplicitamente, anche se per questo si potrebbe prospettare una procedura che li generi in modo automatico (in base all'identificatore EUI-64). Seguendo il caso visto nella sezione precedente, si deve usare ifconfig nel modo seguente:
#
ifconfig eth0 inet6 add fec0:0:0:1:2a0:24ff:fe77:4997/64
In questo caso, si nota la scelta di identificare la rete fisica a cui si connette l'interfaccia con il numero 1 (fec0:0:0:1:...). Si può verificare facilmente con il comando seguente; si osservi il fatto che si sommano assieme le informazioni dei vari indirizzi, con l'indicazione dell'ambito a cui si riferiscono (scope):
#
ifconfig eth0
[Invio]
eth0 Link encap:Ethernet HWaddr 00:A0:24:77:49:97 inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fec0::1:2a0:24ff:fe77:4997/64 Scope:Site inet6 addr: fe80::2a0:24ff:fe77:4997/10 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:31711 errors:0 dropped:0 overruns:0 frame:0 TX packets:65557 errors:0 dropped:0 overruns:0 carrier:0 collisions:7 txqueuelen:100 Interrupt:11 Base address:0x300
Anche con gli indirizzi site-local non è necessario dichiarare esplicitamente l'instradamento, basta indicare correttamente la lunghezza del prefisso nel momento in cui vengono assegnati alle interfacce.
#
route -A inet6
In base agli esempi visti fino a questo punto, si dovrebbe osservare qualcosa come l'esempio seguente:
Kernel IPv6 routing table Destination Next Hop Flags Metric Ref Use Iface ::1/128 :: U 0 4 0 lo fe80::2a0:24ff:fe77:4997/128 :: U 0 236 1 lo fe80::/10 :: UA 256 0 0 eth0 fec0::1:2a0:24ff:fe77:4997/128 :: U 0 7 0 lo fec0:0:0:1::/64 :: UA 256 0 0 eth0 ff00::/8 :: UA 256 0 0 eth0 ::/0 :: UDA 256 0 0 eth0
L'instradamento dei pacchetti IPv6 dovrebbe essere configurato prevalentemente in modo automatico. Eventualmente si può usare route specificando che si tratta di indirizzi IPv6:
route -A inet6 add indirizzo_ipv6/lunghezza_prefisso dev interfaccia
Per esempio, se per qualche motivo fosse necessario stabilire in modo manuale l'instradamento della sottorete fec0:0:0:1::/64 (site-local), attraverso l'interfaccia eth0, si potrebbe usare il comando seguente:
#
route -A inet6 add fec0:0:0:1::/64 dev eth0
[Invio]
Intuitivamente, per rimuovere una regola di instradamento nel modo appena visto, basta sostituire la parola chiave add con del. L'esempio seguente elimina la regola di instradamento che serve a dirigere il traffico per la sottorete fec0:0:0:1::/64 attraverso l'interfaccia eth0:
#
route -A inet6 del fec0:0:0:1::/64 dev eth0
[Invio]
Quando si utilizzano indirizzi globali (attualmente solo quelli che hanno il prefisso di formato 0012), si può fare in modo che i vari nodi configurino automaticamente le loro interfacce, con l'aiuto di router che «pubblicizzano» le informazioni sugli indirizzi da usare. A questo proposito, con GNU/Linux si può utilizzare il demone radvd.
Il demone radvd è un Router ADVertiser Daemon, cioè un programma che si occupa di stare in attesa delle richieste (router solicitation) da parte dei nodi delle sottoreti connesse fisicamente al router in cui questo si trova a funzionare. A queste richieste risponde (router advertisement) fornendo l'indicazione del prefisso da usare per gli indirizzi di quel collegamento di rete (link).
L'unico impegno sta nella configurazione di radvd attraverso il suo file di configurazione, che potrebbe essere /etc/radvd.conf
, /etc/sysconfig/radvd.conf
o altro ancora. All'interno di questo file si indicano i prefissi da usare per ogni collegamento di rete (vengono indicate le interfacce attraverso cui «pubblicizzarli»). Si osservi l'esempio seguente:
interface eth0 { AdvSendAdvert on; prefix 3ffe:0302:0011:0002::0/64 { AdvOnLink on; AdvAutonomous on; }; };
Viene stabilito che nel collegamento di rete corrispondente all'interfaccia eth0, radvd deve pubblicizzare il prefisso 3ffe:302:11:2::0/64, che in pratica corrisponde a un indirizzo unicast globale aggregabile, fissato per gli esperimenti nella fase di transizione verso IPv6 e documentato dall'RFC 2471.
Con questa informazione, tutti i nodi che risultano connessi allo stesso collegamento di rete, ricevendo questa informazione, configurano le loro interfacce di rete utilizzando l'identificatore EUI-64 e aggiungono la regola di instradamento relativa. Quello che si vede sotto è l'esempio di un'interfaccia di rete configurata con gli indirizzi link-local e site-local, e anche con un indirizzo globale ottenuto attraverso il demone radvd.
eth0 Link encap:Ethernet HWaddr 00:A0:24:77:49:97 inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: 3ffe:302:11:2:2a0:24ff:fe77:4997/64 Scope:Global inet6 addr: fec0::1:2a0:24ff:fe77:4997/64 Scope:Site inet6 addr: fe80::2a0:24ff:fe77:4997/10 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:31711 errors:0 dropped:0 overruns:0 frame:0 TX packets:65557 errors:0 dropped:0 overruns:0 carrier:0 collisions:7 txqueuelen:100 Interrupt:11 Base address:0x300
Per avviare il demone radvd non c'è bisogno di opzioni particolari; eventualmente può essere conveniente accertarsi di fargli leggere il file di configurazione corretto:
#
radvd -C /etc/radvd.conf
In questo modo, si vuole indicare precisamente che il file di configurazione è /etc/radvd.conf
.
R. Hinden, R. Fink, J. Postel, RFC 2471: IPv6 Testing Address Allocation, 1998
1) Per usare ping come utente comune occorre che questo appartenga all'utente root e abbia il bit SUID attivo (SUID-root). È probabile che questo permesso debba essere assegnato manualmente.