AdressageBis-MeO

From Livre IPv6

Revision as of 11:26, 27 February 2010 by Fgabut (Talk | contribs)

Aspects Fondamentaux de l'Adressage Table des matières Questions Ouvertes

Mises en œuvre

Windows XP/Vista/Seven

Traditionnellement, la commande ipconfig permet de connaître les paramètres des interfaces réseaux.

Commande ipconfig

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ée 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. À 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 Télécom 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 porte les adresses de bouclage (loopback) pour IPv4 et IPv6 (::1).

Distributions

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 comme 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 package 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 /usr/sbin/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 - -
...

Et pour finir, nous pouvons afficher la tabled e routage IPv6, grâce à la même commande en remplaçant le -i par un -r

> netstat -rnf inet6
Routing tables
Internet6:
Destination Gateway Flags Netif Expire

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.

Cisco

Les deux exemples qui suivent montrent une configuration avec et sans VLAN 802.1Q. La première ligne (ipv6 unicast-routing) est une commande globale nécessaire pour activer le routage IPv6. Il est aussi recommandé d'activer le CEF (Cisco Express Forwarding) grâce à la commande ipv6 cef.

ipv6 unicast-routing
ipv6 cef
interface FastEthernet1.3
    encapsulation dot1Q 3
    ip address 192.168.2.1 255.255.255.0
    ipv6 address 2001:8db:1F9A:24::1/64
!
interface GigabitEthernet2/0
    ip address 192.168.24.1 255.255.255.0
    ipv6 address 2001:8db:1F80:24::1/64
!

La commande show ipv6 interface permet de voir la configuration d'une Interface

#sh ipv6 interface  
GigabitEthernet0/0 is up, line protocol is up
  IPv6 is enabled, link-local address is FE80::219:56FF:FE49:8E98 
  Description: 
  Global unicast address(es):
    2001:8db:3300:1009:38:0:6:5173, subnet is 2001:660:7300:1009::/64 
    2001:8db:3301:3855::2, subnet is 2001:660:7301:3855::/64 
  Joined group address(es):
    FF02::1
    FF02::2
    FF02::9
    FF02::1:FF00:2
    FF02::1:FF06:5173
    FF02::1:FF49:8E98
  MTU is 1500 bytes
...

On peut voir que le routeur a une adresse Lien-Local configurée a partir de l'adresse MAC de l'interface et deux adresses globales dont l'identifiant d'interface est défini manuellement. En conséquence, il s'est enregistré à trois groupes de multicast sollicité et appartient à trois groupes de multicast (FF02::1 correspond aux équipements sur le lien, FF02::2 aux routeurs sur le lien et FF02::9 aux routeurs RIP).

Aspects Fondamentaux de l'Adressage Table des matières Questions Ouvertes
Personal tools