jeudi 9 février 2017

Protocoles de transition IPv6 : 6to4


Introduction
Comme vous le savez, nous sommes « à court » d’IPv4 publiques depuis le début de l’année.
Autant dire que cet évènement va, je l’espère, accélérer la transition inéluctable vers une architecture plus portée vers l’IPv6.
Maintenant vous pouvez vous poser la question légitimement, comment passer « en douceur » à l’IPv6 sans forcément bannir IPv4 de votre réseau interne et externe et remettre en question votre architecture entière.
C’est là où les protocoles de transition rentrent en jeu et notamment celui que nous allons voir dans ce post : 6to4.

6to4

Le postulat de ces protocoles de transition reste assez simple. Il s’agit de permettre à du traffic de type IPv6 de passer à travers un réseau IPv4 classique. Cela est rendu possible grâce au routeur qui encapsule notre paquet IPv6 dans la zone de données du paquet IPv4(c’est-à-dire le payload) et ainsi l’envoyer à travers un réseau IPv4 dans perdre aucune information IPv6.
Remarquez que l’on pourra aisément distinguer ce type de paquet grâce au Type 41 dans le header de notre paquet IPv4.
6to4 va vous permettre d’établir des tunnels de type point-to-multipoint de façon totalement dynamique.
La force de cette technologie est de pouvoir par exemple, ajouter 100 routeurs dans votre topologie sans pour autant remettre en cause la configuration de vos routeurs existants puisque tout s’établit de façon dynamique!
Ce protocole utilise la range 2002::/16 pour pouvoir fonctionner.
L’inconvénient principal néanmoins de 6to4 est qu’il ne prend pas en charge les IGP, ce qui n’est pas nécéssairement un problème si vous restez dans un environnement 6to4.

Topologie type

Voici la topologie sur lequel notre exemple va se baser:
Ce schéma mérite explication sur de nombreux points que je vais aborder dans la prochaine partie.


Mise en place

Vous avez plusieurs étapes à effectuer pour pouvoir mettre en place cette technologie.
Première étape: choisir des adresses IPv4 de loopback pour les routeurs
Celle-ci n’est pas compliquée en soit mais vous pouvez vous demander pourquoi choisir de définir des IPs de loopback plutôt que des IPs d’interfaces. L’avantage principal de ce choix nous permettra de nous affranchir du possible dysfonctionnement d’une interface physique. Par définition, une interface de Loopback ne pourra jamais se retrouver en état down/down puisque c’est une interface virtuelle.
Deuxième étape: convertir ces adresses en héxadécimal
L’objectif dans cette partie est de créer un subnet général IPv6 qui reflètera notre IP de loopback configurée. Pour la convertir, nous allons partir de l’adresse de base 2002::/16 et y ajouter à la suite les 32 bits de l’adresse IP de loopback sur chaque routeur sous forme héxadécimale.
Ce qui nous donne pour 192.168.1.1 l’adresse IPv6 2002:C0A8:0101::/48.
Cette adresse permettra de pouvoir identifier l’adresse IPv4 de destination.
On applique cette règle sur les deux autres routeurs de la même façon.
Vous pouvez constater la traduction de ces adresses dans le schéma de topologie.
Troisième étape : subnetter le subnet /48 calculé
Une fois les subnets calculés, nous allons pouvoir nous en servir dans les interfaces du routeur. Remarquez que pour le routeur 192.168.1.1, on utilise le subnet 2002:C0A8:0101:1::/64 pour le LAN et 2002:C0A8:0101:0::/64 pour le WAN.

Configuration

Il ne nous reste maintenant qu’à configurer les routeurs pour que les tunnels commencent à se former automatiquement.
! Configuration R1 : 192.168.1.1
! On active le routage IPv6
R1(config)# ipv6 unicast-routing
! On configure notre interface de Loopback
R1(config)# int Loopback0
R1(config-if)# ip add 192.168.1.1 255.255.255.255
! On configure le tunnel
R1(config)# int tunnel 0
! Source : notre Loopback
! Pas de destination à spécifier ici, nous sommes sur du point-to-multipoint
R1(config-if)# tunnel source Loopback0
! On lui précise que le tunnel fera du 6to4
R1(config-if)# tunnel mode ipv6ip 6to4
! Adresse IP du tunnel
R1(config-if)# ipv6 add 2002:C0A8:0101:0::1/128
! Et on configure enfin notre interface LAN
R1(config)# int fa0/0
R1(config-if)# ipv6 add 2002:C0A8:0101:1::1/64
!
! Enfin une route pour déclencher notre tunnel et utiliser celui-ci en cas de sollicitation
R1(config)# ipv6 route 2002::/16 Tunnel0
Cette configuration sera bien entendu à reproduire sur les autres routeurs.

Examen du comportement final

Une fois cette configuration appliquée sur tous les routeurs, vos tunnels se formeront de façon systématique pour pouvoir contacter votre voisin même si il est en IPv6.
Mais comment avec cette configuration, comment le routeur déterminera t-il qu’il a besoin de faire passer l’information dans le tunnel et connaitre l’adresse IP de destination à utiliser?
1) Un PC connecté en IPv6 sur le LAN de R1 cherche à contacter un membre du LAN IPv6 2002:C0A8:0103:1::/64
2) Le routeur grâce à notre route statique routera tous les paquets à destination du tunnel 6to4(dans la range 2002::/16) vers l’interface Tunnel0.
3) Le routeur a besoin de connaitre en IPv4 l’adresse IP de destination. Vous remarquerez ici que le routeur à seulement besoin de convertir les bits de 17 jusqu’à 32 pour obtenir ici l’adresse IP de destination 192.168.1.3 !
Et voilà, vous avez(déjà) terminé la configuration de cette topologie.
J’espère que ce post vous aura plu et vous sera utile.
N’hésitez pas si vous avez des compléments à apporter et des commentaires.