Guide Gentoo du routeur IPv6
1.
Préparation
Configuration du noyau
N'importe quel noyau 2.6 disponible dans Gentoo supporte l'IPv6 sans problème.
La nouvelle couche IPv6 USAGI est intégrée dans le noyau depuis la version
2.6.0 de Linux.
Exemple de code 1.1 : Installer un noyau |
# emerge gentoo-sources
|
Nous pouvons à présent nous placer dans le répertoire des sources du noyau
et commencer notre configuration du noyau.
Exemple de code 1.2 : Configurer le noyau Linux |
# cd /usr/src/linux/
# make menuconfig
|
Note :
Vérifiez bien que le lien symbolique /usr/src/linux pointe vers
le répertoire contenant les sources que vous allez utiliser.
|
Exemple de code 1.3 : Les options à activer dans le noyau |
Device Drivers --->
Networking support --->
Networking options --->
<*> The IPv6 protocol (EXPERIMENTAL) --->
[*] Network device support
<*> Universal TUN/TAP device driver support
|
Test du support IPv6
Après avoir activé les options requises, recompilez les sources et redémarrez
le système avec votre nouveau noyau IPv6.
Si vous n'avez pas déjà installé le paquet iproute2, nous vous
recommandons chaudement de le faire dès maintenant. iproute2 est une suite
d'applications de configuration de réseaux qui contient, entre autres,
ip, le fameux outil qui remplace ifconfig, route,
iptunnel, etc.
Exemple de code 1.4 : Installation du paquet iproute2 |
# emerge sys-apps/iproute2
|
Attention :
L'utilisation de ifconfig peut causer de sérieux maux de crâne si vous avez
plusieurs tunnels. Vous devrez enlever les tunnels dans l'ordre inverse duquel
vous les avez créés... Vous êtes prévenu !
|
Si IPv6 fonctionne, vous devriez déjà voir une adresse IPv6 pour l'interface
locale (« loopback »).
Exemple de code 1.5 : Vérification de l'interface locale |
# ip -6 addr show lo
1: lo: <LOOPBACK,UP> mtu 16436
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
|
Avant de continuer, assurez-vous d'avoir ajouté « ipv6 » à votre
liste de variables USE dans le make.conf, afin que les paquets puissent, à
l'avenir, bénéficier du support IPv6.
2.
Configuration du tunnel
Configuration de base
La majeure partie des fournisseurs d'accès à Internet ne proposent pas encore
de connexion IPv6 native (N.D.T. : à ma connaissance seul Nerim propose ce service en France). Pour
outrepasser cette limitation, plusieurs passerelles IPv6 (N.D.T. :
communément appelées « tunnel broker ») ont vu le jour et
proposent des connexions gratuites au réseau IPv6 via un tunnel. Cela vous
permettra d'encapsuler toutes vos connexions IPv6 dans une connexion IPv4
classique vers la passerelle.
Voici deux exemples de configurations pour mettre en place un tunnel avec deux
fournisseurs populaires nord-américains, Hurricane Electric (cela marche aussi
avec les tunnels qui n'utilisent pas le système d'impulsion cardiaque de
sixxs.net) et Freenet6.
Hurricane Electric
Hurricane Electric (HE pour abréger) offre gratuitement des tunnels vers IPv6
et vous alloue un bloc d'adresses /64 dédiées. Il vous permet également de
configurer vos requêtes DNS inverses. Pour obtenir un tunnel chez HE, il vous
suffit d'aller sur http://www.tunnelbroker.net/ et de remplir un
formulaire d'une page.
Note :
L'inscription au service vous demandera des informations telles que vos adresse
et numéro de téléphone.
|
Attention :
Afin de limiter les abus, HE a volontairement instauré un délai de 24 heures
avant d'activer le tunnel.
|
Une fois votre demande de tunnel acceptée et votre bloc /64 alloué, vous pouvez
passer à la configuration de votre Gentoo. HE fournit des exemples de
configurations basées sur les outils ifconfig et iproute. Les
exemples suivants supposent que vous utilisez la configuration suivante :
| Adresse IPv4 locale (eth0) |
68.36.91.195 |
| Adresse IPv4 de HE |
64.71.128.82 |
| Adresse IPv6 locale du tunnel |
2001:470:1F00:FFFF::189 |
| Bloc IPv6 alloué par HE |
2001:470:1F00:296::/64 |
En utilisant le paquet iproute2 et la commande ip :
Exemple de code 2.1 : Configuration d'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 2000::/3 dev sixbone
|
Freenet6
Freenet6 est un autre fournisseur
gratuit offrant IPv6. L'enregistrement facultatif ne demande qu'un nom
d'utilisateur et une adresse de courrier électronique valide. Ils ont choisi de
confier la configuration du tunnel à une application client/serveur et ont créé
le client gateway6. Le client est disponible dans Portage. Pour
l'installer, faites :
Exemple de code 2.2 : Installation du client Freenet6 |
# emerge gateway6
|
Si vous désirez vous connecter avec une authentification, vous devez maintenant
configurer gateway6 en éditant /etc/gateway6/gw6c.conf.
Vous n'avez qu'à changer les champs userid et passwd en
remplaçant les valeurs par celles qui vous ont été assignées par Freenet6 et à
changer la passerelle du serveur. Voici un exemple complet de fichier de
configuration :
Exemple de code 2.3 : Exemple de gw6c.conf |
auth_method=any
userid=anonymous
passwd=foobar
template=linux
server=broker.freenet6.net
|
Testons la connexion
Maintenant que le tunnel est configuré, vous pouvez tester votre connexion. La
méthode la plus simple et rapide est d'utiliser l'utilitaire ping6 et
d'essayer d'atteindre un hôte IPv6.
Exemple de code 2.4 : Test de la connexion |
# 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
|
L'équipe Gentoo travaille dur pour améliorer le support IPv6 dans les scripts
d'initialisation du réseau. Si vous êtes intéressé ou bien voulez participer,
envoyez un mail à latexer@gentoo.org
(N.D.T. : en anglais !).
3.
IPv6 dans les applications
Recompiler les paquets
À moins que vous n'ayez déjà USE="ipv6" dans votre
/etc/make.conf, vous devrez probablement recompiler pas mal de
paquets pour leur faire activer le support IPv6. Pour avoir une liste des
paquets installés qui pourraient utiliser ce mot-clé, faites :
Exemple de code 3.1 : Les candidats à la réinstallation |
# emerge -uDNav world
|
Si vous avez changé beaucoup d'options USE, la liste peut être longue. Il est
recommandé de maintenir votre système à jour. Recompiler tous les paquets qui
doivent l'être ne fera pas de mal.
Note :
Certains paquets font une détection automatique de l'IPv6 et ne tiennent pas
compte de la variable USE="ipv6". Tous les paquets qui peuvent supporter l'IPv6
ne vont pas forcément le faire si vous ne les avez pas compilés avec un noyau
IPv6.
|
Paquets spécifiques à IPv6
Il y a quelques paquets dédiés spécifiquement à IPv6, la plupart se trouvent
dans /usr/portage/net-misc.
| Paquet |
Description |
| net-misc/ipv6calc |
Transforme une adresse IPv6 au format compressé. |
| net-misc/netcat6 |
Version de netcat qui supporte IPv6 et IPv4. |
| dev-perl/Socket6 |
Partie IPv6 du fichier C socket.h contenant les définitions et les
structures.
|
4.
Mise en place du DNS
IPv6 et DNS
Vous savez peut-être que le DNS utilise un enregistrement de type A pour IPv4.
Et bien sachez qu'il utilise un enregistrement de type AAAA pour IPv6. (C'est
parce qu'une adresse IPv4 utilise un mot de 32 bits d'espace alors qu'une
adresse IPv6 utilise 4 mots de 32 bits, soit 128 bits.) Pour le DNS inverse, le
standard INT est obsolète mais reste largement supporté. ARPA est le format
standard actuel. Ce guide décrira le format ARPA.
Configuration de BIND
Les versions récentes de BIND incluent un excellent support pour IPv6. Cette
section suppose que vous avez un minimum de connaissances de la configuration
et de l'utilisation de BIND. Nous supposerons également que vous ne faites pas
tourner BIND dans un environnement « chrooté ». Si c'est le cas,
ajoutez le préfixe du « chroot » à la plupart des chemins de cette
section.
Premièrement, vous devez ajouter des entrées pour les zones directes et
inverses (N.D.T. : « forward and reverse DNS ») dans le fichier
/etc/bind/named.conf.
Exemple de code 4.1 : Entrées à ajouter dans 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";
};
|
Maintenant, créons les fichiers de zones spécifiés, et ajoutons des entrées
pour nos machines :
Exemple de code 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
IN NS ns1.ipv6-rules.com
IN AAAA 2001:470:1f00:296::1 ; adresse de ipv6-rules.com
host1 IN AAAA 2001:470:1f00:296::2 ; adresse de host1.ipv6-rules.com
host2 IN AAAA 2001:470:1f00:296::3:3 ; adresse de host2.ipv6-rules.com
|
Exemple de code 4.3 : pri/rev-ipv6-rules.com.arpa |
$TTL 3d ; Le TTL par défaut (obligatoire pour bind 8, bind 9 l'ignore)
@ 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.arpa.
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.
|
Configuration de DJBDNS
Il y a actuellement des correctifs pour DJBDNS disponibles sur http://www.fefe.de/dns/ qui le rendent
compatible avec IPv6. DJBDNS peut être installé avec ces correctifs si vous
l'installez avec ipv6 dans votre variable USE.
Attention :
Certains types d'enregistrements ne sont pas encore supportés avec ces
correctifs. C'est le cas notamment des types NS et MX.
|
Exemple de code 4.4 : Installation de djbdns |
# emerge djbdns
|
Après l'installation de DJBDNS, vous pouvez le configurer en lançant
tinydns-setup et en répondant aux quelques questions posées pour savoir
quelle adresse utiliser, où installer tinydns, etc.
Exemple de code 4.5 : Installer tinydns |
# tinydns-setup
|
Supposons que vous avez installé tinydns dans
/var/tinydns/. Vous pouvez maintenant éditer
/var/tinydns/root/data. Ce fichier contiendra toutes les données
nécessaires pour que tinydns puisse s'occuper de votre délégation IPv6.
Exemple de code 4.6 : Exemple de fichier data |
.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
|
Les lignes préfixées par un 6 auront deux enregistrements de types AAAA
et PTR créés. Celles préfixées par un 3 auront seulement un
enregistrement de type AAAA. Au lieu d'éditer manuellement le fichier
data, vous pouvez utiliser les scripts add-host6 et
add-alias6 pour ajouter de nouvelles entrées. Après avoir modifié le
fichier data, vous n'avez qu'à lancer make dans le
répertoire /var/tinydns/root pour mettre à jour la configuration.
Cela va créer /var/tinydns/root/data.cfb que tinydns utilise pour
servir les requêtes DNS.
5.
Paramétrer un routeur IPv6
Configurer le routage
Quelques modifications restent à faire si vous voulez utiliser votre système en
tant que routeur pour des clients qui voudraient se connecter au réseau IPv6.
Nous devons activer le routage des paquets IPv6. Il y a deux façons de faire.
Exemple de code 5.1 : Activer le routage sur votre système |
# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
ou bien
# sysctl -w net.ipv6.conf.all.forwarding=1
|
Attention :
Les scripts d'initialisation de radvd expliqués dans le prochain chapitre
activent (et désactivent) le routage des paquets. Si vous utilisez radvd vous
pouvez sauter la prochaine étape.
|
Pour activer le routage au démarrage du système, éditez le fichier
/etc/sysctl.conf et ajoutez la ligne suivante :
Exemple de code 5.2 : Ajout dans sysctl.conf |
net.ipv6.conf.default.forwarding=1
|
Tout le trafic envoyé à votre système devrait maintenant être redirigé vers la
passerelle IPv6 que nous avons précédemment paramétrée à l'aide d'un tunnel.
Pour assigner automatiquement des adresses IPv6 à vos clients, il existe deux
moyens prévus par les spécifications IPv6. La méthode la plus en vogue
s'appelle « Router Advertisement » et permet à un client d'obtenir
une adresse et une route de la part du routeur, permettant la connexion au
réseau IPv6 simplement en activant l'interface. C'est le client qui détermine
son adresse en fonction du préfixe donné par le routeur. La deuxième méthode
est « DHCPv6 ». Tel DHCP sous IPv4, c'est le serveur qui assigne
l'adresse et la route au client en fonction de son identificateur réseau.
DHCPv6 permet de garder une trace des assignations d'IPs, au contraire de RADV.
Installation d'un routeur RADV
L'installation d'un routeur RADV est enfantine en utilisant le « Router
Advertisement Daemon » : radvd.
Exemple de code 5.3 : Installer radvd |
# emerge radvd
|
Après avoir installé radvd, nous devons créer le fichier
/etc/radvd/radvd.conf qui contient les informations du routeur à
transmettre aux clients, à savoir le bloc d'IPs allouées. Voici un exemple de
radvd.conf en utilisant le préfixe que nous avons déjà utilisé
pour notre passerelle IPv6.
Exemple de code 5.4 : Exemple de radvd.conf |
interface eth1
{
AdvSendAdvert on;
AdvLinkMTU 1280;
MaxRtrAdvInterval 300;
prefix 2001:470:1F00:296::/64
{
AdvOnLink on;
AdvAutonomous on;
};
};
|
Attention :
Assurez-vous que le nom de l'interface réseau indiqué sur la première ligne
soit le bon, afin de diffuser les annonces vers votre intranet et non pas vers
votre fournisseur d'accès !
|
Pour plus d'informations, consultez man radvd.conf. Nous pouvons à
présent lancer radvd et le faire démarrer lors de l'amorçage.
Exemple de code 5.5 : Activer radvd |
# /etc/init.d/radvd start
# rc-update add radvd default
|
Installation d'un routeur DHCPv6
Pour installer DHCPv6 sur votre routeur, vous devez bien évidemment installer
et configurer le démon dhcpv6.
Exemple de code 5.6 : Installation de dhcpv6 |
# emerge dhcpv6
|
Nous devons à présent configurer le serveur DHCPv6 en éditant
/etc/dhcp6s.conf.
Exemple de code 5.7 : Exemple de dhcp6s.conf |
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;
};
};
};
|
Nous pouvons enfin lancer dhcp6s et le faire démarrer lors de l'amorçage.
Exemple de code 5.8 : Démarrer dhcpv6s |
# /etc/init.d/dhcp6s start
# rc-update add dhcp6s default
|
6.
Les clients IPv6
En utilisant radvd
Les clients derrière ce routeur devraient maintenant pouvoir accéder au réseau
IPv6. En utilisant radvd, aucune configuration particulière n'est nécessaire et
il vous suffit d'activer votre interface réseau. C'est probablement déjà fait
par votre script d'initialisation net.ethX.
Exemple de code 6.1 : Se connecter à 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
|
En utilisant DHCPv6
Si votre routeur est configuré pour utiliser DHCPv6, vos clients doivent alors
également avoir le paquet dhcpv6 installé. Ensuite, vous devez configurer vos
clients en éditant le fichier /etc/dhcp6c.conf.
Exemple de code 6.2 : Exemple de dhcp6c.conf |
interface eth0 {
send rapid-commit;
request domain-name-servers;
iaid 11111;
renew-time 11000;
};
|
7.
Utiliser la conversion 6to4
Principes de base
La conversion 6to4 permet à des machines IPv6 de communiquer avec des machines
IPv4. Cela vous permet d'avoir un réseau entièrement IPv6 et de continuer à
vous connecter aux serveurs IPv4 habituels, votre routeur (IPv6 et IPv4)
s'occupant du reste.
Configuration DNS
Pour faire fonctionner correctement les conversions 6to4, vous devez installer
un proxy DNS, totd, qui vous renverra un enregistrement DNS de type AAAA
pour les hôtes qui n'ont qu'un enregistrement de type A. Ces enregistrements de
type AAAA pointeront vers des adresses IPv6 qui n'existent pas réellement, mais
qui seront reconnues par le proxy 6to4 qui routera les paquets vers la bonne
machine.
Puisque totd est toujours masqué ~x86 en attendant des tests plus
approfondis, vous devrez le démasquer en ajoutant la ligne suivante à votre
fichier /etc/portage/package.keywords (consultez « man
portage » pour plus d'informations sur ce fichier).
Exemple de code 7.1 : Démasquage permanent de totd dans package.keywords |
net-misc/totd ~x86
|
Puis, lancez simplement emerge :
Exemple de code 7.2 : Installation de totd |
# emerge totd
|
Ensuite, vous devez paramétrer le fichier /etc/totd.conf :
Exemple de code 7.3 : Exemple de totd.conf |
forwarder 192.168.0.2 port 53
prefix 3ffe:abcd:1234:9876::
port 5005
pidfile /var/run/totd.pid
stf
|
Note :
totd doit etre configuré sur un port différent de 53 dans le cas où un
serveur DNS tournerait déjà sur votre serveur.
|
Le proxy 6to4
Nous allons utiliser ptrtd comme proxy 6to4, ce qui permettra les
connexions entre IPv6 et IPv4.
Exemple de code 7.4 : Installation de ptrtd |
# emerge ptrtd
|
Vous devez à présent configurer ptrtd en lui indiquant le faux préfixe
que vous avez donné à totd afin qu'il puisse reconnaître les paquets à
transformer. Éditez le fichier /etc/conf.d/ptrtd et réglez
IPV6_PREFIX. Cela doit impérativement être le même préfixe que celui
donné à totd.
Exemple de code 7.5 : Exemple de ptrtd.conf |
IPV6_PREFIX="3ffe:abcd:1234:9876::"
|
Vous pouvez maintenant lancer totd.
Exemple de code 7.6 : Démarrage de totd |
# /etc/init.d/totd start
# rc-update add totd default
|
Configuration et test des clients
Les clients peuvent maintenant être configurés pour pouvoir se connecter aussi
bien aux machines IPv6 qu'IPv4, avec seulement une interface IPv6. Supposons
que les clients ont déjà reçu une adresse IP de radvd. Nous n'avons plus qu'à
configurer le serveur DNS à utiliser et à ajouter une route par défaut spéciale
pour les « fausses adresses ». Premièrement, ajoutons une entrée au
début du fichier /etc/resolv.conf pointant vers la machine où
totd tourne.
Exemple de code 7.7 : Exemple de resolv.conf |
nameserver 2001:470:1f00:296::1
|
Pour tester la résolution de noms, faites une requête de type AAAA
sur un nom qui n'a que des adresses IPv4.
Exemple de code 7.8 : Test de la résolution de nom |
# 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
|
Nous allons maintenant ajouter une route par défaut spéciale pour
toutes les adresses qui commenceront par notre préfixe choisi.
Exemple de code 7.9 : Ajout d'une nouvelle route |
# ip route add 3ffe:abcd:1234:9876::/64 via 2001:470:1f00:296::1 dev eth0
|
Enfin, utilisez ping6 pour atteindre l'hôte google.com avec sa fausse
adresse IPv6.
Exemple de code 7.10 : Test du 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
|
Note :
En fait c'est le routeur avec ptrtd qui répond, mais cela nous montre au
moins que ça marche.
|
8.
Autres ressources
Il existe de nombreuses excellentes ressources en ligne concernant
IPv6.
N.D.T. : Et voici quelques sites en français.
Sur IRC, vous pouvez essayer #ipv6 sur Freenode. Vous pouvez vous connecter aux
serveurs Freenode en IPv6 en vous connectant à irc.ipv6.freenode.net.
Ce document est protégé par la licence Creative
Commons : Paternité - Partage des Conditions Initiales à
l'Identique 2.5.
|