Afin d'éviter les manoeuvres malheureuses aux conséquences tragiques, les auteurs recommandent aux lecteurs d'entreprendre les manipulations décrites ci-dessous seulement s'ils comprennent réellement ce qu'ils font. Toutefois, nous conseillerons tout au long de l'article quelques mesures pour éviter que l'installation d'IPv6 n'empiète pas trop sur votre configuration. conserver dans l'état où se trouvait votre système avant l'installation IPv6.
Il sera souvent nécessaire de recompiler le noyau car ceux des grandes distributions supportent rarement IPv6. Le Kernel-HOWTO décrit très clairement les précautions à prendre lors de la compilation d'un noyau. Si vous n'avez jamais entrepris ceci, la lecture en est chaudement recommandée.
Si vous avez compilé votre noyau, le fichier de configuration
est sauvegardé dans /usr/src/linux-x.y.z/.config.
N'oubliez pas de sauvegarder ce fichier avant de vous lancer dans une
nouvelle
compilation pour IPv6.
Si vous utilisez le noyau initial fournit avec votre distribution,
le répertoire /usr/src/linux-x.y.z
contient certainement un fichier résumant la configuration utilisée
pour la compilation. Par exemple, sur les Red Hat, il se situe dans le
sous-répertoire config.
Avec un noyau 2.2.16, il est nécessaire d'autoriser le code expérimental (CONFIG_EXPERIMENTAL) pour accéder aux 3 options à activer concernant IPv6 :
Le Makefile du noyau comporte un champs EXTRAVERSION. Comme nous préparons un noyau spécial pour IPv6, nous pouvons y ajouter "-ipv6". Une fois la compilation effectuée (noyau et modules), il reste à installer le nouveau noyau :
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.2.x-ipv6Nous installons les modules (make modules_install) et nous créons une image :
mkinitrd /boot/initrd-2.2.x-ipv6.img 2.2.x-ipv6Il ne reste alors plus qu'à configurer lilo (ou tout autre système de boot). Là encore, la prudence est de mise. Ne pas retirer de votre fichier de configuration votre noyau actuel qui fonctionne : si vous avez oublié quelques options essentielles, votre nouveau noyau risquerait ne pas booter.
Si votre ordinateur reboote correctement une première étape aura été franchie avec succès :)
Il est également possible de compiler le support d'IPv6 en tant que module (ipv6.o). Dans ce cas, vous devez ajouter à votre fichier /etc/conf.modules la ligne :
alias net-pf-10 ipv6Il reste à charger le module si ce n'est pas déjà fait. L'ensemble d'utilitaires de modutils permet la manipulation des modules en adressant des requêtes directement au noyau :
>> /sbin/lsmodIci, le module est donc installé. Si ce n'est pas le cas, la commande /sbin/modprobe permet de le charger dynamiquement.
Module Size Used by
ipv6 106632 -1
Si le noyau Linux supporte IPv6, il faut également fournir
les outils nécessaires tant à la configuration du protocole
qu'à son utilisation. Les outils distribués habituellement
sont prévus pour IPv4. Nous devrons donc recompiler plusieurs
programmes pour assurer la compatibilité avec IPv6.
Les outils et applications décrits ci-dessous existent aussi
bien en version IPv4 qu'IPv6. Comme nous allons compiler ceux pour IPv6,
nous devons éviter qu'ils prennent le pas sur ceux pour IPv4. Tous
les Makefile devront donc être modifiés pour installer ces outils
ailleurs qu'à leur place par défaut (par exemple, /usr/local/IPv6
ou /opt/IPv6 - ce qui sera le cas
dans la suite de l'article).
Ils sont disponibles à l'adresse http://www.tazenda.demon.co.uk/phil/net-tools/.
La plupart des distributions Linux les installent, mais ne supportent pas toujours IPv6. Lors de la configuration (make clean; make config), la sélection de certaines options assure le support d'IPv6 :
Attention : les net-tools (net-tools-1.54
de la Red Hat 6.2 supportent déjà IPv6).
Pour savoir si les vôtres le supportent, vous pouvez, par exemple, exécuter
la commande netstat :
>>netstat -V
net-tools 1.54
netstat 1.38 (1999-04-20)
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N
AF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +ATALK +ECONET +ROSE
HW: +ETHER +ARC +SLIP +PPP +TUNNEL +TR +AX25 +NETROM +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB
Le +INET6 confirme le support d'IPv6
par le package.
Vous pouvez aussi utiliser la commande /sbin/ifconfig. Elle permet de connaître les paramètres des interfaces. Si le noyau a bien été compilé avec le support pour IPv6, il doit y avoir une ligne commançant par inet6 pour chaque interface active :
eth0 : Link encap:Ethernet HWaddr 52:54:05:FD:CC:20
inet6 addr: fe80::5054:5ff:fefd:cc20/10 Scope:Link
lo : inet6 addr: ::1/128 Scope:Host
Quelques remarques sur les résultats obtenus :
Sous Linux, la configuration du réseau se décompose en 3 étapes :
#Ajouter dans /etc/hosts pour IPv6Le fichier /etc/protocols décrit les protocoles supportés par la machine. Il permet de convertir le nom du protocole en son numéro (par exemple, 6 pour tcp, 17 pour udp, ...) :
::1 ip6-localhost ip6-loopback #adresse de bouclage
fe00::0 ip6-localnet #réseau local IPv6
ff00::0 ip6-mcastprefix #préfixe commun à toutes les adresses IPv6 multicast sur un lien
ff02::1 ip6-allnodes #adresse du groupe multicast "tous les équipements" du lien local IPv6 (équivalent en IPv4 de 224.0.0.1)
ff02::2 ip6-allrouters #adresse du groupe multicast "tous les routeurs" du lien local IPv6 (équivalent en IPv4 de 224.0.0.2)
#ff02::3 ip6-allhosts #Cette adresse est définie dans le IPv6-HOWTO ... mais la RFC2375 la désigne "unassigned"
#Ajouter dans /etc/protocols pour IPv6Remarquez à la ligne ipv6-icmp l'ajout indispensable des alias icmpv6 et icmp6. Ils ne sont pas toujours présents alors que le protocole l'est. Sans eux, point de ping6 :(
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
ipv6-icmp 58 IPv6-ICMP icmpv6 icmp6 # ICMP for IPv6
ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6
ipv6-opts 60 IPv6-Opts # Destination Options for IPv6
Si vous utilisez un serveur NIS, protocoles est une des maps possibles. Si votre machine n'est pas le serveur NIS, les changements que vous venez de faire n'auront d'effet que si vous définissez dans votre /etc/nsswitch.conf une recherche d'abord locale (attribut file) et ensuite seulement par les yellow pages (nis ou nisplus).
Enfin, il faut modifier le fichier /etc/xinetd.conf pour qu'il utilise les serveurs compatibles avec IPv6 décrits dans la section précédente. Par exemple, voici la section sur telnet :
service telnetEnsuite, il ne reste qu'à établir une connexion :
{
flags = REUSE NAMEINARGS
socket_type = stream
protocol = tcp
wait = no
user = root
server = /opt/IPv6/sbin/in.telnetd6
server_args = -h
}
>>./telnet6 ::1Le serveur en attente se voit par netstat :
Trying ::1...
Connected to ::1.
Escape character is '^]'.
login:
>>netstat -A inet6 -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:telnet *:* LISTEN
raw 0 0 *:ipv6-icmp *:* 7
raw 0 0 *:ipv6-icmp *:* 7
raw 0 0 *:ipv6-icmp *:* 7
Maintenant que les fichiers de configuration générale
sont en place, il faut encore modifier les scripts qui initalisent le réseau
pour IPv6. Peter Bieringer, auteur du IPv6-HOWTO, propose un ensemble de
scripts pour ceci. Ils fonctionnent très bien avec une distribution
Red Hat, mais devraient être facilement adaptables, selon lui, à
toute distribution compatible système V.
Le principe consiste à modifier au minimum les fichiers existants et de rajouter des fichiers spécifiques pour IPv6.
Le fichier /etc/sysconfig/network contient les paramètres du réseau tels le gateway ou le hostname. C'est également ce fichier qui est lu pour déterminer si le réseau doit être activé ou non : c'est donc l'endroit idéal pour signaler qu'on va utiliser IPv6. Il suffit d'y ajouter la ligne :
NETWORKING_IPV6=yesLe programme ifup active une interface. Les lignes suivantes activent la configuration d'IPv6 :
# IPv6 initialisation?Comme vous pouvez le constater, il existe également un fichier dédié à l'initialisation d'IPv6 pour une interface : ifup-ipv6. Ce script construit les adresses IPv6 à l'interface, charge les tables de routages statiques d'IPv6 (définies dans le fichier static-routes-ipv6) et initialise éventuellement le(s) tunnel(s) nécessaire(s) à une communication avec l'extérieur (voir section "Le monde en IPv6").
if [ "${NETWORKING_IPV6}" = "yes" ]; then
/etc/sysconfig/network-scripts/ifup-ipv6 $DEVICE
Voici une brève description de l'ensemble des scripts fournis avec le IPv6-HOWTO :
- Fichiers existants modifiés :
- /etc/sysconfig/network-scripts/ifcfg-eth0 : fichier de configuration de l'interface eth0 ;
- /etc/sysconfig/network : fichiers contenant les paramètres du réseau ;
- /etc/sysconfig/network-scripts/ifup : programme d'activation d'une interface ;
- /etc/sysconfig/network-scripts/ifdown : désactivation d'une interface.
- Fichiers spécifiques à IPv6 :
- /etc/sysconfig/network-scripts/ifcfg-sit{1,2} : paramètres de configuration de tunnel(s) ;
- /etc/sysconfig/network-scripts/ifup-ipv6 : programme d'activation d'une interface pour IPv6, appelé par ifup ;
- /etc/sysconfig/network-scripts/ifdown-ipv6 : désactivation d'une interface pour IPv6, appelé par ifdown ;
- /etc/sysconfig/network-scripts/network-functions-ipv6 : ensemble de fonctions qui gère réellement les paramètres fournis par les autres fichiers et programmes (réelle initialisation des interfaces, ajout ou effacement de routes, ...)
- /etc/sysconfig/network-scripts/
- /etc/sysconfig/network-scripts/
Le principe d'un tunnel est de relier 2 points en utilisant un protocole donné. Expliquer le fonctionnement d'un tunnel serait trop, toutefois le principe général est assez simple. Prenons comme exemple le cas qui nous intéresse : IPv6. L'émetteur prépare son paquet IPv6 mais, il ne peut l'envoyer via Internet car les routeurs ne savent pas quoi en faire. Il y accole alors une entête IPv4. Le paquet IPv6 prend la place des données, sans signification particulière, du paquet IPv4. Ce paquet IPv4 est acheminé jusqu'à son destinataire (bout du tunnel). Celui-ci retire l'en-tête IPv4, constate que les données sont de type IPv6. A partir de ce moment-là, le paquet IPv6 suit son chemin jusqu'à sa destination.
Plusieurs accès permettent d'obtenir ainsi une adresse globale et de créer un tunnel entre votre machine et un réseau IPv6 :