[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]

80. Esperimenti con IPv6

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-HOWTO.zip

http://www.bieringer.de/linux/IPV6-HOWTO.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.

80.1 Preparazione dei file di configurazione

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 ping non può funzionare, perché non si trova la definizione del protocollo icmpv6.

80.2 Attivazione di IPv6 e definizione degli indirizzi link-local

Per poter gestire IPv6 occorre un kernel adatto, dove eventualmente la gestione di questo protocollo sia stata affidata a un modulo:

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 il ping 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    

80.3 Definizione degli indirizzi site-local

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    

80.4 Instradamento

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 001), 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.

80.4.1 Router Advertiser Daemon -- 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.

80.5 Riferimenti

---------------------------

Appunti Linux 1999.09.21 --- Copyright © 1997-1999 Daniele Giacomini --  daniele @ pluto.linux.it


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.


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]