Guida al routing IPv6 con Gentoo
1.
Preliminari
Configurazione di base del kernel
Tutti i kernel tree presenti in Gentoo supportano facilmente le connessioni
IPv6. Il nuovo stack IPv6 USAGI è integrato direttamente nel kernel a partire
dalle versioni Linux 2.6.0.
Codice 1.1: Installare un kernel |
# emerge gentoo-sources
|
Ora si è pronti per entrare nella directory dei sorgenti del kernel e iniziarne
la nuova configurazione.
Codice 1.2: Configurare il kernel Linux |
# cd /usr/src/linux
# make menuconfig
|
Nota:
Questo presuppone che il collegamento /usr/src/linux punti ai
sorgenti che si ha intenzione di utilizzare.
|
Codice 1.3: opzioni di 'make menuconfig' |
Networking support --->
Networking options --->
<*> The IPv6 protocol --->
Device Drivers --->
Network device support --->
<*> Universal TUN/TAP device driver support
|
Verificare il supporto IPv6
Dopo aver abilitato le opzioni raccomandate, ricompilare il kernel e riavviare
servendosi del nuovo kernel con supporto IPv6.
Se non è già stato installato iproute2, è importante farlo ora. iproute2
è una suite di programmi per la configurazione di rete che contiene ip,
il celebre sostituto di ifconfig, route, iptunnel e
altri...
Codice 1.4: Installare iproute2 |
# emerge sys-apps/iproute2
|
Avvertenza:
L'uso di ifconfig può causare seri problemi se sono attivi tunnel multipli.
Bisogna rimuovere infatti i tunnel in ordine inverso, quindi l'ultimo che è
stato creato deve essere rimosso per primo.
|
Se IPv6 è attivo, il dispositivo di loopback dovrebbe mostrare un indirizzo
IPv6:
Codice 1.5: Controllare il dispositivo di loopback |
# ip -6 addr show lo
1: lo: <LOOPBACK,UP> mtu 16436
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
|
Prima di proseguire, assicurarsi di aggiungere ipv6 alla propria lista
nella variabile USE in make.conf, in modo tale che i futuri emerge
di pacchetti includeranno il supporto a IPv6.
2.
Configurazione di Tunnel
Configurazione di base
La maggior parte degli ISP (ndt, fornitori del servizio Internet) non offre
nessuna connessione IPv6 nativa. Per aggirare questa limitazione, esistono
diversi "tunnel brokers" in giro per il mondo che offrono gratuitamente dei
tunnel IPv6. Questo permetterà di creare, per le proprie connessioni IPv6, un
tunnel attraverso una connessione IPv4.
Di seguito vengono proposti due esempi per impostare un tunnel con due popolari
broker del Nord America, Hurricane Electric e Freenet6.
Hurricane Electric
Hurricane Electric (in breve HE) offre tunnel IPv6 gratuiti e alloca per
l'utente blocchi di indirizzi /64. Inoltre permette la configurazione del
reverse DNS (DNS inverso). Ottenere un tunnel da HE è facile: basta andare su
http://www.tunnelbroker.net e compilare una pagina con i propri dati.
Nota:
La registrazione richiede informazioni quali il proprio indirizzo e numero di
telefono.
|
Dopo aver ottenuto un tunnel riconosciuto e allocato un blocco /64, è possibile
configurare la propria Gentoo box. HE fornisce una semplice configurazione
basata sui comandi ifconfig e iproute. I due esempi seguenti presuppongono di
avere una configurazione di questo tipo:
| Indirizzo IPv4 locale (eth0) |
68.36.91.195 |
| Indirizzo IPv4 HE |
64.71.128.82 |
| Indirizzo del tunnel IPv6 locale |
2001:470:1F00:FFFF::189 |
| Blocco IPv6 |
2001:470:1F00:296::/64 |
Usando il pacchetto iproute2 e il comando ip, dare le seguenti
istruzioni:
Codice 2.1: Configurazione di un tunnel IPv6 |
# ip tunnel add sixbone mode sit remote 64.71.128.82 local 68.36.91.195 ttl 64 dev eth0
# ip link set sixbone mtu 1280
# ip link set sixbone up
# ip addr add 2001:470:1F00:FFFF::189 dev sixbone
# ip route add 2003::/3 dev sixbone
|
Freenet6
Freenet6 è un altro tunnel broker
gratuito. La registrazione richiede soltanto un nome uten ed un indirizzo email
valido. Hanno scelto di gestire il tunnel attraverso un'impostazione
client/server ed hanno creato il client gateway6. Questo client è
disponibile in Portage. Per installarlo eseguire:
Codice 2.2: Installare il client Freenet6 |
# emerge gateway6
|
Ora se si ha scelto di connettersi tramite autenticazione bisogna configurare
gateway6 modificando /etc/gateway6/gw6c.conf. Bisogna
cambiare soltanto i campi userid e passwd facendoli corrispondere
ai valori assegnati da Freenet6. Segue un semplice e completo esempio di file di
configurazione:
Codice 2.3: esempio di gw6c.conf |
auth_method=any
userid=anonymous
passwd=foobar
template=linux
server=broker.freenet6.net
|
Provare la propria connessione
Ora che il proprio tunnel è configurato, è possibile provare la connessione. Il
modo più facile per farlo è utilizzare il comando ping6 e provare a
pingare un host IPv6.
Codice 2.4: Provare la connessione |
# emerge iputils
# ping6 www.kame.net
PING www.kame.net(orange.kame.net) 56 data bytes
64 bytes from orange.kame.net: icmp_seq=1 ttl=52 time=290 ms
64 bytes from orange.kame.net: icmp_seq=2 ttl=52 time=277 ms
64 bytes from orange.kame.net: icmp_seq=3 ttl=52 time=280 ms
64 bytes from orange.kame.net: icmp_seq=4 ttl=52 time=279 ms
64 bytes from orange.kame.net: icmp_seq=5 ttl=52 time=277 ms
--- www.kame.net ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4038ms
rtt min/avg/max/mdev = 277.040/281.041/290.046/4.699 ms
|
Sono attualmente in corso ulteriori lavori per migliorare il supporto IPv6 negli
script init di rete. Se si vuole conoscere lo stato dei lavori e/o dare una
mano, scrivere a latexer@gentoo.org.
3.
Supporto IPv6 nelle applicazioni
Ri-emergere i pacchetti
A meno che non si abbia già impostato in precedenza USE="ipv6" nel
proprio /etc/portage/make.conf, probabilmente bisognerà
ri-effettuare l'operazione di emerge per un certo numero di pacchetti in modo da
ricompilarli con il supporto IPv6 attivo. Per ottenere una lista di tutti i
pacchetti installati che sono influenzati dai cambiamenti della flag USE
ipv6, usare l'opzione del Portage --newuse (-N) :
Codice 3.1: Candidati per il re-emerging |
# emerge -uDNav world
|
Se sono state cambiate molte flag USE, la lista potrebbe essere molto lunga. È
quindi consigliato di mantenere il proprio sistema aggiornato, per evitare
problemi nel caso si decida di ricompilare tutti i pacchetti influenzati dai
cambiamenti alle flag USE.
Nota:
Alcuni pacchetti rilevano automaticamente il supporto a IPv6 e quindi non
possiedono una flag USE ipv6. Quindi non tutti i pacchetti che dovrebbero
supportare IPv6 lo supporteranno, se sono stati compilati in presenza di un
kernel con IPv6 non attivato.
|
Pacchetti specifici per IPv6
Ci sono diversi pacchetti che si occupano nello specifico delle caratteristiche
di IPv6. La maggior parte di essi è situata in
/usr/portage/net-misc.
| Pacchetto |
Descrizione |
| net-misc/ipv6calc |
Converte un indirizzo IPv6 in un formato compresso |
| net-misc/netcat6 |
versione di netcat che supporta IPv6 e IPv4 |
| dev-perl/Socket6 |
Parte relativa ad IPv6 delle definizioni e dei manipolatori di strutture del
C socket.h
|
4.
Impostazioni del DNS
IPv6 e DNS
Mentre un DNS per IPv4 usa i record A, il DNS per IPv6 usa i record AAAA.
(questo perchè IPv4 possiede uno spazio di indirizzamento di 2^32 contro lo
spazio di indirizzamento di IPv6 pari a 2^128). Per il reverse DNS (DNS
inverso), lo standard INT è deprecato ma ancora ampiamente supportato. ARPA è
il formato più recente. Qui verrà descritto il supporto per il formato ARPA.
Configurazione di BIND
Le versioni più recenti di BIND includono un eccellente supporto per IPv6. In
questa sezione si assumerà che il lettore possieda almeno le conoscenze minime
necessarie per configurare e utilizzare BIND. Si assumerà inoltre che bind non
giri in un chroot. In caso contrario, appendere semplicemente il prefisso del
chroot nella maggior parte dei percorsi nella sezione seguente.
Prima di tutto bisogna aggiungere nei file di zona le impostazioni sia per il
forward che il reverse DNS, in /etc/bind/named.conf.
Codice 4.1: Impostazioni di named.conf |
options {
[...]
listen-on-v6 { any; }
[...]
};
zone "ipv6-rules.com" IN {
type master;
file "pri/ipv6-rules.com";
};
zone "6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa" {
type master;
file "pri/rev-ipv6-rules.com.arpa";
};
|
Ora bisogna creare per ognuno dei propri host i file di zona e aggiungervi le
impostazioni necessarie:
Codice 4.2: pri/ipv6-rules.com |
$TTL 2h
@ IN SOA ipv6-rules.com. webmaster.ipv6-rules.com. (
2003052501 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
NS ns1.ipv6-rules.com
IN AAAA 2001:470:1f00:296::1 ; address for ipv6-rules.com
host1 IN AAAA 2001:470:1f00:296::2 ; address for host1.ipv6-rules.com
host2 IN AAAA 2001:470:1f00:296::3:3 ; address for host2.ipv6-rules.com
|
Codice 4.3: pri/rev-ipv6-rules.com.arpa |
$TTL 3d ; Default TTL (bind 8 needs this, bind 9 ignores it)
@ IN SOA ipv6-rules.com. webmaster.ipv6-rules.com. (
2003052501 ; Serial number (YYYYMMdd)
24h ; Refresh time
30m ; Retry time
2d ; Expire time
3d ) ; Default TTL
IN NS ns1.ipv6-rules.com.
; IPv6 PTR entries
$ORIGIN 6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.int.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR ipv6-rules.com.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR host1.ipv6-rules.com.
3.0.0.0.3.0.0.0.0.0.0.0.0.0.0.0 IN PTR host2.ipv6-rules.com.
|
Configurazione di DJBDNS
Attualmente esistono diverse patch di terze parti per DJBDNS, disponibili su
http://www.fefe.de/dns/", che gli permettono di funzionare anche con
IPv6. DJBDNS può essere installato con queste patch installandolo con la flag
ipv6 impostata nella propria variabile USE.
Avvertenza:
Tuttavia anche con queste patch non sono supportati tutti i tipi di record. In
particolare, non sono supportati i record NS e MX.
|
Codice 4.4: Installare djbdns |
# emerge djbdns
|
Dopo che djbdns è stato installato, può essere configurato dando
tinydns-setup e rispondendo alle poche domande circa a quale indirizzo
legarlo, dove installare tinydns, ecc.
Codice 4.5: Impostare tinydns |
# tinydns-setup
|
Asummendo di aver installato tinydns in /var/tinydns, ora si
può modificare /var/tinydns/root/data. Questo file conterrà tutti i
dati necessari per far sì che tinydns gestisca il DNS per la propria delegazione
IPv6.
Codice 4.6: File d'esempio |
.ipv6-rules.com:192.168.0.1:a:259200
.6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa:192.168.0.1:a
6host1.ipv6-rules.com:200104701f0002960000000000000001:86400
6host2.ipv6-rules.com:200104701f0002960000000000000002:86400
3www.ipv6-rules.com:200104701f0002960000000000000002:86400
|
Le linee con prefisso 6 avranno impostato sia un record AAAA che PTR.
Quelle con prefisso 3 avranno impostato soltanto un record AAAA. Oltre a
modificare manualmente il file data, è possibile utilizzare gli
script add-host6 e add-alias6 per aggiungere nuove voci. Dopo
aver fatto i cambiamenti al file data, basta dare il comando
make da /var/tinydns/root. Questo creerà
/var/tinydns/root/data.cfb, che tinydns userà come fonte di
informazione per le richieste di DNS.
5.
Router IPv6
Configurare il routing (instradamento)
Se si desidera utilizzare il proprio sistema come router per gli altri client
che vogliono collegarsi al mondo esterno con IPv6, sono necessarie ulteriori
configurazioni. Bisogna abilitare il forwarding dei pacchetti IPv6, e lo si può
fare in uno dei due seguenti modi.
Codice 5.1: Abilitare il forwarding |
# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
o
# sysctl -w net.ipv6.conf.all.forwarding=1
|
Avvertenza:
Lo script di init radvd abilita (e disabilita) il forwarding, rendendo
inutile il passo seguente.
|
Per abilitare il forwarding al boot, bisogna modificare
/etc/sysctl.conf e aggiungere la seguente linea.
Codice 5.2: Aggiunta a sysctl.conf |
net.ipv6.conf.default.forwarding=1
|
Il traffico dovrebbe essere ora inviato da questa macchina attraverso il tunnel
stabilito con il proprio broker.
Per assegnare gli indirizzi IPv6 ai client, la specifica di IPv6 permette sia
l'assegnazione IP stateless (senza stati) che statefull (con stati).
L'assegnazione stateless utilizza un processo chiamato Router Advertisement e
permette ai client di ottenere un IP e una route predefinita semplicemente
attivando un'interfaccia. È chiamato "stateless" poichè non viene registrata
l'assegnazione degli IP e a quali host sono stati attribuiti. L'assegnazione
stateful è gestita tramite DHCPv6. Questo metodo è "stateful" poichè il server
mantiene uno stato dei client che hanno richiesto e ricevuto un IP.
Configurazione Stateless
La configurazione Stateless è facilmente ottenibile utilizzando il Router
Advertisement Daemon, o radvd.
Codice 5.3: Configurare radvd |
# emerge radvd
|
Dopo aver emerso radvd, bisogna creare /etc/radvd/radvd.conf
che contiene le informazioni circa quali blocchi IP utilizzare per assegnare gli
indirizzi. Di seguito viene offerto un semplice file radvd.conf che
utilizza il prefisso assegnato dal proprio tunnel broker.
Codice 5.4: radvd.conf d'esempio |
interface eth1
{
AdvSendAdvert on;
AdvLinkMTU 1280;
MaxRtrAdvInterval 300;
prefix 2001:470:1F00:296::/64
{
AdvOnLink on;
AdvAutonomous on;
};
};
|
Avvertenza:
Assicurarsi che l'interfaccia indicata nella prima linea sia corretta in modo da
trasmettere gli advertisement del proprio router alla propria rete e non al
proprio ISP!
|
Altre informazioni sono disponibili su man radvd.conf. Ora si può avviare
radvd e impostarlo affinchè venga avviato al boot.
Codice 5.5: Attivare radvd |
# /etc/init.d/radvd start
# rc-update add radvd default
|
Configurazione Stateful
Nel caso si voglia avere una configurazione stateful, bisogna installare e
configurare net-misc/dibbler.
Codice 5.6: Installare dibbler |
# emerge dibbler
|
Ora occorre configurare il client dibbler modificando
/etc/dibbler/client.conf.
Codice 5.7: Esempio di configurazione del client dibbler |
iface ppp0 {
rapid-commit yes
pd
option dns-server
}
|
Ora si può avviare il client dibbler e configurarlo perché venga avviato al
boot.
Codice 5.8: Avviare il client dibbler |
# /etc/init.d/dibbler-client start
# rc-update add dibbler-client default
|
6.
Client IPv6
Usando radvd
I client dietro questo router dovrebbero potersi ora connettere al resto della
rete tramite IPv6. Se si usa radvd, configurare gli host dovrebbe essere facile
come attivarne le interfacce (questo sarà probabilmente già stato fatto dai
propri script init net.ethX).
Codice 6.1: Connettersi attraverso IPv6 |
# ip link set eth0 up
# ip addr show eth0
1: eth0: <BROADCAST,MULTICAST,UP> mtu 1400 qdisc pfifo_fast qlen 1000
link/ether 00:01:03:2f:27:89 brd ff:ff:ff:ff:ff:ff
inet6 2001:470:1f00:296:209:6bff:fe06:b7b4/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::209:6bff:fe06:b7b4/64 scope link
valid_lft forever preferred_lft forever
inet6 ff02::1/128 scope global
valid_lft forever preferred_lft forever
|
7.
Altre risorse
Ci sono online molte eccellenti risorse riguardanti IPv6.
In IRC, si può provare ad entrare in #ipv6 o #ipv6 su Freenode. È possibile connettersi ai server
Freenode utilizzando un client con supporto IPv6 connettendosi a
irc.ipv6.freenode.net.
I contenuti di questo documento sono rilasciati sotto la licenza Creative
Commons - Attribution / Share Alike.
|