46
2007 UFR Ingénieurs 2000 Vivien Boistuaud Julien Herr - - Ce document est un rapport concernant le TP d’IPv6 réalisé dans le cadre des études de Julien Herr et Vivien Boistuaud au sein de l’UFR Ingénieurs 2000. Les enseignements d’IPv6 sont sous la direction de M. Hackim Badis. RAPPORT DE TP IPV6

Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

2007

UFR Ingénieurs 2000 Vivien Boistuaud Julien Herr - -

Ce document est un rapport concernant le TP d’IPv6 réalisé dans le cadre des études de Julien Herr et Vivien Boistuaud au sein de l’UFR Ingénieurs 2000. Les enseignements d’IPv6 sont sous la direction de M. Hackim Badis.

RAPPORT DE TP IPV6

Page 2: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

[Tapez un texte] [Tapez un texte] [Tapez un texte]

2

Table des matières

Introduction .......................................................................................................................................................................... 4

1. Présentation du contexte ....................................................................................................................................... 5

1. Le protocole IPv6 .................................................................................................................................................. 5

1. Pourquoi IPv6 après IPv4 .............................................................................................................................. 5

2. Les technologies intégrées à IPv6 .............................................................................................................. 6

3. Ecriture d’une adresse IPv6 .......................................................................................................................... 7

2. Matériel utilisé lors du TP ................................................................................................................................... 8

3. Montages réalisés ................................................................................................................................................. 9

4. Configuration logicielle et référence des commandes ........................................................................ 10

2. Activation d’IPv6 sous Linux ............................................................................................................................... 11

1. Vérification de la présence d’IPv6 sur le système................................................................................... 11

2. Chargement du module IPv6 ........................................................................................................................ 12

3. Vérification du chargement et des modalités d’utilisation ................................................................ 13

3. Configuration basique d’IPv6 ............................................................................................................................. 15

1. Attribution automatique d’une adresse de lien local ........................................................................... 15

2. Activer la reconnaissance des extensions IPv6 ....................................................................................... 17

3. Simplifier l’écriture d’adresses IPv6 ............................................................................................................. 18

1. Assigner plusieurs adresses IP à un même nom d’alias .................................................................. 19

2. Remarques sur le contenu de /etc/hosts pour IPv6 ......................................................................... 19

4. Test de la machine en local ............................................................................................................................ 20

5. Communication avec une machine du réseau local ............................................................................. 21

6. Analyse approfondie du fonctionnement d’ICMPv6 ECHO ............................................................... 23

7. Fragmentation de paquets en IPv6 ............................................................................................................. 26

8. Détecter les machines d’un lien par Multicast ........................................................................................ 28

9. Attribution d’une adresse globale ............................................................................................................... 31

1. Informations sur les adresses globales unicast en IPv6 .................................................................. 31

2. Exemple de configuration manuelle d’une adresse IPv6 Globale Unicast ............................... 32

10. La table de routage IPv6 ............................................................................................................................. 34

11. La table de voisinage et sa découverte ................................................................................................. 35

1. Pourquoi une table des voisins ................................................................................................................ 35

2. Visualiser la table des voisins .................................................................................................................... 36

3. Modification manuelle des la table des voisins ................................................................................. 37

Page 3: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

3

4. Routage et configuration automatique en IPv6 .......................................................................................... 39

5. Aller plus loin : utilisation d’IPSec ..................................................................................................................... 44

Conclusion .......................................................................................................................................................................... 45

Références bibliographiques ....................................................................................................................................... 46

Page 4: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

4

Introduction

Le protocole IP version 6 (plus familièrement appelé IPv6) est une évolution du

protocole IPv4 utilisé actuellement sur de nombreux réseaux de communications

dont Internet et la plupart des intranet d‘entreprises et des réseaux locaux

personnels.

Les travaux sur IPv6 ont commencé dans les années 1990 et, malgré la simplicité de

mise en œuvre de ce protocole, la plupart des innovations qu’il propose ont été

adaptées pour être utilisables en IPv4 plutôt que de modifier le matériel pour

pouvoir migrer vers l’IPv6. Par conséquent, cette technologie reste aujourd’hui peu

exploitée dans un cadre entrepreneurial.

Cependant, les années à venir vont devenir cruciales pour son imposition sur des

grands réseaux comme l’internet : aujourd’hui, il y a une saturation du nombre

d’adresses IPv4 publiques disponibles. De nombreux réseaux sont alors contraints à

utiliser des artifices comme le NAT pour fournir un accès au réseau à un nombre de

postes plus important que le nombre d’adresses IPv4 allouées.

Afin de découvrir la technologie IPv6 et d’être près à une future migration, nous

avons donc participé, dans le cadre de notre formation d’ingénieur en informatique

et réseaux à une séance de travaux pratiques sur le protocole IPv6. Celle-ci complète

les enseignements de M. Badis dans ce domaine.

Ce rapport relate et analyse les manipulations proposées en TP. Il constitue un point

de départ à l’apprentissage des technologies de base constituant IPv6. Après une

brève introduction sur le protocole IPv6 et le matériel utilisé au cours de ce TP, ce

rapport présentera la mise en œuvre d’IPv6 sur un lien local, sur un lien global, puis

sur l’interconnexion de réseaux routés. Enfin, il abordera les aspects sécuritaires du

protocole dans le cadre d’une étude sur l’utilisation conjointe d’IPSec et IPv6.

Page 5: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

5

1. Présentation du contexte

Cette section présente les technologies liées à IPv6 qui sont étudiées dans ce TP,

ainsi que le matériel utilisé pour sa réalisation et le protocole de test suivi.

1. Le protocole IPv6

Cette section présente un bref historique d’IPv6 et une courte présentation des

diverses technologies qui lui sont associées. D’autres informations, plus poussées,

sont présentées conjointement aux manipulations permettant de les mettre en

œuvre.

1. Pourquoi IPv6 après IPv4

A la suite d’IPv4, un nouveau protocole permettant la diffusion de flux vidéo en

réseau a été mis au point ; il a été baptisé : ST (STreaming Protocol). Sa version la

plus récente, et standardisée par l’IETF (Internet Engineering Task Force) est ST2+,

défini par la RFC1819. Ce protocole, bien que ne portant pas ce nom, a été considéré

comme étant la version 5 du protocole IP (IPv5).

La spécificité de ce protocole et, surtout, de ses applications, ne lui ont pas permis

de s’imposer comme un réel successeur d’IPv4. En effet, l’explosion de l’adoption du

protocole IPv4 dans les communications réseaux ne lui permet pas d’être remplacé

facilement, et son successeur doit donc assurer un maximum de compatibilité et de

simplifications pour pouvoir s’imposer.

Finalisé en Décembre 1998, le protocole IPv6 répond à ces critères en assurant

l’ajout de nombreux traitements optionnels et en simplifiant le traitement des

paquets réseaux par rapport à IPv4. Entre autre, son avantage par rapport à ST2+ est

que ses concepteurs ont pris comme base le protocole IPv4 et ont envisagé ses

évolutions, plutôt que de proposer un nouveau protocole, plus performant, mais

sans comparaison possible. IPv6 est défini dans la RFC 2460 de l’IETF.

Page 6: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

6

2. Les technologies intégrées à IPv6

Les spécifications IPv6 ont tenté de résoudre tous les problèmes rencontrés sur les

réseaux IPv4 :

• Manque d’adresses globales pour pouvoir connecter des périphériques ;

• Paquets de taille variable parfois longs à traiter, et champs obligatoires parfois

inutiles ;

• Pas de gestion de la sécurité au niveau de la couche réseau ;

• Adressage complexe pour les adresses de réseau, de broadcast, de multicast et

d’unicast ;

• Pas de configuration automatique des périphériques réseaux ;

Aussi, à chacune de ses problématiques, une nouvelle technologie, basée sur IPv6 a

été créée :

• La norme IPv6 prévoit un adressage sur 128bits au lieu de 32 bits pour IPv4, soit

296 fois plus d’adresses de périphérique ;

• Les paquets ont une taille multiple de 32 bits obligatoirement, optimisé pour

des processeurs 32bits et supérieurs ;

• La sécurité peut être gérée directement au niveau des en-têtes IPv6 grâce à la

technologie IPSec (RFC 2401 de l’IETF) ;

• IPv6 réduit le nombre de types d’adresses : unicast, multicast (incluant anycast) ;

• IPv6 introduit la notion de choix automatique d’adresse IP via son procédé IPv6

Stateless Address Autoconfiguration (RFC 2462 de l’IETF) ;

• IPv6 permet la fragmentation de paquets directement par le matériel, plutôt

que de renvoyer des erreurs de dimensionnement du MTU (Maxium Transfer

Unit) des divers réseaux traversés.

Remarque : bien d’autres fonctionnalités ont été ajoutées en IPv6 et/ou définies en

même temps sous forme de RFC séparées. Celles-ci ne seront pas abordées dans le cadre

de ce rapport.

Page 7: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

7

Cependant, dans la mesure où très peu de réseaux fonctionnent actuellement en

IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces

technologies ont été portées en IPv4 :

• IPSec a été définit, dans sa version finale, à la fois pour IPv4 et IPv6 ;

• La configuration automatique d’adresses de lien local IPv4 a été introduite en

Mai 2005 dans la RFC 3927 : Dynamic Configuration of IPv4 Link-Local Addresses.

3. Ecriture d’une adresse IPv6

Les adresses IPv6 ont une longueur de 128bits, soit 4 fois plus qu’en IPv4. Ceci les

rend fastidieuses à mémoriser, mais surtout à écrire pour un administrateur réseau

ou un utilisateur lambda.

Aussi, pour simplifier l’utilisation de ce type d’adresse, les simplifications suivantes

sont autorisées :

• Les adresses sont écrites par bloc de 2 octets (16bits), en hexadécimal (base

16, soit 4 caractères), séparées par un caractère « : ».

• Si un bloc de deus octets commence par un ou plusieurs 0, on peut

simplifier son écriture en omettant les zéros initiaux ; cependant, si le bloc

ne contient que des 0, le dernier doit figurer dans le bloc. Par exemple :

2001:0123:0456:0007:0000:0088:0999:0123 peut se simplifier en

2001:123:456:7:0:88:999:123.

• Si plusieurs blocs de mots valant 0000 en hexadécimal sont présents

successivement dans l’adresse, et à condition de n’utiliser cet artifice qu’une

fois dans une même adresse, on peut résumer tous ces blocs par deux « : »

successifs.

Par exemple, on peut simplifier 2001:0:0:0:1:2:3:4 en 2001::1:2:3:4, mais

on ne peut pas simplifier 2001:0:0:1:2:0:0:4 en 2001::1:2::4, il faut choisir

entre 2001:0:0:1:2::4 et 2001::1:2:0:0:4.

Page 8: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

8

2. Matériel utilisé lors du TP

Lors de ce T.P., nous avions à notre disposition :

• Quatre ordinateurs fonctionnant sous Debian GNU/Linux (Noyau 2.6.9,

distribution Sarge), chacun étant géré par un opérateur parmi : Vivien, Julien,

Aurélia et Florence ; Chaque machine est équipée de deux cartes réseaux et les

modules et outils IPv6 définis dans la section 1.4 sont installés ;

• Deux switchs HP équipés de 32 ports Ethernet/Fast-Ethernet (10/100 Mbps) ;

• Des câbles réseaux droits et croisés (en fonction du type de connexion à

effectuer ;

• Un réseau local préconfiguré pour la salle de TP, qui est équipée de switch

interconnectant tous les ordinateurs du réseau.

Page 9: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

9

3. Montages réalisés

Durant ce TP, nous avons réalisé plusieurs montages. Dans les sections 2 et 3, nous

avons utilisé un réseau dont la topologie est la suivante :

Puis, dans la section 4, nous tenteront de réaliser un réseau ayant la topologie

suivante :

Figure 2 - Montage pour la section 4, avec routage IPv6

HW

@:

00:08:74:0C:18:3

6O

péra

teur

: Vi

vien

Agi

t com

me

rout

eur

HW

@:

00:08:74

:0c:19:e2

Opé

rate

ur :

Julie

n

HW

@:

00:08:74:0c:

19:bb

Opé

rate

ur :

Flor

ence

Agi

t com

me

rout

eur

Opé

rate

ur :

Aur

élia

eth0

HW

@:

00:08:

74:0C:

18:36

Opé

rate

ur :

Vivi

en

HW

@:

00:08:

74:0c:

19:e2

Opé

rate

ur :

Julie

n

HW

@:

00:0

8:74:0c:

19:bb

Opé

rate

ur :

Flor

ence

Opé

rate

ur :

Aur

élia

eth1

eth1

eth1

eth1

Figure 1 - Montage initial pour les manipulations des sections 2 et 3

Page 10: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

10

4. Configuration logicielle et référence des commandes

Ce TP nécessite qu’un certain nombre de commandes et de modules soient installés

sur le système. Par défaut, sous Debian Sarge, les paquets nécessaires sont déjà

installés.

Les commandes/outils suivants vont être utilisées au cours de ce rapport :

• ping6, un outil permettant l’envoi et la réception de requête ICMPv6 ECHO ;

Entre autre, cet utilitaire permet vérifier que la communication entre deux

hôtes utilisant IPv6 peut se faire ;

• dhclient, qui est un outil initialement conçu pour la configuration

automatique d’un poste par DHCP en IPv4 ; il fonctionne également pour la

détection de messages d’avertisement routeurs IPv6, lui permettant de

mettre en œuvre la configuration automatique IPv6 ;

• ethereal, il s’agit d’un outil d’analyse de protocole réseau ; à noter que ce

projet a été repris sous le nom wireshark depuis un an et demi ;

• ifconfig, il s’agit de la commande linux de base permettant de configurer

les interfaces réseaux ; cet outil supporte IPv4 et IPv6 ;

• ip, il s’agit d’un outil proche de ifconfig, permettant de configurer tout ce

qui est lié à la configuration IPv4/IPv6 de la machine Linux (interfaces, tables

de routage, etc…)

• route, il s’agit d’un utilitaire permettant de manipuler les tables de routage.

Page 11: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

11

2. Activation d’IPv6 sous Linux

Avant de pouvoir utiliser IPv6 sur un système d’exploitation Linux, il est nécessaire

que les modules noyaux correspondants soient installés sur la machine, et que ceux-

ci soient chargés dynamiquement dans le noyau (ou intégrés dans le noyau à la

compilation).

Sous Windows, seul Windows Vista installe une couche réseau IPv6 par défaut sur la

machine. Sous Windows XP, à partir du Service Pack 1, vous pouvez demander à

installer la prise en charge IPv6 depuis le gestionnaire de configuration de votre

périphérique réseau.

Enfin, sous Windows 2000, des pilotes IPv6 sont disponibles mais à titre

expérimental uniquement. Vous pouvez les télécharger à l’adresse suivante :

http://www.microsoft.com/downloads/details.aspx?FamilyID=27b1e6a6-bbdd-

43c9-af57-dae19795a088&DisplayLang=en.

Dans le cadre de nos expérimentations, nous n’utiliseront que des machines Linux

et, par conséquent, nous ne détailleront pas les étapes de configuration et de test

pour Windows. Notez simplement que si IPv6 est installé sur votre machine

Windows, la commande ping -6 vous permet de simuler un fonctionnement

proche de l’utilitaire ping6.

1. Vérification de la présence d’IPv6 sur le système

Afin de s’assurer qu’IPv6 est installé sur la machine, vous pouvez vérifier tout

d’abord la présence du module noyau nommé ipv6.ko. Si les modules IPv6 sont

installés sur votre machine, vous devriez trouver ce fichier dans le dossier

/lib/modules/$KERNEL_VERSION/kernel/net/ipv6 comme suit :

# export KERNEL_VERSION=`uname –r` # ls –al /lib/modules/$KERNEL_VERSION/kernel/net/ipv6/ipv6.ko -rw-r--r-- 1 root root 234016 2007-08-13 04:31 ipv6.ko

Si le module n’est pas présent, vous devez installer les paquets IPv6 pour votre

distribution Linux. Sous debian GNU/Linux, à compter de Sarge, les paquets

nécessaires sont installés par défaut.

Page 12: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

12

Pour vérifier si le module est chargé dans votre noyau, utilisez la commande lsmod

| grep ipv6. Si le résultat renvoyé est proche de celui ci-après, alors c’est que le

module réseau IPv6 est déjà chargé :

# lsmod |grep ipv6 ipv6 234016 8

S’il est déjà chargé, vous pouvez passer directement à la section 2.3 « Vérification du

chargement et des modalités d’utilisation ». Sinon, consultez la section suivante.

2. Chargement du module IPv6

Note : si les informations fournies en 2.4 vous ont permis de déterminer que le

module IPv6 est déjà chargé dans le noyau de votre système, vous pouvez passer à

l’étape suivante.

Pour charger un module sur linux, il faut utiliser la commande modprobe. Cette

dernière permet de gérer les manipulations haut niveau des modules chargeables.

C'est-à-dire qu’il est possible avec cette commande de charger un ou plusieurs

modules, de les lister, et de supprimer l’un ou plusieurs modules.

Ci-après, quelques options utiles de la commande modprobe :

• modprobe –c : affiche la configuration courante ;

• modprobe –l : liste les modules disponibles ;

• modprobe –r [module] : supprime le module désigné ;

• modprobe –k : rend les modules chargées en mode autoclean, c'est-à-dire

que les modules seront chargés quand le système en aura besoin et seront

déchargés quand le système n’en n’aura plus besoin.

Dans notre cas, nous nous intéressons au module IPv6. Nous commençons par

vérifier que les modules IPv6 sont présents sur la machine et prêts à être chargé.

Pour cela, nous utilisons la commande modprobe pour lister les modules disponible

en nous intéressons uniquement aux modules IPv6 :

Page 13: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

13

# lsmod –l | grep ipv6 /lib/modules/[…]/kernel/net/ipv6/ipv6.o.gz /lib/modules/[…]/kernel/net/ipv6/netfilter/ip6_tables.o.gz /lib/modules/[…]/kernel/net/ipv6/netfilter/ip6t_LOG.o.gz /lib/modules/[…]/kernel/net/ipv6/netfilter/ip6t_MARK.o.gz /lib/modules/[…]/kernel/net/ipv6/netfilter/ip6t_limit.o.gz /lib/modules/[…]/kernel/net/ipv6/netfilter/ip6t_mac.o.gz /lib/modules/[…]/kernel/net/ipv6/netfilter/ip6t_mark.o.gz /lib/modules/[…]/kernel/net/ipv6/netfilter/ip6t_multiport.o.gz /lib/modules/[…]/kernel/net/ipv6/netfilter/ip6t_owner.o.gz /lib/modules/[…]/kernel/net/ipv6/netfilter/ip6table_filter.o.gz /lib/modules/[…]/kernel/net/ipv6/netfilter/ip6table_mangle.o.gz

Si la commande affiche des modules comme dans notre exemple, c’est que le

module peut être chargé. Pour cela, nous utilisons à nouveau la commande

modprobe :

# modprobe ipv6

Le module est normalement chargé. C’est ce que nous allons vérifier dans la section

suivante.

3. Vérification du chargement et des modalités d’utilisation

Comme dans la section 2.1, nous vérifions à nouveau que le module est chargé

grâce à la commande :

# lsmod |grep ipv6 ipv6 234016 8

Si le chargement du module IPv6 s’est bien déroulé, la commande doit donner un

résultat comme dans notre exemple.

Maintenant que le module est bien chargé, nous vérifions la présence dans dmesg

de la ligne :

IPv6 over IPv4 tunneling driver

Celle-ci nous indique de le pilote permettant de transmettre des paquets IPv6 sur

une connexion IPv4 est activé. Ceci est pratique pour une connexion multisite entre

deux réseaux IPv6 transitant par un réseau IPv4 (par exemple, par internet).

Page 14: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

14

Pour vérifier cela, la simple commande suivante suffit :

# dmesg |grep IPv6 IPv6 over IPv4 tunneling driver eth0: no IPv6 routers present

La seconde ligne « eth0: no IPv6 routers present » est normal car au

moment du chargement du module IPv6, nous ne disposions pas de routeur IPv6

sur notre réseau. En effet, ce message est présent lorsque la configuration

automatique ne peut pas obtenir le préfixe du réseau, ce qui n’est possible qu’avec

un routeur IPv6 présent sur le réseau.

Page 15: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

15

3. Configuration basique d’IPv6

Afin d’observer le fonctionnement d’IPv6 et, notamment, les différents types

d’adresses qu’il propose, nous avons dans un premier temps observé la composition

des adresses IPv6 ainsi que les services disponibles sous UNIX qui lui sont associés.

1. Attribution automatique d’une adresse de lien local

A partir du moment où la configuration décrite dans la section 2 de ce rapport a été

mise en œuvre, à savoir le chargement du module IPv6 dans le noyau Linux, chaque

interface réseau activée et connectée à son medium se voit attribuer une adresse

IPv6.

Notons également que l’interface de loopback (boucle interne) se voit également

attribuer une adresse IPv6. Par exemple, voici ce que nous obtenons si nous

exécutons la commande ifconfig :

eth0 Lien encap:Ethernet HWaddr 00:10:A7:1B:5D:C2 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) Interruption:169 Adresse de base:0xdc00 eth1 Lien encap:Ethernet HWaddr 00:08:74:0C:18:36 inet adr:172.17.4.5 Bcast:172.17.255.255 Masque:255.255.0.0 adr inet6: fe80::208:74ff:fe0c:1836/64 Scope:Lien UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1014 errors:0 dropped:0 overruns:1 frame:0 TX packets:572 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:1000 RX bytes:1047521 (1022.9 KiB) TX bytes:84780 (82.7 KiB) Interruption:177 Adresse de base:0x800 lo Lien encap:Boucle locale inet adr:127.0.0.1 Masque:255.0.0.0 adr inet6: ::1/128 Scope:Hôte UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:0 RX bytes:560 (560.0 b) TX bytes:560 (560.0 b)

L’adresse loopback correspond, tout comme avec IPv4, à une interface fictive. Elle

permet à la machine de s’envoyer elle-même des paquets réseaux sans pour autant

posséder d’interface réseau physique (carte réseau). Avec IPv4, l’adresse de

Page 16: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

16

loopback était 127.0.0.1 avec le protocole IPv6 l’adresse de loopback est

0:0:0:0:0:0:0:1 ou ::1 avec l’écriture simplifiée IPv6.

Le protocole IPv6 intègre plusieurs mécanismes notamment sur l’attribution

d’adresse autonome (c'est-à-dire sans l’aide d’un serveur). De plus, IPv6 permet à

une interface réseau de posséder plusieurs adresses logiques IPv6. Les adresses de

type lien local sont des adresses dont la validité sont restreinte à un lien, c'est-à-dire

l’ensemble des interfaces directement connectées sans routeur (par exemple,

l’ensemble des machines connectées sur un même hub ou switch appartiennent au

même lien).

La création de cette adresse se fait, sous Linux, via la convention EUI-64 de l’IEEE. Elle

a lieu lors de l’initialisation de l’interface et est obtenue en concaténant le préfixe

lien local (FE80:0:0:0/64) qui est fixé aux 64 bits de l’identifiant d’interface.

L’identifiant d’interface, quant à lui, se crée à partir de l’adresse MAC de l’interface

comme le montre le schéma ci-après.

Figure 3 - Attribution de l'identifiant d'interface à partir de l'adresse MAC (EUI-64)

Dans notre exemple, l’adresse MAC de l’interface eth1 est 00:08:74:0C:18:36,

l’identifiant d’interface est donc 02:08:74:FF:FE:0C:18:36 et l’adresse IPv6 de

lien local de l’interface eth1 est donc FE80:0008:74FF:FE0C:1836 ou

FE80::8:74FF:FE0C:1836 avec l’écriture IPv6 simplifiée. Nous pouvons vérifier

l’adresse trouvée au résultat de la commande ifconfig ci-avant et nous

constatons que nous obtenons le même résultat. Il est à noter qu’avant de

s’attribuer une adresse de lien local, le mécanisme vérifie que l’adresse n’existe pas

déjà sur le lien. Dans le cas où l’adresse est déjà utilisée sur le lien, aucune adresse

de lien logique n’est attribuée à l’interface.

Pour conclure sur les adresses IPv6, le protocole reconnait trois types d’adresses :

unicast, multicast et anycast.

Page 17: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

17

Le premier type, unicast, est le plus simple. Une adresse de ce type représente une

interface unique. Parmi ces adresses unicast, on peut dissocier celles qui ont une

portée globale (c'est-à-dire identifiant une machine unique sur le réseau internet),

de celles qui ont une portée locale : site locale (adresse commune aux machines

d’un même site) ou lien local (adresse commune aux machines d’un même lien

physique).

Une adresse de type multicast représente un groupe d’interfaces qui appartiennent

à des nœuds différents pouvant se situer n’importe où sur le réseau internet. Ces

adresses IPv6 sont préfixées par ff00:: /8. Il est à noter que les adresses de type

multicast remplacent les adresses de type broadcast connu sous IPv4.

Enfin, le dernier type, anycast, qui représente un groupe d’interfaces tout comme le

type multicast. Cependant la différence de type anycast est qu’on accède plus à un

service qu’à une machine. En effet, alors qu’une adresse multicast permet d’envoyer

un paquet à l’ensemble des interfaces ayant cette adresse, un paquet envoyé à une

adresse anycast n’est diffusé qu’à une seule adresse. Il est à noter le type anycast est

encore au stade de recherche.

2. Activer la reconnaissance des extensions IPv6

Le protocole IPv6 définit de nombreux protocoles complémentaires à son

utilisation, notamment ICMPv6. Afin que le système traite ces protocoles, le module

correspondant doit être chargé (ipv6.ko gère la plupart des extensions lui-même) et

le fichier /etc/protocols doit contenir une entrée permettant de corréler le nom

de l’extension avec le numéro de protocole IP.

Pour cela, chaque ligne du fichier /etc/protocols a la structure suivante :

# Dès qu’un dièse apparait sur la ligne, le reste est un commentaire nom-principal-protocole 99 AliasProtocole1 AliasProtocole2 …

Ainsi, chaque protocole peut posséder plusieurs alias, permettant de référencer par

exemple un nom protocolaire et un nom cour ant. Le numéro (ici 99 pour

l’exemple) désigne le numéro de protocole dans l’en-tête IP. En effet, chaque

protocole standardisé se voit attribuer un numéro par l’IANA, qui est utilisé dans

chaque champ « protocole » de l’en-tête IP du paquet le contenant.

Par exemple, le protocole IPv4 possède le numéro 0, et le protocole IPv6 possède le

numéro 41.

Page 18: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

18

Afin de s’assurer que, par la suite, nous pourront tirer parti des protocoles IPv6,

ICMPv6 et d’autres extensions du protocole, nous devons nous assurer que les

lignes suivantes sont présentes et non commentées dans le fichier

/etc/protocols :

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 # ICMP for IPv6 ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6 ipv6-opts 60 IPv6-Opts # Destination Options for IPv6

En effet, si les protocoles ne sont pas référencés par leur nom, il sera impossible au

module IPv6 et à ses programmes associés de trouver le numéro de protocole

correspondant aux en-têtes à traiter. Ceci aura alors pour conséquence d’empêcher

l’émission de ce type de paquet, ainsi que leur réception par la machine.

Note : sur notre version de Debi an GNU/Linux Sarge, les protocoles ipv6-auth et ipv6-

crypt n’étaient pas présents dans le fichier protocols.

3. Simplifier l’écriture d’adresses IPv6

Les adresses IPv6 sont, la plupart du temps, impossibles à mémoriser. Ceci est dû en

grande partie à leur taille importante de 128 bits, et à leur complexité de notation,

malgré les efforts faits pour simplifier l’écriture des successions d’octets nuls (00).

Aussi, en l’absence de la possibilité d’utiliser un DNS, il peut être utile de créer des

alias permettant d’associer une adresse IPv6 complète par un simple nom. Sous

Linux, ce principe est le même que pour les alias IPv4, de même que le fichier qui les

déclare.

Ce fichier s’appelle /etc/hosts et son format est le suivant :

# Dès qu’un dièse apparait sur la ligne, le reste est un commentaire xx.xx.xx.xx aliasipv41 aliasipv42 yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy aliasipv61 aliasipv62

A chaque adresse peut être assigné plusieurs alias. En revanche, comme nous le

verront dans la suite de ce document, un alias ne peut pas porter le même nom

pour pointer vers deux adresses, bien que le protocole IPv6 permette d’assigner

plusieurs adresses à un même périphérique réseau, sur le même medium.

Page 19: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

19

Par exemple, afin de simplifier l’écriture des adresses de lien local des interfaces

eth1 de Vivien et Julien, nous avons ajouté les alias suivant au fichier /etc/host :

fe80::208:74ff:fe0c:19e2 julien-eth1-local fe80::208:74ff:fe0c:1836 vivien-eth1-local

Dorénavant, nous pourront utiliser ces alias pour toutes les commandes réseaux

attendant habituellement une adresse IPv6, dans la mesure où les adresses saisies

sont des adresses IPv6.

1. Assigner plusieurs adresses IP à un même nom d’alias

En revanche, comme nous l’avons dit précédemment, il est impossible d’affecter un

même nom d’alias à plusieurs adresses IP et ceci pour une raison simple.

La résolution d’un nom d’hôte par le système est configurée via le fichier

/etc/nsswitch.conf. Celui-ci précise l’ordre dans lequel on doit faire appel aux

informations de résolution. En général, on cherche d’abord dans les fichiers (c'est-à-

dire dans /etc/hosts), puis on cherche sur un serveur DNS si disponible.

La recherche dans le fichier d’alias des hôtes est une recherche « flemmarde » (lazy),

c'est-à-dire que dès que le résultat est trouvé, le recherche s’arrête et le résultat est

considéré comme le seul disponible.

De plus, assigner plusieurs adresses à un même alias serait un non sens, dans la

mesure où la plupart des commandes utilisant une adresse IP ont besoin d’une

seule adresse et non pas d’une plage, ni de plusieurs adresses.

Ceci présente cependant un inconvénient majeur : si on souhaite pouvoir contacter

une machine à la fois via son adresse IPv4 et son adresse IPv6, il faut lui affecter des

noms d’hôtes différents pour chaque type d’adresses. Cependant, ce cas a peu de

chances de se produire dans la mesure où un réseau fonctionne généralement soit

totalement en IPv4, soit totalement en IPv6, en tous cas dans le cadre d’un réseau

d’entreprise.

2. Remarques sur le contenu de /etc/hosts pour IPv6

Sur notre installation de Debian GNU/Linux Sarge avec IPv6 installé par défaut, notre

fichier /etc/hosts contient déjà des entrées prédéfinies de noms d’hôtes spécifiques :

Page 20: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

20

::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts

Note: si ces entrées ne se trouvent pas dans votre fichier /etc/hosts, vous êtes

vivement encouragé à les ajouter en prévision des manipulations suivantes.

Ces entrées correspondent respectivement à :

• L’adresse principale de la boucle locale de la machine ;

• L’adresse de multicast du réseau local en IPv6 (remplaçant la notion

d’adresse de broadcast introduite en IPv4) ;

• Le préfixe des adresses de multicast IPv6 ;

• L’adresse de multicast IPv6 pour tous les appareils connectés au lien local ;

• L’adresse de multicast IPv6 pour tous les routeurs connectés au lien local ;

• L’adresse de multicast IPv6 pour tous les robots connectés au lien local (non

utilisé à l’heure actuelle, utilisation future pour la robotique et la

domotique) ;

Aussi, ces alias permettent de simplifier la recherche de machines (ordinateurs,

routeurs ou autres appareils) sur le réseau.

4. Test de la machine en local

Afin de vérifier que notre configuration IPv6 est fonctionnelle, nous avons testé

l’utilisation de la commande ping6 (envoi de messages ICMPv6 ECHO) pour

envoyer des messages à destination de notre interface de loopback et de notre

interface réseau ethernet eth1.

Pour adresser l’interface de loopback par son adresse IPv6, on utilise :

Page 21: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

21

# ping6 ::1 PING ::1(::1) 56 data bytes 64 bytes from ::1: icmp_seq=1 ttl=64 time=0.067 ms 64 bytes from ::1: icmp_seq=2 ttl=64 time=0.061 ms 64 bytes from ::1: icmp_seq=3 ttl=64 time=0.064 ms --- ::1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1998ms rtt min/avg/max/mdev = 0.061/0.064/0.067/0.002 ms

On remarque que l’interface de loopback répond à nos messages, ce qui valide le

fonctionnement IPv6 de cette interface. On aurait pu obtenir le même résultat en

utilisant son alias définit précédemment, via la commande : ping6 –I lo ::1.

Pour adresser notre interface eth1 (depuis la machine Vivien vers la machine Vivien)

on peut utiliser :

# ping6 -I eth1 fe80::208:74ff:fe0c:1836 PING fe80::208:74ff:fe0c:1836(fe80::208:74ff:fe0c:1836) from fe80::208:74ff:fe0c:1836 eth1: 56 data bytes 64 bytes from fe80::208:74ff:fe0c:1836: icmp_seq=1 ttl=64 time=0.070 ms 64 bytes from fe80::208:74ff:fe0c:1836: icmp_seq=2 ttl=64 time=0.073 ms 64 bytes from fe80::208:74ff:fe0c:1836: icmp_seq=3 ttl=64 time=0.073 ms --- fe80::208:74ff:fe0c:1836 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 0.070/0.072/0.073/0.001 ms

On valide alors le fonctionnement de notre interface eth1 en IPv6. Le même résultat

aurait pu être obtenu via la commande : ping6 -I eth1 vivien-eth1-local.

Remarque : si ces manipulations ne fonctionnent pas sur votre machine, assurez vous

qu’aucun firewall IPv6 n’est activé sur votre machine, que les interfaces possèdent des

adresses IPv6 de lien local, et que vous avez activé la reconnaissance du protocole

ICMPv6 qui est nécessaire à l’envoi et la réception de messages ICMPv6 ECHO qui sont

générés par la commande ping6.

5. Communication avec une machine du réseau local

Lorsque deux machines sont connectées sur le même medium, ou du moins sur le

même réseau local (sans rencontrer de routeur sur son chemin), les machines

peuvent communiquer ensemble en utilisant leur adresse IPv6 de lien local.

Par exemple, une fois les deux machines (Vivien et Julien) configurées, on peut

communiquer entre elles via l’envoi de messages ICMPv6 ECHO. Soit on utilise l’alias

définit précédemment :

Page 22: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

22

# ping6 -I eth1 julien PING julien-eth1-local(julien-eth1-local) from fe80::208:74ff:fe0c:1836 eth1: 56 data bytes 64 bytes from julien-eth1-local: icmp_seq=1 ttl=64 time=6.63 ms 64 bytes from julien-eth1-local: icmp_seq=2 ttl=64 time=0.207 ms 64 bytes from julien-eth1-local: icmp_seq=3 ttl=64 time=0.208 ms 64 bytes from julien-eth1-local: icmp_seq=4 ttl=64 time=0.215 ms 64 bytes from julien-eth1-local: icmp_seq=5 ttl=64 time=0.207 ms --- julien-eth1-local ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4006ms rtt min/avg/max/mdev = 0.207/1.494/6.635/2.570 ms

Ou on peut également l’adresser directement par son adresse IPv6 :

# ping6 -I eth1 fe80::208:74ff:fe0c:19e2 PING fe80::208:74ff:fe0c:19e2(fe80::208:74ff:fe0c:19e2) from fe80::208:74ff:fe0c:1836 eth1: 56 data bytes 64 bytes from fe80::208:74ff:fe0c:19e2: icmp_seq=1 ttl=64 time=4.42 ms 64 bytes from fe80::208:74ff:fe0c:19e2: icmp_seq=2 ttl=64 time=0.222 ms 64 bytes from fe80::208:74ff:fe0c:19e2: icmp_seq=3 ttl=64 time=0.210 ms --- fe80::208:74ff:fe0c:19e2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.210/1.619/4.427/1.985 ms

Cependant, il faut noter que l’utilisation du switch –I et la précision du nom de

l’interface réseau (eth1) sont indispensables pour que la commande ping6

fonctionne.

En effet, si nous tentons la même commande sans préciser l’interface, on obtient le

résultat suivant :

# ping6 fe80::208:74ff:fe0c:19e2 connect: Invalid argument

Deux éléments nous permettent de comprendre et de prévoir ce comportement.

Tout d’abord, le manuel de la commande ping6 qui précise :

-I interface address Set source address to specified interface address. Argument may be numeric IP address or name of device. When pinging IPv6 link- local address this option is required.

En d’autres termes; lors de l’utilisation d’une adresse de lien local, le switch –I est

indispensable.

De plus, il s’agit d’une question de bon sens : une adresse de lien local est affectée à

un medium d’accès donné et, par conséquent, à un réseau donné. Aussi, plusieurs

machines différentes peuvent potentiellement posséder la même adresse de lien

Page 23: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

23

local sur des réseaux différents. L’indication de l’interface sur laquelle la requête doit

être envoyée permet alors de lever l’ambiguïté quand au choix potentiel du

destinataire du message.

6. Analyse approfondie du fonctionnement d’ICMPv6 ECHO

Afin de mieux cerner ce qui se passe d’un point de vue Ethernet, IPv6 et ICMPv6 lors

de nos échanges de messages ECHO via notre adresse de lien local, nous avons

utilisé Ethereal (anciennement WireShark) pour analyser les paquets échangés sur

nos cartes réseaux eth1.

Pour cela, nous exécutons la commande suivante depuis l’ordinateur Vivien :

# ping6 -c 1 -s 2000 -I eth1 julien PING julien-eth1-local(julien-eth1-local) from fe80::208:74ff:fe0c:1836 eth1: 2000 data bytes 2008 bytes from julien-eth1-local: icmp_seq=1 ttl=64 time=0.797 ms --- julien-eth1-local ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.797/0.797/0.797/0.000 ms

Page 24: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

24

Voici le résultat de la dissection du paquet de requête envoyé par Vivien à Julien :

Et ici, la dissection du paquet émis en réponse renvoyé par Julien à Vivien :

Figure 4 - Requête ICMPv6 ECHO non fragmentée avec adresses de lien local

Figure 5 - Réponse ICMPv6 ECHO non fragmentée avec adresses de lien local

Page 25: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

25

Afin de synthétiser ce fonctionnement, nous avons réalisé le diagramme suivant :

D’un point de vue Ethernet, les adresses MAC sont directement obtenues à partir de

l’adresse de lien local IPv6, à partir des 8 octets de poids faible de l’adresse IPv6. Ceci

évite de devoir envoyer une requête demande la résolution d’adresse Ethernet

et/ou d’envoyer le message en broadcast Ethernet.

Le paquet IPv6 précise l’adresse de l’émetteur et du destinataire du paquet, qui sont

connues lors de l’envoi, et précisé également que l’en-tête suivant au sein du

paquet est de type ICMPv6 et a une longueur de 64 octets (Payload length). De plus,

dans le cas où ce message serait routé par un routeur, le nombre de sauts pour

contacter l’hôte en question ne devrait excéder 64. Notez cependant que cette

information est inutile dans la mesure où aucun routeur ne redirigera ce type de

paquet, car il ne lui est pas adressé d’un point de vue Ethernet.

Le paquet ICMPv6 envoyé possède un numéro d’identifiant (ID) ainsi qu’un numéro

de séquence (numéro du paquet de ping, ici 1 car il s’agit du paquet). De plus, le

paquet indique que le type de message envoyé est de type requête echo (ECHO

REQUEST).

Lorsque Julien reçoit ce paquet, émis par Vivien, il lui envoi une réponse. D’un point

de vue Ethernet et IPv6, les informations transmises sont les mêmes, excepté que

l’adresse source de la requête se transforme en adresse destination de la réponse et

vice versa. Dans ce cas, on évite toujours d’avoir à effectuer une résolution d’adresse

MAC en envoyant une demande : les informations étant présentes dans la requête.

Figure 6 - Schéma requête/réponse ICMPv6 ECHO sans fragmentation

Page 26: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

26

Le message ICMPv6 par contre est désormais de type ECHO RESPONSE et reprend le

numéro d’ID et le numéro de séquence de la requête initiale, afin que les éventuels

paquets perdus puissent être détectés par leur numéro d’ordre. De plus, le champ

de donnée contient une reproduction identique du champ de donné de la requête.

Le checksum en revanche est différent, prenant en compte dans son calcul le fait

que le type de message (129) n’est plus le même que précédemment (128).

Si des messages suivants étaient envoyés, ils contiendraient un champ Sequence, au

sein du paquet ICMPv6, qui serait incrémenté à chaque envoi de message.

7. Fragmentation de paquets en IPv6

Afin de tester la fragmentation de paquet en IPv6, qui est un procédé plus simple

qu’en IPv4, nous allons tenter d’envoyer un message ICMPv6 ECHO de 2000 octets,

ce qui excède la taille du MTU du réseau local auquel nous sommes connectés (qui

est de 1500 selon les informations fournies par la commande ifconfig

précédemment).

Pour cela, nous avons utilisé cette commande depuis la machine Vivien :

# ping6 -c 1 -s 2000 -I eth1 julien-eth1-local PING julien-eth1-local (julien-eth1-local) from fe80::208:74ff:fe0c:1836 eth1: 2000 data bytes 2008 bytes from julien-eth1-local: icmp_seq=1 ttl=64 time=0.800 ms --- julien ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.800/0.800/0.800/0.000 ms

Lors de cet échange de données, nous avons réalisé une capture ethereal nous

permettant de visualiser le contenu des paquets envoyés.

Page 27: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

27

Figure 7 - Requête fragmentée - fragment 1

Figure 8 - Requête fragmentée - fragment 2

Page 28: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

28

De cette capture, nous avons déduit le diagramme ci-après.

La communication par ICMPv6 ECHO se fait comme précédemment, à l’exception

qu’un en-tête supplémentaire est ajouté dans le paquet : il est appelé fragmentation

header. Celui-ci indique que le contenu de l’en-tête suivant (ICMPv6) est fragmenté

et que le paquet contient les premiers octets du message original.

Un autre paquet est également envoyé, qui spécifie le reste de l’en-tête ICMPv6 et

indique qu’il s’agit du dernier paquet contenant les informations de fragmentation.

Une fois que la machine distante a reçu ces deux paquets, elle reconstitue l’en-tête

ICMPv6 initial et la traite. Dans la mesure où le MTU est toujours supérieur à la taille

des données à renvoyer, elle fragmente également sa réponse.

A part l’ajout de l’en-tête de fragmentation, le contenu des messages ICMPv6

échangés est le même. C’est l’avantage du procédé de fragmentation IPv6 : seul un

en-tête indiquant les modalités de fragmentation est ajouté, et la reconstruction du

paquet fragmenté est facilement reconstituable à l’aide de ces informations. En

effet, on note qu’il faut autant de temps pour traiter le paquet à la machine distante

que précédemment, donc que peu de calculs supplémentaires sont nécessaires

pour reconstituer le paquet.

8. Détecter les machines d’un lien par Multicast

Afin de détecter les machines utilisant IPv6 présentes sur un lien donné, il est

possible d’utiliser une des trois adresses de multicast : ff02::1, ff02::2 ou

ff02::3. A moins qu’une machine soit équipée d’un firewall IPv6 bloquant ce type

Figure 9 - Test ECHO ICMPv6 avec fragmentation de paquet

Page 29: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

29

de requête, tout matériel IPv6 est, en standard, apte à répondre à ces requêtes de

multicast. Le type d’adresse à laquelle il répond est fonction de sa « classe » de

matériel :

• ff02::1 pour les ordinateurs ;

• ff02::2 pour les routeurs ;

• ff02::3 qui est réservé pour une utilisation future : autres matériels

intelligents, robots.

Avec IPv4, pour détecter les machines d’un même réseau IP, il était nécessaire de

faire un ping spécial, de type broadcast. Ce type de ping ne permettait pas

systématiquement de voir toutes les machines du réseau, et encore moins toutes

celles du lien local.

Avec IPv6, le broadcast IP a disparu. A la place, des adresses de Multicast dédiées à la

détection de machines sur un lien ont été définies, celles que nous avons vues

précédemment.

En revanche, ce type de paquet est transmis, d’un point de vue Ethernet, sous forme

d’un broadcast MAC.

Par exemple, si on cherche à détecter tous les ordinateurs du lien local sur lequel

nos machines sont connectées, depuis la machine Vivien, nous obenons le résultat

ci-dessous :

Page 30: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

30

# ping6 –c 1 -I eth1 ff02::1 PING ff02::1(ff02::1) from fe80::208:74ff:fe0c:1836 eth1: 56 data bytes 64 bytes from fe80::208:74ff:fe0c:1836: icmp_seq=1 ttl=64 time=0.069 ms 64 bytes from fe80::208:74ff:fe0c:1988: icmp_seq=1 ttl=64 time=0.242 ms (DUP!) 64 bytes from fe80::208:74ff:fe0c:19d2: icmp_seq=1 ttl=64 time=0.253 ms (DUP!) 64 bytes from fe80::208:74ff:fe0c:1659: icmp_seq=1 ttl=64 time=0.264 ms (DUP!) 64 bytes from fe80::208:74ff:fe0c:1aa1: icmp_seq=1 ttl=64 time=0.276 ms (DUP!) 64 bytes from fe80::208:74ff:fe0c:19e2: icmp_seq=1 ttl=64 time=0.286 ms (DUP!) 64 bytes from fe80::20d:56ff:fe2d:65a8: icmp_seq=1 ttl=64 time=0.298 ms (DUP!) 64 bytes from fe80::208:74ff:fe0e:cff: icmp_seq=1 ttl=64 time=0.311 ms (DUP!) 64 bytes from fe80::208:74ff:fe0c:19d3: icmp_seq=1 ttl=64 time=0.321 ms (DUP!) 64 bytes from fe80::208:74ff:fe0c:1510: icmp_seq=1 ttl=64 time=0.333 ms (DUP!) 64 bytes from fe80::208:74ff:fe0c:1a1b: icmp_seq=1 ttl=64 time=0.344 ms (DUP!) 64 bytes from fe80::206:5bff:fec4:42e9: icmp_seq=1 ttl=64 time=0.355 ms (DUP!) 64 bytes from fe80::206:5bff:fec4:4458: icmp_seq=1 ttl=64 time=0.366 ms (DUP!) 64 bytes from fe80::206:5bff:fe96:e466: icmp_seq=1 ttl=64 time=0.379 ms (DUP!) 64 bytes from fe80::206:5bff:fe5e:9dfb: icmp_seq=1 ttl=64 time=0.388 ms (DUP!) 64 bytes from fe80::206:5bff:fec4:43f3: icmp_seq=1 ttl=64 time=0.399 ms (DUP!) 64 bytes from fe80::206:5bff:fec4:420b: icmp_seq=1 ttl=64 time=0.411 ms (DUP!) --- ff02::1 ping statistics --- 1 packets transmitted, 1 received, +16 duplicates, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.069/0.311/0.411/0.080 ms ---

Ceci nous indique que 17 machines ont répondu à notre demande, soit 17

ordinateurs en plus du notre sur le réseau local de la salle de TP (reliés via un réseau

Ethernet spécifique par lequel nous nous connectons sur le port eth1.

En revanche, nous ne trouvons ni routeur…

# ping6 -I eth1 ff02::2 PING ff02::2(ff02::2) from fe80::208:74ff:fe0c:1836 eth1: 56 data bytes --- ff02::2 ping statistics --- 4 packets transmitted, 0 received, 100% packet loss, time 3000ms

… ni matériel intelligent autre que des ordinateurs :

# ping6 -I eth1 ff02::3 PING ff02::3(ff02::3) from fe80::208:74ff:fe0c:1836 eth1: 56 data bytes --- ff02::3 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 1000ms

Cependant, si notre réseau était équipé de tels matériels, comme des machines

faisant office de routeur comme dans la section 4, alors nous les aurions détectés via

cette manipulation.

Page 31: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

31

9. Attribution d’une adresse globale

1. Informations sur les adresses globales unicast en IPv6

En IPv6, les adresses globales unicast commencent, en binaire, par la séquence 001

indiquant qu’il s’agit d’adresse globale d’unicast.

Les 48 bits de poids forts constituent le GRP (Global Routing Prefix), qui permet de

localiser le réseau pour faciliter le routage des paquets jusqu’à lui. Les 16bits

suivants sont un numéro de sous réseau au sein du réseau. Les 64 derniers bits sont

consacrés à l’adresse de machine sur le réseau.

En résumé, la constitution d’une adresse unicast globale répond au diagramme

suivant :

Aussi, toute adresse IPv6 commençant par les digits 2 ou 3 est une adresse unicast

globale. L’attribution des GRP et SID est faite par l’IANA, pour les adresses du réseau

internet.

Pour les adresses locales à un réseau d’entreprise, il est possible d’utiliser les

adresses commençant par 2001:0000:0000 (ou 2001:0:0 en notation simplifiée) qui

sont réservés à cet effet.

Ces conventions d’adressage permettent d’avoir :

• 35 184 372 088 832 préfixes de routage global (soit 35 184 milliards) ; l’IANA

peut donc allouer de nombreux réseaux grâce à cette multitude d’adresses.

• 65 536 sous réseaux par GRP ; Ceci permet aux administrateurs réseaux de

choisir un plan d’adressage représentant la topologie interne du réseau.

• 18 446 744 073 709 551 616 machines (ou interfaces) par sous réseau (soit

18 milliards de milliards) ; Ce nombre permet de connecter un nombre très

important de périphériques ensembles au sein du même réseau.

Figure 10 - Format d'une adresse globale unicast en IPv6

Page 32: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

32

De plus, la résolution de localisation sur le réseau est grandement simplifiée, dans la

mesure où les adresses contiennent une information de localisation dans l’adresse

même.

Il faut noter que pour la partie Interface ID, l’IEEE a défini une norme d’assignation

baptisée « EUI-64 ». Celle-ci a déjà été définie précédemment, dans la section 3.1.

2. Exemple de configuration manuelle d’une adresse IPv6 Globale Unicast

Afin d’observer le fonctionnement d’une interface à laquelle on affecte une adresse

Globale Unicast IPv6, nous avons décidé d’utiliser le réseau (GRP) 2001:0:0 et le sous

réseau (Subnet ID) 0001.

Comme identifiant d’interface, nous utiliseront la même convention que pour les

adresses de lien local (c'est-à-dire la convention UEI-64) : 208:74ff:fe0c:1836,

représentant l’adresse MAC de la carte de l’ordinateur Vivien.

Pour assigner une adresse IPv6 supplémentaire à une carte, on peut utiliser la

commande ip ou, au choix, ifconfig. Par exemple, pour assigner l’adresse

2001::1:208:74ff:fe0c:1836 à l’interface eth1 de la machine Vivien, nous

utilisons au choix la commande ip :

# ip -6 addr add 2001::1:208:74ff:fe0c:1836/64 dev eth1

Ou la commande ifconfig :

# ifconfig eth1 inet6 add 2001::1:208:74ff:fe0c:1836/64

Nous pouvons alors vérifier que l’adresse globale affectée manuellement a été prise

en compte par le système, comme le montre le code ci-après.

Page 33: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

33

# ifconfig … eth1 Lien encap:Ethernet HWaddr 00:08:74:0C:18:36 inet adr:172.17.4.5 Bcast:172.17.255.255 Masque:255.255.0.0 adr inet6: 2001::1:208:74ff:fe0c:1836/64 Scope:Global adr inet6: fe80::208:74ff:fe0c:1836/64 Scope:Lien UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3024 errors:0 dropped:0 overruns:1 frame:0 TX packets:1455 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:1000 RX bytes:1681800 (1.6 MiB) TX bytes:232902 (227.4 KiB) Interruption:177 Adresse de base:0x800 …

On constate alors que l’adresse demandée a bien été assignée à notre interface

eth1 sur la machine Vivien, et que celle-ci a une portée (Scope) globale.

On notera que ceci n’empêche pas l’interface d’avoir une adresse de lien local. En

effet, en IPv6, chaque interface peut se voir attribuer plusieurs adresses locales et/ou

globales. Plus besoin, comme en IPv4, de créer des interfaces virtuelles ayant chacun

une adresse spécifique.

Depuis la machine Vivien, on peut envoyer une requête ICMPv6 ECHO vers l’adresse

globale de Vivien et ce, sans préciser l’interface par laquelle le message doit

transiter :

# ping6 -c3 2001::1:208:74ff:fe0c:1836 PING 2001::1:208:74ff:fe0c:1836(2001::1:208:74ff:fe0c:1836) 56 data bytes 64 bytes from 2001::1:208:74ff:fe0c:1836: icmp_seq=1 ttl=64 time=0.079 ms 64 bytes from 2001::1:208:74ff:fe0c:1836: icmp_seq=2 ttl=64 time=0.070 ms 64 bytes from 2001::1:208:74ff:fe0c:1836: icmp_seq=3 ttl=64 time=0.073 ms --- 2001::1:208:74ff:fe0c:1836 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 0.070/0.074/0.079/0.003 ms

En effet, il n’est plus nécessaire d’indiquer sur quelle interface nous souhaitons

envoyer la requête, car l’adresse est globale et le système utilise alors une table de

routage IPv6 ainsi qu’une table des voisins, comme nous le verrons dans la section

suivante.

Une fois que Julien s’est également attribué une adresse IPv6 Globale et que nous

avons ajouté un alias « julien-eth1-global » correspondant à cette adresse dans

le fichier /etc/hosts, nous pouvons aussi vérifier qu’il peut recevoir nos requêtes

ICMPv6 ECHO avec la commande ci-après.

Page 34: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

34

# ping6 -c3 julien-eth1-global PING julien-eth1-global(julien-eth1-global) 56 data bytes 64 bytes from julien-eth1-global: icmp_seq=1 ttl=64 time=1.48 ms 64 bytes from julien-eth1-global: icmp_seq=2 ttl=64 time=0.211 ms 64 bytes from julien-eth1-global: icmp_seq=3 ttl=64 time=0.224 ms --- julien-global ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2001ms rtt min/avg/max/mdev = 0.211/0.639/1.484/0.597 ms

Les adresses globales unicast des machines Vivien et Julien sont donc correctement

configurées. Nous allons maintenant pouvoir étudier le fonctionnement des

mécanismes de table de routage et de voisinage IPv6, permettant l’envoi de

messages vers des adresses globales.

10. La table de routage IPv6

Tout comme pour IPv4, les machines fonctionnant en IPv6 ont besoin d’une table de

routage afin de savoir où rediriger les paquets adressés à une machine en

particulier.

Pour observer le contenu de la table de routage IPv6 sur une machine, on peut

utiliser la commande ip -6 route show dev eth1 comme ci-après.

# ip -6 route show dev eth1 Kernel IPv6 routing table Destination Next Hop Flags Metric Ref Use Iface 2001:0:0:1::/64 :: U 256 0 0 eth1 fe80::/64 :: U 256 0 0 eth1 ff00::/8 :: U 256 0 0 eth1

Remarque : il n’est pas obligatoire de préciser dev ifacename, dans ce cas la table de

routage affichée sera la table IPv6 pour toutes les interfaces de la machine. On peut

également utiliser au choix, pour obtenir ce même résultat, route -6 ou route –A

inet6.

On remarque que la table de routage contient uniquement les informations sur les

adresses globales et les adresses standard de multicast (fe80 pour les adresses de

lien local par défaut, et ff00 pour l’envoi de messages multicast permettant la

détection de services sur le réseau, comme les routeurs ou les autres ordinateurs).

Remarque : pour ajouter manuellement une entrée dans la table IPv6 de la machine, par

exemple si aucun routeur n’a été trouvé mais qu’il existe un moyen d’atteindre un réseau

Page 35: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

35

via une passerelle connue manuellement, alors on peut utiliser la commande : ip -6

route add <réseauipv6>/<longueurdupréfixe> via <adresseipv6>

[dev <périphérique>]. Notez que cette façon de procéder est très proche de

celle utilisée en IPv4, mais utilise le switch -6 au lieu du switch (inclus par défaut) -4.

11. La table de voisinage et sa découverte

1. Pourquoi une table des voisins

Lorsqu’une machine veut envoyer des paquets IP à une autre, elle a besoin de

déterminer en premier l’adresse matérielle (adresse MAC) de la machine destination,

faute de quoi le paquet ne sera pas reçu par la machine distante.

En effet, chaque paquet émis sur un réseau Ethernet contient une information de

paquet Ethernet, puis des informations de paquet inhérentes au protocole utilisé.

Pour qu’un paquet IP soit interprété par une machine, il faut que le paquet Ethernet

soit adressé à la bonne adresse, afin que le paquet IP puisse ensuite être traité, et lui-

même vérifié.

Aussi, il est indispensable de pouvoir effectuer une résolution MAC<->IP, que le

protocole utilisé soit IPv4 ou IPv6. En IPv4, on avait alors inventé le protocole ARP

(Address Resolution Protocol), qui permettait, via un paquet émis en broadcast

Ethernet, de demander à une machine du réseau d’indiquer l’adresse matérielle à

laquelle devait être transmis un message adressé à une certaine adresse IP.

Dans ce cas, si le message devait être retransmis par un routeur, le routeur

répondant en donnant l’adresse MAC de son interface. SI la machine était

directement connectée par le réseau, celle-ci envoyait son adresse MAC.

Ce procédé, fastidieux, était très consommateur en bande passante et relativement

peu fiable : il était possible d’indiquer de fausses informations à la machine

émettrice du paquet. Ce procédé permettait alors de détourner les informations

reçues.

En IPv6, afin de remplacer le fonctionnement archaïque de ce procédé, a été inventé

un principe dit de « table des voisins » (neighbors table). La sous-section suivante

précise les modalités de fonctionnement de cette table, et la façon dont elle peut

être administrée manuellement.

Page 36: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

36

2. Visualiser la table des voisins

Pour visualiser la table des voisins, on utilise la commande suivante :

# ip -6 neigh show

On remarque que notre table des voisins ne contient actuellement pas d’entrée, ni

sur le PC de Julien, ni sur celui de Vivien. En revanche, si on ping Julien depuis la

machine Vivien avec la commande :

# ping6 –c 3 julien-eth1-global PING julien-eth1-global(julien-eth1-global) 56 data bytes 64 bytes from julien-eth1-global: icmp_seq=1 ttl=64 time=4.15 ms 64 bytes from julien-eth1-global: icmp_seq=2 ttl=64 time=0.217 ms 64 bytes from julien-eth1-global: icmp_seq=3 ttl=64 time=0.214 ms --- julien-eth1-global ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2007ms rtt min/avg/max/mdev = 0.214/1.529/4.156/1.857 ms

Si on observe rapidement la table des voisins après cette requête, on obtient le

résultat suivant :

# ip -6 neigh show 2001::1:208:74ff:fe0c:19e2 dev eth1 lladdr 00:08:74:0c:19:e2 nud stale

Cette entrée indique que pour joindre l’adresse IPv6

2001::1:208:74ff:fe0c:19e2, il faut utiliser l’interface eth1 et que l’adresse

locale au lien (lladdr, ou hardware address) est 00:08:74:0c:19:e2 (son adresse

mac). « stale » signifie que l’entrée n’est pas très récente, donc que les informations

peuvent être périmées.

De plus, en faisant une capture ethereal des informations échangées lors de ce

ping, on observe que deux paquets de voisinage (neighbor discovery et neighbor

advertisement) sont échangés, comme le montre les copies d’écran ci-après.

Page 37: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

37

Si on regarde, après moins de une minute, la table des voisins de nouveau :

# ip -6 neigh show

On observe qu’elle est de nouveau vide : les données ont expirées.

3. Modification manuelle des la table des voisins

Tout comme on peut ajouter et supprimer manuellement des entrées dans une

table ARP, il est possible de faire la même chose avec la table des voisins.

L’intérêt de l’ajout d’une entrée statique est la suivante : imaginons que l’on

souhaite réduire le trafic inutile sur le réseau et que la topologie réseau change

rarement, par exemple qu’un routeur soit présent en permanence sur le réseau.

Afin d’éviter que des paquets de neighbor discovery soient envoyés fréquemment

pour demander au routeur son adresse MAC, il est possible que l’on souhaite ajouter

une entrée persistante donnant ces informations.

Figure 12 - Neighbor sollicitation

Figure 11 - Neighbor Advertisement en réponse à la sollicitation

Page 38: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

38

En revanche, ce procédé peut présenter une limitation dans le cas de changement

de matériel : l’entrée ne sert alors plus ou, pire, contient des informations erronées

empêchant alors de communiquer avec le routeur.

Pour ajouter une entrée statique dans la table des voisins, il suffit d’utiliser la

commande :

# ip -6 neigh add fe80::208:74ff:fe0c:19e2 lladdr 00:08:74:0c:19:e2 dev eth1

Grâce à cette commande, nous avons ajouté une entrée statique pour pouvoir

contacter la machine de Julien depuis celle de Vivien. Cette entrée permet de ne

plus avoir à faire de neighbor discovery entre Vivien et Julien.

Cependant, si on commet une faute, par exemple en entrant une association

adresse IP/adresse MAC non valide :

# ip -6 neigh add 2001::1:208:74ff:fe0c:8080 lladdr 00:08:74:0c:19:e2 dev eth1 # ip -6 neigh show 2001::1:208:74ff:fe0c:8080 dev eth1 lladdr 00:08:74:0c:19:e2 nud permanent

L’entrée est, cette fois, marquée comme « permanent » car elle n’a pas de durée

d’expiration. Cependant, si on essaye d’envoyer un paquet vers l’adresse IPv6 ainsi

définie, on observe qu’aucune communication n’est possible. La capture ethereal

suivante nous l’indique d’ailleurs :

En effet, la carte réseau eth1 de la machine de Julien reçoit bien le paquet qui lui est

adressé au niveau Ethernet, mais qui ne lui est pas adressé au niveau IPv6 (couche

supérieure). Aussi, le paquet n’est pas accepté par la machine de Julien et toute

communication est rendue impossible.

Pour supprimer cette entrée non fonctionnelle, il nous suffit d’utiliser la commande

suivante :

# ip -6 neigh del 2001::1:208:74ff:fe0c:8080 lladdr 00:08:74:0c:19:e2 dev eth1

Figure 13 - ICMPv6 ECHO infructueux car bonne adresse MAC mais adresse IPv6 incorrecte

Page 39: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

39

4. Routage et configuration automatique en IPv6

Il existe trois types d’auto-configuration d’adresse avec IPv6 :

• L’auto-configuration sans état ou stateless : C’est le mécanisme de lien local

que nous avons décris dans une section précédente. L’adresse est générée à

l’activation de l’interface à partir de l’adresse MAC de l’interface ;

• L’auto-configuration avec DHCP6 : Ce type d’auto-configuration n’a pas été

étudié lors du tp IPv6 ;

• L’auto-configuration avec état ou statefull, où l’adresse est fournie par le

démon d’annonce de routeur : c’est ce type d’auto-configuration que nous

allons décrire ci-après.

L’auto-configuration avec état est possible grâce à un démon d’annonce de routeur

nommé radvd pour « Router Advertisement demon ». Il faut donc configurer ce

démon en spécifiant des informations qui seront transmises aux clients.

L’information indispensable est le préfixe de l’adresse. Après une configuration

convenable, le démon émet des annonces au travers des interfaces spécifiées, dans

l'espoir que les clients les reçoivent et auto-configurent comme par magie leurs

adresses avec le préfixe reçu et le routeur par défaut. Le démon doit tourner sur la

passerelle IPv6 par défaut.

Nous allons donc configurer la passerelle. Tout d’abord, il faut activer les options de

routage IPv6 avec les commandes suivantes :

# echo 1 >/proc/sys/net/ipv6/conf/all/forwarding # echo 1 > /proc/sys/net/ipv6/conf/eth0/accept_redirects

On attribue ensuite une nouvelle adresse à la passerelle avec la commande

suivante :

# ip -6 addr add 2001:1512:3201:2514:210:a7ff:fe1b:5dc2/64 dev eth0

On peut maintenant débuter la configuration de radvd. La première chose à faire

est d’installer le démon avec la commande habituelle :

Page 40: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

40

# apt-get install radvd

Il nous reste plus qu’à modifier le fichier de configuration qui se trouve à

l’emplacement /etc/radvd.conf. Il est à noter que le fichier n’existe pas à

l’installation du démon et qu’il faut donc le créer lors de la première configuration.

interface eth0 { AdvSendAdvert on; prefix 2001:1512:3201:2514::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr on; }; };

• AdvSendAdvert on : Active l’émission des annonces ;

• prefix 2001:1512:3201:2514::/64 : Indique que le préfixe de l’adresse

est 2001:1512:3201:2514::/64 ;

• AdvOnLink on : Active dans l’annonce le bit précisant que le routeur se

trouve sur le même lien local;

• AdvAutonomous on : Active dans l’annonce le bit précisant que le routeur

est un système autonome;

• AdvRouterAddr on : Indique que l’annonce doit contenir l’adresse du

routeur au lieu de l’adresse de réseau. Ceci est utile pour les réseaux équipés

de plusieurs routeurs, mais est surtout indispensable pour les réseaux IPv6

Mobiles, où l’adresse de réseau est toujours la même mais où le routeur à

utiliser peut changer fréquemment.

La configuration terminée, il faut redémarrer le démon pour prendre en compte les

modifications :

# /etc/init.d/radvd restart

La passerelle est maintenant prête, il faut maintenant configurer les clients pour

qu’ils puissent se configurer via les annonces envoyés par le démon de la passerelle.

Il faut d’abord activer l’auto-configuration ainsi que la découverte automatique de la

route par défaut :

Page 41: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

41

# echo 1 > /proc/sys/net/ipv6/conf/eth0/autoconf # echo 1 > /proc/sys/net/ipv6/conf/eth0/accept_ra # echo 1 > /proc/sys/net/ipv6/conf/eth0/accept_redirects

Pour finir, on récupère les nouveaux paramètres via la commande :

# dhclient eth0

Nous avons capturé les paquets transmis lors de l’exécution de la commande ci-

avant afin de comprendre les mécanismes.

Figure 14 - Exemple de Neighbor solicitation

On note que deux types de paquets sont envoyés :

• Router solicitation ou sollicitation du routeur : ce message est émis

par un équipement au démarrage ou lors d'un renouvellement d'adresse

avec dhclient pour recevoir plus rapidement des informations du routeur.

Ce message est émis vers l'adresse IPv6 de multicast réservée aux routeurs

du même lien ff02::2. Il est émis par l'adresse lien-local de l'équipement ;

• Router advertisement ou annonce du routeur : ce message est émis

périodiquement par les routeurs ou en réponse à un message de

sollicitation du routeur. L'adresse source est celle du poste sur lequel le

Page 42: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

42

démon radvd a été configuré : pour notre exemple, le routeur d'annonce

2001::1:208:74ff:fe0c:19E2.

Figure 15 - Exemple de Router advertisement

L'adresse de destination est l’adresse de l’émetteur lorsqu’un client requête

directement le serveur comme sur la Figure 16 ou comme sur l’exemple de la Figure

17, ff02::1 ce qui correspond à l'adresse multicast de sollicitation de lien-local.

Voici la configuration obtenue par le poste client après l'exécution de la commande

dhclient :

# ifconfig [...] eth1 Lien encap:Ethernet HWaddr 00:08:74:0C:18:36 inet adr:172.17.4.5 Bcast:172.17.255.255 Masque:255.255.0.0 adr inet6: 2001:470:1f01:1908:208:74ff:fe0c:1836/64 Scope:Global >> adr inet6: 2001:1512:3201:2514:208:74ff:fe0c:1836/64 Scope:Global adr inet6: fe80::208:74ff:fe0c:1836/64 Scope:Lien UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3024 errors:0 dropped:0 overruns:1 frame:0 TX packets:1455 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:1000 RX bytes:1681800 (1.6 MiB) TX bytes:232902 (227.4 KiB) Interruption:177 Adresse de base:0x800 [...]

Vous pouvez constater que ce poste a désormais une adresse IPv6 de plus car c'est

le routeur d'annonce qui lui a envoyé le préfixe de son adresse globale. Cette

Page 43: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

43

nouvelle adresse est composée du préfixe envoyé par le démon ainsi que du suffixe

calculé à partir de l’adresse MAC de l’interface :

2001:1512:3201:2514:208:74ff:fe0c:1836/64.

Ce concept d'auto-configuration peut donc permettre de paramétrer tout un réseau

en ne configurant que le routeur d'annonce, les postes clients obtenant

automatiquement leur propre configuration.

Nous avons ensuite relié ensemble les machines Vivien et Florence, pour pouvoir

communiquer entre Julien et Aurélia via la backbone et le routage des deux

machines.

Cette opération n’a cependant pu être vérifiée. Pour la mettre en œuvre, il nous a

suffit de configurer les interfaces eth0 de Vivien et Florence manuellement, de sorte

qu’ils soient sur le même réseau et puissent communiquer entre eux. En revanche,

aucune configuration de Julien ni Aurélia n’a été nécessaire, dans la mesure où ils

utilisent respectivement Vivien et Florence comme route par défaut pour les

adresses non connues.

Page 44: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

44

5. Aller plus loin : utilisation d’IPSec

Les travaux concernant IPv6 ont débouché, comme le précise la première section de

ce document, sur la création de nombreuses normes visant à sécuriser les

communications au niveau IP. Ceci permet, à terme, de garantir une sécurisation

uniforme de l’ensemble des protocoles réseaux.

Ainsi, la spécification IPSec permet de sécuriser des messages IPv6 en les chiffrant

avant émission et en assurant leur déchiffrement lors de la réception. Ce procédé

automatique permet de garantir une sécurité dépendant de la couche réseau IP et

non de la couche applicative.

Ainsi, on peut sécuriser de vieilles applications comme Telnet ou encore FTP, qui

n’ont pas été prévus pour être sécurisés en standard et où les seuls possibilités de

sécurisation se trouve au niveau des couches logicielles.

Sous Linux, mettre en place une stratégie de sécurité IPSec est relativement simple.

Cette section va montrer comment configurer les deux machines assurant la

sécurité des communications et la force de la technologie IPSec.

Remarque : suite à de nombreux travaux de portabilité, la spécification IPSec a

également été portée en IPv4. Cependant, il s’agit d’une surcouche de la norme initiale,

qui a été ajoutée pour utiliser IPSec sans passer à IPv6.

Cet exercice n’a pu être achevé faute de temps nécessaire à la mise en place du processus

de tests.

Page 45: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

45

Conclusion

Cette séance de travaux pratiques nous a permis de prendre un premier contact

avec le protocole IPv6 et ses spécificités par rapport à IPv4. Elle nous a permis, en

outre, de connaître la technologie et de configurer simplement un réseau avec

routage matériel par machine.

Cependant, ceci ne suffit pas en soit à être un expert IPv6, mais permet de pouvoir

aborder plus facilement cette technologie en entreprise, ou en prévision de la

migration technologique d’internet à ce protocole.

Il est cependant dommage que peu de temps ai pu être alloué à la rédaction de ce

rapport en comparaison avec les autres groupes de travail, dans la mesure où une

semaine et demie a été allouée à sa rédaction, contre 5 semaines pour certains

groupes.

Page 46: Rapport TP IPv6 rev4 · 2008-10-08 · IPv6 alors que ces besoins sont également présents en IPv4, la plupart de ces technologies ont été portées en IPv4 : • IPSec a été

Julien HERR TP IPv6 Vivien BOISTUAUD Ingénieurs 2000 - IR3 – 2007-2008

46

Références bibliographiques

IPv6, O’Reilly, site web accompagnant l’ouvrage : http://livre.point6.net