samedi 3 mai 2014

IPv6 pour les Nuls : Théorie

Dans cette article nous allons revenir sur la théorie de base à connaitre sur l’IPv6.

1)     Introduction à IPv6

 Le protocole IP a été conçu, il y a plus d’une vingtaine d’années, pour connecter des millions d’ordinateurs. Depuis quelques années, IP est victime de son succès et ne permet plus de répondre à la demande de connexion de milliards de machines informatisées dont disposeront les internautes de demain.  Même si ce nombre peut paraitre très élevé, cela ne suffit pas à assigner une adresse à toutes les machines existantes. S’en est suivit la séparation entre IP privées et publiques, et l’arrivé du NAT.
Mais aujourd’hui, cela  ne suffit plus.
Presque toutes les IPv4 ont été assignées.
L’arrivée d’IPv6 va permettre de corriger ce problème, tout en apportant certaines nouveautés.
 Savez-vous combien d’IPv6 différentes il est possible de générer ?
Voici une représentation de ce chiffre : environ 67 milliards de milliards d’adresses … par mm² de surface terrestre !
Autant dire qu’il sera difficile d’atteindre la pénurie !
Le nombre est si grand, que seul 15% des IP seront exploitées dans un premier temps (ce qui ne veut pas dire que les 15% seront assignées).
 Mais l’augmentation du nombre d’adresse n’est pas le seul avantage de l’IPv6.
Plusieurs autres innovations sont de la partie :
  • Fin du NAT : plus d’IP privée (chaque machine aura sa propre IP)
  • IPSEC supporté de base
  • IP mobile : une machine peut garder sont IP quand elle se déplace
  • Un Header plus simple
  • Adresse auto configurée
  • Disparition du Broadcast
  • Disparition d’ARP (mais remplacée par Neighbor Discovery)

2)     Structure d’une IPv6

 Une IPv6 est codée sur 128 bits (contre 32 pour une IPv4).
Elle est composée de 8 groupes de 16 bits.
En voici un exemple : 
2001:0048:0000:0000:1D00:1111:0B48:1111
L’adresse n’est plus en décimale, mais en hexadécimal.
Etant donné qu’une IPv6 est bien plus compliquée à écrire qu’une IPv4, il est possible de la résumer.
La première chose à faire est de supprimer les groupes de « 0 » consécutifs.
L’adresse précédente devient donc :
2001:0048::1D00:1111:0B48:1111
Les groupes de « 0 » supprimés sont remplacés par un « :: »
Attention tout de même, il n’est pas possible de réaliser cette opération plusieurs fois.
Par exemple, il n’est pas possible de résumer l’adresse suivante de cette manière :
2001:AAAA:0000:0000: BBBB:0000:0000:1111 -> 2001:AAAA::BBBB::1111
Il faut donc choisir le plus grand groupe de « 0 », et le supprimer.
 Ensuite, il faut supprimer tous les « 0 » en début de groupe :
L’adresse précédente (2001:0048::1D00:1111:0B48:1111) devient alors :
2001:48::1D00:1111:B48:1111
Les « 0 » en fin de groupes doivent être conservés.
Nous sommes donc passés de ça :
                                         2001:0048 :0000:0000:1D00:1111:0B48:1111
A ça :                                       2001:48::1D00:1111:B48:1111
Bien plus simple à écrie n’est-ce pas ?

3)     Entête IPv6

 Voici à quoi ressemble l'entête IPv6 :
Vous remarquerez qu’il est bien plus simple que celui d’IPv4.
Le nombre de champs a été largement réduit.
Voici le détail :
  • Version : version d’IPv6, toujours à 6
  • Traffic Class : utile pour la QOS. Permet de distinguer les sources qui doivent disposer de contrôle de flux, par rapport aux autres. Une valeur de 0 à 7 est donnée aux sources capables de ralentir leur débit. Une valeur de 8 à 15 est donnée aux sources qui doivent disposer d’un débit constant (VOIP, vidéo, etc…). Ainsi, en cas de congestion, le routeur pourra prioriser le trafic des sources ayant le Traffic Class le plus faible.
  • Flow Label (optionnel) : permet de traiter un flux différemment dans le réseau. Un numéro aléatoire est choisi par la source, et sera gardé pour tous les paquets allant à une certaine application de la destination. Les routeurs pourront alors traiter ces données-là de manière différente. Exemple : temps réelle.
  • Payload Length : taille de la charge utile (permet au routeur de reconnaitre la fin du paquet)
  • Next Header : identifie le type du Header suivant  (TCP, UDP, ICMP, ou simple extension IPv6)
  • Hop Limit : similaire au TTL de l’IPv4
  • Source Address : Adresse IP source du paquet
  • Destination Address : Adresse de destination du paquet
Le nombre réduit de champs par rapport à l’IPv4 allège le travail des routeurs, car ils ont moins d’informations à traiter. 
Cela améliore aussi la sécurité (moins d’informations vitales qui transitent).
Autre nouveauté dans IPv6, il est possible d’utiliser des extensions. Ce sont en fait des Header qui sont placés après le Header IPv6, et avant le Header de la couche 4 (TCP, UDP, etc…)
Le champ Next Header permet de les identifier.
Voici la liste des extensions possibles :

Ces extensions peuvent se combiner entre elles.
Par exemple, pour de l’IPSec : Destination Option, AH et ESP. 

4)     Les 3 types de communication

 Voyons maintenant les trois types de communications en IPv6.
Vous le savez, en IPv4 nous avions ces trois types là :

  • Unicast
  • Broadcast
  • Multicast

En IPv6, le Broadcast a disparu. 
Nous avons alors les trois types de communication suivants :

  • Unicast : One To One
  • Multicast : On To Many
  • Anycast : One To Nearest (ou One to One Of Many)

 Pas de changement pour les deux premiers par rapport à IPv4.
L’Anycast fonctionne un peu comme le Multicast.
Une IP unique représente plusieurs interfaces.
Par contre, quand un paquet est envoyé sur une IP Anycast, il est en réalité envoyé à l’interface la plus proche.
Au passage, voici certains ranges Multicast en IPv6 :
  • FFx2 ::/16 : Ne peut pas être routé (équivalent de 224.0.0.0 /24) Utile pour les MAJ de routage
  • FF02 ::5 : OSPF
  • FF02 ::9 : RIP
  • FF02 ::a EIGRP
 5)     Les 3 types d’adresses
  •   Link-Local Address :

Ce type d’adresse est valide uniquement pour les interfaces connectées sur le même lien (c’est-à-dire sans passer par un routeur).
Exemple : lien PPP, Ethernet etc…
Il n’est donc pas possible de router un paquet ayant ce type d’adresse. 
Ce type d’adresse est utilisé pour la découverte de voisin (Neighbor Discovery en remplacement d’ARP), la configuration automatique d’adresse globale, l’échange d’infos pour les protocoles de routage, etc…
Ces IP doivent bien sûr être uniques. 
Le préfix d’une telle IP est : FE80 ::/64 (soit FE80:0000:0000:0000) jusqu’à FEBF ::/64 
En général, elle est auto-configurée (grâce à une combinaison du préfix et de l’adresse MAC) 

  • Site-Local Address :

Ce type d’adresse n’est plus utilisée.
Il s’agissait plus ou moins d’une IPv6 privée.
Mais comme nous l’avons dit, l’IPv6 a fait disparaitre cette notion de privé / publique.
Donc finalement, ce type d’adresse n’a plus vraiment d’intérêt. Le préfix est va de FEC0::/64 à FECF::/64 

  • Global Address :

C’est le type d’adresse qui nous intéresse le plus.
Celle-ci est routable sur internet. 
Elle est découpée en plusieurs parties : 
Les premiers 48 bits correspondent au préfix global. Il vous est attribué par votre FAI.
Les prochains 16 bits correspondent au Subnet ID, ce qui vous permet de créer des sous réseaux.
Les derniers 64 bits représentent l’interface 
Il est donc simple pour une interface de configurer cette IP automatiquement.
Pour cela, elle récupère le préfix global avec le Subnet ID, puis elle y ajoute l’interface ID (calculé à partir de l’adresse MAC). Le préfix va de 2000 à 3FFF.
 6)     Transition vers IPv6
 L’IPv6 est de plus en plus présente. Mais comment se fait la transition ?
Il n’est malheureusement pas possible de passer tous les réseaux à l’IPv6 en un jour.
 Vous l’aurez donc deviné, il est nécessaire de faire cohabiter l’IPv4 et l’IPv6.
 Aussi, pour assurer la cohabitation, différentes technologies existent.
Voyons trois d’entre elles. 

  • Le Dual-Stack

Cette technique est l’une des meilleures.
Le principe est simple. Le routeur fonctionne à la fois en IPv4 et en IPv6.
Il peut donc faire transiter du trafic en IPv4 ou en IPv6 selon la source / destination. 
Si possible, les machines utiliserons IPv6 pour communiquer, et sinon, l’IPv4. 
En pratique, voilà à quoi cela peut ressembler :
Vous pouvez voir que le routeur fonctionne en IPv4 ou en IPv6 selon la source.
Les interfaces posséderont donc 2 IP. 

  • Tunneling

Si vous êtes contraint de passer par un réseau IPv4 pour connecter des réseaux IPv6 (ou inversement), le tunneling est une solution envisageable. 
On parle de « 6 to 4 » quand des paquets IPv6 passent dans un tunnel à travers un réseau IPv4.
On parle de « 4 to 6 » quand des paquets IPv4 passent dans un tunnel à travers un réseau IPv6. 
Prenons l’exemple de 6 to 4.
Les paquets IPv6 seront encapsulés dans un paquet IPv4 le temps du passage dans le réseau IPv4.
Le protocole utilisé pour le tunnel est GRE. 
Voici un exemple d’implémentation :

  • NAT-PT (NAT Protocol Translation)

Dernière solution abordée, le NAT. 
Cette solution n’est pas à utiliser si l’une des deux autres solutions précédentes est possible. 
Le but du NAT-PT est de connecter un réseau IPv6 directement à un réseau IPv4 (ou inversement). 
Le routeur se charge de changer les IP sources et destinations des paquets.
Voici un exemple d’implémentation :
7) Routage 
Les principes des protocoles de routage n’ont pas changé avec IPv6. Les travaux ont consisté en 
l’adaptation des protocoles existants au format des adresses. Ces protocoles profitent des propriétés 
maintenant incluses dans IPv6 comme l’authentification ou le multicast. Comme dans IPv4, on distingue 
le routage interne et le routage externe.  
  •  Routage interne  

Les protocoles dits de routage interne permettent une configuration automatique des tables de routage. Les routeurs découvrent automatiquement la topologie du réseau et déterminent le plus court chemin pour atteindre un réseau distant. En plus protocoles propres aux constructeurs de routeurs, il existe deux  protocoles conçus par l’IETF : RIPng et OSPng. 
 RIPng est très proche de RIP utilisé dans IPv4. C’est un protocole de la famille “distant vector”. Dans ce protocole les routeurs s’échangent périodiquement leurs tables de routage. A la réception d’une table de routage, un routeur met à jour sa table sur la base des nouvelles données reçues. Si un routeur tombe en panne ou si une ligne tombe en panne, les autres routeurs ne recevant plus d’informations de ce routeur suppriment l’entrée correspondante à ce routeur de leur table de routage. 
 Le deuxième protocoles, OSPF (Open Shortest Path First), fait partie des protocoles dits “plus court 
chemin”. Il est plus efficace que le premier, mais il est difficile à mettre en œuvre. Ce protocole est fondé sur les principes suivants : 
- inondation fiable du réseau qui permet à chacun des routeurs de posséder une copie des configurations de tous les autres routeurs et peuvent alors calculer le plus court chemin entre deux points du réseau, 
- pour éviter le recalcul fréquent de toutes les tables de routage, OSPF offre la possibilité de découper le réseau en aires. Une aire principale (appelée backbone) doit pouvoir relier toutes les autres aires. Les modifications de tables de routage se limitent, le plus possible, à des aires  particulières
  • Routage externe 

 Le terme externe vient du fait qu’il s’agit d’un échange de tables de routage entre deux domaines  d’administration distincts, généralement entre un client et un fournisseur, un fournisseur et son  transporteur international ou entre fournisseurs et transporteurs internationaux. 
En IPv4, la notion de domaine d’administration est représentée par un numéro de système autonome (AS : Autonomous System). Il n’est pas clair que cette notion soit utile en IPv6 puisque dans un plan  d’adressage hiérarchique, le préfixe peut jouer une notion équivalente au numéro AS.  
Avec un protocole de routage externe, il ne s’agit pas de trouver la topologie du réseau, mais d’échanger des informations d’accessibilité explicite entre routeurs pour le faire. Toute annonce du réseau par un domaine implique qu’il accepte de router les paquets vers cette destination. Le protocole retenu pour IPv6 est BGP-4+ identique à BGP-4 utilisé dans IPv4.