MOOC:Compagnon Act14-s7
From Livre IPv6
Activité 14 : L'utilisation des adresses sur une interface réeseau
Lors de l'activité précédente nous avons vu que les adresses unicast sont construites hiérachiquement. Un premier niveau de hiérarchisation découpe l'adresse en deux parties logiques, un préfixe réseau/sous-réseau, qui sera utilisé pour acheminer le datagramme à travers le réseau, et un identifiant d'interface qui sera utilisé sur le dernier saut pour remettre le datagramme à l'interface de destination.
Identifiant d'interface
Les identifiants d'interface des adresses unicast sont utilisés pour identifier de manière unique les interfaces des équipements sur un lien ou un domaine de diffusion de niveau 2 (VLAN). Ils doivent absolument être uniques pour le domaine couvert par un sous réseau. Toutefois l'unicité d'un identifiant d'interface peut être de portée beaucoup plus large, voire globale, à l'image des adresses MAC dont l'unicité est mondiale. Dans certains cas l'identifiant d'interface sera dérivé directement de l'adresse de niveau liaison de données (adresse MAC de la carte ethernet par exemple).
Pour les adresses unicast, à l'exception des adresses non
spécifiées ou de l'adresse de bouclage (loopback) (celles
commençant par 000), l'identifiant d'interface doit avoir une
longueur de 64 bits. La taille de 64 bits permet d'approcher une
probabilité de conflit quasi nulle.
Si initialement pour des raisons d'auto-configuration,
l'identifiant d'interface devait toujours être dérivé de l'adresse
de niveau 2, c'est de moins en moins le cas. Il existe plusieurs
méthodes pour construire cette valeur de 64 bits:
- manuelle,
- basée sur l'adresse de niveau 2 de l'interface,
- aléatoire,
- cryptographique.
Manuel
Pour les serveurs les plus utilisés, il est préférable d'assigner manuellement des adresses aux interfaces, car dans ce cas l'adresse IPv6 est facilement mémorisable, et le serveur peut être accessible même si le DNS n'est pas actif.
Nota : Le résolveur DNS est
le cas le plus flagrant; chaque machine sur le réseau doit être
configurée avec l'adresse IPv6 du serveur DNS. En cas de changement
de carte réseau, l'ensemble des machines du domaine devront être
reconfigurées. Si l'on ne souhaite pas utiliser des protocoles de
configuration automatique de type DHCPv6, il est préférable
d'attribuer au résolveur DNS une adresse manuelle.
Il existe plusieurs techniques plus ou moins mnémotechniques
- incrémenter l'identifiant d'interface à chaque nouveau serveur créé
2001:DB8:1234:1::1
2001:DB8:1234:1::2
- reprendre le dernier octet de l'adresse IPv4 comme identifiant d'interface. Par exemple si un serveur a comme adresse IPv4 192.0.2.123, son adresse IPv6 sera :
2001:DB8:1234:1::7B
ou
plus simplement
2001:DB8:1234:1::123
- reprendre l'adresse IPv4 comme identifiant d'interface, bien que cela ait l'inconvénient de conduire à des adresses plus longues à taper :
2001:DB8:1234:1::192.0.2.123
Dérivé de l'adresse matérielle de l'interface
L'avantage d'utiliser une adresse de niveau 2 pour construire un identifiant d'interface est que l'unicité de cette valeur est presque toujours assurée. En plus, cette valeur est stable tant que la carte réseau de la machine n'est pas changée. Par contre, ces valeurs sont difficilement mémorisables.
Les adresses lien-local sont construites en utilisant ce type
d'identifiant. Par contre pour les adresses globales, il est
conseillé de ne les utiliser que pour les machines client et de
préférer les identifiants d'interface manuels pour les serveurs.
Ces identifiants d'interface étant stables dans le temps, à
chaque fois qu'un individu change de réseau, il change de préfixe,
mais garde le même identifiant d'interface. Ce dernier pourrait donc
servir à tracer les déplacements d'un individu. Le risque est
faible, car les cookies mis en place par les serveurs web sont bien
plus efficaces, mais ils ne s'agit plus d'un problème réseau. Autre
désavantage, comme les adresses MAC contiennent l'identification du
matériel, il est possible d'indiquer à l'exterieur du réseau quel
type de materiel est utilisé et donner des indications.
Si ces inconvénients sont jugés importants par l'entreprise,
l'identifiant d'interface pour les adresses globales peut être
généré aléatoirement.
EUI-64
L'IEEE a défini un identificateur global à 64 bits (format EUI-64) pour les réseaux IEEE 1394 (firewire) ou IEEE 802.15.4 (réseau de capteurs) qui vise une utilisation dans le domaine de la domotique. L'IEEE décrit les règles qui permettent de passer d'un identifiant MAC codé sur 48 bits à un EUI-64.
Il existe plusieurs méthodes pour construire l'identifiant :
- Si une machine ou une interface possède un identificateur global IEEE EUI-64, celui-ci a la structure décrite figure Identificateur global IEEE EUI-64. (schema)
Les 24 premiers bits de l'EUI-64, comme pour les adresses MAC IEEE 802, identifient le constructeur et les 40 autres bits identifient le numéro de série (les adresses MAC IEEE 802 n'en utilisaient que 24). Les 2 bits u (septième bit du premier octet) et g (huitième bit du premier octet) ont une signification spéciale :
- u
(Universel) vaut 0 si l'identifiant EUI-64 est universel,
- g
(Groupe) indique si l'adresse est individuelle (g = 0), c'est-à-dire
désigne un seul équipement sur le réseau, ou de groupe (g = 1),
par exemple une adresse de multicast.
L'identifiant d'interface à 64 bits
est dérivé de l'EUI-64 en inversant le bit u (cf. figure
Identificateur d'interface dérivé d'une EUI-64). En effet, pour la
construction des adresses IPv6, on a préféré utiliser 1 pour
marquer l'unicité mondiale. Cette inversion de la sémantique du bit
permet de garder la valeur 0 pour une numérotation manuelle,
autorisant à numéroter simplement les interfaces locales à partir
de 1.
MAC-48
Si une interface possède une adresse MAC IEEE 802 à 48 bits universelle (cas des interfaces Ethernet ou Wi-Fi). L'adresse est tout d'abord convertie en EUI-64, par l'insertion de 16 bits à la valeur 0xfffe, puis le bit u est mis à 1 comme dans le cas précédent. La figure ci-contre illustre ce processus.
Cas Particuliers
Si une interface ne possède aucune adresse (par exemple l'interface utilisée pour les liaisons PPP), et si la machine n'a pas d'identifiant EUI-64, il n'y a pas de méthode unique pour créer un identifiant d'interface. La méthode conseillée est d'utiliser l'identifiant d'une autre interface si c'est possible (cas d'une autre interface qui a une adresse MAC), ou une configuration manuelle ou bien une génération aléatoire, avec le bit u positionné à 0. S'il y a conflit (les deux extrémités ont choisi la même valeur), il sera détecté lors de l'initialisation de l'adresse lien-local de l'interface, et devra être résolu manuellement.
Valeur aléatoire
L'identifiant d'interface basé sur des adresses MAC, comme indiqué précédemment, pourrait poser des problèmes pour la vie privée. Il identifie fortement la machine d'un utilisateur, qui même s'il se déplace de réseau en réseau garde ce même identifiant. Il serait alors possible de traquer un individu utilisant un portable, chez lui, au bureau, lors de ses déplacements. Ce problème est similaire à l'identificateur placé dans les processeurs Pentium III.
Pour couper court à toute menace de boycott d'un protocole qui «
menacerait la vie privée », il a été proposé d'autres
algorithmes de construction d'un identifiant d'interface basé sur
des tirages aléatoires (voir RFC 3041). Un utilisateur
particulièrement méfiant pourrait valider ces mécanismes.
L'identifiant d'interface est soit choisi aléatoirement, soit
construit par un algorithme comme MD5 à partir des valeurs
précédentes, soit tiré au hasard si l'équipement ne peut pas
mémoriser d'information entre deux démarrages. Périodiquement
l'adresse est mise dans l'état « déprécié » et un nouvel
identifiant d'interface est choisi. Les connexions déjà établies
continuent d'utiliser l'ancienne valeur tandis que les nouvelles
connexions utilisent la nouvelle adresse.
Cette solution a été adoptée par Microsoft. Dans Windows XP,
l'interface possède deux adresses IPv6 globale. La première a un
identifiant d'interface dérivé de l'adresse MAC. Elle sert aux
applications attendant des connexions sur la machine (i.e. les
applications serveur). Cette adresse est stable et peut être publiée
dans le DNS. La seconde possède un identifiant d'interface tiré
aléatoirement. Elle est changée tous les jours et sert aux
applications client. Dans Windows 7, ce comportement est généralisé
car l'identifiant d'interface de l'adresse permanente est également
issu d'un tirage aléatoire. Cela permet d'éviter de donner la
marque de la machine ou le type de carte contenu dans les premiers
octets de l'identifiant d'interface. Elle est également présente,
mais de manière optionnelle, sur Linux et les système
d'exploitation BSD comme Mac OS.
Bien entendu pour que ces mécanismes aient un sens, il faut que
l'équipement ne s'enregistre pas sous un même nom dans un serveur
DNS inverse ou que l'enregistrement de cookies dans un navigateur Web
pour identifier l'utilisateur soit impossible.
En contre partie, il est plus difficile à un administrateur
réseau de filtrer les machines puisque celles-ci changent
périodiquement d'adresses.
File:Livre-G6-Windows7-IIDalea.png
Cryptographique
Si un identifiant aléatoire permet de rendre beaucoup plus anonyme la source du paquet, des propositions sont faites à l'IETF pour lier l'identifiant d'interface à la clé publique de l'émetteur du paquet. Le RFC 3972 définit le principe de création de l'identifiant d'interface (CGA : Cryptographic Generated Addresses) à partir de la clé publique de la machine. Elles pourraient servir pour sécuriser les protocoles de découverte de voisins ou pour la gestion de la multi-domiciliation.
Adressage multiple des interfaces
Les interafaces des équipements disposent simultanément de plusieurs adresses. Ainsi, comme nous l'avons vu dans l'activité précédente, une interface dispose au moins d'une adresse purement locale sur son lien de rattachement (l'adresse lien local). Selon la nature de ce lien de rattachement (liaison point à point, domaine de diffusion ethernet filaire ou wifi, ...) l'interface peut également disposer d'une (ou plusieurs) adresse(s) routables soit localement (cas des adresses ULA) soit globalement (cas des adresses gloables), en associant le préfixe du lien support à l'identifiant d'interface.