[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 119.   Utilizzo di IPv6

Per usare IPv6 può essere necessario aggiornare o sostituire alcuni pacchetti di programmi di servizio per la gestione della rete. Purtroppo, diventa difficile indicare il nome dei pacchetti applicativi da utilizzare, dal momento che le varie distribuzioni GNU si comportano in maniera differente. In generale, si deve tenere presente che se un programma per la gestione della rete non funziona come dovrebbe con IPv6, può darsi che si debba aggiornare il pacchetto, oppure che questo vada sostituito con un altro che fornisce le stesse funzionalità

Si osservi che gli esempi mostrati nel capitolo fanno riferimento a un sistema GNU/Linux.

119.1   kernel Linux

Il kernel Linux deve essere predisposto per la gestione dei protocolli IPv6 (sezione 29.2.9).

Se la gestione di IPv6 viene inserita in un modulo, per abilitarla occorrerà attivare il modulo relativo, per esempio attraverso il comando seguente che potrebbe essere inserito all'interno degli script della procedura di inizializzazione del sistema:

/sbin/modprobe ipv6

Per verificare che il kernel in funzione sia in grado di gestire i protocolli IPv6, si può verificare che esista il file virtuale /proc/net/if_inet6, il quale ha lo scopo di elencare le interfacce di rete e i loro indirizzi IPv6. Nel caso degli esempi che vengono mostrati nelle sezioni successive, si potrebbe vedere quanto segue:

cat /proc/net/if_inet6[Invio]

00000000000000000000000000000001 01 80 10 80       lo
fe8000000000000002a024fffe774997 04 0a 20 80     eth0

Nel caso l'elaboratore debba fungere da router, è necessario abilitare la funzionalità di attraversamento dei pacchetti con il comando seguente:

Inoltre, è bene ricordare di abilitare l'attraversamento dei pacchetti IPv6 nel router locale, cosa che si dovrebbe ottenere con il comando seguente:

echo 1 > /proc/sys/net/ipv6/conf/all/forwarding[Invio]

119.2   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 eco ICMP (Ping) non può funzionare, perché non si trova la definizione del protocollo ICMPv6 (corrispondente al nome icmpv6 nell'esempio mostrato).

119.3   Attivazione di IPv6 e definizione degli indirizzi link-local

Come già accennato, per poter gestire IPv6 occorre un kernel adatto. Quando tutto è pronto, vengono fissati automaticamente l'indirizzo locale di loopback e gli indirizzi link-local. 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 

In alternativa, con Iproute:

ip address show dev lo[Invio]

1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 

ip address show dev eth0[Invio]

3: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 100
    link/ether 00:a0:24:77:49:97 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::2a0:24ff:fe77:4997/10 scope link 

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 una delle varie versioni modificate di Ping, (1) in grado di usare il protocollo ICMPv6:

ping6 ::1

e

ping6 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 ICMPv6 dovrebbe funzionare correttamente anche verso quel nodo, pur senza avere dichiarato l'instradamento.(2)

Naturalmente, si può usare anche Traceroute, (3) che comunque diventa più utile in seguito, quando si inseriscono dei router nel transito dei pacchetti:

traceroute6 fe80::2a0:24ff:fe77:4997

oppure

tracepath6 fe80::2a0:24ff:fe77:4997

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    

Anche in questo caso si può usare in alternativa Iproute, benché restituisca un esito differente:

ip -6 route show[Invio]

fe80::/10 dev eth0  proto kernel  metric 256  mtu 1500 advmss 1440
ff00::/8 dev eth0  proto kernel  metric 256  mtu 1500 advmss 1440
default dev eth0  proto kernel  metric 256  mtu 1500 advmss 1440
unreachable default dev lo  metric -1  error -101

119.4   Definizione degli indirizzi site-local

Gli indirizzi site-local devono essere dichiarati esplicitamente, anche se per questo si potrebbe usare Radvd, in modo da utilizzare automaticamente l'identificatore EUI-64, come descritto nella sezione 119.6.(4) Seguendo il caso visto nella sezione precedente, si può usare Ifconfig nel modo seguente:

ifconfig eth0 inet6 add fec0:0:0:1:2a0:24ff:fe77:4997/64

Oppure, con Iproute:

ip -6 address add fec0:0:0:1:2a0:24ff:fe77:4997/64 dev eth0 <-'
`->scope site

In questo caso, si nota la scelta di identificare la rete fisica a cui si connette l'interfaccia con il numero 116 (fec0:0:0:1:...). Si può verificare il risultato e 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 

ip address show dev eth0[Invio]

3: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 100
    link/ether 00:50:ba:71:d9:c1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/24 brd 192.168.1.255 scope global eth0
    inet6 fec0:0:0:1:2a0:24ff:fe77:4997/64 scope site 
    inet6 fe80::250:baff:fe71:d9c1/10 scope link 

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    

In alternativa, con Iproute:

ip -6 route show[Invio]

fe80::/10 dev eth0  proto kernel  metric 256  mtu 1500 advmss 1440
fec0:0:0:1::/64 dev eth0  proto kernel  metric 256  mtu 1500 advmss 1440
ff00::/8 dev eth0  proto kernel  metric 256  mtu 1500 advmss 1440
default dev eth0  proto kernel  metric 256  mtu 1500 advmss 1440
unreachable default dev lo  metric -1  error -101

119.5   Instradamento manuale

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]

Naturalmente, la stessa cosa si può ottenere con Iproute. Per aggiungere l'instradamento:

ip -6 route add to unicast fec0:0:0:1::/64 dev eth0[Invio]

Per togliere l'instradamento:

ip -6 route del to unicast fec0:0:0:1::/64[Invio]

A parte l'uso dei comandi mostrati per la definizione degli instradamenti a livello di collegamento, che in generale è perfettamente inutile, perché ciò risulta implicito nella definizione degli indirizzi delle interfacce, diventa importante la definizione di un instradamento attraverso un router. Il meccanismo è lo stesso usato per IPv4, con la differenza che si fa riferimento a indirizzi IPv6. Per esempio, per indicare che il router raggiungibile all'indirizzo fec0:0:0:1::fffe permette di raggiungere la rete fec0:0:0:2::/64, si può usare uno dei due comandi seguenti:

route -A inet6 add fec0:0:0:2::/64 gw fec0:0:0:1::fffe[Invio]

ip -6 route add to unicast fec0:0:0:2::/64 scope site <-'
`->via fec0:0:0:1::fffe[Invio]

Ecco cosa si ottiene:

route -A inet6[Invio]

...
fec0:0:0:2::/64       fec0:0:0:1::fffe           UG    1      0        0 eth0
...

ip -6 route show[Invio]

...
fec0:0:0:2::/64 via fec0:0:0:1::fffe dev eth0  metric 1  mtu 1500 advmss 1440
...

119.6   Configurazione e instradamento automatici

Quando si utilizzano indirizzi globali (attualmente solo quelli che hanno il prefisso di formato 0012), oppure anche validi solo nell'ambito del sito, 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 Radvd.

Radvd, (5) corrispondente al 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 dovrebbe essere /etc/radvd.conf. 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:ffff:0011:0002::0/64
    {
        AdvOnLink on;
        AdvAutonomous on;
    };
};

Viene stabilito che nel collegamento di rete corrispondente all'interfaccia eth0, venga pubblicizzato il prefisso 3ffe:ffff: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.(6)

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 già configurata con gli indirizzi link-local e site-local, avente un indirizzo globale ottenuto attraverso 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:ffff: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.

Per motivi di sicurezza, il kernel Linux non utilizza le informazioni pubblicizzate da Radvd se è abilitato il forwarding, ovvero l'attraversamento dei pacchetti tra interfacce diverse, dal momento che ciò consentirebbe la programmazione remota del proprio elaboratore come router. Pertanto, gli elaboratori che devono configurare automaticamente le proprie interfacce di rete in base alle notizie diramate da Radvd devono essere preparati con un comando simile a quello seguente, dove l'interfaccia è quella per la quale si vuole consentire la configurazione automatica:

echo 0 > /proc/sys/net/ipv6/conf/interfaccia/forwarding

Per la stessa ragione, può essere necessario abilitare l'uso di questo meccanismo, anche attraverso un'altra voce:

echo 1 > /proc/sys/net/ipv6/conf/interfaccia/accept_ra

Per approfondire l'uso e la configurazione di Radvd, si consultino le pagine di manuale radvd(8) e radvd.conf(5).

119.7   Tunnel 6to4

La realizzazione di un tunnel 6to4 è abbastanza semplice con l'aiuto di Iproute. Si fa riferimento a un esempio già apparso nella sezione 118.9, in cui l'indirizzo globale IPv4 è 1.2.3.4, che in modo molto semplice si traduce nell'indirizzo IPv6 2002:0102:0304::1.

tunnel 6to4

Stante questa situazione, la prima cosa da fare è definire una «interfaccia-tunnel», a cui viene dato il nome di t6to4 (il nome viene attribuito in modo libero):

ip tunnel add name t6to4 mode sit remote any local 1.2.3.4[Invio]

Intuitivamente, si comprende che remote any indica che la parte finale del tunnel non ha un indirizzo ben preciso (anycast). Con il comando seguente si può controllare di avere realizzato il tunnel correttamente:

ip tunnel show name t6to4[Invio]

t6to4: ipv6/ip  remote any  local 1.2.3.4  ttl inherit 

Il tunnel si traduce localmente in un'interfaccia di rete virtuale, denominata t6to4, che deve essere attivata espressamente:

ip link set dev t6to4 up[Invio]

Si può verificare lo stato di questa interfaccia con il comando seguente:

ip link show dev t6to4[Invio]

9: t6to4@NONE: <NOARP,UP> mtu 1480 qdisc noqueue 
    link/sit 1.2.3.4 brd 0.0.0.0

Una volta creata l'interfaccia virtuale, gli si deve attribuire l'indirizzo IPv6:

ip -6 address add local 2002:0102:0304::1/64 scope global <-'
`->dev t6to4[Invio]

Si può osservare che l'interfaccia virtuale del tunnel contiene anche l'indirizzo IP ::1.2.3.4:

ip -6 address show dev t6to4[Invio]

9: t6to4@NONE: <NOARP,UP> mtu 1480 qdisc noqueue 
    inet6 2002:102:304::1/64 scope global 
    inet6 ::1.2.3.4/128 scope global 

Infine, è necessario definire l'instradamento per tutti gli indirizzi unicast globali aggregabili, che si differenziano per iniziare con 0012, pari a 216, attraverso il router «virtuale» ::192.88.99.1 (virtuale nel senso che il router reale viene determinato automaticamente):

ip -6 route add to 2000::/3 via ::192.88.99.1 dev t6to4 metric 1[Invio]

Per verificare, si può restringere il campo di azione alla sola destinazione desiderata:

ip -6 route show to 2000::/3[Invio]

2000::/3 via ::192.88.99.1 dev t6to4  metric 1  mtu 1480 advmss 1420

Da questo momento, la rete IPv6 pubblica è accessibile, anche se i tempi di risposta sono maggiori del solito, a causa del tunnel. Se si conoscono degli indirizzi IPv6 della rete pubblica, si può tentare di usare Ping o Traceroute per verificare; diversamente, è necessario disporre già di un sistema di risoluzione dei nomi in grado di consultare anche quelli abbinati a IPv6.

Per eliminare il tunnel, si procede in senso inverso: cancellando l'instradamento; disattivando l'interfaccia virtuale del tunnel; eliminando il tunnel. Ecco come:

ip -6 route flush dev t6to4[Invio]

ip link set dev t6to4 down[Invio]

ip tunnel del name t6to4[Invio]

119.7.1   Inserire la rete locale in un tunnel 6to4

Se si dispone di un indirizzo IPv4 statico, è abbastanza semplice configurare l'elaboratore connesso alla rete esterna come router per collegare anche la propria rete locale. Per questo è necessario prima organizzare meglio l'indirizzo IPv6 ottenuto da IPv4. Per cominciare, nell'ipotesi di voler utilizzare anche delle sottoreti locali (cosa che comunque non verrà mostrata qui), conviene utilizzare il campo SLA. Per esempio, si vuole individuare la rete locale con il numero 000716, che verrà usato nel campo SLA. La figura 119.2 rappresenta sinteticamente tutto ciò che si intende spiegare.

Figura 119.2. Esempio sintetico di una rete local che comunica con la rete esterna IPv6 attraverso un tunnel 6to4.

rete locale colletata a 6bone

Come si vede dalla figura, il router locale è collegato alla rete esterna attraverso l'interfaccia eth0, che si suppone disponga dell'indirizzo IPv4 statico 1.2.3.4, mentre la rete locale è connessa dal lato dell'interfaccia eth1. Sull'interfaccia eth0 viene creato il tunnel, come è già stato mostrato, avendo cura di usare come maschera di rete 48 bit, in modo da inserire anche il campo SLA nell'identificatore di interfaccia. Si procede in pratica nel modo seguente:

ip tunnel add name t6to4 mode sit remote any local 1.2.3.4[Invio]

ip link set dev t6to4 up[Invio]

ip -6 address add local 2002:0102:0304::1/48 scope global <-'
`->dev t6to4[Invio]

ip -6 route add to 2000::/3 via ::192.88.99.1 dev t6to4 metric 1[Invio]

Fino a questo punto è tutto normale, tranne per il fatto di avere indicato un prefisso di soli 48 bit per l'indirizzo attribuito all'interfaccia virtuale del tunnel. La fase successiva richiede l'attribuzione di indirizzi appartenenti alla rete 2002:0102:0304:7:* (ovvero 2002:0102:0304:7::/64). Per ottenere questo risultato, il router locale deve ospitare Radvd, in funzione, con la configurazione seguente:


interface eth0
{
    AdvSendAdvert on;
    prefix 2002:0102:0304:7::/64
    {
        AdvOnLink on;
        AdvAutonomous on;
    };
};

I nodi della rete locale riceveranno un indirizzo IPv6 del tipo 2002:0102:0304:7:x:x:x:x/64, dove x rappresenta 16 bit ottenuti dall'identificatore EUI-64; inoltre otterranno l'instradamento predefinito verso il router locale, anche se solo per mezzo di un indirizzo di tipo link-local.

Tuttavia, questo non basta, perché il fatto di avere già attribuito all'interfaccia virtuale del tunnel l'indirizzo 2002:0102:0304::1/48, potrebbe impedire a Radvd di assegnare all'interfaccia eth1 del router locale un indirizzo appartenente alla rete 2002:0102:0304:7:*. Per sicurezza, è bene intervenire manualmente con un indirizzo che comunque non possa entrare in conflitto; per esempio:

ip -6 address add local 2002:0102:0304:7::1/64 scope global <-'
`->dev eth1[Invio]

Inoltre, è bene ricordare di abilitare l'attraversamento dei pacchetti IPv6 nel router locale, cosa che si dovrebbe ottenere con il comando seguente:

echo 1 > /proc/sys/net/ipv6/conf/all/forwarding[Invio]

119.7.2   Utilizzare un tunnel 6to4 con una connessione PPP

L'uso e la configurazione del protocollo PPP è descritto nel capitolo 127. Per attivare un tunnel 6to4 attraverso un collegamento punto-punto, con il protocollo PPP, conviene intervenire negli script /etc/ppp/ip-up e /etc/ppp/ip-down, dal momento che il primo viene avviato dal demone pppd quando è attiva la connessione, mentre il secondo viene avviato al termine della connessione. Pertanto, è sufficiente aggiungere nello /etc/ppp/ip-up il codice necessario per attivare il tunnel, mentre in /etc/ppp/ip-down quello che serve per disattivarlo.

In condizioni normali, conviene scrivere degli script separati, facendo in modo che questi siano avviati correttamente da quelli gestiti da pppd (ammesso che la propria distribuzione non organizzi già le cose in tal senso).

Anche senza utilizzare direttamente le informazioni che sarebbero disponibili all'interno dello script /etc/ppp/ip-up, le istruzioni necessarie a individuare l'indirizzo IPv4 ottenuto e ad attivare il tunnel sono quelle seguenti:


#!/bin/sh

# Estrae l'indirizzo IPv4 associato all'interfaccia ppp0 e lo mette
# nella variabile di ambiente IPV4_ADDR.
TEMP=`ifconfig ppp0 | grep "inet addr"`
TEMP=`echo $TEMP | sed s/inet.addr://`
TEMP=`echo $TEMP | sed s/P-t-P.*$//`
IPV4_ADDR=$TEMP

# Trasforma l'indirizzo IPv4 in IPv6, mettendo il risultato nella variabile
# di ambiente IPV6_ADDR.
TEMP=`echo $IPV4_ADDR | tr "." " "`
TEMP=`printf "%02x%02x:%02x%02x" $TEMP`
IPV6_ADDR=2002:$TEMP:7::1

# Crea e attiva il tunnel
ip tunnel add name t6to4 mode sit remote any local $IPV4_ADDR
ip link set dev t6to4 up
ip -6 address add $IPV6_ADDR/48 dev t6to4
ip -6 route add to 2000::/3 via ::192.88.99.1 dev t6to4 metric 1

Per annullare il tunnel, la procedura è molto più semplice:


#!/bin/sh

# Disattiva ed elimina il tunnel
ip -6 route flush dev t6to4
ip link set dev t6to4 down
ip tunnel del name t6to4

Se si vuole gestire anche una rete locale, pur avendo solo un indirizzo IPv4 dinamico, si deve fare in modo di configurare dinamicamente anche Radvd. In questo caso, la rete locale è collegata all'interfaccia eth0 del router locale. Ecco come si potrebbe estendere lo script già visto per instaurare il tunnel:


#!/bin/sh

# Estrae l'indirizzo IPv4 associato all'interfaccia ppp0 e lo mette
# nella variabile di ambiente IPV4_ADDR.
TEMP=`ifconfig ppp0 | grep "inet addr"`
TEMP=`echo $TEMP | sed s/inet.addr://`
TEMP=`echo $TEMP | sed s/P-t-P.*$//`
IPV4_ADDR=$TEMP

# Trasforma l'indirizzo IPv4 in due indirizzi IPv6, mettendo i risultati
# nelle variabili di ambiente IPV6_ADDR_1 e IPV6_ADDR_2.
TEMP=`echo $IPV4_ADDR | tr "." " "`
TEMP=`printf "%02x%02x:%02x%02x" $TEMP`
IPV6_ADDR_1=2002:$TEMP:7::1
IPV6_ADDR_2=2002:$TEMP:7::2

# Crea e attiva il tunnel
ip tunnel add name t6to4 mode sit remote any local $IPV4_ADDR
ip link set dev t6to4 up
ip -6 address add $IPV6_ADDR_1/48 dev t6to4
ip -6 route add to 2000::/3 via ::192.88.99.1 dev t6to4 metric 1

# Ricrea il file di configurazione di Radvd
echo                                             > /etc/radvd.conf
echo interface eth0                             >> /etc/radvd.conf
echo \{                                         >> /etc/radvd.conf
echo   AdvSendAdvert on\;                       >> /etc/radvd.conf
echo   MaxRtrAdvInterval 30\;                   >> /etc/radvd.conf
echo   prefix $IPV6_ADDR_2/64                   >> /etc/radvd.conf
echo   \{                                       >> /etc/radvd.conf
echo       AdvOnLink on\;                       >> /etc/radvd.conf
echo       AdvAutonomous on\;                   >> /etc/radvd.conf
echo       AdvValidLifetime 120\;               >> /etc/radvd.conf
echo       AdvPreferredLifetime 60\;            >> /etc/radvd.conf
echo   \}\;                                     >> /etc/radvd.conf
echo \}\;                                       >> /etc/radvd.conf
/etc/init.d/radvd stop
/etc/init.d/radvd start

# Aggiunge l'interfaccia verso la rete locale
ip -6 address add local $IPV6_ADDR_2/64 scope global dev eth0

# Abilita l'attraversamento dei pacchetti IPv6
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

A parte tutto, si può osservare che la configurazione di Radvd richiede l'indicazione esplicita di scadenze ravvicinate, data la dinamicità della risorsa (si tratta evidentemente delle direttive che appaiono nell'esempio per la prima volta).

Per eliminare il tunnel e l'instradamento locale, si può procedere a ritroso con lo script seguente:


#!/bin/sh

# Disattiva ed elimina il tunnel
ip -6 route flush dev t6to4
ip link set dev t6to4 down
ip tunnel del name t6to4

# Elimina l'indirizzo dato all'interfaccia collegata alla rete locale
ip -6 address flush to 2002::/16

# Disattiva Radvd (salvo esigenze diverse)
/etc/init.d/radvd stop

119.8   Riferimenti

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

1) Iputils   UCB BSD e GNU GPL

2) Per usare Ping come utente comune occorre che il suo eseguibile appartenga all'utente root e abbia il bit SUID attivo (SUID-root). È probabile che questo permesso debba essere assegnato manualmente.

3) Iputils   UCB BSD e GNU GPL

4) Eventualmente, il procedimento manuale può servire per assegnare indirizzi di comodo, che ignorano l'identificatore EUI-64.

5) Radvd   software libero con licenza speciale

6) Tutti gli indirizzi 3ffe::/16 appartengono a questo gruppo di prova, ma in generale vanno usati in base ad accordi presi con altri nodi che utilizzano IPv6.


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome utilizzo_di_ipv6.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]