Difference between revisions of "MOOC:Compagnon Act14-s7"

From Livre IPv6

(Valeur temporaire aléatoire)
 
(254 intermediate revisions by 6 users not shown)
Line 1: Line 1:
__NOTOC__                
+
__NOTOC__
 +
<!-- = Activité 14  : L'utilisation des adresses sur une interface = -->
 +
= Activité 14  : Plan d'adressage IPv6 unicast =
 +
<!-- {{Approfondissement}} -->
 +
== Introduction ==
 +
Lors de l'activité précédente, nous avons vu que les adresses IP unicast sont construites en combinant 2 éléments (voir la figure 1). Le premier élément vise à  localiser le réseau dans l'Internet. Il sert à l'acheminement des paquets à travers l'Internet ou à travers l'interconnexion pour les infrastructures privatives. Le second élément identifie l'interface au sein de son réseau. Il sert à la remise directe du paquet à l'interface de destination sur le dernier saut de l'acheminement.
 +
Dans cette activité, nous nous intéressons à la construction de ces adresses unicast. Pour la partie préfixe de réseau, il s'agit de définir un plan d'adressage. Ce plan d'adressage est organisé de manière hiérarchique afin de permettre la délégation pour une gestion décentralisée mais aussi rendre les préfixes agrégables. L'objectif, dans ce dernier cas, est de constituer des tables de routage les plus concises possibles. Pour IPv6, vu la taille de l'espace d'adressage, cette caractéristique d'agrégation est essentielle. Dans cette activité, nous allons indiquer les différentes façons de numéroter les réseaux.
 +
Pour la partie identifiant d'interface, l'objectif est de définir un identifiant, si possible automatiquement, qui soit unique au sein du lien. Nous allons étudier les différentes techniques de constructions de ces identifiants.
 +
Mais avant, nous allons rappeler une caractéristique d'IPv6 dans l'utilisation des adresses unicast, à savoir la possibilité d'avoir plusieurs adresses unicast allouées à une interface de communication. Ces adresses multiples peuvent être utilisées simultanément ou l'une après l'autre. Un mécanisme de vieillissement est donc nécessaire pour limiter la validité d'une adresse.
  
= Activité 14  : L'utilisation des adresses sur une interface réseau =
+
azerty [[#cas particulier des liaisons point à point]]
= Introduction =
+
Nous allons appréhender les différents modes de construction des identifiants d'interface pour des adresses unicast.
+
Puis nous nous observerons l'intérêt de la durée de vie et du choix d'une valeur aléatoire.
+
  
=== Structure de l'adressage ===
 
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.
 
 
<center>
 
<center>
[[Image:activite-14-adresses-interface-reseau-img01-850x199-v20151017-01.jpg|600px|thumb| Figure 1 : Hiérarchisation de l'adresse unicast en deux parties logiques.]]  
+
[[Image:activite-14-adresses-interface-reseau-img01-850x199-v20151017-01.jpg|400px|thumb|center| Figure 1 : Hiérarchisation de l'adresse unicast en deux parties logiques.]]  
 
</center>
 
</center>
=== Identifiant d'interface ===
+
 
 +
Enfin, pour conclure cette introduction, signalons que les conseils donnés par  RIPE NCC sont précieux pour toutes personnes amenées à concevoir un plan d'adressage<ref>RIPE NCC (2013), publiée sous licence CC-BY par Surfnet (www.surfnet.nl) [https://www.ripe.net/support/training/material/IPv6-for-LIRs-Training-Course/Preparing-an-IPv6-Addressing-Plan.pdf ''Preparing an IPv6 address plan'']</ref>. L'IETF a également édité un recueil de conseils pour le déploiement d'un réseau IPv6 par le RFC 7381.
 +
 
 +
== Adressage multiple des interfaces ==
 +
 
 +
En IPv6, les interfaces de communication des nœuds disposent simultanément de plusieurs adresses. En effet, une interface dispose au moins d'une adresse purement locale sur son lien local (l'adresse lien-local). Celle-ci est automatiquement affectée à l'interface lors de la phase d'activation de cette dernière par le système d'exploitation. Selon la nature du lien de rattachement (liaison point à point, domaine de diffusion ethernet filaire ou wifi...), l'interface peut également disposer d'une ou plusieurs adresses routables soit localement (cas des adresses ULA), soit globalement (cas des adresses publiques : GUA). Ces adresses unicast routables sont constituées en associant le préfixe réseau associé au lien  à l'identifiant d'interface. L'affectation de ces adresses routables peut être fait soit par l'administrateur système de la machine, soit par le réseau en s'appuyant sur les mécanismes d'auto-configuration "avec" ou "sans état", comme nous le verrons dans une séquence ultérieure. La figure 2 illustre l'adressage multiple d'une interface de communication pour un nœud.
 +
 
 +
<center>
 +
[[image:activite-14-adresses-interface-reseau-img06-719x277-v20170517-01.jpg|400px|thumb|center|Figure 2 : Adressage multiple d'une interface de communication.]]
 +
</center>
 +
 
 +
Nous savons, depuis l'activité "qu'est ce qu'une adresse IP ?", que les adresses IP ne sont pas permanentes. L'adresse IP a une durée de vie régie par des états. Ces états sont : provisoire, préféré, déprécié et invalide. Aussi, il faut comprendre qu'une adresse IP n'est allouée que temporairement à une interface. Il faut voir l'allocation comme un bail de location. Pour continuer d'utiliser une adresse IP, à l'expiration du bail, il faut procéder au renouvellement du bail. Ainsi, le système d'exploitation a en charge de renouveler périodiquement l'allocation d'une adresse IP en cours d'utilisation. Autrement, l'adresse passe dans l'état déprécié afin de rendre inutilisable cette adresse pour les nouvelles connexions et permettre de terminer les sessions et les connexions existantes. Il faut alors, dans un même temps, une nouvelle adresse valide pour les nouvelles connexions ou sessions applicatives.
 +
L'idée que les adresses IP sont allouées temporairement trouve sa motivation de rendre la renumérotation d'un réseau facile. La renumérotation d'un réseau consiste à remplacer un préfixe réseau par un autre. L'opération de renumérotation peut s'avérer nécessaire lorsque l'organisation change de fournisseur d'accès à Internet ou que le plan d'adressage est devenu obsolète. Il n'en reste pas moins que malgré les facilités qu'offrent IPv6, la renumérotation d'un réseau reste une opération périlleuse [RFC 5887].
 +
 
 +
== Nécessité d'organiser un plan d'adressage ==
 +
L'espace d'adressage IPv6 est « astronomiquement » grand. Il s'ensuit que le plan d'adressage unicast global adopté aujourd'hui est organisé hiérarchiquement. À l'instar du réseau téléphonique historique où les appels sont routés en fonction d'un préfixe national (exemple le +33 pour les appels vers la France), l'Internet est bâti selon une organisation hiérarchique. Cependant, cette hiérarchie n'est pas d'ordre géographique mais plutôt administrative et organisée en « régions » (Amérique du nord, Asie Pacifique, Europe,...). Chaque région est gérée par un registre Internet régional (''Regional Internet Registry'' ou RIR). Cette organisation se retrouve au moment de l'acheminement des datagrammes dans l'Internet.  Les opérateurs du cœur de l'Internet routent (aiguillent) les datagrammes selon les préfixes les plus courts. Les RIR leur attribuent des préfixes courts, car le rôle de ces opérateurs internationaux est d'acheminer les datagrammes vers les grandes zones régionales de l'Internet. Ces opérateurs délèguent ensuite à leur clients, registres locaux (LIR) ou opérateurs, des préfixes un peu plus longs, afin qu'eux même puissent déléguer des préfixes à leurs clients ou organisations utilisatrices pour acheminer les datagrammes vers leurs propres réseaux. Ainsi, un utilisateur final (organisation, entreprise ou particulier) se verra déléguer par son fournisseur d'accès à Internet (FAI) un préfixe d'une longueur comprise, en général, entre 48 et 64 bits. La zone de l'adresse, comprise entre la longueur du préfixe alloué par l'opérateur et la limite du /64 des adresses unicast est parfois qualifiée de SID (''Subnet ID''). En effet, elle permet à l'administrateur d'adresser entre un unique réseau (cas où le client a obtenu un préfixe /64 de son FAI) et 65536 réseaux (cas où le client a obtenu délégation administrative de son FAI sur un préfixe /48 : il dispose alors de 16 bits (entre 48 et 64) pour numéroter 2 puissance 16 soit 65536 réseaux). C'est cet espace d'adressage dont l'administrateur réseau a la responsabilité. Il s'agit pour lui d'organiser cet espace pour déployer efficacement les réseaux de son organisation. Nous allons maintenant présenter différents modes d'organisation possibles en nous appuyant sur le RFC 5375.
 +
 
 +
== Politique d'assignation des adresses ==
 +
Les spécifications primitives d'assignation des adresses [RFC 3177] aux utilisateurs finaux recommandaient d'allouer :
 +
* /48 (65536 sous-réseaux) dans le cas général,
 +
* /64 (un sous-réseau unique) lorsqu'un et un seul réseau physique était nécessaire,
 +
* /128 (adresse unique) lorsqu'il était absolument connu qu'un et un seul équipement était connecté.
 +
 
 +
Le RFC 6177, également connu sous BCP157 (''Best Current Practice''), est venu remettre en cause les certitudes initiales et le « /48 pour tout le monde » n'est plus la recommandation officielle. La taille du préfixe est maintenant laissée à la discrétion du fournisseur avec la recommandation « floue » d'allouer un bloc d'adresses adapté aux besoins de l'utilisateur en évitant l'allocation d'un réseau unique. Ainsi, si un /48 est adapté pour un réseau de campus, il est clairement surdimensionné dans le cadre d'un usage domestique. Inversement, le réseau unique en /64 est notablement insuffisant ; les besoins actuels et futurs de la plupart des foyers nécessiteront sans doute quelques réseaux cloisonnés en fonction des usages : réseau général (accès internet, les réseaux sociaux, le multimédia...), réseau domotique (lave-linge, sèche-linge, réfrigérateur...), réseau de commande périmétrique (volets, alarme, chauffage, aquarium...), sans parler des promesses médiatiques de l'Internet des objets (IoT ''Internet of Things''). Pour les utilisateurs dits « grand public » ou les sites de taille modeste, un préfixe /56 ou /60 semble donc plus approprié.
 +
 
 +
== Préfixes de sous-réseaux (SID Subnet IDentifier) ==
 +
 
 +
{{HorsTexte|Préfixes unicast, la frontière des 64 bits à ne pas dépasser !|'''Étendre le préfixe de sous réseau sur les bits de poids fort de l'identifiant d'interface IID (à la manière de l'antique''' '''''subneting''''' '''d'IPV4) n'est pas un bonne pratique''' et vous expose à des aléas de fonctionnement. En effet, si les protocoles de routage opèrent sur des préfixes de taille quelconque, les mécanismes de gestion des adresses (IPAM IP Address Management), quant à eux, et notamment ceux d'auto-configuration (SLAAC, DHCP...) sont construits sur une taille d'IID fixe à 64 bits. Ainsi, s'il est admis que l'on attribue des préfixes longs /112 ou /120 pour des liaisons point à point (cf. § "Cas particulier des liaisons point à point" ci dessous) ou que certains préfixes utilisés dans les mécanismes de cohabitation IPv6 / IPv4 que nous aborderons en séquence 4 soient de longueur /96, il s'agit de situations particulières pour lesquelles les interfaces sont administrativement gérées et ne dépendent pas des mécanismes d'auto-configuration.}}
 +
 
 +
Les sous-réseaux IPv6 doivent s'aligner sur les préfixes de longueur /64. Des tailles supérieures sont possibles, mais ne sont pas sans poser problème pour les mécanismes de contrôle tels que l'auto-configuration des adresses, couramment utilisée, et qui présupposent des préfixes des sous-réseaux alignés sur 64 bits. Ces mécanismes d'auto-configuration seront abordés dans une séquence ultérieure.
 +
 
 +
Ces préfixes de 64 bits sont construits à partir du préfixe global permettant le routage des paquets vers le réseau du site regroupant ces sous-réseaux. Le préfixe global est celui utilisé dans les tables de routage de l'opérateur connectant le site à Internet. À ce préfixe  global est ajouté la valeur identifiant le sous-réseau à l'intérieur du réseau du site. Cette valeur est définie sur le nombre de bits restant pour définir un préfixe unique de 64 bits. Ce préfixe sera utilisé dans les tables de routage internes au réseau du site. La figure 3 décrit cette hiérarchie de la partie préfixe de l'adresse.
 +
 
 +
<center>
 +
[[Image:activite-14-sid.png|400px|thumb|center| Figure 3 : Hiérarchisation de la partie préfixe.]]
 +
</center>
 +
 
 +
=== Représentation des subdivisions ===
 +
Dans la suite de cette activité, nous raisonnerons sur la base d'un préfixe de 48 bits (espace SID de 16 bits). Les exemples décrits sur la base d'adresses documentaires pourront ainsi illustrer aussi bien un contexte de réseaux publics (un préfixe /48 unicast global) qu'un réseau privatif (préfixe /48 d'adresse locale unique ULA). Cependant, les règles d'ingénierie présentées pourront également se décliner de manière plus limitée sur des préfixes plus longs /56 ou /60 avec un espace SID réduit à 8 ou 4 bits.
 +
{{HorsTexte|Appréciation de l'étendue d'un préfixe|Afin de visualiser l'étendue d'un préfixe (1re adresse, dernière adresse, nombre d'adresses...) d'après sa longueur, vous pouvez vous aider d'une calculatrice de préfixe CIDR telle que celle pointée à la rubrique [[#Ressources complémentaires]]  }}
 +
Nous supposons que le préfixe pour notre activité est <tt>2001:db8:cafe::/48</tt>. Le préfixe est  obtenu :
 +
* soit par allocation de notre fournisseur d'accès dans le cadre d'un adressage unicast global routable sur l'Internet public,
 +
* soit par algorithme conforme RFC 4193 dans la cadre d'un adressage privatif (ULA Unique unicast Local Address).
 +
Nous disposons donc d'une zone SID de 16 bits permettant de distinguer 65536 sous-réseaux possibles en préfixes de 64 bits (de <tt>2001:db8:cafe::/64</tt> à <tt>2001:db8:cafe:ffff::/64</tt>).
 +
 
 +
=== Convention de notation binaire du champ SID ===
 +
Dans cette présentation, nous adoptons les conventions de notation suivantes  pour les illustrations et exemples :
 +
Comme les 48 premiers bits sont administrativement fixés et que les 64 bits de poids faible sont réservés pour l'identification de l'interface, chaque référence de sous-réseau sera portée par les bits 48 à 63 (L'IETF numérote les bits en démarrant de zéro de la gauche (most significant : poids fort) à la droite (least significant : poids faible).<br>
 +
<br>Exemple :
 +
<center>
 +
<tt>2001:db8:cafe:{LLLLTTTTBBBBBBBB}::/64</tt><br>
 +
ou<br>
 +
<tt>2001:db8:cafe:ltbb::/64</tt>
 +
</center>
 +
 
 +
* Chaque lettre majuscule encadrée par '{' et '}' représente 1 bit du champ SID. 4 bits successifs représentent un quartet également appelé « nibble » ;<br>''(Un '''nibble''' (ou plus rarement '''nybble''') est, en informatique, un agrégat de 4 bits, soit un demi-octet. On trouve aussi les termes francisés '''semioctet''' ou '''quartet''' , source wikipédia [https://fr.wikipedia.org/wiki/Nibble https://fr.wikipedia.org/wiki/Nibble])''. Un quartet peut prendre une valeur entre 0 et 15 et peut se représenter par un chiffre hexadécimal (0..9, a..f) (cf. vademecum de notation hexadécimale) ;
 +
* Les chiffres et lettres minuscules ['a'..'f'] représentent la valeur hexadécimale d'un quartet ;
 +
* Dans cette présentation, nous subdivisons les 16 bits du SID en groupes distingués de la manière suivante :
 +
** B : bit non défini et assignable ;
 +
** L : bit assigné à l'identification de la localisation du sous-réseau ;
 +
** T : bit assigné à l'identification du type de sous-réseau.
 +
 
 +
Ainsi, l'exemple précédent où les 16 bits SID sont positionnés à la valeur <tt>{LLLLTTTTBBBBBBBB}</tt> produira des préfixes IPv6 du type <tt>2001:db8:ltbb::/64</tt>. Inversement, si l'on choisit de positionner les bits de "type de sous-réseau" sur le quartet de poids fort et les bits de localisation sur le quartet de poids faible du 1er octet SID de cette manière <tt>{TTTTLLLLBBBBBBBB}</tt>, cela produira un préfixe de type <tt>2001:db8:tlbb::/64</tt>.
 +
 
 +
Différentes stratégies d'allocation des valeurs de SID sont présentées en annexe. Un administrateur peut les mettre en pratique pour définir un plan d'adressage pour son réseau.
 +
 
 +
=== Cas particulier des liaisons point à point ===
 +
Les liaisons point à point, qu'elles soient concrètement louées auprès du service idoine d'un opérateur (liaison spécialisée, fibre noire...) pour assurer l'interconnexion de deux sites géographiquement distants, ou qu'elles soient logiquement établies sous forme de tunnels (IP dans IP, VPN MPLS, tunnel IPSec…) constituent un cas particulier. Dans le cas général, on peut allouer un préfixe /64 à chacune des liaisons. Cependant, sur des réseaux maillés où le nombre de liaisons point à point est quelconque, attribuer un /64 à chacune de ces liaisons n'est pas efficace. La caractéristique d'une liaison point à point est de relier uniquement une interface à chacune de ses extrémités, ne nécessitant, de fait, que deux identifiants distincts. De plus, ces liaisons sont administrées et ne sont, en général, pas tributaires d'un mécanisme d'auto-configuration. Aussi, attribuer un /64 offrant la possibilité d'adresser 2 puissance 64 interfaces à un support limité à deux, et uniquement deux interfaces, conduit à la perte de ((2 puissance 64) - 2) adresses qui resteront non attribuées. L'utilisation d'un /64 sur une liaison point à point peut conduire à des problèmes de sécurité (RFC 6164): soit sous la forme d'aller-retours de datagrammes sur cette liaison (syndrome de la balle de ping-pong) entraînant une congestion du support, ou soit sous la forme de déni de service des routeurs connectés au lien au travers d'une saturation des caches de découverte des voisins.
 +
À défaut d'un /64, quel est le préfixe approprié pour ce type de liaison ?
 +
* /127 serait possible dans la mesure où IPv6 n'a pas d'adresse de diffusion (identifiant de ''host'' tout à 1 dans le cas d'IPv4). Cependant, l'adresse tout à zéro de chaque sous-réseau est réservée comme l'adresse anycast des routeurs (''all routers anycast address''), ce qui signifie que la plupart des routeurs sont susceptibles de recevoir des datagrammes de service sur cette adresse.
 +
* /126 évite le problème de l'adresse anycast tout à zéro. Cependant, les 128 adresses hautes de chaque sous-réseau sont également réservées pour diverses adresses d'anycast (RFC 2526) ; bien que, dans la pratique, cela ne semble pas poser de problème.
 +
* /120 permet de s'affranchir des adresses anycast réservées.
 +
* /112 permet de s'affranchir des adresses anycast réservées et a, en plus, l'avantage d'être facilement lisible par les opérateurs humains car aligné sur le mot de 16 bits final (celui affiché après le dernier séparateur '':'', cf. activité 12 « Notation d'une adresse IPv6 »).
 +
 
 +
Le RFC 6164 recommande l'utilisation d'un préfixe de longueur /127 pour IPv6, ne permettant ainsi que deux adresses IP.
 +
 
 +
== Identification locale : l'IID (Interface IDentifier) ==
 
   
 
   
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).
+
Les identifiants d'interfaces 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.
+
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.
 +
 
 +
'''''Nota :''''' ''Il n'y a pas de valeur réservée pour les identifiants d'interface, les valeurs "tout à zéro" et "tout à 1" sont valides. Dans la pratique ces valeurs sont peu significatives et de fait généralement inutilisées. Ainsi pour un préfixe donné, par exemple : <tt>2001:db8:c0ca:c01a::/64</tt> ; les adresses <tt>2001:db8:c0ca:c01a::/64</tt> et <tt>2001:db8:c0ca:c01a:ffff:ffff:ffff:ffff/64</tt> sont valides et potentiellement assignables à une interface.''
 
   
 
   
Si initialement pour des raisons d'auto-configuration, l'identifiant d'interface devait nécessairement être dérivé de l'adresse de niveau 2 (adresse matérielle), c'est de moins en moins le cas. Il existe plusieurs méthodes pour construire cette valeur de 64 bits [RFC 4941]:
+
Si, initialement, pour des raisons d'auto-configuration, l'identifiant d'interface devait nécessairement être dérivé de l'adresse de niveau 2 (adresse matérielle), c'est de moins en moins le cas. Il existe plusieurs méthodes pour construire cette valeur de 64 bits [RFC 8981] :
 
   
 
   
* manuelle ;
+
* manuelle,
* basée sur l'adresse de niveau 2 de l'interface [RFC 4291];
+
* basée sur l'adresse de niveau 2 de l'interface [RFC 4291],
* aléatoire ;
+
* temporaire aléatoire [RFC 8981],
* cryptographique.
+
* stable opaque [RFC 7217]
 +
* cryptographique [RFC 3972].
 
   
 
   
 
==== Identifiant manuel ====
 
==== Identifiant 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.
+
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 emblématique. Chaque machine sur le réseau doit être configurée avec son client DNS pointant vers l'adresse du serveur DNS. Si celui ci a un identifiant d'interface basé sur l'adresse de niveau 2, en cas de changement de la carte réseau sur le serveur DNS, l'ensemble des machines du domaine devrait être reconfiguré. Si l'on ne souhaite pas utiliser de protocole de configuration automatique de tel DHCPv6, il est préférable d'attribuer au serveur DNS une valeur manuelle d'identifiant d'interface. Cette valeur statique sera stable dans le temps et pourra être utilisée pour référencer le résolveur DNS sur la configuration de l'ensemble des machines du réseau.''
+
''Nota : Le résolveur DNS est le cas le plus emblématique. Chaque machine sur le réseau doit être configurée avec son client DNS pointant vers l'adresse du serveur DNS. Si celui-ci a un identifiant d'interface basé sur l'adresse de niveau 2, en cas de changement de la carte réseau sur le serveur DNS, l'ensemble des machines du domaine devraient être reconfigurées. Si l'on ne souhaite pas utiliser de protocole de configuration automatique tel DHCPv6, il est préférable d'attribuer au serveur DNS une valeur manuelle d'identifiant d'interface. Cette valeur statique sera stable dans le temps et pourra être utilisée pour référencer le résolveur DNS sur la configuration de l'ensemble des machines du réseau.''
 
   
 
   
Il existe plusieurs techniques plus ou moins mnémotechniques
+
Il existe plusieurs techniques plus ou moins mnémotechniques :
 
   
 
   
* incrémenter l'identifiant d'interface à chaque nouveau serveur créé
+
* Incrémenter l'identifiant d'interface à chaque nouveau serveur créé.
 
<center>  
 
<center>  
 
<tt>2001:db8:1234:1::1<br>
 
<tt>2001:db8:1234:1::1<br>
Line 38: Line 119:
 
</center>
 
</center>
 
   
 
   
* 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 pourra être :
+
* 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 pourra être :
 
<center>
 
<center>
 
<tt>2001:db8:1234:1::7B</tt><br>
 
<tt>2001:db8:1234:1::7B</tt><br>
Line 47: Line 128:
 
</center>
 
</center>
 
   
 
   
* reprendre l'adresse IPv4 comme identifiant d'interface, bien que cela ait l'inconvénient de conduire à des adresses plus longues à saisir :
+
* Reprendre l'adresse IPv4 comme identifiant d'interface, bien que cela ait l'inconvénient de conduire à des adresses plus longues à saisir :
 
<center>
 
<center>
 
<tt>2001:db8:1234:1::192.0.2.123</tt>
 
<tt>2001:db8:1234:1::192.0.2.123</tt>
Line 54: Line 135:
 
==== Identifiant dérivé de l'adresse matérielle de l'interface ====
 
==== Identifiant dérivé de l'adresse matérielle de l'interface ====
 
   
 
   
L'avantage d'utiliser une adresse de niveau 2 pour construire un
+
<!--L'avantage d'utiliser une adresse de niveau 2 pour construire un
 
identifiant d'interface est que l'unicité de cette valeur est
 
identifiant d'interface est que l'unicité de cette valeur est
 
presque toujours assurée. En plus, cette valeur est stable tant que
 
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
 
la carte réseau de la machine n'est pas changée. Par contre, ces
valeurs sont difficilement mémorisables.
+
valeurs sont difficilement mémorisables. -->
+
Les caractéristiques des adresses matérielles de niveau 2 :
Les adresses lien-local sont, en général, construites en utilisant ce type
+
* unicité garantie sur le lien local,
d'identifiant. Par contre pour les adresses globales, il est
+
* stabilité tant que la carte réseau est inchangée,
conseillé de ne les utiliser que pour les machines clientes et de
+
sont des avantages pour la définition automatisée des identifiants d'interface. Cependant elles sont peu mémorisables pour l'administrateur.
préférer les identifiants d'interface manuels pour les serveurs.
+
 
+
Ces identifiants d'interfaces étant stables dans le temps, à
Ces identifiants d'interface étant stables dans le temps, à
+
chaque fois qu'un utilisateur nomade change de réseau, il change de préfixe,
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
 
mais garde le même identifiant d'interface. Ce dernier pourrait donc
servir à tracer les déplacements d'un individu. Ce sujet de traçabilité et de respect de la vie privée a fait l'objet d'une prise de conscience collective suite à une actualité récente (affaire Snowden, surveillance de masse par les états, écoute de la NSA,...). Mais la traçabilité par l'identifiant d'interface, n'en est qu'un des éléments, car les cookies mis en place par les serveurs web ou les recoupements des infos personnelles déposées sur les réseau sociaux 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
+
servir à tracer les déplacements d'un individu<ref>Internet society. (2014) Deploy 360 programm [http://www.internetsociety.org/deploy360/blog/2014/12/ipv6-privacy-addresses-provide-protection-against-surveillance-and-tracking/ IPv6 Privacy Addresses Provide Protection Against Surveillance And Tracking]</ref>. Ce sujet de traçabilité et de respect de la vie privée a fait l'objet d'une prise de conscience collective suite aux révélations d'Edward Snowden quant à la surveillance de masse opérée par les états. Il faut cependant noter que la traçabilité par l'identifiant d'interface n'en est qu'un des éléments parmi d'autres. Les cookies mis en place par les services web ou les recoupements d'infos personnelles imprudemment déposées sur les réseaux sociaux sont bien plus efficaces ; mais ils ne s'agit plus d'un problème réseau. De plus comme les adresses MAC contiennent l'identification du matériel, les IID dérivés propagent à l'extérieur du réseau des informations sur le type de matériel.
matériel, il est possible d'indiquer à l'extérieur du réseau quel
+
<!-- Ces préoccupations de traçabilité étant jugés importantes de nos jours, l'identifiant d'interface pour les adresses globales peut être généré aléatoirement. -->
type de materiel est utilisé et donner des indications.
+
 
 +
Initialement largement utilisés par les mécanismes d'auto-configuration, ces identifiants sont donc aujourd'hui en voie de désuétude en raison de ces problèmes de traçabilité.  Les principaux OS ont largement opté pour les IID temporaires aléatoires décrits au paragraphe suivant.  Seules les adresses locales de lien (LLA) ont conservé cet identifiant automatiquement déduit dès l'initialisation de l'interface. Ces adresses LLA étant purement locales et non routables, elles sont moins sensibles à la traçabilité.
 
   
 
   
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.
+
===== Identificateur EUI-64 =====
 
   
 
   
===== 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éseaux 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.
 
   
 
   
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.
+
Si une machine ou une interface possède un identificateur global IEEE EUI-64, celui-ci a la structure montrée par la figure 7. Les 24 premiers bits de l'EUI-64, comme pour les adresses MAC IEEE 802.3, identifient le constructeur. Les 40 autres bits identifient le numéro de série (les adresses MAC IEEE 802 n'en utilisaient que 24). Les 2 bits, <tt>u</tt> (septième bit du premier octet), et <tt>g</tt> (huitième bit du premier octet) ont une signification spéciale :
+
** <tt>u</tt> (Universel) vaut 0 si l'identifiant EUI-64 est universel ;
Il existe plusieurs méthodes pour construire l'identifiant :
+
** <tt>g</tt> (Groupe) indique si l'adresse est individuelle (<tt>g</tt> = 0), c'est-à-dire désigne un seul équipement sur le réseau, ou de groupe (<tt>g</tt> = 1), par exemple une adresse de multicast.
+
 
Si une machine ou une interface possède un identificateur global IEEE EUI-64, celui-ci a la structure suivante : Les 24 premiers bits de l'EUI-64, comme pour les adresses MAC IEEE 802.3, 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 :
+
** <tt>u</tt> (Universel) vaut 0 si l'identifiant EUI-64 est universel,
+
** <tt>g</tt> (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.
+
 
<center>
 
<center>
[[Image:activite-14-adresses-interface-reseau-img02-800x406-v20151012-01.jpg|666px|Format de l'identificateur IEEE EUI-64]]
+
[[Image:activite-14-adresses-interface-reseau-img02-800x406-v20151012-01.jpg|400px|center|thumb|Figure 7 : Format de l'identificateur IEEE EUI-64.]]
 
</center>
 
</center>
'''L'identifiant d'interface à 64 bits d'une adresse IPv6 est dérivé de l'EUI-64 en inversant le bit u'''. 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.
+
Dans le cas d'IPv6, l'identifiant d'interface à 64 bits peut être dérivé de l'EUI-64 en inversant le bit <tt>u</tt> comme le montre la figure 8. 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.
 +
 
 
<center>
 
<center>
[[Image:activite-14-adresses-interface-reseau-img03-800x405-v20151012-01.jpg|666px|Identifiant d'interface au format EUI-64 "modifié"]]
+
[[Image:activite-14-adresses-interface-reseau-img03-800x405-v20151012-01.jpg|400px|center|thumb|Figure 8 : Identifiant d'interface dérivé du format EUI-64.]]
 
</center>
 
</center>
  
===== MAC-48 =====
+
===== Identificateur 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.
+
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 réservée <tt>0xfffe</tt>, puis le bit <tt>u</tt> est mis à 1 comme dans le cas précédent. La figure 9 illustre ce processus.
 +
 
 
<center>
 
<center>
[[Image:activite-14-adresses-interface-reseau-img04-850x380-v20151012-01.jpg|666px|Identifiant d'interface dérivé de l'adresse MAC (EUI-48)]]
+
[[Image:activite-14-adresses-interface-reseau-img04-850x380-v20151012-01.jpg|400px|center|thumb|Figure 9 : Identifiant d'interface dérivé de l'adresse MAC (EUI-48).]]
 
</center>
 
</center>
 +
 +
Dans l'exemple suivant, l'interface Ethernet eth2 de l'hôte ''cos'' dispose de l'adresse matérielle MAC : <tt>52:54:00:8A:50:A5</tt>. L'adresse LLA <tt>fe80::5054:ff:fe8a:50a5</tt> allouée automatiquement à l'initialisation de l'interface dispose de l'IID <tt>'''5054:ff:fe8a:50a5'''</tt> déduit de l'adresse MAC en insérant les 16 bits réservés <tt>ff:fe</tt> entre l'identifiant IEEE du constructeur et le n° de série de l'interface. L'inversion du bit <tt>u</tt> traduit l'octet de poids fort de la valeur <tt>0x5'''2'''</tt> en <tt>0x5'''0'''</tt>.
 +
 +
cos:~$ ifconfig eth2
 +
eth2      Link encap:Ethernet  HWaddr '''52:54:00:8A:50:A5''' 
 +
          inet6 addr: fe80::'''5054:ff:fe8a:50a5'''/64 Scope:Link
 +
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
 +
          RX packets:147 errors:0 dropped:109 overruns:0 frame:0
 +
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
 +
          collisions:0 txqueuelen:1000
 +
          RX bytes:8936 (8.7 KiB)  TX bytes:1032 (1.0 KiB)
  
 
===== Cas Particuliers =====
 
===== Cas Particuliers =====
 
   
 
   
Si une interface ne possède aucune adresse (par exemple l'interface utilisée pour les liaisons PPP; Point to Point Protocol utilisé sur les liens point à point), 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
+
Si une interface ne possède aucune adresse, par exemple l'interface utilisée pour les liaisons PPP (''Point to Point Protocol''), 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 <tt>u</tt> 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, durant la phase de DAD (Duplicate Address Detection), et devra être résolu manuellement.
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.
+
  
 
===== Opacité des identifiants d'interface =====
 
===== Opacité des identifiants d'interface =====
Les bits U et G, n'ont de signification que pour les adresses de niveau 2 (adresse EUI-64 et EUI-48 (MAC)). Si aux origines d'IPv6 (RFC4291), le bit U conservait cette signification d'universalité, c'est qu'à l'époque l'identifiant d'interface dérivait majoritairement de l'adresse matérielle. C'est moins le cas aujourd'hui, avec les IID temporaires aléatoires, voire cryptographiques (cf paragraphes suivant). L'IETF a remis les choses au claires dans le RFC7136 en précisant maintenant que " les identifiants d'interface doivent être considérés comme opaques et il ne faut pas tirer de conclusion du fait que tel ou tel bit est mis". La dérivation d'un IID à partir d'une adresse matérielle reste inchangée, mais inversement si on ne sait pas comment a été généré l'IID on ne peut rien déduire de la signification des deux bits de poids faible de l'octet de poids fort de l'IID. N'attachez donc pas plus d'importance à ces bits qu'ils n'en n'ont réellement aujourd'hui.
+
Les bits <tt>u</tt> et <tt>g</tt> n'ont de signification que pour les adresses de niveau MAC (adresse EUI-64 et EUI-48). Si, aux origines d'IPv6 (RFC 4291), le bit <tt>u</tt> conservait cette signification d'universalité, c'est qu'à l'époque l'identifiant d'interface dérivait majoritairement de l'adresse matérielle. C'est moins le cas aujourd'hui avec les IID temporaires aléatoires, voire cryptographiques (cf. paragraphes suivant). L'IETF a remis les choses au clair dans le RFC 7136 en précisant maintenant que "les identifiants d'interface doivent être considérés comme opaques et il ne faut pas tirer de conclusion de la valeur de tel ou tel bit". La dérivation d'un IID à partir d'une adresse matérielle reste inchangée mais, inversement, si on ne sait pas comment a été généré l'IID, on ne peut rien déduire de la signification des deux bits de poids faible de l'octet de poids fort de l'IID. N'attachez donc pas plus d'importance à ces bits qu'ils n'en n'ont réellement aujourd'hui.
Pour plus de précisions, vous pouvez consulter l'interprétation personnelle de la lecture du RFC7136 de Stéphane Bortzmeyer : http://www.bortzmeyer.org/7136.html.
+
  
==== Valeur aléatoire ====
+
==== Valeur temporaire 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 mobile utilisant un portable, chez lui, au bureau, lors de ses déplacements.
+
L'identifiant d'interface basé sur des adresses MAC, comme indiqué précédemment, pose 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 devient alors possible de traquer un individu nomade utilisant un portable, chez lui, au bureau, lors de ses déplacements.
 
   
 
   
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 de hachage 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
+
Pour couper court à toutes les menaces de boycott d'un protocole qui « menacerait la vie privée », l'IETF a validé d'autres méthodes de construction d'un identifiant d'interface comme celle reposant sur des tirages aléatoires [RFC 8981]. L'identifiant d'interface est soit choisi aléatoirement, soit construit par un algorithme de hachage, 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.
 
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 ou à chaque redémarrage de la machine 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 contenue dans les premiers octets de l'identifiant d'interface. Elle est également présente, mais de manière optionnelle, sur Linux et les systèmes d'exploitation BSD ou 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.
 
<center>
 
[[image:activite-14-adresses-interface-reseau-img05-679x510-v20151012-01.png|666px|Adresse IPv6 temporaire de MS-Windows]]
 
</center>
 
  
==== Cryptographique ====
+
La plupart des OS modernes ont opté, généralement par défaut, pour ce mode d'adressage plus discret. À l'issue de la procédure d'auto-configuration, l'interface dispose de plusieurs adresses construites sur le préfixe GUA ou ULA du réseau local :
+
* une adresse principale avec un IID stable opaque (ne révélant pas d'information) utilisée pour les flux entrants (initialisation des connexions vers les services applicatifs "publics" de l'hôte). C'est cette adresse qui pourra être référencée dans les registres du service de nommage (DNS : Domain Name Service) ;
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
+
* une (ou généralement plusieurs) adresse temporaire, périodiquement renouvelée, utilisée pour la discrétion des flux sortants (initialisation des connexions vers les services applicatifs externes à l'hôte).
pour sécuriser les protocoles de découverte de voisins ou pour la gestion de la multi-domiciliation.
+
'''''Nota :''''' ''Selon l'OS, l'IID temporaire aléatoire peut également optionnellement être activé pour les adresses locales de lien ; quand bien même ces adresses LLA, purement locales et non routables, sont moins sujettes à la traçabilité.''
  
== Adressage multiple des interfaces ==
+
<!--Cette solution a été adoptée par Microsoft. Dans Windows XP, l'interface possède deux adresses IPv6 globales comme on le voit dans la figure 10. 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 ou à chaque redémarrage de la machine et sert aux applications clientes. 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 les systèmes d'exploitation Linux, BSD et 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, et que l'enregistrement de cookies dans un navigateur Web pour identifier l'utilisateur soit verrouillé.<br>
 +
 
 +
En contre-partie, on notera qu'il est dès lors plus difficile à un administrateur réseau, (RSSI) en charge de la sécurisation des infrastructures, de filtrer les machines ou d'analyser les journaux système, du fait de la volatilité de ces adresses (beaucoup de techniques de protection de la vie privée ont ce défaut).
  
'''En IPv6 les interfaces 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). Celle ci est automatiquement affectée à l'interface lors de la phase d'activation de cette dernière par le système. Selon la nature du lien de rattachement (liaison  point à point, domaine de diffusion ethernet filaire ou wifi, ...) l'interface peut également disposer d'une (ou plusieurs) adresse(s) routable(s) soit localement (cas des adresses ULA) soit globalement (cas des adresses globales), en associant le préfixe d'adresse du lien support à l'identifiant d'interface. L'affectation de ces adresses routables peut être assurée soit par l'administrateur système de la machine soit gérée automatiquement par le réseau en s'appuyant sur les mécanismes d'autoconfiguration avec ou sans état, comme nous le verrons dans un séquence ultérieure.
 
 
<center>
 
<center>
[[image:activite-14-adresses-interface-reseau-img06-719x277-v20151012-01.jpg|600px|thumb| Figure 2 : Adressage multiple des interfaces.]]
+
[[image:activite-14-adresses-interface-reseau-img05-679x510-v20151012-01.png|400px|center|thumb| Figure 10 : Adresse IPv6 temporaire de MS-Windows.]]
 
</center>
 
</center>
  
 +
==== Valeur stable opaque ====
 +
 +
L'identifiant d'interface dérivé de l'adresse matérielle pose le problème de la traçabilité des équipements nomades et de respect de la vie privée qui en découle. Cependant, il dispose de la propriété de stabilité (''on éteint la machine et on la rallume, on est sûr de retrouver la même adresse IPv6'') qui simplifie les tâches administratives (''Ainsi, lorsqu'on regarde le journal des connexions, on peut facilement retrouver la machine qu'on a repéré. Et la création d'ACL (Access Control List) est simple, puisque les adresses ne changent pas''). Le RFC 7217 propose une méthode de génération de l'IID opaque, ne révélant pas d'information relativement à la configuration matérielle, mais stable dans le temps. Le principe est de condenser (à l'aide d'une fonction de hachage telle que SHA-256 par exemple et de ne conserver que les 64 bits de poids faible) un secret (stocké dans une mémoire non volatile), un certain nombre de caractéristiques de la machine et le préfixe, de manière à avoir des identifiants stables, mais préservant quand même partiellement la vie privée de postes nomades : l'identifiant d'interface change quand la machine change de réseau, ne permettant plus de la suivre à la trace. Mais, si on reste sur le même réseau, l'adresse est stable. Le RFC 8064 a confirmé la prééminence de cette méthode sur la méthode dérivée de l'adresse MAC pour la procédure d'auto-configuration sans état (''qui sera décrite dans la séquence 3'').
 +
<!-- L'idée est que la machine aurait une ou plusieurs adresses temporaires, une ou plusieurs adresses stables et qu'on utiliserait l'adresse temporaire pour les connexions sortantes, et l'autre pour les entrantes. Cela fournit une bonne protection de la vie privée, mais au prix de quelques inconvénients. Comme rien n'est gratuit en ce bas monde, ces adresses compliquent la vie de l'administrateur réseaux : interpréter le trafic qu'on voit passer est moins simple (beaucoup de techniques de protection de la vie privée ont ce défaut).-->
  
== Gestion de la durée de validité de l'adresse ==
+
==== 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.
  
L'activité introductive de la séquence ("Quest ce qu'une adresse IP ?") nous a présenté les différents états de validité d'une adresse (test, préféré, déprécié, invalide) qui régissent la durée de vie de l'adresse. Comme nous venons de le voir avec les adresses aléatoires respectueuses de la vie privée, certaines adresses sont temporaires et doivent être renouvelées périodiquement. C'est système d'exploitatation (OS) gérant l'interface qui assure la cohérence, notamment en passant une adresse dans l'état déprécié pour permettre la cloture des sessions et connexions existantes, parallèlement à la procédure d'activation d'une nouvelle adresse valide pour les nouvelles connexions ou sessions applicatives.
+
== Conclusion ==
<center>
+
 
[[image:activite-14-adresses-interface-reseau-img07-740x315-v20151012-01.jpg|600px|thumb| Figure 3 : Gestion de la durée de validité des adresses.]]
+
Une interface de communication en IPv6 peut avoir  plusieurs adresses unicast. Les adresses IP sont allouées temporairement. On parle alors d'une durée de vie  d'une adresse qui est en fait sa durée d'allocation. L'intérêt est de rendre la renumérotation, c'est-à-dire le changement d'adresse, rapide et automatique.
</center>
+
  
 +
L'adresse unicast IPv6 est découpée en 2 parties. Une partie va servir à l'identification mais aussi à la localisation du réseau au sein de l'Internet. On parle de préfixe réseau. Nous avons étudié comment définir et organiser un plan d'adressage de manière hiérarchique afin de permettre la délégation pour une gestion décentralisée mais aussi rendre les préfixes agrégables, afin de constituer des tables de routage les plus concises possibles. Pour IPv6, vu la taille de l'espace d'adressage, cette caractéristique d'agrégation est essentielle.
 +
La seconde partie de l'adresse sert à identifier une interface au sein d'un lien. Nous avons présenté les différents modes de construction des identifiants d'interfaces.
  
= Conclusion =
 
à faire
 
 
== Références bibliographiques ==
 
== Références bibliographiques ==
 
<references />
 
<references />
  
 +
* [https://www.networkacademy.io/ccna/ipv6/ipv6-on-windows| IPv6 on Windows]
 +
 +
== Ressources complémentaires ==
 +
* Une calculatrice CIDR en ligne [https://fr.rakko.tools/tools/27/ https://fr.rakko.tools/tools/27/]
  
 
== Pour aller plus loin==
 
== Pour aller plus loin==
  
 
RFC et leur analyse par S. Bortzmeyer :
 
RFC et leur analyse par S. Bortzmeyer :
* RFC 3041 Privacy Extensions for Stateless Address Autoconfiguration in IPv6
 
 
* RFC 3972  Cryptographically Generated Addresses (CGA)[http://www.bortzmeyer.org/3972.html Analyse]
 
* RFC 3972  Cryptographically Generated Addresses (CGA)[http://www.bortzmeyer.org/3972.html Analyse]
 
* RFC 4291 IP Version 6 Addressing Architecture [http://www.bortzmeyer.org/4291.html Analyse]
 
* RFC 4291 IP Version 6 Addressing Architecture [http://www.bortzmeyer.org/4291.html Analyse]
* RFC 4291 IP Version 6 Addressing Architecture [http://www.bortzmeyer.org/4291.html Analyse]
+
* RFC 5375 IPv6 Unicast Address Assignment Considerations [http://www.bortzmeyer.org/5375.html Analyse]
* RFC 4941 Privacy Extensions for Stateless Address Autoconfiguration in IPv6 [http://www.bortzmeyer.org/4941.html Analyse]
+
* RFC 5887 Renumbering Still Needs Work [http://www.bortzmeyer.org/5887.html Analyse]
 +
* RFC 6164 Using 127-Bit IPv6 Prefixes on Inter-Router Links :;m=[http://www.bortzmeyer.org/6164.html Analyse]
 +
* RFC 6177 IPv6 Address Assignment to End Sites [http://www.bortzmeyer.org/6177.html Analyse]
 
* RFC 7136 Significance of IPv6 Interface Identifiers [http://www.bortzmeyer.org/7136.html Analyse]
 
* RFC 7136 Significance of IPv6 Interface Identifiers [http://www.bortzmeyer.org/7136.html Analyse]
 
* RFC 7217 A Method for Generating Semantically Opaque Interface Identifiers with IPv6 Stateless Address Autoconfiguration (SLAAC) [http://www.bortzmeyer.org/7217.html Analyse]
 
* RFC 7217 A Method for Generating Semantically Opaque Interface Identifiers with IPv6 Stateless Address Autoconfiguration (SLAAC) [http://www.bortzmeyer.org/7217.html Analyse]
 +
*  RFC 7381 Enterprise IPv6 Deployment Guidelines [http://www.bortzmeyer.org/7381.html Analyse]
 +
*  RFC 7934 Host address availability recommendations [https://www.bortzmeyer.org/7934.html Analyse]
 +
*  RFC 8064 Recommendation on Stable IPv6 Interface Identifiers [http://www.bortzmeyer.org/8064.html Analyse]
 +
*  RFC 8065 Privacy Considerations for IPv6 Adaptation-Layer Mechanisms [http://www.bortzmeyer.org/8065.html Analyse]
 +
* RFC 8981 Temporary Address Extensions for Stateless Address Autoconfiguration in IPv6  [http://www.bortzmeyer.org/8981.html Analyse]
 +
 +
= Annexe : Différentes stratégies pour la définition des sous-réseaux (SID) =
 +
 +
Lorsqu'un administrateur a pour tâche de déployer IPv6 sur son réseau, une des étapes importantes est la définition du plan d'adressage. Ce plan définit l'ensemble des adresses utilisées sur chacun des réseaux du site concerné. En IPv6, chaque réseau se voit attribuer un préfixe nécessairement de largeur 64 bits (/64). L'administrateur connaissant le préfixe assigné à son site, communément de largeur 48 bits, il lui reste à définir les 16 bits restants pour identifier chacun de ces réseaux. Cette valeur est appelé identifiant de sous-réseau ou SID.
 +
 +
=== Réseau à plat ===
 +
Les petites entités sans structure organisationnelle bien définie peuvent éventuellement fonctionner sans plan d'adressage structuré. Cependant, si l'infrastructure de niveau liaison est cloisonnée en domaines de diffusion distincts (VLAN), il faudra affecter au moins un identifiant de sous-réseau par domaine. L'attribution de ces identifiants de sous-réseaux pourra être simple, en numérotant éventuellement séquentiellement.<br>
 +
En l'absence de structuration du plan d'adressage, ce type de réseau ne passe pas à l'échelle. Si le nombre de sous-réseaux est amené à croître, l'administration et le contrôle de l'infrastructure deviennent rapidement problématiques. Il y a également nécessité de conserver dans une table les différentes affectations pour localiser le segment réseau ou la machine à l'origine d'un problème ou d'un dysfonctionnement puisque les adresses sont peu signifiantes.
 +
 +
=== Correspondance directe entre les identifiants IPv4 et IPv6 ===
 +
Pour les organisations ayant déjà structuré une infrastructure réseau sous le protocole IPv4, et sur laquelle on souhaite faire cohabiter les deux versions du protocole, il est possible d'adopter une stratégie de correspondance des identifiants de sous-réseau IPv4 et de sous-réseau IPv6. Deux cas peuvent être évalués :
 +
 +
==== Correspondance directe entre les sous-réseaux IPv4 et IPv6 ====
 +
Si les réseaux IPv4 sont structurés uniquement en sous-réseaux de préfixe /24 (exemple les réseaux privatifs du RFC 1918, un réseau de classe C <tt>192.168.0.0/24</tt> à <tt>192.168.255.0/24</tt> ou que l'on a « subnetté » en /24 le réseau de classe A <tt>10.0.0.0</tt> ou l'un des 16 classe B <tt>172.16.0.0</tt> à <tt>172.31.0.0</tt>), une correspondance directe entre l'identifiant de sous-réseau IPv4 peut être envisagée avec l'identifiant SID d'IPv6 par transcription directe.
 +
 +
 +
<center>[[Image:activite-16-img02.png|400px|thumb|center|Figure 3 : Exemple de réseau.]]
 +
</center>
 +
Dans l'exemple du plan d'adressage de la figure 3, le lien direct entre les sous-réseaux IPv4 et les sous-réseaux IPv6 est directement visible. Pour les équipements d'infrastructure disposant d'une adresse fixe (routeur, serveurs applicatifs...) on peut également transposer l'identifiant d'hôte (4<sup>e</sup> octet d'adresse IPv4 d'un /24) en identifiant d'interface de l'adresse IPv6. Ainsi, par exemple, le serveur web d'adresse IPv4 <tt>192.168.1.123</tt> peut être adressé <tt>2001:db8:cafe:1::123</tt> en IPv6.<br>
 +
Cependant, cette stratégie ne peut s'envisager que si les sous-réseaux IPv4 sont alignés sur 24 bits (/24). En effet, des sous-réseaux IPv4 de taille plus étendue (préfixe < /24) ou plus réduite (préfixe > /24) ne peuvent s'insérer dans le champ SID de 16 bits d'un préfixe IPv6 en /64 (le débordement au-delà du /64 posant des problèmes pour l'auto-configuration). Ainsi :
 +
* un préfixe IPv4 /28, par exemple les hôtes <tt>172.16.5.14/28</tt> et <tt>172.16.5.18/28</tt> sont dans des sous-réseaux IPv4 distincts : le sous-réseau <tt>172.16.5.0/28</tt> pour le premier et le sous-réseau <tt>172.16.5.16/28</tt> pour le second. Alors que la transposition simple en IPv6 va les placer dans le même sous-réseau : les hôtes <tt>2001:db8:cafe:5::14/64</tt> et <tt>2001:db8:cafe:5::18/64</tt> sont tous les deux dans le sous-réseau <tt>2001:db8:cafe:5::/64</tt>.
 +
* Un préfixe IPv4 /23, par exemple les hôtes <tt>10.0.8.250/23</tt> et <tt>10.0.9.5/23</tt> sont tous les deux dans le même sous-réseau IPv4. Alors que la transposition simple les placera dans des sous-réseaux IPv6 distincts : <tt>2001:db8:cafe:8::250/64</tt> et <tt>2001:db8:cafe:9::5/64</tt>
 +
On notera également que la transposition directe des identifiants décimaux des sous-réseaux IPv4 dans le champ SID hexadécimal du sous-réseau IPv6, si elle facilite la correspondance de lecture pour l'administrateur humain, n'est en revanche pas optimale pour les tables de routage des sous-réseaux IPv6. Ainsi, le sous-réseau IPv4 <tt>10.0.23.0/24</tt> est sélectionné (filtré / masqué) sur un octet de valeur binaire 0001 0111, alors qu'il sera sélectionné par le SID 0x0023 hexadécimal (0000 0000 0010 0011)
 +
 +
==== Correspondance directe entre les adresses IPv4 et IPv6 ====
 +
Si le préfixe de sous-réseau IPv4 n'est pas aligné sur un /24, il sera impossible de maintenir une relation directe entre les sous-réseaux IPv4 et IPv6. Cependant, dans ce cas, il peut être envisagé de maintenir une correspondance d'adresse en embarquant la totalité de l'adresse IPv4 dans l'identifiant d'interface de l'adresse IPv6 et en gérant le SID indépendamment du sous-réseau IPv4. Par exemple, la machine d'adresse IPv4 <tt>192.168.1.234</tt> pourrait être adressée en IPv6 <tt>2001:db8:cafe:deca::192.168.1.234</tt>. En effet, pour les adresses IPv6 embarquant une adresse IPv4, si celle-ci occupe les 32 bits de poids faible de l'adresse IPv6 (la partie basse de l'identifiant d'interface), il est autorisé de continuer à la noter en notation décimale pointée. Cependant, si cette commodité facilite la saisie de la configuration d'un système, celui-ci l'affichera sous la forme canonique <tt>2001:db8:cafe:deca::c0a8:1ea</tt>, notamment dans les journaux et log diverses. c0a801ea étant la conversion hexadécimale des 32 bits de l'adresse IPv4 écrite <tt>192.168.1.234</tt> en notation décimale pointée, la correspondance de lecture devient tout de suite moins évidente.
 +
 +
=== Plan d'adressage structuré ===
 +
Lorsque l'on définit un plan d'adressage tel que sur la figure 4, il faut décider quelle structure doit être utilisée pour assigner les adresses aux réseaux de l'organisation. Plusieurs stratégies peuvent être envisagées. En nous appuyant sur l'exemple d'architecture suivante, nous allons présenter différents plans possibles.<br>
 +
<center>
 +
[[Image:activite-16-img03.png|400px|center|thumb|Figure 4 : Plan d'adressage structuré]]
 +
</center>
 +
 +
==== Structuration basique du plan d'adressage ====
 +
Nous pouvons, par exemple, assigner les adresses des équipements par type d'usage ou par localisation, voire une combinaison des deux. Ainsi, nous pouvons choisir d'adresser d'abord par localisation, puis par type. Une fois les sous-réseaux définis, il restera les bits de poids faible qui pourront être utilisés pour d'autres usages, ''(selon la convention de notation définie précédemment le préfixe se représente de la manière suivante) :
 +
<center><tt>2001:db8:cafe:{LLLLTTTTBBBBBBBB}::/64</tt></center> <br>
 +
 +
Dans cet exemple, 4 bits sont assignés pour la localisation {L}. Les 4 bits suivants sont assignés pour le type d'usage {T}. Il reste 8 bits {B} pour d'autres affectations. Ainsi, ce plan d'adressage permet d'adresser une infrastructure qui peut être étendue sur 16 (4 bits) localisations, chacune pouvant déployer 16 (4 bits) types de réseaux. On dispose encore de 8 bits restants permettant éventuellement 256 sous-réseaux différents pour chaque localisation et chaque type.
 +
 +
==== Routeur vs firewall : localisation ou type d'usage d'abord ? ====
 +
Nous devons, dans un premier temps, décider quelle affectation nous souhaitons privilégier : localisation d'abord puis type (tels que public/DMZ, employés, étudiants, invités, switchs, routeurs, serveurs, administration, comptabilité, production, etc.) ou inversement : type avant la localisation. La figure 5 illustre ces besoins.
 +
 +
===== Localisation d'abord =====
 +
Quand la structuration se fait d'abord sur la localisation, chaque campus, bâtiment, département, est administrativement identifié par une référence. Cela permet d'optimiser les tables de routage. À l'instar de l'organisation des opérateurs, tous les réseaux de même destination seront agrégés en une unique route dans les tables de routage. Ce type de structuration du plan d'adressage convient aux organisations qui sont chargées de l'infrastructure globale d'interconnexion, en général des opérateurs ou les entités chargées des réseaux d'interconnexion des grandes organisations.
 +
===== Type d'usage d'abord =====
 +
Si le type d'usage des réseaux est d'abord privilégié, l'optimisation des entrées dans les tables de routage n'est alors pas envisageable. Cependant, cela n'est en général pas un problème pour la plupart des routeurs modernes, qui peuvent gérer un nombre conséquent d'entrées de table de routage.
 +
L'avantage de grouper les réseaux par catégorie d'usage est que cela facilite l'application des politiques de sécurité. La plupart des équipements de sécurité (pare-feux, listes de contrôles d'accès, contrôle des autorisations…) sont régis selon les types d'usages plutôt que sur la localisation des utilisateurs.
 +
Les organisations choisissent communément de privilégier les types d'usages sur la localisation pour des raisons pratiques. L'application des politiques de contrôle d'accès et de sécurisation, basées sur des listes de filtres logiques, est généralement déléguée à des équipements spécialisés de type pare-feu, placés frontalement à l'entrée du réseau. Une fois contrôlés, les flux sont ensuite acheminés en interne en fonction de leur localisation.
 +
<center>
 +
[[Image:activite-16-img04.png|400px|center|thumb|Figure 5 : Adressage structuré par localisation/usage.]]
 +
</center>
 +
 +
==== Détermination de l'espace nécessaire au plan d'adressage ====
 +
Nous devons déterminer quelle proportion des 16 bits du SID sera nécessaire pour chaque partie de cette structuration. Le nombres de bits nécessaires pour coder chacune des catégories de la structuration est conditionné par le nombre de types et de localisations de sous-réseaux de l'infrastructure, en ne négligeant pas les évolutions.
 +
# Déterminer le nombre de localisations ou types de réseaux de votre organisation ;
 +
# Augmenter le nombre d'une localisation supplémentaire, nécessaire pour le backbone ;
 +
# Augmenter le nombre de localisations pour tenir compte d'éventuels sous-réseaux qui n'ont pas de localisation fixe, tels que l'infrastructure des tunnels VPN par exemple ;
 +
# Augmenter le nombre de chacune des catégories pour tenir compte des expansions de court et moyen terme.
 +
Pour chacune des catégories, déterminer la puissance de deux immédiatement supérieure ou égale, ce qui nous indiquera le nombre de bits nécessaires pour en coder les références.
 +
<center>
 +
[[Image:activite-16-img03.png|400px|center|thumb|Figure 6 : Plan d'adressage structuré.]]
 +
</center>
 +
 +
===== Exemple 1 : sous-réseaux basés sur la localisation =====
 +
* nombre de localisations : 3
 +
* backbone d'interconnexion (réseau reliant switchs et routeurs) : 1
 +
* réseaux non localisés (tunnels VPN) : 1
 +
* extension future : 2
 +
'''total : 7 sous-réseaux''' => 3 bits suffisent pour encoder les localisations, le reste pouvant être utilisé pour d'autres référencements.
 +
<center><tt>2001:db8:cafe:{LLLBBBBBBBBBBBBB}::/64</tt></center>
 +
 +
===== Exemple 2 : sous-réseaux basés sur le type d'usage =====
 +
* nombre de groupes d'usage (personnel, étudiants, invités, serveurs, infra VPN) : 5 sous-réseaux,
 +
* backbone et infrastructure (réseau reliant switchs et routeurs) : 1 sous-réseau,
 +
* usages futurs : 4 sous-reseaux
 +
'''total : 10 sous-réseaux''' => 4 bits suffisent pour encoder les types de sous-réseaux, les 12 bits restants pouvant être utilisés pour d'autres référencements.
 +
<center><tt>2001:db8:cafe:{TTTTBBBBBBBBBBBB}::/64</tt></center>
 +
 +
===== Hiérarchisation à 2 niveaux =====
 +
Dans les deux exemples précédents, les bits restants peuvent être utilisés pour numéroter un second niveau de sous-réseaux. Si la numérotation primaire est basée sur la localisation, plusieurs sous-réseaux peuvent être adressés sur chaque site. Si la numérotation primaire est par type d'usage, alors plusieurs réseaux de chaque type peuvent être créés (les réseaux internes réservés au personnel peuvent être déclinés par service ou fonction : comptabilité, RH, direction, production...).
 +
Les deux types de structuration, localisation / type d'usage, peuvent également se combiner. Si on choisit de privilégier la location en structure primaire :
 +
<center><tt>2001:db8:cafe:{LLLTTTTBBBBBBBBB}::/64</tt>,</center>
 +
il reste 9 bits pouvant coder 512 instances de sous-réseaux de chaque type sur chaque site. Le fait de privilégier la localisation, en positionnant sa référence sur les bits de poids fort du SID, facilitera l'optimisation des tables de routage de l'infrastructure d'interconnexion des sites. Cependant, elle alourdira les politiques de sécurisation en multipliant les filtres, si la fonction de sécurisation (firewall) est centralisée, ou elle imposera de disposer d'une fonction de sécurisation (firewall) sur chaque site, entraînant des difficultés de cohérence de déploiement des politiques de sécurité.
 +
Inversement, privilégier le type d'usage sur la localisation
 +
<center><tt>2001:db8:cafe:{TTTTLLLBBBBBBBBB}::/64</tt>,</center>
 +
réduira le nombre de filtres de la politique de sécurisation au détriment du nombre d'entrées dans les tables de routage de l'interconnexion. Cependant, cela ne pose en général pas de difficultés majeures compte tenu des capacités des routeurs modernes.
 +
 +
===== Latitude =====
 +
Dans l'exemple précédent, 4 bits sont utilisés pour les types
 +
de sous-réseaux et 3 pour la localisation, laissant 9 bits, soit 512
 +
(2 puissance 9) sous-réseaux possibles par type et par site. Cela
 +
sera suffisant dans la plupart des cas. Cependant, imaginons qu'il
 +
faille 2048 tunnels VPN par site pour accueillir les connexions
 +
sécurisées des personnels nomades. On pourrait envisager de
 +
modifier les tailles de champs de structuration primaire et
 +
secondaire, mais cela nécessiterait une reconfiguration globale de
 +
l'architecture. Une autre option consiste à répartir les tunnels
 +
sur 4 types distincts, chacun pouvant gérer 512 tunnels. De cette
 +
manière, on conserve une politique de sécurité simple et cohérente.
 +
 +
<center>                                   
 +
{| border="0" class="wikitable alternance centre" width="30%"
 +
|- align="center"
 +
 +
! scope="col" width="10%" align="center"  | '''Type'''
 +
! scope="col" width="90%" align="center"  | '''Usage'''
 +
 +
|- style="background:silver"
 +
| '''0''' || '''Backbone, infrastructure'''
 +
|-
 +
| '''1''' || '''Serveurs'''
 +
|- style="background:silver"
 +
| 2 || Réservé expansion future
 +
|-
 +
| 3 || Réservé expansion future
 +
|- style="background:silver"
 +
| '''4''' || '''Personnels'''
 +
|-
 +
| '''5''' || '''Étudiants'''
 +
|- style="background:silver"
 +
| '''6''' || '''Invités'''
 +
|-
 +
| 7 || Réservé expansion future
 +
|- style="background:silver"
 +
| '''8''' || '''VPN'''
 +
|-
 +
| '''9''' || '''VPN'''
 +
|- style="background:silver"
 +
| '''a''' || '''VPN'''
 +
|-
 +
| '''b''' || '''VPN'''
 +
|- style="background:silver"
 +
| c || Réservé expansion future
 +
|-
 +
| d || Réservé expansion future
 +
|- style="background:silver"
 +
| e || Réservé expansion future
 +
|-
 +
| f || Réservé expansion future
 +
|} 
 +
</center>
 +
 +
===== Lisibilité =====
 +
Lorsque l'on dispose d'un espace d'identification suffisamment large, dans notre cas de champ SID sur 16 bits nous laissant 9 bits 'B' de marge, il est de bonne pratique d'aligner les identifiants sur des frontières de mots de 4 bits (quartet) pour faciliter la lisibilité des préfixes notés en hexadécimal. Ainsi, dans notre exemple, si on étend l'identifiant de la localisation sur 4 bits au lieu de 3, elle sera visuellement facilement identifiée par un opérateur humain lors de la lecture des adresses. Le format des adresses de nos exemples devient donc :
 +
<center><tt>2001:db8:cafe:{LLLLTTTTBBBBBBBB}::/64</tt></center>
 +
<center><tt>2001;db8:cafe:{TTTTLLLLBBBBBBBB:}:/64</tt></center>
 +
soit, en notation canonique, des adresses respectivement
 +
<center><tt>2001:db8:cafe:'''wx'''yz::/64</tt></center>
 +
<center><tt>2001:db8:cafe:'''xw'''yz::/64</tt></center>
 +
avec les "nibbles" '''w''' pour identifier la localisation et '''x''' pour le type de sous-réseau.
 +
 +
===== Extensibilité =====
 +
Si le nombre de localisations ou de types de sous-réseaux n'est pas à priori connu au moment de l'établissement du plan d'adressage, il est recommandé de conserver des frontières flexibles entre les différents groupes de bits identifiants les différents niveaux de la structuration. Cela peut être réalisé en adoptant une des stratégies décrites dans les RFC 1219 et RFC 3531. La contrepartie de cette approche est q'une certaine aisance dans la manipulation des bits doive être acquise, dans la mesure ou les frontières des zones d'identification peuvent être amenées à évoluer, ce qui peut nécessiter des mises à jour des règles et filtres de la politique de sécurité.
 +
Ainsi, par exemple, en assumant une structuration où l'on privilégie d'abord la localisation des sous-réseaux assignée aux bits de poids fort, sur le type assigné au bits intermédiaires, un plan d'adressage flexible initialement conçu pour 5 localisations, 3 types et 2 sous-réseaux par localisation/type :
 +
<center><tt>2001:db8:cafe:{LLL*****TT*****B}::/64</tt></center>
 +
pourrait évoluer selon le scénario hypothétique suivant, passant de 2 à 10 sous-réseaux nécessitant 4 bits B.
 +
<center><tt>2001:db8:cafe:{LLL*****TT**BBBB}::/64</tt></center>
 +
Après cela, le nombre de types d'usages pourrait passer à 5, nécessitant un troisième bit T.
 +
<center><tt>2001:db8:cafe:{LLL****TTT**BBBB}::/64</tt></center>
 +
Puis, suite à une expansion géographique, le nombre de sites passerait à 50, portant à 6 le nombres de bits L.
 +
<center><tt>2001:db8:cafe:{LLLLLL*TTT**BBBB}::/64</tt></center>
 +
Si ensuite le nombre de types d'usages passait à 13, on étendrait le champ type par un quatrième bit pris sur la droite où il reste plus de bits disponibles.
 +
<center><tt>2001:db8:cafe:{LLLLLL*TTTT*BBBB}::/64</tt></center>
 +
'''''Nota 1 :''''' ''les champs dont l'agrandissement s'effectue par la droite ({L} et {T} dans notre exemple) encodent les nombres selon un ordonnancement inhabituel. Le RFC 3531 décrit précisément les référencements de croissance gauche (les bits {B} dans notre exemple), centrale (les bits {T} dans notre exemple), ou droite (les bits {L} dans notre exemple).''<br>
 +
'''''Nota 2 :''''' ''cette stratégie prenant en compte les besoins d'extensibilité peut s'avérer difficilement conciliable avec l'objectif de lisibilité préconisant un alignement sur les quartets tel que décrit dans le paragraphe précédent.''
 +
<br>
 +
 +
=== Identification des sous-réseaux d'après les VLAN ===
 +
 +
==== Confinement des domaines de diffusion de niveau 2 : les VLAN ====
 +
Ethernet est le protocole dominant de niveau liaison de données (niveau 2 de la pile protocolaire), support du niveau réseau IPv6, des infrastructures de réseaux de la plupart des organisations. Les architectures Ethernet modernes, constituées de commutateurs (switchs Ethernet) sont généralement subdivisées en différents domaines de diffusion étanches, couramment dénommés VLAN. Cette structuration en VLAN permet de constituer des groupes logiques de machines partageant un même support de diffusion. Chaque VLAN Ethernet dispose d'un identifiant propre (VLAN-ID). Au niveau réseau (niveau 3 de la pile protocolaire), où opère le protocole IPv6, chaque VLAN se voit affecter un (ou plusieurs) identifiants de sous-réseaux distincts. En effet, deux postes localisés dans des VLAN distincts ne peuvent échanger directement des données et doivent passer une fonction de routage inter-réseaux (routeur) pour pouvoir communiquer.
 +
 +
==== Mise en correspondance VLAN-ID et SID ====
 +
Une autre approche de structuration du plan d'adressage, sur ce type d'infrastructure, est de dériver l'identifiant de sous-réseau IPv6 (SID) de l'identifiant du domaine de diffusion (VLAN-ID). Les identifiants de VLAN Ethernet (VLAN-ID) qui ont une taille de 12 bits, 4094 VLAN distincts (les valeurs 0 et 4095 étant réservées), peuvent être créés sur une infrastructure locale. Dans notre cas de figure (préfixe en /48), où nous disposons de 16 bits pour identifier nos sous-réseaux IPv6, on peut envisager de faire coïncider VLAN-ID et SID soit sous leur forme hexadécimale, soit sous leur forme décimale.
 +
 +
* '''Forme hexadécimale''' : en convertissant la valeur décimale de l'identifiant de VLAN en hexadécimale pour le transposer en identifiant de sous-réseau sur trois quartets (nibble). Dans ce cas, il reste un quartet du champ SID libre, qui peut être utilisé pour éventuellement coder 16 localisations ou 16 types. Il faut alors décider de la position du quartet libre, soit sur le quartet de poids fort, soit sur le quartet de poids faible.
 +
<center>
 +
VLAN-ID sur les bits de poids fort du SID
 +
<tt>2001:db8:cafe:{VVVVVVVVVVVVBBBB}::/64</tt>
 +
</center>
 +
<center>
 +
ou
 +
</center>
 +
<center>
 +
VLAN-ID sur les bits de poids faible du SID
 +
<tt>2001:db8:cafe:{BBBBVVVVVVVVVVVV}::/64</tt>
 +
</center>
 +
 +
Cependant, si les adresses IPv6 sont en notation hexadécimale (cf. activité 12), les identifiants de VLAN sont en notation décimale, ce qui ne facilite pas la lisibilité de correspondance lors de la lecture de l'adresse IPv6.
 +
 +
* '''Forme décimale'''. Afin de conserver une correspondance lisible entre l'identifiant de sous-réseau IPv6 et l'identifiant de VLAN, on peut conserver la valeur décimale du VLAN-ID et l'utiliser directement en lieu et place de l'identifiant SID hexadécimal. La correspondance est alors directement lisible. Ainsi, le sous-réseau IPv6 <tt>2001:db8:cafe:4321::/64</tt> sera affecté au VLAN 4321. On remarquera que les identifiants de sous-réseaux supérieurs à 4095 ainsi que ceux comportant une ou plusieurs lettres hexadécimales (a..f) sont disponibles pour d'autres sous-réseaux logiques non liés à un VLAN.
 +
 +
Tableau récapitulatif des deux approches.
 +
<center>                                   
 +
{| border="0" class="wikitable alternance centre" width="90%"
 +
|- align="center"
 +
 +
! scope="col" width="10%" align="center"  | '''VLAN-ID'''
 +
! scope="col" width="30%" align="center"  | '''IPv6 vlan-id forme décimale'''
 +
! scope="col" width="30%" align="center" | '''IPv6 vlan-id forme hexadécimale poids faible'''
 +
! scope="col" width="30%" align="center" | '''IPv6 vlan-id forme hexadécimale poids fort'''
 +
 +
|- align="center" style="background:silver"
 +
| '''1''' || <tt>2001:db8:cafe:000'''1'''::/64</tt> || <tt>2001:db8:cafe:0'''001'''::/64</tt> || <tt>2001:db8:cafe:'''001'''0::/64</tt>
 +
 +
|- align="center"
 +
| '''12''' || <tt>2001:db8:cafe:00'''12'''::/64</tt> || <tt>2001:db8:cafe:0'''00c'''::/64</tt> || <tt>2001:db8:cafe:'''00c'''0::/64</tt>
 +
 +
|- align="center" style="background:silver"
 +
| '''2783''' || <tt>2001:db8:cafe:'''2783'''::/64</tt> || <tt>2001:db8:cafe:0'''adf'''::/64</tt> || <tt>2001:db8:cafe:'''adf'''0::/64</tt>
 +
 +
|- align="center"
 +
| '''4094''' || <tt>2001:db8:cafe:'''4094'''::/64</tt> || <tt>2001:db8:cafe:0'''ffe'''::/64</tt> || <tt>2001:db8:cafe:'''ffe'''0::/64</tt>
 +
 +
|} 
 +
</center>
 +
Cette approche introduit une certaine cohérence entre l'infrastructure de niveau 2 et l'adressage de niveau 3 et simplifie la numérotation des sous-réseaux IPv6 dans la mesure où une seule numération doit être gérée. Cependant, elle n'est pas optimale pour minimiser le nombre d'entrées dans les tables de routage ou pour optimiser les politiques de contrôle d'accès basées sur le filtrage des préfixes.
 +
 +
==== Identification des VLAN selon la localisation ou le type d'usage ====
 +
Il est possible d'envisager un codage des VLAN-ID intégrant la localisation ou le type d'usage. Dans ce cas, il est souhaitable de conserver un alignement sur frontières de quartet (nibble). De ce fait, on peut choisir de coder la localisation sur 4 ou 8 bits {W} et coder respectivement le type sur 8 ou 4 bits {V} ou inversement. De même, comme pour la hiérarchisation à deux niveaux vue précédemment, il faudra choisir de privilégier soit la localisation soit le type en le positionnant sur les bits de poids fort.
 +
 +
* '''Forme hexadécimale'''. Dans cette forme, sur un SID long de 16 bits, on conserve 4 bits utilisables pour coder 16 instances de chaque localisation/type.
 +
<center>
 +
VLAN-ID sur les bits de poids fort du SID<br>
 +
localisation {W} sur 4 bits (1 quartet) privilégiée<br>
 +
<tt>2001:db8:cafe:{WWWWVVVVVVVVBBBB}::/64</tt><br>
 +
ou<br>
 +
VLAN-ID sur les bits de poids fort du SID<br>
 +
localisation {W} sur 8 bits (2 quartets) privilégiée<br>
 +
<tt>2001:db8:cafe:{WWWWWWWWVVVVBBBB}::/64</tt><br>
 +
 +
Inversement, si on privilégie le type d'usage<br>
 +
VLAN-ID sur les bits de poids fort du SID<br>
 +
type d'usage {V} sur 4 bits (1 quartet) privilégié<br>
 +
<tt>2001:db8:cafe:{VVVVWWWWWWWWBBBB}::/64</tt><br>
 +
ou<br>
 +
VLAN-ID sur les bits de poids fort du SID<br>
 +
type d'usage {V} sur 8 bits (2 quartets) privilégié<br>
 +
<tt>2001:db8:cafe:{VVVVVVVVWWWWBBBB}::/64</tt><br>
 +
</center>
 +
Quelques exemples illustratifs de la forme hexadécimale
 +
(localisation sur 1 quartet, type d'usage sur 2 quartets)
 +
<center>                                   
 +
{| border="0" class="wikitable alternance centre" width="90%"
 +
|- align="center"
 +
 +
! scope="col" colspan="2" width="20%"| '''VLAN-ID'''
 +
! scope="col" colspan="2" width="20%"| '''localisation'''
 +
! scope="col" colspan="2" width="20%"| '''Type d'usage'''
 +
! scope="col" rowspan="2" width="40%"| '''IPv6 (VLAN-ID hexadécimal)'''
 +
|- align="center"
 +
| décimal || hexa || décimal || hexa || décimal || hexa
 +
 +
|- align="center" style="background:silver"
 +
| 0001 ||(001)|| 0 ||('''0'''01)|| 1 ||(0'''01''')||  <tt>2001:db8:cafe:'''001'''0::/64</tt>
 +
 +
|- align="center"
 +
| 0529 ||(211)|| 2 ||('''2'''11)|| 17 ||(2'''11''')||
 +
<tt>2001:db8:cafe:'''211'''0::/64</tt>
 +
 +
|- align="center" style="background:silver"
 +
| 4094 ||(ffe)|| 15 ||('''f'''fe)|| 254 ||(f'''fe''')||
 +
<tt>2001:db8:cafe:'''ffe'''0::/64</tt>
 +
 +
|}
 +
</center>
 +
 +
* '''Forme décimale'''. La lisibilité directe est alors conservée mais chaque quartet (nibble) ne peut prendre qu'une valeur numérique (0..9). Il ne reste plus de bits du SID disponibles pour coder d'éventuelles instances de chaque type/localisation. Cependant, on pourra choisir d'affecter un, deux ou trois quartets pour coder 10, 100, ou 1000 localisations, avec respectivement 1000, 100, 10 types d'usage.
 +
<center>
 +
<tt>2001:db8:cafe:1025::/64</tt><br>
 +
VLAN 1025, localisation (1) type d'usage (025) <br>
 +
cas de la localisation sur 1 quartet et type d'usage sur 3 quartets<br>
 +
ou<br>
 +
VLAN 1025, localisation (10) type d'usage (25)<br>
 +
cas de la localisation sur 2 quartets et type d'usage sur 2 quartets<br>
 +
ou<br>
 +
VLAN 1025, localisation (102) type d'usage (5) <br>
 +
cas de la localisation sur 3 quartets et type d'usage sur 1 quartet<br>
 +
</center>
 +
Quelques exemples illustratifs de la forme décimale (localisation sur 2 quartets, type d'usage sur 2 quartets).
 +
<center>                                   
 +
{| border="0" class="wikitable alternance centre" width="90%"
 +
|- align="center"
 +
 +
! scope="col" width="20%"| '''VLAN-ID'''
 +
! scope="col" width="20%"| '''localisation'''
 +
! scope="col" width="20%"| '''Type d'usage'''
 +
! scope="col" width="40%"| '''IPv6(VLAN-ID forme décimale)'''
 +
 +
|- align="center" style="background:silver"
 +
| 0001 || 00 || 01 || <tt>2001:db8:cafe:'''0001'''::/64</tt>
 +
 +
|- align="center"
 +
| 0529 || 05 || 29 || <tt>2001:db8:cafe:'''0529'''::/64</tt>
 +
 +
|- align="center" style="background:silver"
 +
| 4094 || 40 || 94 || <tt>2001:db8:cafe:'''4094'''::/64</tt>
 +
 +
|}
 +
</center>

Latest revision as of 17:12, 9 January 2023

Activité 14  : Plan d'adressage IPv6 unicast

Introduction

Lors de l'activité précédente, nous avons vu que les adresses IP unicast sont construites en combinant 2 éléments (voir la figure 1). Le premier élément vise à localiser le réseau dans l'Internet. Il sert à l'acheminement des paquets à travers l'Internet ou à travers l'interconnexion pour les infrastructures privatives. Le second élément identifie l'interface au sein de son réseau. Il sert à la remise directe du paquet à l'interface de destination sur le dernier saut de l'acheminement. Dans cette activité, nous nous intéressons à la construction de ces adresses unicast. Pour la partie préfixe de réseau, il s'agit de définir un plan d'adressage. Ce plan d'adressage est organisé de manière hiérarchique afin de permettre la délégation pour une gestion décentralisée mais aussi rendre les préfixes agrégables. L'objectif, dans ce dernier cas, est de constituer des tables de routage les plus concises possibles. Pour IPv6, vu la taille de l'espace d'adressage, cette caractéristique d'agrégation est essentielle. Dans cette activité, nous allons indiquer les différentes façons de numéroter les réseaux. Pour la partie identifiant d'interface, l'objectif est de définir un identifiant, si possible automatiquement, qui soit unique au sein du lien. Nous allons étudier les différentes techniques de constructions de ces identifiants. Mais avant, nous allons rappeler une caractéristique d'IPv6 dans l'utilisation des adresses unicast, à savoir la possibilité d'avoir plusieurs adresses unicast allouées à une interface de communication. Ces adresses multiples peuvent être utilisées simultanément ou l'une après l'autre. Un mécanisme de vieillissement est donc nécessaire pour limiter la validité d'une adresse.

azerty #cas particulier des liaisons point à point

Figure 1 : Hiérarchisation de l'adresse unicast en deux parties logiques.

Enfin, pour conclure cette introduction, signalons que les conseils donnés par RIPE NCC sont précieux pour toutes personnes amenées à concevoir un plan d'adressage[1]. L'IETF a également édité un recueil de conseils pour le déploiement d'un réseau IPv6 par le RFC 7381.

Adressage multiple des interfaces

En IPv6, les interfaces de communication des nœuds disposent simultanément de plusieurs adresses. En effet, une interface dispose au moins d'une adresse purement locale sur son lien local (l'adresse lien-local). Celle-ci est automatiquement affectée à l'interface lors de la phase d'activation de cette dernière par le système d'exploitation. Selon la nature du lien de rattachement (liaison point à point, domaine de diffusion ethernet filaire ou wifi...), l'interface peut également disposer d'une ou plusieurs adresses routables soit localement (cas des adresses ULA), soit globalement (cas des adresses publiques : GUA). Ces adresses unicast routables sont constituées en associant le préfixe réseau associé au lien à l'identifiant d'interface. L'affectation de ces adresses routables peut être fait soit par l'administrateur système de la machine, soit par le réseau en s'appuyant sur les mécanismes d'auto-configuration "avec" ou "sans état", comme nous le verrons dans une séquence ultérieure. La figure 2 illustre l'adressage multiple d'une interface de communication pour un nœud.

Figure 2 : Adressage multiple d'une interface de communication.

Nous savons, depuis l'activité "qu'est ce qu'une adresse IP ?", que les adresses IP ne sont pas permanentes. L'adresse IP a une durée de vie régie par des états. Ces états sont : provisoire, préféré, déprécié et invalide. Aussi, il faut comprendre qu'une adresse IP n'est allouée que temporairement à une interface. Il faut voir l'allocation comme un bail de location. Pour continuer d'utiliser une adresse IP, à l'expiration du bail, il faut procéder au renouvellement du bail. Ainsi, le système d'exploitation a en charge de renouveler périodiquement l'allocation d'une adresse IP en cours d'utilisation. Autrement, l'adresse passe dans l'état déprécié afin de rendre inutilisable cette adresse pour les nouvelles connexions et permettre de terminer les sessions et les connexions existantes. Il faut alors, dans un même temps, une nouvelle adresse valide pour les nouvelles connexions ou sessions applicatives. L'idée que les adresses IP sont allouées temporairement trouve sa motivation de rendre la renumérotation d'un réseau facile. La renumérotation d'un réseau consiste à remplacer un préfixe réseau par un autre. L'opération de renumérotation peut s'avérer nécessaire lorsque l'organisation change de fournisseur d'accès à Internet ou que le plan d'adressage est devenu obsolète. Il n'en reste pas moins que malgré les facilités qu'offrent IPv6, la renumérotation d'un réseau reste une opération périlleuse [RFC 5887].

Nécessité d'organiser un plan d'adressage

L'espace d'adressage IPv6 est « astronomiquement » grand. Il s'ensuit que le plan d'adressage unicast global adopté aujourd'hui est organisé hiérarchiquement. À l'instar du réseau téléphonique historique où les appels sont routés en fonction d'un préfixe national (exemple le +33 pour les appels vers la France), l'Internet est bâti selon une organisation hiérarchique. Cependant, cette hiérarchie n'est pas d'ordre géographique mais plutôt administrative et organisée en « régions » (Amérique du nord, Asie Pacifique, Europe,...). Chaque région est gérée par un registre Internet régional (Regional Internet Registry ou RIR). Cette organisation se retrouve au moment de l'acheminement des datagrammes dans l'Internet. Les opérateurs du cœur de l'Internet routent (aiguillent) les datagrammes selon les préfixes les plus courts. Les RIR leur attribuent des préfixes courts, car le rôle de ces opérateurs internationaux est d'acheminer les datagrammes vers les grandes zones régionales de l'Internet. Ces opérateurs délèguent ensuite à leur clients, registres locaux (LIR) ou opérateurs, des préfixes un peu plus longs, afin qu'eux même puissent déléguer des préfixes à leurs clients ou organisations utilisatrices pour acheminer les datagrammes vers leurs propres réseaux. Ainsi, un utilisateur final (organisation, entreprise ou particulier) se verra déléguer par son fournisseur d'accès à Internet (FAI) un préfixe d'une longueur comprise, en général, entre 48 et 64 bits. La zone de l'adresse, comprise entre la longueur du préfixe alloué par l'opérateur et la limite du /64 des adresses unicast est parfois qualifiée de SID (Subnet ID). En effet, elle permet à l'administrateur d'adresser entre un unique réseau (cas où le client a obtenu un préfixe /64 de son FAI) et 65536 réseaux (cas où le client a obtenu délégation administrative de son FAI sur un préfixe /48 : il dispose alors de 16 bits (entre 48 et 64) pour numéroter 2 puissance 16 soit 65536 réseaux). C'est cet espace d'adressage dont l'administrateur réseau a la responsabilité. Il s'agit pour lui d'organiser cet espace pour déployer efficacement les réseaux de son organisation. Nous allons maintenant présenter différents modes d'organisation possibles en nous appuyant sur le RFC 5375.

Politique d'assignation des adresses

Les spécifications primitives d'assignation des adresses [RFC 3177] aux utilisateurs finaux recommandaient d'allouer :

  • /48 (65536 sous-réseaux) dans le cas général,
  • /64 (un sous-réseau unique) lorsqu'un et un seul réseau physique était nécessaire,
  • /128 (adresse unique) lorsqu'il était absolument connu qu'un et un seul équipement était connecté.

Le RFC 6177, également connu sous BCP157 (Best Current Practice), est venu remettre en cause les certitudes initiales et le « /48 pour tout le monde » n'est plus la recommandation officielle. La taille du préfixe est maintenant laissée à la discrétion du fournisseur avec la recommandation « floue » d'allouer un bloc d'adresses adapté aux besoins de l'utilisateur en évitant l'allocation d'un réseau unique. Ainsi, si un /48 est adapté pour un réseau de campus, il est clairement surdimensionné dans le cadre d'un usage domestique. Inversement, le réseau unique en /64 est notablement insuffisant ; les besoins actuels et futurs de la plupart des foyers nécessiteront sans doute quelques réseaux cloisonnés en fonction des usages : réseau général (accès internet, les réseaux sociaux, le multimédia...), réseau domotique (lave-linge, sèche-linge, réfrigérateur...), réseau de commande périmétrique (volets, alarme, chauffage, aquarium...), sans parler des promesses médiatiques de l'Internet des objets (IoT Internet of Things). Pour les utilisateurs dits « grand public » ou les sites de taille modeste, un préfixe /56 ou /60 semble donc plus approprié.

Préfixes de sous-réseaux (SID Subnet IDentifier)

Préfixes unicast, la frontière des 64 bits à ne pas dépasser !

Étendre le préfixe de sous réseau sur les bits de poids fort de l'identifiant d'interface IID (à la manière de l'antique subneting d'IPV4) n'est pas un bonne pratique et vous expose à des aléas de fonctionnement. En effet, si les protocoles de routage opèrent sur des préfixes de taille quelconque, les mécanismes de gestion des adresses (IPAM IP Address Management), quant à eux, et notamment ceux d'auto-configuration (SLAAC, DHCP...) sont construits sur une taille d'IID fixe à 64 bits. Ainsi, s'il est admis que l'on attribue des préfixes longs /112 ou /120 pour des liaisons point à point (cf. § "Cas particulier des liaisons point à point" ci dessous) ou que certains préfixes utilisés dans les mécanismes de cohabitation IPv6 / IPv4 que nous aborderons en séquence 4 soient de longueur /96, il s'agit de situations particulières pour lesquelles les interfaces sont administrativement gérées et ne dépendent pas des mécanismes d'auto-configuration.

Les sous-réseaux IPv6 doivent s'aligner sur les préfixes de longueur /64. Des tailles supérieures sont possibles, mais ne sont pas sans poser problème pour les mécanismes de contrôle tels que l'auto-configuration des adresses, couramment utilisée, et qui présupposent des préfixes des sous-réseaux alignés sur 64 bits. Ces mécanismes d'auto-configuration seront abordés dans une séquence ultérieure.

Ces préfixes de 64 bits sont construits à partir du préfixe global permettant le routage des paquets vers le réseau du site regroupant ces sous-réseaux. Le préfixe global est celui utilisé dans les tables de routage de l'opérateur connectant le site à Internet. À ce préfixe global est ajouté la valeur identifiant le sous-réseau à l'intérieur du réseau du site. Cette valeur est définie sur le nombre de bits restant pour définir un préfixe unique de 64 bits. Ce préfixe sera utilisé dans les tables de routage internes au réseau du site. La figure 3 décrit cette hiérarchie de la partie préfixe de l'adresse.

Figure 3 : Hiérarchisation de la partie préfixe.

Représentation des subdivisions

Dans la suite de cette activité, nous raisonnerons sur la base d'un préfixe de 48 bits (espace SID de 16 bits). Les exemples décrits sur la base d'adresses documentaires pourront ainsi illustrer aussi bien un contexte de réseaux publics (un préfixe /48 unicast global) qu'un réseau privatif (préfixe /48 d'adresse locale unique ULA). Cependant, les règles d'ingénierie présentées pourront également se décliner de manière plus limitée sur des préfixes plus longs /56 ou /60 avec un espace SID réduit à 8 ou 4 bits.

Appréciation de l'étendue d'un préfixe

Afin de visualiser l'étendue d'un préfixe (1re adresse, dernière adresse, nombre d'adresses...) d'après sa longueur, vous pouvez vous aider d'une calculatrice de préfixe CIDR telle que celle pointée à la rubrique #Ressources complémentaires

Nous supposons que le préfixe pour notre activité est 2001:db8:cafe::/48. Le préfixe est obtenu :

  • soit par allocation de notre fournisseur d'accès dans le cadre d'un adressage unicast global routable sur l'Internet public,
  • soit par algorithme conforme RFC 4193 dans la cadre d'un adressage privatif (ULA Unique unicast Local Address).

Nous disposons donc d'une zone SID de 16 bits permettant de distinguer 65536 sous-réseaux possibles en préfixes de 64 bits (de 2001:db8:cafe::/64 à 2001:db8:cafe:ffff::/64).

Convention de notation binaire du champ SID

Dans cette présentation, nous adoptons les conventions de notation suivantes pour les illustrations et exemples : Comme les 48 premiers bits sont administrativement fixés et que les 64 bits de poids faible sont réservés pour l'identification de l'interface, chaque référence de sous-réseau sera portée par les bits 48 à 63 (L'IETF numérote les bits en démarrant de zéro de la gauche (most significant : poids fort) à la droite (least significant : poids faible).

Exemple :

2001:db8:cafe:{LLLLTTTTBBBBBBBB}::/64
ou
2001:db8:cafe:ltbb::/64

  • Chaque lettre majuscule encadrée par '{' et '}' représente 1 bit du champ SID. 4 bits successifs représentent un quartet également appelé « nibble » ;
    (Un nibble (ou plus rarement nybble) est, en informatique, un agrégat de 4 bits, soit un demi-octet. On trouve aussi les termes francisés semioctet ou quartet , source wikipédia https://fr.wikipedia.org/wiki/Nibble). Un quartet peut prendre une valeur entre 0 et 15 et peut se représenter par un chiffre hexadécimal (0..9, a..f) (cf. vademecum de notation hexadécimale) ;
  • Les chiffres et lettres minuscules ['a'..'f'] représentent la valeur hexadécimale d'un quartet ;
  • Dans cette présentation, nous subdivisons les 16 bits du SID en groupes distingués de la manière suivante :
    • B : bit non défini et assignable ;
    • L : bit assigné à l'identification de la localisation du sous-réseau ;
    • T : bit assigné à l'identification du type de sous-réseau.

Ainsi, l'exemple précédent où les 16 bits SID sont positionnés à la valeur {LLLLTTTTBBBBBBBB} produira des préfixes IPv6 du type 2001:db8:ltbb::/64. Inversement, si l'on choisit de positionner les bits de "type de sous-réseau" sur le quartet de poids fort et les bits de localisation sur le quartet de poids faible du 1er octet SID de cette manière {TTTTLLLLBBBBBBBB}, cela produira un préfixe de type 2001:db8:tlbb::/64.

Différentes stratégies d'allocation des valeurs de SID sont présentées en annexe. Un administrateur peut les mettre en pratique pour définir un plan d'adressage pour son réseau.

Cas particulier des liaisons point à point

Les liaisons point à point, qu'elles soient concrètement louées auprès du service idoine d'un opérateur (liaison spécialisée, fibre noire...) pour assurer l'interconnexion de deux sites géographiquement distants, ou qu'elles soient logiquement établies sous forme de tunnels (IP dans IP, VPN MPLS, tunnel IPSec…) constituent un cas particulier. Dans le cas général, on peut allouer un préfixe /64 à chacune des liaisons. Cependant, sur des réseaux maillés où le nombre de liaisons point à point est quelconque, attribuer un /64 à chacune de ces liaisons n'est pas efficace. La caractéristique d'une liaison point à point est de relier uniquement une interface à chacune de ses extrémités, ne nécessitant, de fait, que deux identifiants distincts. De plus, ces liaisons sont administrées et ne sont, en général, pas tributaires d'un mécanisme d'auto-configuration. Aussi, attribuer un /64 offrant la possibilité d'adresser 2 puissance 64 interfaces à un support limité à deux, et uniquement deux interfaces, conduit à la perte de ((2 puissance 64) - 2) adresses qui resteront non attribuées. L'utilisation d'un /64 sur une liaison point à point peut conduire à des problèmes de sécurité (RFC 6164): soit sous la forme d'aller-retours de datagrammes sur cette liaison (syndrome de la balle de ping-pong) entraînant une congestion du support, ou soit sous la forme de déni de service des routeurs connectés au lien au travers d'une saturation des caches de découverte des voisins. À défaut d'un /64, quel est le préfixe approprié pour ce type de liaison ?

  • /127 serait possible dans la mesure où IPv6 n'a pas d'adresse de diffusion (identifiant de host tout à 1 dans le cas d'IPv4). Cependant, l'adresse tout à zéro de chaque sous-réseau est réservée comme l'adresse anycast des routeurs (all routers anycast address), ce qui signifie que la plupart des routeurs sont susceptibles de recevoir des datagrammes de service sur cette adresse.
  • /126 évite le problème de l'adresse anycast tout à zéro. Cependant, les 128 adresses hautes de chaque sous-réseau sont également réservées pour diverses adresses d'anycast (RFC 2526) ; bien que, dans la pratique, cela ne semble pas poser de problème.
  • /120 permet de s'affranchir des adresses anycast réservées.
  • /112 permet de s'affranchir des adresses anycast réservées et a, en plus, l'avantage d'être facilement lisible par les opérateurs humains car aligné sur le mot de 16 bits final (celui affiché après le dernier séparateur :, cf. activité 12 « Notation d'une adresse IPv6 »).

Le RFC 6164 recommande l'utilisation d'un préfixe de longueur /127 pour IPv6, ne permettant ainsi que deux adresses IP.

Identification locale : l'IID (Interface IDentifier)

Les identifiants d'interfaces 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.

Nota : Il n'y a pas de valeur réservée pour les identifiants d'interface, les valeurs "tout à zéro" et "tout à 1" sont valides. Dans la pratique ces valeurs sont peu significatives et de fait généralement inutilisées. Ainsi pour un préfixe donné, par exemple : 2001:db8:c0ca:c01a::/64 ; les adresses 2001:db8:c0ca:c01a::/64 et 2001:db8:c0ca:c01a:ffff:ffff:ffff:ffff/64 sont valides et potentiellement assignables à une interface.

Si, initialement, pour des raisons d'auto-configuration, l'identifiant d'interface devait nécessairement être dérivé de l'adresse de niveau 2 (adresse matérielle), c'est de moins en moins le cas. Il existe plusieurs méthodes pour construire cette valeur de 64 bits [RFC 8981] :

Identifiant 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 emblématique. Chaque machine sur le réseau doit être configurée avec son client DNS pointant vers l'adresse du serveur DNS. Si celui-ci a un identifiant d'interface basé sur l'adresse de niveau 2, en cas de changement de la carte réseau sur le serveur DNS, l'ensemble des machines du domaine devraient être reconfigurées. Si l'on ne souhaite pas utiliser de protocole de configuration automatique tel DHCPv6, il est préférable d'attribuer au serveur DNS une valeur manuelle d'identifiant d'interface. Cette valeur statique sera stable dans le temps et pourra être utilisée pour référencer le résolveur DNS sur la configuration de l'ensemble des machines du réseau.

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 pourra être :

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 à saisir :

2001:db8:1234:1::192.0.2.123

Identifiant dérivé de l'adresse matérielle de l'interface

Les caractéristiques des adresses matérielles de niveau 2 :

  • unicité garantie sur le lien local,
  • stabilité tant que la carte réseau est inchangée,

sont des avantages pour la définition automatisée des identifiants d'interface. Cependant elles sont peu mémorisables pour l'administrateur.

Ces identifiants d'interfaces étant stables dans le temps, à chaque fois qu'un utilisateur nomade 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[2]. Ce sujet de traçabilité et de respect de la vie privée a fait l'objet d'une prise de conscience collective suite aux révélations d'Edward Snowden quant à la surveillance de masse opérée par les états. Il faut cependant noter que la traçabilité par l'identifiant d'interface n'en est qu'un des éléments parmi d'autres. Les cookies mis en place par les services web ou les recoupements d'infos personnelles imprudemment déposées sur les réseaux sociaux sont bien plus efficaces ; mais ils ne s'agit plus d'un problème réseau. De plus comme les adresses MAC contiennent l'identification du matériel, les IID dérivés propagent à l'extérieur du réseau des informations sur le type de matériel.

Initialement largement utilisés par les mécanismes d'auto-configuration, ces identifiants sont donc aujourd'hui en voie de désuétude en raison de ces problèmes de traçabilité. Les principaux OS ont largement opté pour les IID temporaires aléatoires décrits au paragraphe suivant. Seules les adresses locales de lien (LLA) ont conservé cet identifiant automatiquement déduit dès l'initialisation de l'interface. Ces adresses LLA étant purement locales et non routables, elles sont moins sensibles à la traçabilité.

Identificateur 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éseaux 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.

Si une machine ou une interface possède un identificateur global IEEE EUI-64, celui-ci a la structure montrée par la figure 7. Les 24 premiers bits de l'EUI-64, comme pour les adresses MAC IEEE 802.3, identifient le constructeur. 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.
Figure 7 : Format de l'identificateur IEEE EUI-64.

Dans le cas d'IPv6, l'identifiant d'interface à 64 bits peut être dérivé de l'EUI-64 en inversant le bit u comme le montre la figure 8. 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.

Figure 8 : Identifiant d'interface dérivé du format EUI-64.
Identificateur 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 réservée 0xfffe, puis le bit u est mis à 1 comme dans le cas précédent. La figure 9 illustre ce processus.

Figure 9 : Identifiant d'interface dérivé de l'adresse MAC (EUI-48).

Dans l'exemple suivant, l'interface Ethernet eth2 de l'hôte cos dispose de l'adresse matérielle MAC : 52:54:00:8A:50:A5. L'adresse LLA fe80::5054:ff:fe8a:50a5 allouée automatiquement à l'initialisation de l'interface dispose de l'IID 5054:ff:fe8a:50a5 déduit de l'adresse MAC en insérant les 16 bits réservés ff:fe entre l'identifiant IEEE du constructeur et le n° de série de l'interface. L'inversion du bit u traduit l'octet de poids fort de la valeur 0x52 en 0x50.

cos:~$ ifconfig eth2
eth2      Link encap:Ethernet  HWaddr 52:54:00:8A:50:A5  
         inet6 addr: fe80::5054:ff:fe8a:50a5/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:147 errors:0 dropped:109 overruns:0 frame:0
         TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:8936 (8.7 KiB)  TX bytes:1032 (1.0 KiB)
Cas Particuliers

Si une interface ne possède aucune adresse, par exemple l'interface utilisée pour les liaisons PPP (Point to Point Protocol), 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, durant la phase de DAD (Duplicate Address Detection), et devra être résolu manuellement.

Opacité des identifiants d'interface

Les bits u et g n'ont de signification que pour les adresses de niveau MAC (adresse EUI-64 et EUI-48). Si, aux origines d'IPv6 (RFC 4291), le bit u conservait cette signification d'universalité, c'est qu'à l'époque l'identifiant d'interface dérivait majoritairement de l'adresse matérielle. C'est moins le cas aujourd'hui avec les IID temporaires aléatoires, voire cryptographiques (cf. paragraphes suivant). L'IETF a remis les choses au clair dans le RFC 7136 en précisant maintenant que "les identifiants d'interface doivent être considérés comme opaques et il ne faut pas tirer de conclusion de la valeur de tel ou tel bit". La dérivation d'un IID à partir d'une adresse matérielle reste inchangée mais, inversement, si on ne sait pas comment a été généré l'IID, on ne peut rien déduire de la signification des deux bits de poids faible de l'octet de poids fort de l'IID. N'attachez donc pas plus d'importance à ces bits qu'ils n'en n'ont réellement aujourd'hui.

Valeur temporaire aléatoire

L'identifiant d'interface basé sur des adresses MAC, comme indiqué précédemment, pose 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 devient alors possible de traquer un individu nomade utilisant un portable, chez lui, au bureau, lors de ses déplacements.

Pour couper court à toutes les menaces de boycott d'un protocole qui « menacerait la vie privée », l'IETF a validé d'autres méthodes de construction d'un identifiant d'interface comme celle reposant sur des tirages aléatoires [RFC 8981]. L'identifiant d'interface est soit choisi aléatoirement, soit construit par un algorithme de hachage, 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.

La plupart des OS modernes ont opté, généralement par défaut, pour ce mode d'adressage plus discret. À l'issue de la procédure d'auto-configuration, l'interface dispose de plusieurs adresses construites sur le préfixe GUA ou ULA du réseau local :

  • une adresse principale avec un IID stable opaque (ne révélant pas d'information) utilisée pour les flux entrants (initialisation des connexions vers les services applicatifs "publics" de l'hôte). C'est cette adresse qui pourra être référencée dans les registres du service de nommage (DNS : Domain Name Service) ;
  • une (ou généralement plusieurs) adresse temporaire, périodiquement renouvelée, utilisée pour la discrétion des flux sortants (initialisation des connexions vers les services applicatifs externes à l'hôte).

Nota : Selon l'OS, l'IID temporaire aléatoire peut également optionnellement être activé pour les adresses locales de lien ; quand bien même ces adresses LLA, purement locales et non routables, sont moins sujettes à la traçabilité.

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, et que l'enregistrement de cookies dans un navigateur Web pour identifier l'utilisateur soit verrouillé.

En contre-partie, on notera qu'il est dès lors plus difficile à un administrateur réseau, (RSSI) en charge de la sécurisation des infrastructures, de filtrer les machines ou d'analyser les journaux système, du fait de la volatilité de ces adresses (beaucoup de techniques de protection de la vie privée ont ce défaut).

Figure 10 : Adresse IPv6 temporaire de MS-Windows.

Valeur stable opaque

L'identifiant d'interface dérivé de l'adresse matérielle pose le problème de la traçabilité des équipements nomades et de respect de la vie privée qui en découle. Cependant, il dispose de la propriété de stabilité (on éteint la machine et on la rallume, on est sûr de retrouver la même adresse IPv6) qui simplifie les tâches administratives (Ainsi, lorsqu'on regarde le journal des connexions, on peut facilement retrouver la machine qu'on a repéré. Et la création d'ACL (Access Control List) est simple, puisque les adresses ne changent pas). Le RFC 7217 propose une méthode de génération de l'IID opaque, ne révélant pas d'information relativement à la configuration matérielle, mais stable dans le temps. Le principe est de condenser (à l'aide d'une fonction de hachage telle que SHA-256 par exemple et de ne conserver que les 64 bits de poids faible) un secret (stocké dans une mémoire non volatile), un certain nombre de caractéristiques de la machine et le préfixe, de manière à avoir des identifiants stables, mais préservant quand même partiellement la vie privée de postes nomades : l'identifiant d'interface change quand la machine change de réseau, ne permettant plus de la suivre à la trace. Mais, si on reste sur le même réseau, l'adresse est stable. Le RFC 8064 a confirmé la prééminence de cette méthode sur la méthode dérivée de l'adresse MAC pour la procédure d'auto-configuration sans état (qui sera décrite dans la séquence 3).

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.

Conclusion

Une interface de communication en IPv6 peut avoir plusieurs adresses unicast. Les adresses IP sont allouées temporairement. On parle alors d'une durée de vie d'une adresse qui est en fait sa durée d'allocation. L'intérêt est de rendre la renumérotation, c'est-à-dire le changement d'adresse, rapide et automatique.

L'adresse unicast IPv6 est découpée en 2 parties. Une partie va servir à l'identification mais aussi à la localisation du réseau au sein de l'Internet. On parle de préfixe réseau. Nous avons étudié comment définir et organiser un plan d'adressage de manière hiérarchique afin de permettre la délégation pour une gestion décentralisée mais aussi rendre les préfixes agrégables, afin de constituer des tables de routage les plus concises possibles. Pour IPv6, vu la taille de l'espace d'adressage, cette caractéristique d'agrégation est essentielle. La seconde partie de l'adresse sert à identifier une interface au sein d'un lien. Nous avons présenté les différents modes de construction des identifiants d'interfaces.

Références bibliographiques

  1. RIPE NCC (2013), publiée sous licence CC-BY par Surfnet (www.surfnet.nl) Preparing an IPv6 address plan
  2. Internet society. (2014) Deploy 360 programm IPv6 Privacy Addresses Provide Protection Against Surveillance And Tracking

Ressources complémentaires

Pour aller plus loin

RFC et leur analyse par S. Bortzmeyer :

Annexe : Différentes stratégies pour la définition des sous-réseaux (SID)

Lorsqu'un administrateur a pour tâche de déployer IPv6 sur son réseau, une des étapes importantes est la définition du plan d'adressage. Ce plan définit l'ensemble des adresses utilisées sur chacun des réseaux du site concerné. En IPv6, chaque réseau se voit attribuer un préfixe nécessairement de largeur 64 bits (/64). L'administrateur connaissant le préfixe assigné à son site, communément de largeur 48 bits, il lui reste à définir les 16 bits restants pour identifier chacun de ces réseaux. Cette valeur est appelé identifiant de sous-réseau ou SID.

Réseau à plat

Les petites entités sans structure organisationnelle bien définie peuvent éventuellement fonctionner sans plan d'adressage structuré. Cependant, si l'infrastructure de niveau liaison est cloisonnée en domaines de diffusion distincts (VLAN), il faudra affecter au moins un identifiant de sous-réseau par domaine. L'attribution de ces identifiants de sous-réseaux pourra être simple, en numérotant éventuellement séquentiellement.
En l'absence de structuration du plan d'adressage, ce type de réseau ne passe pas à l'échelle. Si le nombre de sous-réseaux est amené à croître, l'administration et le contrôle de l'infrastructure deviennent rapidement problématiques. Il y a également nécessité de conserver dans une table les différentes affectations pour localiser le segment réseau ou la machine à l'origine d'un problème ou d'un dysfonctionnement puisque les adresses sont peu signifiantes.

Correspondance directe entre les identifiants IPv4 et IPv6

Pour les organisations ayant déjà structuré une infrastructure réseau sous le protocole IPv4, et sur laquelle on souhaite faire cohabiter les deux versions du protocole, il est possible d'adopter une stratégie de correspondance des identifiants de sous-réseau IPv4 et de sous-réseau IPv6. Deux cas peuvent être évalués :

Correspondance directe entre les sous-réseaux IPv4 et IPv6

Si les réseaux IPv4 sont structurés uniquement en sous-réseaux de préfixe /24 (exemple les réseaux privatifs du RFC 1918, un réseau de classe C 192.168.0.0/24 à 192.168.255.0/24 ou que l'on a « subnetté » en /24 le réseau de classe A 10.0.0.0 ou l'un des 16 classe B 172.16.0.0 à 172.31.0.0), une correspondance directe entre l'identifiant de sous-réseau IPv4 peut être envisagée avec l'identifiant SID d'IPv6 par transcription directe.


Figure 3 : Exemple de réseau.

Dans l'exemple du plan d'adressage de la figure 3, le lien direct entre les sous-réseaux IPv4 et les sous-réseaux IPv6 est directement visible. Pour les équipements d'infrastructure disposant d'une adresse fixe (routeur, serveurs applicatifs...) on peut également transposer l'identifiant d'hôte (4e octet d'adresse IPv4 d'un /24) en identifiant d'interface de l'adresse IPv6. Ainsi, par exemple, le serveur web d'adresse IPv4 192.168.1.123 peut être adressé 2001:db8:cafe:1::123 en IPv6.
Cependant, cette stratégie ne peut s'envisager que si les sous-réseaux IPv4 sont alignés sur 24 bits (/24). En effet, des sous-réseaux IPv4 de taille plus étendue (préfixe < /24) ou plus réduite (préfixe > /24) ne peuvent s'insérer dans le champ SID de 16 bits d'un préfixe IPv6 en /64 (le débordement au-delà du /64 posant des problèmes pour l'auto-configuration). Ainsi :

  • un préfixe IPv4 /28, par exemple les hôtes 172.16.5.14/28 et 172.16.5.18/28 sont dans des sous-réseaux IPv4 distincts : le sous-réseau 172.16.5.0/28 pour le premier et le sous-réseau 172.16.5.16/28 pour le second. Alors que la transposition simple en IPv6 va les placer dans le même sous-réseau : les hôtes 2001:db8:cafe:5::14/64 et 2001:db8:cafe:5::18/64 sont tous les deux dans le sous-réseau 2001:db8:cafe:5::/64.
  • Un préfixe IPv4 /23, par exemple les hôtes 10.0.8.250/23 et 10.0.9.5/23 sont tous les deux dans le même sous-réseau IPv4. Alors que la transposition simple les placera dans des sous-réseaux IPv6 distincts : 2001:db8:cafe:8::250/64 et 2001:db8:cafe:9::5/64

On notera également que la transposition directe des identifiants décimaux des sous-réseaux IPv4 dans le champ SID hexadécimal du sous-réseau IPv6, si elle facilite la correspondance de lecture pour l'administrateur humain, n'est en revanche pas optimale pour les tables de routage des sous-réseaux IPv6. Ainsi, le sous-réseau IPv4 10.0.23.0/24 est sélectionné (filtré / masqué) sur un octet de valeur binaire 0001 0111, alors qu'il sera sélectionné par le SID 0x0023 hexadécimal (0000 0000 0010 0011)

Correspondance directe entre les adresses IPv4 et IPv6

Si le préfixe de sous-réseau IPv4 n'est pas aligné sur un /24, il sera impossible de maintenir une relation directe entre les sous-réseaux IPv4 et IPv6. Cependant, dans ce cas, il peut être envisagé de maintenir une correspondance d'adresse en embarquant la totalité de l'adresse IPv4 dans l'identifiant d'interface de l'adresse IPv6 et en gérant le SID indépendamment du sous-réseau IPv4. Par exemple, la machine d'adresse IPv4 192.168.1.234 pourrait être adressée en IPv6 2001:db8:cafe:deca::192.168.1.234. En effet, pour les adresses IPv6 embarquant une adresse IPv4, si celle-ci occupe les 32 bits de poids faible de l'adresse IPv6 (la partie basse de l'identifiant d'interface), il est autorisé de continuer à la noter en notation décimale pointée. Cependant, si cette commodité facilite la saisie de la configuration d'un système, celui-ci l'affichera sous la forme canonique 2001:db8:cafe:deca::c0a8:1ea, notamment dans les journaux et log diverses. c0a801ea étant la conversion hexadécimale des 32 bits de l'adresse IPv4 écrite 192.168.1.234 en notation décimale pointée, la correspondance de lecture devient tout de suite moins évidente.

Plan d'adressage structuré

Lorsque l'on définit un plan d'adressage tel que sur la figure 4, il faut décider quelle structure doit être utilisée pour assigner les adresses aux réseaux de l'organisation. Plusieurs stratégies peuvent être envisagées. En nous appuyant sur l'exemple d'architecture suivante, nous allons présenter différents plans possibles.

Figure 4 : Plan d'adressage structuré

Structuration basique du plan d'adressage

Nous pouvons, par exemple, assigner les adresses des équipements par type d'usage ou par localisation, voire une combinaison des deux. Ainsi, nous pouvons choisir d'adresser d'abord par localisation, puis par type. Une fois les sous-réseaux définis, il restera les bits de poids faible qui pourront être utilisés pour d'autres usages, (selon la convention de notation définie précédemment le préfixe se représente de la manière suivante) :

2001:db8:cafe:{LLLLTTTTBBBBBBBB}::/64

Dans cet exemple, 4 bits sont assignés pour la localisation {L}. Les 4 bits suivants sont assignés pour le type d'usage {T}. Il reste 8 bits {B} pour d'autres affectations. Ainsi, ce plan d'adressage permet d'adresser une infrastructure qui peut être étendue sur 16 (4 bits) localisations, chacune pouvant déployer 16 (4 bits) types de réseaux. On dispose encore de 8 bits restants permettant éventuellement 256 sous-réseaux différents pour chaque localisation et chaque type.

Routeur vs firewall : localisation ou type d'usage d'abord ?

Nous devons, dans un premier temps, décider quelle affectation nous souhaitons privilégier : localisation d'abord puis type (tels que public/DMZ, employés, étudiants, invités, switchs, routeurs, serveurs, administration, comptabilité, production, etc.) ou inversement : type avant la localisation. La figure 5 illustre ces besoins.

Localisation d'abord

Quand la structuration se fait d'abord sur la localisation, chaque campus, bâtiment, département, est administrativement identifié par une référence. Cela permet d'optimiser les tables de routage. À l'instar de l'organisation des opérateurs, tous les réseaux de même destination seront agrégés en une unique route dans les tables de routage. Ce type de structuration du plan d'adressage convient aux organisations qui sont chargées de l'infrastructure globale d'interconnexion, en général des opérateurs ou les entités chargées des réseaux d'interconnexion des grandes organisations.

Type d'usage d'abord

Si le type d'usage des réseaux est d'abord privilégié, l'optimisation des entrées dans les tables de routage n'est alors pas envisageable. Cependant, cela n'est en général pas un problème pour la plupart des routeurs modernes, qui peuvent gérer un nombre conséquent d'entrées de table de routage. L'avantage de grouper les réseaux par catégorie d'usage est que cela facilite l'application des politiques de sécurité. La plupart des équipements de sécurité (pare-feux, listes de contrôles d'accès, contrôle des autorisations…) sont régis selon les types d'usages plutôt que sur la localisation des utilisateurs. Les organisations choisissent communément de privilégier les types d'usages sur la localisation pour des raisons pratiques. L'application des politiques de contrôle d'accès et de sécurisation, basées sur des listes de filtres logiques, est généralement déléguée à des équipements spécialisés de type pare-feu, placés frontalement à l'entrée du réseau. Une fois contrôlés, les flux sont ensuite acheminés en interne en fonction de leur localisation.

Figure 5 : Adressage structuré par localisation/usage.

Détermination de l'espace nécessaire au plan d'adressage

Nous devons déterminer quelle proportion des 16 bits du SID sera nécessaire pour chaque partie de cette structuration. Le nombres de bits nécessaires pour coder chacune des catégories de la structuration est conditionné par le nombre de types et de localisations de sous-réseaux de l'infrastructure, en ne négligeant pas les évolutions.

  1. Déterminer le nombre de localisations ou types de réseaux de votre organisation ;
  2. Augmenter le nombre d'une localisation supplémentaire, nécessaire pour le backbone ;
  3. Augmenter le nombre de localisations pour tenir compte d'éventuels sous-réseaux qui n'ont pas de localisation fixe, tels que l'infrastructure des tunnels VPN par exemple ;
  4. Augmenter le nombre de chacune des catégories pour tenir compte des expansions de court et moyen terme.

Pour chacune des catégories, déterminer la puissance de deux immédiatement supérieure ou égale, ce qui nous indiquera le nombre de bits nécessaires pour en coder les références.

Figure 6 : Plan d'adressage structuré.
Exemple 1 : sous-réseaux basés sur la localisation
  • nombre de localisations : 3
  • backbone d'interconnexion (réseau reliant switchs et routeurs) : 1
  • réseaux non localisés (tunnels VPN) : 1
  • extension future : 2

total : 7 sous-réseaux => 3 bits suffisent pour encoder les localisations, le reste pouvant être utilisé pour d'autres référencements.

2001:db8:cafe:{LLLBBBBBBBBBBBBB}::/64
Exemple 2 : sous-réseaux basés sur le type d'usage
  • nombre de groupes d'usage (personnel, étudiants, invités, serveurs, infra VPN) : 5 sous-réseaux,
  • backbone et infrastructure (réseau reliant switchs et routeurs) : 1 sous-réseau,
  • usages futurs : 4 sous-reseaux

total : 10 sous-réseaux => 4 bits suffisent pour encoder les types de sous-réseaux, les 12 bits restants pouvant être utilisés pour d'autres référencements.

2001:db8:cafe:{TTTTBBBBBBBBBBBB}::/64
Hiérarchisation à 2 niveaux

Dans les deux exemples précédents, les bits restants peuvent être utilisés pour numéroter un second niveau de sous-réseaux. Si la numérotation primaire est basée sur la localisation, plusieurs sous-réseaux peuvent être adressés sur chaque site. Si la numérotation primaire est par type d'usage, alors plusieurs réseaux de chaque type peuvent être créés (les réseaux internes réservés au personnel peuvent être déclinés par service ou fonction : comptabilité, RH, direction, production...). Les deux types de structuration, localisation / type d'usage, peuvent également se combiner. Si on choisit de privilégier la location en structure primaire :

2001:db8:cafe:{LLLTTTTBBBBBBBBB}::/64,

il reste 9 bits pouvant coder 512 instances de sous-réseaux de chaque type sur chaque site. Le fait de privilégier la localisation, en positionnant sa référence sur les bits de poids fort du SID, facilitera l'optimisation des tables de routage de l'infrastructure d'interconnexion des sites. Cependant, elle alourdira les politiques de sécurisation en multipliant les filtres, si la fonction de sécurisation (firewall) est centralisée, ou elle imposera de disposer d'une fonction de sécurisation (firewall) sur chaque site, entraînant des difficultés de cohérence de déploiement des politiques de sécurité. Inversement, privilégier le type d'usage sur la localisation

2001:db8:cafe:{TTTTLLLBBBBBBBBB}::/64,

réduira le nombre de filtres de la politique de sécurisation au détriment du nombre d'entrées dans les tables de routage de l'interconnexion. Cependant, cela ne pose en général pas de difficultés majeures compte tenu des capacités des routeurs modernes.

Latitude

Dans l'exemple précédent, 4 bits sont utilisés pour les types de sous-réseaux et 3 pour la localisation, laissant 9 bits, soit 512 (2 puissance 9) sous-réseaux possibles par type et par site. Cela sera suffisant dans la plupart des cas. Cependant, imaginons qu'il faille 2048 tunnels VPN par site pour accueillir les connexions sécurisées des personnels nomades. On pourrait envisager de modifier les tailles de champs de structuration primaire et secondaire, mais cela nécessiterait une reconfiguration globale de l'architecture. Une autre option consiste à répartir les tunnels sur 4 types distincts, chacun pouvant gérer 512 tunnels. De cette manière, on conserve une politique de sécurité simple et cohérente.

Type Usage
0 Backbone, infrastructure
1 Serveurs
2 Réservé expansion future
3 Réservé expansion future
4 Personnels
5 Étudiants
6 Invités
7 Réservé expansion future
8 VPN
9 VPN
a VPN
b VPN
c Réservé expansion future
d Réservé expansion future
e Réservé expansion future
f Réservé expansion future
Lisibilité

Lorsque l'on dispose d'un espace d'identification suffisamment large, dans notre cas de champ SID sur 16 bits nous laissant 9 bits 'B' de marge, il est de bonne pratique d'aligner les identifiants sur des frontières de mots de 4 bits (quartet) pour faciliter la lisibilité des préfixes notés en hexadécimal. Ainsi, dans notre exemple, si on étend l'identifiant de la localisation sur 4 bits au lieu de 3, elle sera visuellement facilement identifiée par un opérateur humain lors de la lecture des adresses. Le format des adresses de nos exemples devient donc :

2001:db8:cafe:{LLLLTTTTBBBBBBBB}::/64
2001;db8:cafe:{TTTTLLLLBBBBBBBB:}:/64

soit, en notation canonique, des adresses respectivement

2001:db8:cafe:wxyz::/64
2001:db8:cafe:xwyz::/64

avec les "nibbles" w pour identifier la localisation et x pour le type de sous-réseau.

Extensibilité

Si le nombre de localisations ou de types de sous-réseaux n'est pas à priori connu au moment de l'établissement du plan d'adressage, il est recommandé de conserver des frontières flexibles entre les différents groupes de bits identifiants les différents niveaux de la structuration. Cela peut être réalisé en adoptant une des stratégies décrites dans les RFC 1219 et RFC 3531. La contrepartie de cette approche est q'une certaine aisance dans la manipulation des bits doive être acquise, dans la mesure ou les frontières des zones d'identification peuvent être amenées à évoluer, ce qui peut nécessiter des mises à jour des règles et filtres de la politique de sécurité. Ainsi, par exemple, en assumant une structuration où l'on privilégie d'abord la localisation des sous-réseaux assignée aux bits de poids fort, sur le type assigné au bits intermédiaires, un plan d'adressage flexible initialement conçu pour 5 localisations, 3 types et 2 sous-réseaux par localisation/type :

2001:db8:cafe:{LLL*****TT*****B}::/64

pourrait évoluer selon le scénario hypothétique suivant, passant de 2 à 10 sous-réseaux nécessitant 4 bits B.

2001:db8:cafe:{LLL*****TT**BBBB}::/64

Après cela, le nombre de types d'usages pourrait passer à 5, nécessitant un troisième bit T.

2001:db8:cafe:{LLL****TTT**BBBB}::/64

Puis, suite à une expansion géographique, le nombre de sites passerait à 50, portant à 6 le nombres de bits L.

2001:db8:cafe:{LLLLLL*TTT**BBBB}::/64

Si ensuite le nombre de types d'usages passait à 13, on étendrait le champ type par un quatrième bit pris sur la droite où il reste plus de bits disponibles.

2001:db8:cafe:{LLLLLL*TTTT*BBBB}::/64

Nota 1 : les champs dont l'agrandissement s'effectue par la droite ({L} et {T} dans notre exemple) encodent les nombres selon un ordonnancement inhabituel. Le RFC 3531 décrit précisément les référencements de croissance gauche (les bits {B} dans notre exemple), centrale (les bits {T} dans notre exemple), ou droite (les bits {L} dans notre exemple).
Nota 2 : cette stratégie prenant en compte les besoins d'extensibilité peut s'avérer difficilement conciliable avec l'objectif de lisibilité préconisant un alignement sur les quartets tel que décrit dans le paragraphe précédent.

Identification des sous-réseaux d'après les VLAN

Confinement des domaines de diffusion de niveau 2 : les VLAN

Ethernet est le protocole dominant de niveau liaison de données (niveau 2 de la pile protocolaire), support du niveau réseau IPv6, des infrastructures de réseaux de la plupart des organisations. Les architectures Ethernet modernes, constituées de commutateurs (switchs Ethernet) sont généralement subdivisées en différents domaines de diffusion étanches, couramment dénommés VLAN. Cette structuration en VLAN permet de constituer des groupes logiques de machines partageant un même support de diffusion. Chaque VLAN Ethernet dispose d'un identifiant propre (VLAN-ID). Au niveau réseau (niveau 3 de la pile protocolaire), où opère le protocole IPv6, chaque VLAN se voit affecter un (ou plusieurs) identifiants de sous-réseaux distincts. En effet, deux postes localisés dans des VLAN distincts ne peuvent échanger directement des données et doivent passer une fonction de routage inter-réseaux (routeur) pour pouvoir communiquer.

Mise en correspondance VLAN-ID et SID

Une autre approche de structuration du plan d'adressage, sur ce type d'infrastructure, est de dériver l'identifiant de sous-réseau IPv6 (SID) de l'identifiant du domaine de diffusion (VLAN-ID). Les identifiants de VLAN Ethernet (VLAN-ID) qui ont une taille de 12 bits, 4094 VLAN distincts (les valeurs 0 et 4095 étant réservées), peuvent être créés sur une infrastructure locale. Dans notre cas de figure (préfixe en /48), où nous disposons de 16 bits pour identifier nos sous-réseaux IPv6, on peut envisager de faire coïncider VLAN-ID et SID soit sous leur forme hexadécimale, soit sous leur forme décimale.

  • Forme hexadécimale : en convertissant la valeur décimale de l'identifiant de VLAN en hexadécimale pour le transposer en identifiant de sous-réseau sur trois quartets (nibble). Dans ce cas, il reste un quartet du champ SID libre, qui peut être utilisé pour éventuellement coder 16 localisations ou 16 types. Il faut alors décider de la position du quartet libre, soit sur le quartet de poids fort, soit sur le quartet de poids faible.

VLAN-ID sur les bits de poids fort du SID 2001:db8:cafe:{VVVVVVVVVVVVBBBB}::/64

ou

VLAN-ID sur les bits de poids faible du SID 2001:db8:cafe:{BBBBVVVVVVVVVVVV}::/64

Cependant, si les adresses IPv6 sont en notation hexadécimale (cf. activité 12), les identifiants de VLAN sont en notation décimale, ce qui ne facilite pas la lisibilité de correspondance lors de la lecture de l'adresse IPv6.

  • Forme décimale. Afin de conserver une correspondance lisible entre l'identifiant de sous-réseau IPv6 et l'identifiant de VLAN, on peut conserver la valeur décimale du VLAN-ID et l'utiliser directement en lieu et place de l'identifiant SID hexadécimal. La correspondance est alors directement lisible. Ainsi, le sous-réseau IPv6 2001:db8:cafe:4321::/64 sera affecté au VLAN 4321. On remarquera que les identifiants de sous-réseaux supérieurs à 4095 ainsi que ceux comportant une ou plusieurs lettres hexadécimales (a..f) sont disponibles pour d'autres sous-réseaux logiques non liés à un VLAN.

Tableau récapitulatif des deux approches.

VLAN-ID IPv6 vlan-id forme décimale IPv6 vlan-id forme hexadécimale poids faible IPv6 vlan-id forme hexadécimale poids fort
1 2001:db8:cafe:0001::/64 2001:db8:cafe:0001::/64 2001:db8:cafe:0010::/64
12 2001:db8:cafe:0012::/64 2001:db8:cafe:000c::/64 2001:db8:cafe:00c0::/64
2783 2001:db8:cafe:2783::/64 2001:db8:cafe:0adf::/64 2001:db8:cafe:adf0::/64
4094 2001:db8:cafe:4094::/64 2001:db8:cafe:0ffe::/64 2001:db8:cafe:ffe0::/64

Cette approche introduit une certaine cohérence entre l'infrastructure de niveau 2 et l'adressage de niveau 3 et simplifie la numérotation des sous-réseaux IPv6 dans la mesure où une seule numération doit être gérée. Cependant, elle n'est pas optimale pour minimiser le nombre d'entrées dans les tables de routage ou pour optimiser les politiques de contrôle d'accès basées sur le filtrage des préfixes.

Identification des VLAN selon la localisation ou le type d'usage

Il est possible d'envisager un codage des VLAN-ID intégrant la localisation ou le type d'usage. Dans ce cas, il est souhaitable de conserver un alignement sur frontières de quartet (nibble). De ce fait, on peut choisir de coder la localisation sur 4 ou 8 bits {W} et coder respectivement le type sur 8 ou 4 bits {V} ou inversement. De même, comme pour la hiérarchisation à deux niveaux vue précédemment, il faudra choisir de privilégier soit la localisation soit le type en le positionnant sur les bits de poids fort.

  • Forme hexadécimale. Dans cette forme, sur un SID long de 16 bits, on conserve 4 bits utilisables pour coder 16 instances de chaque localisation/type.

VLAN-ID sur les bits de poids fort du SID
localisation {W} sur 4 bits (1 quartet) privilégiée
2001:db8:cafe:{WWWWVVVVVVVVBBBB}::/64
ou
VLAN-ID sur les bits de poids fort du SID
localisation {W} sur 8 bits (2 quartets) privilégiée
2001:db8:cafe:{WWWWWWWWVVVVBBBB}::/64

Inversement, si on privilégie le type d'usage
VLAN-ID sur les bits de poids fort du SID
type d'usage {V} sur 4 bits (1 quartet) privilégié
2001:db8:cafe:{VVVVWWWWWWWWBBBB}::/64
ou
VLAN-ID sur les bits de poids fort du SID
type d'usage {V} sur 8 bits (2 quartets) privilégié
2001:db8:cafe:{VVVVVVVVWWWWBBBB}::/64

Quelques exemples illustratifs de la forme hexadécimale (localisation sur 1 quartet, type d'usage sur 2 quartets)

VLAN-ID localisation Type d'usage IPv6 (VLAN-ID hexadécimal)
décimal hexa décimal hexa décimal hexa
0001 (001) 0 (001) 1 (001) 2001:db8:cafe:0010::/64
0529 (211) 2 (211) 17 (211)

2001:db8:cafe:2110::/64

4094 (ffe) 15 (ffe) 254 (ffe)

2001:db8:cafe:ffe0::/64

  • Forme décimale. La lisibilité directe est alors conservée mais chaque quartet (nibble) ne peut prendre qu'une valeur numérique (0..9). Il ne reste plus de bits du SID disponibles pour coder d'éventuelles instances de chaque type/localisation. Cependant, on pourra choisir d'affecter un, deux ou trois quartets pour coder 10, 100, ou 1000 localisations, avec respectivement 1000, 100, 10 types d'usage.

2001:db8:cafe:1025::/64
VLAN 1025, localisation (1) type d'usage (025)
cas de la localisation sur 1 quartet et type d'usage sur 3 quartets
ou
VLAN 1025, localisation (10) type d'usage (25)
cas de la localisation sur 2 quartets et type d'usage sur 2 quartets
ou
VLAN 1025, localisation (102) type d'usage (5)
cas de la localisation sur 3 quartets et type d'usage sur 1 quartet

Quelques exemples illustratifs de la forme décimale (localisation sur 2 quartets, type d'usage sur 2 quartets).

VLAN-ID localisation Type d'usage IPv6(VLAN-ID forme décimale)
0001 00 01 2001:db8:cafe:0001::/64
0529 05 29 2001:db8:cafe:0529::/64
4094 40 94 2001:db8:cafe:4094::/64
Personal tools