AdressageBis-MeO
From Livre IPv6
Contents
Mises en oeuvre
Windows XP/Vista/Seven
Traditionnellement, la commande ipconfig permet de connaitre les paramètres des interfaces réseaux.
Ainsi sur cette exemple, l'interface vers le réseau local possède plusieurs adresses IPv6 :
- une adresse lien-local : fe80::3977:3fff:6900:27c9%12. Cette adresse contient la porté qui indique que l'interface sur ce système possède le numéro 12.
- une adresse globale permanente :2001:8db:7307:6210:3977:3fff:6900:27c9 qui sera utilisée par les applications serveur tournant sur cette machine. Sous Vista et Seven, la partie identifiant d'interface est aléatoire comme dans cet exemple, tandis que sous XP, l'identifiant d'interface dérive de l'adresse MAC.
- une adresse globale temporaire: 2001:8db:7307:6210:383e:7601:455f:1e3f. Les deux adresses globales partagent le même préfixe 2001:8db:7307:6210::/64
Il est également possible d'utiliser la commande netsh pour accéder aux configuration des interfaces et modifier les configurations :
C:>netsh netsh>interface ipv6 netsh interface ipv6>
Par exemple, pour enlever la configuration automatique des adresses à partir des annonces de routeur :
C:>netsh netsh>interface ipv6 netsh interface ipv6> set interface LAN routerdiscovery=disabled
(merci à Denis Fondras pour cette information)
TODO | Mettre plus de commande netsh |
Linux
Le listing suivant donne la configuration des interfaces d'une machine sous Unix.
>ifconfig -au vr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.108.119.159 netmask 0xffffff80 broadcast 192.108.119.255 inet6 fe80::250:baff:febe:712%vr0 prefixlen 64 scopeid 0x1 inet6 2001:660:7301:1:250:baff:febe:712 prefixlen 64 autoconf inet6 2001:688:1f99:1:250:baff:febe:712 prefixlen 64 autoconf ether 00:50:ba:be:07:12 media: Ethernet autoselect (10baseT/UTP) status: active lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
L'interface Ethernet vr0 possède une adresse IPv4 et trois adresses IPv6 :
- La première adresse correspond à l'adresse lien-local. On retrouve l'identifiant d'interface qui suit le préfixe FE80::/64. A noter que l'on retrouve les octets de l'adresse MAC, sauf pour le premier octet qui est à 02 au lieu de 00 suite à l'inversion du bit «universel/local».
A noter que la portée de l'adresse est indiquée par la chaîne de caractère %vr0. La valeur scopeid indiquée à la fin de la ligne donne le numéro cette interface. - Les deux autres adresses correspondent à des adresses globales dont les préfixes ont éte attribués par deux opérateurs différents (la machine est sur un réseau multi-domicilié) :
- 2001 : une adresse unicast globale attribuée par les autorités régionales (cf. Familles d'adressage),
- 660 : est le préfixe attibué par RIPE-NCC au réseau Renater et 688 à France Télécom
- 7301 est attribué par Renater à Télécom-Bretagne et 1f99 par France Télécom,
- 1 : est le numéro du réseau, pour ces deux préfixes, à l'intérieur de l'ENST Bretagne. Il n'est pas nécessaire d'attribuer le même identifiant de sous-réseaux pour les deux préfixes, mais cela est préférable pour des raisons de commodité d'administration.
L'interface de lo0 possède les adresses de loopback pour IPv4 et IPv6 (::1).
De nombreuses distributions de Linux existent. Debian, RedHat, Mandrake, Suse en sont quelques unes parmi les plus connues. Une distribution Linux est constituée du noyau Linux proprement dit, et d'un ensemble de programmes (essentiellement d'origine GNU ou BSD) utilisant des librairies. D'une manière générale, pour qu'une distribution Linux fonctionne en IPv6, il faut qu'elle intègre un noyau, des librairies, des scripts de configuration et des applications supportant IPv6. Bien que dérivant de noyaux et d'outils de même origine, chaque distribution a ses particularités. Le programme d'installation est différent, et chaque société ou organisme maintenant cette distribution fait le choix d'intégrer -ou non- des programmes différents en fonction du public visé. Il est donc impossible, dans ce chapitre, de particulariser pour chaque distribution. On donne ici des remarques générales, et on développera l'exemple de RedHat/FedoraCore. Pour les autres distributions, la documentation (ou une recherche sur le Web) permet de trouver les adaptations nécessaires.
La souche IPv6 est intégrée officiellement au noyau depuis les versions 2.2, mais ces noyaux étaient incomplets et non conformes aux RFC. Les noyaux 2.4 sont plus corrects, mais eux aussi présentent quelques lacunes. Les noyaux 2.6 sont donc préférables ; ils intègrent un partie des développements du projet japonais USAGI, en particulier la sécurité (IPsec). Il faut aussi un noyau compilé avec l'option IPv6 (dans le noyau ou en module). Ce type de noyau est en général disponible dans tous les distributions (au moins comme paquetage optionnel).
Les applications, quand à elles, doivent utiliser une librairie C supportant IPv6. La GNU Libc 2 intègre correctement le support IPv6 à partir de la version 2.2 de la Glibc. Aussi, il est important d'utiliser une distribution Linux qui réponde à ces critères.
C'est le cas des distributions récentes, par exemple Debian (version Woody ou supérieure), RedHat ≥ = 7.1, Mandrake ≥ = 8.0. Cette liste n'est bien entendu pas exhaustive.
Linux RedHat et FedoraCore
Linux RedHat et FedoraCore proposent IPv6 en standard depuis la version RedHat 7.1. La bibliothèque libc et la plupart des applications supportent IPv6 (sauf RPC et NFS). Pour le cas le plus simple (machine utilisant l'autoconfiguration sans état), il suffit de valider à l'installation. On peut modifier l'activation de IPv6 en définissant à yes ou à no la variable NETWORKING_IPV6 dans le fichier /etc/sysconfig/network. Notons que dans les dernières versions de FedoraCore, la génération d'adresses autoconfigurées est active par défaut ; toutefois les scripts de configuration IPv6 ne seront pas appelés si la variable NETWORKING_IPV6 n'est pas validée, et la configuration risque donc d'être incomplète.
Pour vérifier que IPv6 fonctionne correctement, on dispose des commandes ping6 ou traceroute6 pour tester l'accessibilité d'une machine, et netstat ou ip pour visualiser les tables de routage, et de connexions actives.
Configuration manuelle
Pour configurer des adresses IPv6 de manière statique sur une interface de nom ethX, il suffit de mettre les informations nécessaires dans le fichier de configuration de l'interface /etc/sysconfig/network-scripts/ifcfg-ethX. Les variables à définir sont IPV6INIT, IPV6_AUTOCONF, IPV6ADDR. Toutes les variables utiles sont documentées dans le fichier /etc/sysconfig/network-scripts/init.ipv6. Par exemple voici comment définir une adresse statique sur une interface :
IPV6INIT=YES IPV6_AUTOCONF=no IPV6ADDR=2001:6ff:10:1::1000/64
Il est aussi possible d'ajouter une adresse IPv6 explicitement grace à la commande ifconfig.
ifconfig eth0 inet6 add 2001:6ff:10:1::1000/64
L'ajout de la route par défaut correspondante se fait comment en IPv4 à l'aide de la commande route.
route -A inet6 add default gw 2001:6ff:10:1::ffff
Une autre soluton consiste à utiliser la commande ip du pakcage iproute2. Iproute2 est une collection d'utilitaires permettant de contrôler divers aspects réseau sous Linux. Iproute2 et sa commande ip visent à remplacer les commandes ifconfig et route jugées obsolètes.
L'ajout d'une adresse IP en utilisant la commande ip se fait de la manière suivante :
ip -6 addr add 2001:6ff:10:1::1000/64 dev eth0
Cette commande est strictement équivalente à la commande ifconfig utilisée précédemment. Tout comme pour ifconfig, il est aussi possible d'utiliser la commande ip pour remplacer la commande route.
ip -6 route add default via 2001:6ff:10:1::ffff
Configuration Automatique
TODO | Ajouter comment lancer NDP et visualiser les adresses et les tables de routage |
BSD
Il existe de nombreux systèmes dérivés de BSD : BSD/OS, FreeBSD, NetBSD, OpenBSD, MAC OS X,... IPv6 est disponible sur ces systèmes depuis très longtemps, plusieurs implémentations ont existé. Aujourd'hui la plupart de ces systèmes proposent IPv6 en standard, en utilisant un code dérivé d'une même souche (KAME). On se concentrera ici sur FreeBSD et NetBSD, mais les mises en ?uvre sur les autres systèmes sont proches.
FreeBSD
FreeBSD propose IPv6 en standard depuis la version 4.0. La bibliothèque libc et la plupart des applications supportent IPv6 (RPC et NFS seulement à partir de FreeBSD 5). Dans le cas le plus simple (machine utilisant l'autoconfiguration sans état), les menus d'installation système proposent de configurer IPv6, il suffit de répondre à la question de configuration d'une interface en IPv6. Si on n'a pas activé IPv6 à l'installation, on peut rappeler le programme de configuration /stand/sysinstall pour reconfigurer les interfaces. On peut aussi configurer «à la main» en éditant le fichier /etc/rc.conf.
Le fichier /etc/rc.conf sert à définir la plupart des variables de configuration d'une machine FreeBSD. Les valeurs par défaut (et les commentaires) sont dans le fichier de référence /etc/default/rc.conf (à ne pas modifier).
Pour activer manuellement IPv6 dans le cas le plus simple (autoconfiguration sans état), il suffit d'ajouter dans le fichier /etc/rc.conf la ligne :
ipv6_enable=YES
IPv6 sera disponible au prochain reboot.
Pour vérifier que IPv6 fonctionne correctement, on dispose des commandes ping6 et traceroute6 pour tester l'accessibilité d'une machine, et netstat pour visualiser les tables de routage, et de connexions actives.
Par exemple pour tester la connectivité IPv6 :
> /usr/sbin/traceroute6 www6.ipv6.imag.fr traceroute6 to www6.ipv6.imag.fr (2001:660:181:1::50) from 2001:660:282:5:2b0:d0ff:fe3b:e565, 30 hops max, 12 byte packets 1 2001:660:282:5:200:c0ff:fee4:caa0 22.234 ms 0.993 ms 0.919 ms 2 pallas.ipv6.rennes.enst-bretagne.fr 3.81 ms * 3.684 ms 3 horace.ipv6.rennes.enst-bretagne.fr 7.93 ms * 15.773 ms 4 2001:660:80:4002::1 14.876 ms * 14.941 ms 5 2001:660:80:4004::2 22.877 ms * 22.835 ms 6 luna-v6.ipv6.imag.fr 50.509 ms 46.267 ms 46.148 ms
La commande suivante montre les interfaces activées en IPv6. Il existe un tunnel IPv4 dans IPv6 gif0, et l'interface xl0 a deux adresses IPv6 globales :
> netstat -inf inet6 Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll xl0 1500 <Link#1> 00:b0:d0:3b:e5:65 82186 0 74502 0 0 xl0 1500 193.52.74 193.52.74.217 58006 - 72342 - - xl0 1500 fe80:1::2b0 fe80:1::2b0:d0ff: 70 - 2131 - - xl0 1500 2001:660:28 2001:660:282:5:2b 1388 - 0 - - xl0 1500 3ffe:305:10 3ffe:305:1002:5:2 467 - 0 - - lp0* 1500 <Link#2> 0 0 0 0 0 gif0 1280 <Link#3> 279 0 388 0 0 gif0 1280 fe80:3::2b0 fe80:3::2b0:d0ff: 0 - 0 - - gif0 1280 192.108.119.1 192.108.119.195 279 - 386 - - ...
Configuration manuelle
Pour configurer des adresses IPv6 de manière statique sur une interface de nom IFX, il suffit de mettre dans le fichier de configuration /etc/rc.conf les informations nécessaires. Les variables à définir ont pour nom ipv6_ifconfig_IFX (une seule adresse) ou ipv6_ifconfig_IFX_aliasY (Y entier de 0 à N-1 si IFX a N adresses IPv6). La syntaxe est celle des arguments de la commande ifconfig. L'adresse lien-local est toujours générée automatiquement et ne doit pas être positionnée de cette manière. Ainsi les lignes suivantes ajoutées dans le fichier /etc/rc.conf configurent deux adresses IPv6 sur l'interface fxp0 :
ipv6_ifconfig_fxp0_alias0="3ffe:3ff:92:55:a00:20ff:fe8e:f324 prefixlen 64" ipv6_ifconfig_fxp0_alias1="2001:6ff:43:55:a00:20ff:fe8e:f324 prefixlen 64"
Ainsi dans l'exemple suivant, issue d'une machine BSD :
>ping6 fe80::200:c0ff:fee4:caa0 PING6 fe80::1%lo0 --> fe80::200:c0ff:fee4:caa0 ping6: sendmsg: No route to host ping6: wrote fe80::200:c0ff:fee4:caa0 16 chars, ret=-1 ping6: sendmsg: No route to host ping6: wrote fe80::200:c0ff:fee4:caa0 16 chars, ret=-1 ^C --- fe80::200:c0ff:fee4:caa0 ping6 statistics --- 2 packets transmitted, 0 packets received, 100% packet loss
La station est incapable de déterminer l'interface de sortie, par contre si l'on utilise la même adresse de destination en précisant l'interface de sortie :
>ping6 fe80::200:c0ff:fee4:caa0%xl0 PING6 fe80::2b0:d0ff:fe3b:e565%xl0 --> fe80::200:c0ff:fee4:caa0%xl0 16 bytes from fe80::200:c0ff:fee4:caa0%xl0, icmp_seq=0 hlim=255 time=1 ms 16 bytes from fe80::200:c0ff:fee4:caa0%xl0, icmp_seq=1 hlim=255 time=1.067 ms ^C --- fe80::200:c0ff:fee4:caa0%xl0 ping6 statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 1/1.033/1.067 ms
on obtient le résultat attendu. La portée sera également utilisée avec les adresses multicast.
NetBSD
NetBSD propose IPv6 en standard depuis la version 1.5. La plupart des applications sont portées pour IPv6, y compris RPC et NFS.
Si on n'a pas activé IPv6 à l'installation, on peut le configurer «à la main» en éditant le fichier /etc/rc.conf.
Le fichier /etc/rc.conf définit la plupart des variables de configuration. Les valeurs par défaut (et les commentaires) sont dans le fichier /etc/default/rc.conf (à ne pas modifier).
Pour activer manuellement IPv6 sur une machine NetBSD dans le cas le plus simple (autoconfiguration sans état), il suffit d'ajouter dans le fichier /etc/rc.conf la ligne :
ip6mode=autohost
IPv6 sera disponible au prochain reboot.
Configuration manuelle
Pour configurer des adresses IPv6 de manière statique sur une interface de nom IFX, il suffit de mettre dans le fichier de configuration /etc/ifconfig.IFX les informations nécessaires, selon la syntaxe des arguments de la commande ifconfig. L'adresse lien-local est toujours générée automatiquement et ne doit pas être positionnée de cette manière. Par exemple les deux dernières lignes du fichier suivant définissent 2 adresses sur l'interface epic0 :
> cat /etc/ifconfig.epic0 up media autoselect 132.227.10.10 netmask 0xffffffe0 inet6 2001:660:282:1:260:97ff:fe41:6143 prefixlen 64 inet6 3ffe:304:282:1:260:97ff:fe41:6143 prefixlen 64 alias
Par défaut une machine NetBSD ne remplit pas la fonction de routeur. La valeur de la variable ip6mode dans le fichier /etc/rc.conf permet de choisir le mode de fonctionnement :
- routeur relayant les paquets (ip6mode=router),
- hôte s'autoconfigurant (ip6mode=autohost)
- hôte avec adresses IPv6 statiques (ip6mode=host).
Mac OS
TODO | A revoir complètement |
Le support d'IPv6 dans MacOS est standard en MacOS X (10.3).
La commande sysctl -a permet de vérifier le support IPv6 (Net.inet6). La définition des paramètres noyau liés à inet6 se fera alors comme un système BSD classique (cf. man sysctl).
Afin de profiter du support IPv6, une collection d'outils de base peut être récupérée à l'adresse ftp://morth.nu/darwin/.
Une version modifiée du paquetage KAME (version stable 20000425) pourra également être téléchargée afin de recompiler ses propres outils (tcpdump,...). De plus, un certain nombre d'utilitaires ont été portés pour IPv6 au sein du projet GNU-Darwin.