Gentoo IPv6 Router Guide
1.Preliminari
Configurazione di base del kernel
Tutti i kernel appartenenti ai rami 2.4 e 2.6 presenti in Gentoo
supporteranno facilmente le connessioni IPv6. Il nuovo stack IPv6 USAGI è
integrato direttamente nel kernel a partire dalle versioni Linux 2.4.22 e
Linux 2.6.0. Oltre a ciò, i vecchi kernel, alpha-sources-2.4.21 e
gentoo-sources-2.4.20 possono avere applicate le patch USAGI se avete
correttamente impostato la flag usagi nella vostra variabile USE.
Esempio 1: Emergere un kernel |
# emerge '>=gentoo-sources-2.6'
# emerge '=gentoo-sources-2.4*'
|
Ora siete pronti per entrare nella directory dei sorgenti del kernel
e iniziarne la nuova configurazione.
Esempio 2: Configurare il kernel Linux |
# cd /usr/src/linux
# make menuconfig
|
Nota:
Questo presuppone che il symlink /usr/src/linux punti ai sorgenti
che avete intenzione di utilizzare.
|
Nota:
Assicuratevi di avere abilitato nella vostra configurazione del kernel la voce
Prompt for development and/or incomplete code/drivers.
|
Esempio 3: opzioni di 'make menuconfig' |
Device Drivers --->
Networking support --->
Networking options --->
<*> The IPv6 protocol (EXPERIMENTAL)
[*] Network device support
<*> Universal TUN/TAP device driver support
|
Verificare il supporto IPv6
Dopo aver abilitato le opzioni raccomandate, ricompilate il vostro kernel e
riavviate servendovi del nuovo kernel con supporto IPv6.
Se non avete già installato iproute2, è importante che lo facciate
ora. iproute2 è una suite di programmi per la configurazione di rete che
contiene ip, il celebre sostituto di ifconfig, route,
iptunnel e altri...
Esempio 4: Installare iproute2 |
# emerge sys-apps/iproute2
|
Attenzione:
L'uso di ifconfig può causare seri problemi se avete attivi tunnel multipli.
Dovete rimuovere infatti i tunnel in ordine inverso, quindi l'ultimo che
avete creato deve essere rimosso per primo. Siete avvisati!
|
Se IPv6 è attivo, il dispositivo di loopback dovrebbe mostrare un indirizzo
IPv6:
Esempio 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, assicuratevi di aggiungere ipv6 alla vostra 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 vi permetterà di di creare, per le vostre connessioni
IPv6, un tunnel attraverso una connessione IPv4.
Di seguito trovate 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 voi
blocchi di indirizzi /64. Inoltre permette la configurazione del
reverse DNS (DNS inverso). Ottenere un tunnel da HE è facile come andare
su http://www.tunnelbroker.net e compilare una pagina con i propri
dati.
Nota:
La registrazione richiede informazioni quali il vostro indirizzo e numero
di telefono.
|
Attenzione:
I tunnel ottenuti da HE richiedono 24 ore per essere attivati. Ciò per porre
un freno all'abuso di tale servizio.
|
Dopo aver ottenuto un tunnel riconosciuto e allocato un blocco /64, potete
configurare la vostra Gentoo box. HE fornisce una semplice configurazione
basata sui comandi ifconfig e iproute. I due esempi seguenti presuppongono
che abbiate 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, date le seguenti
istruzioni:
Esempio 6: 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 uno username e un indirizzo
email valido. Hanno scelto di gestire il tunnel attraverso un'impostazione
client/server ed hanno creato il client tscp. Questo client è
disponibile nel portage. Per installarlo date:
Esempio 7: Installare il client Freenet6 |
# emerge freenet6
|
Ora dovete configurare freenet6 modificando
/etc/freenet6/tspc.conf. Dovrete cambiare soltanto i campi
userid e passwd facendoli corrispondere ai valori
assegnati da Freenet6. Segue un semplice e completo esempio di file
di configurazione:
Esempio 8: esempio di tspc.conf |
tsp_version=1.0.1
tsp_dir=/etc/freenet6
auth_method=any
client_v4=auto
userid=anonymous
passwd=foobar
template=gentoo
server=tsps1.freenet6.net
retry_delay=0
if_tunnel=sit3
|
Provare la vostra connessione
Ora che il vostro tunnel è configurato, potete provare la connessione. Il
modo più facile per farlo è utilizzare il comando ping6 e provare
a pingare un host IPv6.
Esempio 9: 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 volete conoscere lo stato dei lavori e/o dare
una mano, scrivete a latexer@gentoo.org.
3.Supporto IPv6 nelle applicazioni
Ri-emergere i pacchetti
A meno che aveste impostato in precedenza USE="ipv6" nel vostro
/etc/make.conf, dovrete probabilmente ri-emergere un certo
numero di pacchetti per ricompilarli con il supporto IPv6 attivo. Per
ottenere una lista di tutti i pacchetti installati che sono influenzati dai
cambiamenti delle flag della variabile USE ipv6, usate l'opzione del
Portage --newuse (-N) :
Esempio 10: Candidati per il re-emerging |
# emerge -uDNav world
|
Se avete cambiato molte flag della variabile USE, la lista potrebbe essere
moltolunga. E' quindi consigliato di mantenere il vostro sistema aggiornato,
per evitare problemi nel caso decidiate di ricompilare tutti i pacchetti
influenzati daicambiamenti alle flag della variabile 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/nc6 |
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 descriveremo il supporto per il formato ARPA.
Configurazione di BIND
Le versioni più recenti di BIND includono un eccellente supporto per IPv6.
In questa sezione assumeremo che possediate almeno le conoscenze minime
necessarie per configurare e utilizzare BIND. Assumeremo inoltre che bind non
giri in un chroot. In caso contrario, semplicemente appendete il prefisso
del chroot nella maggior parte dei cammini (path) nella sezione seguente.
Prima di tutto dovete aggiungere nei file di zona le impostazioni sia per il
forward che il reverse DNS, in /etc/bind/named.conf.
Esempio 11: 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 dobbiamo creare per ognuno dei nostri host i file di zona e aggiungervi
le impostazioni necessarie:
Esempio 12: 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
|
Esempio 13: 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 patches 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 emergendolo con la flag ipv6 impostata nella vostra
variabile USE.
Attenzione:
Tuttavia anche con queste patch non sono supportati tutti i tipi di record.
In particolare, non sono supportati i record NS e MX.
|
Esempio 14: Installare djbdns |
# emerge djbdns
|
Dopo che djbdns è installato, può essere configurato dando
tinydns-setup e rispondendo alle poche domande circa
a quale indirizzo legarlo, dove installare tinydns, ecc.
Esempio 15: Impostare tinydns |
# tinydns-setup
|
Asummendo di aver installato tinydns in /var/tinydns,
possiamo ora modificare /var/tinydns/root/data. Questo file
conterrà tutti i dati necessari per ottenere che tinydns gestisca il DNS
per la vostra delegazione IPv6.
Esempio 16: 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, potete utilizzare
gli scripts add-host6 e add-alias6 per aggiungere nuove voci.
Dopo aver fatto i cambiamenti al file data, dovete semplicemente
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 desideriamo utilizzare il nostro sistema come router per gli altri clients
che vogliono collegarsi al mondo esterno con IPv6, sono necessarie ulteriori
configurzioni. Dobbiamo abilitare il forwarding dei pacchetti IPv6. Possiamo
fare ciò in uno dei due seguenti modi.
Esempio 17: Abilitare il forwarding |
# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
o
# sysctl -w net.ipv6.conf.all.forwarding=1
|
Attenzione:
Lo script init radvd abilita (e disabilita) il forwarding, rendendo inutile
il passo seguente.
|
Per abilitare il forwarding al boot, dovete modificare
/etc/sysctl.conf e aggiungere la seguente linea.
Esempio 18: Aggiunta a sysctl.conf |
net.ipv6.conf.default.forwarding=1
|
Il traffico dovrebbe essere ora inviato da questa macchina attraverso il
tunnel che abbiamo stabilito con il nostro broker.
Per assegnare gli indirizzi IPv6 ai clients, 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 clients di ottenere un IP e una default route semplicemente
attivando un'interfaccia. E' 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 clients che hanno richiesto e ricevuto un IP.
Configurazione Stateless
La configurazione Stateless è facilmente ottenibile utilizzando il
Router Advertisement Daemon, o radvd.
Esempio 19: Configurare radvd |
# emerge radvd
|
Dopo aver emerso radvd, dobbiamo creare /etc/radvd/radvd.conf
che contiene le informazioni circa quali blocchi IP utilizzare per assegnare
gli indirizzi. Qui trovate un semplice file radvd.conf
che utilizza il prefisso che ci è stato assegnato dal nostro tunnel broker.
Esempio 20: radvd.conf d'esempio |
interface eth1
{
AdvSendAdvert on;
AdvLinkMTU 1280;
MaxRtrAdvInterval 300;
prefix 2001:470:1F00:296::/64
{
AdvOnLink on;
AdvAutonomous on;
};
};
|
Attenzione:
Assicuratevi che l'interfaccia indicata nella prima linea sia corretta in
modo da trasmettere gli advertisement del vostro router alla vostra rete e
non al vostro ISP!
|
Altre informazioni sono disponibili su man radvd.conf. Ora possiamo
avviare radvd e impostarlo affinchè venga avviato al boot.
Esempio 21: Attivare radvd |
# /etc/init.d/radvd start
# rc-update add radvd default
|
Configurazione Stateful
Nel caso vogliate servirvi della configurazione stateful, dovrete installare
e configurare dhcpv6.
Esempio 22: Installare dhcpv6 |
# emerge dhcpv6
|
Adesso dobbiamo configurare il server DHCPv6 modificando
/etc/dhcp6s.conf.
Esempio 23: dhcp6s.conf d'esempio |
prefer-life-time 10000;
valid-life-time 20000;
renew-time 5000;
rebind-time 8000;
interface eth1 {
link AAA {
allow unicast;
send unicast;
allow rapid-commit;
send server-preference 5;
renew-time 1000;
rebind-time 2400;
prefer-life-time 2000;
valid-life-time 3000;
pool{
range 2001:470:1f00:296::10 to 2001:470:1f00:296::110/64;
prefix 2001:470:1f00:296::/64;
};
};
};
|
Possiamo ora avviare dhcp6s e configurarlo perchè venga avviato al boot.
Esempio 24: Attivare dhcp6s |
# /etc/init.d/dhcp6s start
# rc-update add dhcp6s default
|
6.Clients IPv6
Usando radvd
I clients dietro questo router dovrebbero potersi ora connettere al resto
della rete tramite IPv6. Se usate radvd, configurare gli hosts dovrebbe
essere facile come attivarne le interfacce (questo sarà probabilmente
già stato fatto dai vostri script init net.ethX).
Esempio 25: 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
|
Usando DHCPv6
Se il vostro router è impostato per utilizzare DHCPv6, anche i vostri clients
dovranno avere installato il pachetto dhcpv6. Dopo aver provveduto a ciò,
dovrete configurare i vostri clients modificando /etc/dhcp6c.conf.
Esempio 26: dhcp6c.conf d'esempio |
interface eth0 {
send rapid-commit;
request prefix-delegation;
request domain-name-servers;
request temp-address;
iaid 11111;
renew-time 11000;
rebind-time 21000;
};
|
7.Usare la conversione 6to4
Principi di base
La conversione 6to4 può essere utilizzata qualora vogliate avere hosts
che comunichino con altri host IPv4 puramente attraverso connessioni IPv6.
In questo modo potrete avere una rete interna esclusivamente IPv6, con un solo
host che si occupi della connessione con il mondo esterno IPv4/IPv6.
Configurazione del DNS
Per ottenere una conversione 6to4 funzionante, deve essere configurato un
proxy DNS, totd, affinchè vi trasmetta records AAAA per quei siti che
in realtà possiedono solo records A. Questi records AAAA punteranno a
indirizzi IPv6 che sono attualmente inesistenti, ma che saranno convertiti in
destinazioni valide attraverso l'instradamento del proxy 6to4.
Visto che totd è attualmente mascherato come ~x86 poichè
richiede ulteriori test, dovete smascherarlo aggiungendo la seguente linea
nel vostro file /etc/portage/package.keywords ("man portage" per
maggioriinformazioni su questo file)
Esempio 27: Smascherare permanentemente totd in package.keywords |
net-misc/totd ~x86
|
Quindi procedete semplicemente con l'emerge:
Esempio 28: Installare totd |
# emerge totd
|
Adesso dobbiamo impostare /etc/totd.conf con alcune informazioni
di configurazione di base.
Esempio 29: /etc/totd.conf d'esempio |
forwarder 192.168.0.2 port 53
prefix 3ffe:abcd:1234:9876::
port 5005
pidfile /var/run/totd.pid
stf
|
Nota:
totd deve essere regolato affinchè si serva di una porta differente
dalla 53 qualora sulla stessa macchina giri un altro nameserver.
|
Proxy 6to4
ptrtd sarà utilizzato come proxy 6to4, abilitando le connessioni tra
gli host IPv6 interni e quelli IPv4 esterni.
Esempio 30: Installare ptrtd |
# emerge ptrtd
|
Dobbiamo ora configurare ptrtd, dicendogli quale prefisso simulato
(quello che abbiamo utilizzato per impostare totd) creare per le
connessioni proxy. Modificate /etc/conf.d/ptrtd e impostate
IPV6_PREFIX. Questo dovrebbe essere lo stesso prefisso che è stato
configurato con totd.
Esempio 31: /etc/ptrtd.conf d'esempio |
IPV6_PREFIX="3ffe:abcd:1234:9876::"
|
Potete ora avviare totd e impostare che venga avviato al boot.
Esempio 32: Avviare totd |
# /etc/init.d/totd start
# rc-update add totd default
|
Configurazione e prova del client
I clients possono ora essere configurati per collegarsi a hosts, sia IPv4 che
IPv6, esterni attraverso una sola connesione IPv6. Supponendo che i clients
abbiamo già ricevuto un indirizzo IP da radvd, dobbiamo semplicemente
aggiungere una nuova voce di risoluzione DNS e aggiungere una default route
per gli indirizzi "simulati" (falsi, fake). Prima di tutto aggiungete una
voce in cima al vostro /etc/resolv.conf che punti alla macchina
sulla quale gira totd.
Esempio 33: /etc/resolv.conf d'esempio |
nameserver 2001:470:1f00:296::1
|
Per provare la risoluzione dei nomi, richiedete un record AAAA per un
sito conosciuto (che sia solo IPv4).
Esempio 34: Provare la risoluzione dei nomi |
# dig aaaa google.com
;; ANSWER SECTION:
google.com. 300 IN AAAA 3ffe:abcd:1234:9876::d8ef:3364
google.com. 300 IN AAAA 3ffe:abcd:1234:9876::d8ef:3564
|
Dovremo ora aggiungere una route predefinita per tutti gli indirizzi preceduti
dal prefisso simulato che abbiamo scelto.
Esempio 35: Aggiungere la route di default |
# ip route add 3ffe:abcd:1234:9876::/64 via 2001:470:1f00:296::1 dev eth0
|
Infine, usate ping6 per pingare google.com nella sua versione IPv6
simulata.
Esempio 36: Provare 6to4 |
# ping6 -c 2 google.com
PING 3ffe:abcd:1234:9876::d8ef:3364(3ffe:abcd:1234:9876::d8ef:3364) 56 data bytes
64 bytes from 3ffe:abcd:1234:9876::d8ef:3364: icmp_seq=1 ttl=54 time=0.106 ms
64 bytes from 3ffe:abcd:1234:9876::d8ef:3364: icmp_seq=2 ttl=54 time=0.090 ms
--- 3ffe:abcd:1234:9876::d8ef:3364 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.090/0.098/0.106/0.008 ms
|
Nota:
Il router su cui gira ptrtd sta realmente rispondendo, ma questo ci
basta per capire se le cose stanno funzionando o meno.
|
8.Altre risorse
Ci sono online molte eccellenti risorse riguardanti IPv6.
In IRC, potete provare #gentoo-ipv6 o #ipv6 su Freenode. Potete connettervi ai server
Freenode utilizzando un client con supporto IPv6 connettendovi a
irc.ipv6.freenode.net.
|