Mobile IPv6 avec Cisco et Fedora
Récemment, j’ai eu l’occasion de travailler sur la fonctionnalité Mobile IPv6.
Cette fonction du protocole IPv6 permet d’assigner une adresse IP à un noeud du réseau, et de faire en sorte que cette adresse IP soit toujours utilisable lorsque le noeud change de réseau.
Par exemple, je vais assigner une adresse IP à mon ordinateur portable dans l’espace d’adressage fourni par mon FAI pour ma connexion ADSL.
Lorsque je vais à l’université, on pourra toujours me joindre à cette adresse, au lieu de devoir utiliser l’adresse fournie par l’université.
Le but de cet article n’est pas d’aborder la partie théorique, mais de mettre en place une configuration avec un routeur Cisco et un noeud mobile sous Linux.
Mobile IPv6 est défini dans la RFC6275 : Mobility Support in IPV6.
Un peu de vocabulaire
Pour bien comprendre les explications qui vont suivre, il est nécessaire de connaître l’ensemble des termes utilisés dans Mobile IPv6.
- home network : Le réseau auquel appartient le mobile node.
- home address (HoA) : Une adresse assignée à un mobile node, utilisée comme adresse permanent. Elle appartient à la plage d’adresse du home network.
- mobile node (MN) : Le noeud qui va se déplacer entre plusieurs réseaux, et va changer son point d’attache d’un lien vers un autre. Il sera toujours joignable par sa home address.
- home agent (HA) : Le routeur dans le home network qui gére la transmission des paquets jusqu’au mobile node.
- care-of address (CoA) : Une adresse associée au mobile node lorsqu’il visite un réseau étranger.
- correspondent node (CN) : Un noeud avec lequel le mobile node communique.
Architecture
J’ai effectué l’ensemble de la configuration derrière une Freebox, Free fournissant 8 blocs /64.
Cela m’a permis de relier l’ensemble de mon réseau à Internet, vous pouvez aussi réaliser ceci sans que votre réseau soit raccordé à Internet.
Le routeur est un Cisco 1811 qui a 8 ports LAN et 2 ports WAN.
J’ai configuré 2 VLAN, dans lesquels se déplacera le mobile node.
Configuration de base du routeur
Pour commencer, il faut se connecter au routeur à l’aide du port console. La première étape consiste à identifier le routeur en lui donnant un nom :
Il est alors possible d’activer le SSH pour pouvoir se connecter à distance :
|
|
Note: Le protocole SSH ne semble pas fonctionner en version 2 : le client affiche “Invalid modulus length”. La version 1 est donc forcée.
Il est maintenant possible d’activer l’IPv6 et l’auto-configuration sur l’interface raccordée à la Freebox, dans le but de récupérer une adresse dans le réseau géré par la Freebox :
|
|
La commande suivante permet de vérifier qu’une adresse a bien été assignée :
|
|
L’adresse du routeur est donc 2a01:e35:8a38:6870:5a8d:9ff:fe14:8900.
Pour éviter de devoir taper cette adresse à chaque connexion, j’ai créé une entrée DNS de type AAAA avec le nom router.emilienkenler.net :
|
|
Au sein de l’interface de la Freebox, il est possible de demander le routage de certains réseau vers une adresse qui se trouve derrière celle-ci.
Le routeur est alors appelé le Next Hop : c’est le point de passage suivant pour tous les paquets adressés à ce sous-réseau.
Ceci va nous permettre d’accéder à chacun des réseaux que nous utilisons pour la démonstration depuis Internet.
Dans notre cas, le réseau par défaut de la Freebox est 2a01:e35:8a38:6870::/64.
Dans l’interface de la Freebox, on accède donc au menu Paramètres de la Freebox > Mode avancé > Configuration IPv6, puis on configure les sous-réseaux qui seront utilisés par le projet pour les faire pointer vers le routeur :
La configuration initiale est maintenant terminée et la console peut être débranchée.
Comme SSH2 ne fonctionne pas, il faut bien penser à forcer la version 1 du protocole pour se connecter au routeur :
|
|
Mise en place de l’auto-configuration IPv6
Nous allons utiliser le sous-réseau 2a01:e35:8a38:6875::/64 pour tester la mise en place de l’auto-configuration au niveau du routeur.
Comme il a été délégué au routeur dans la configuration de la Freebox, celle-ci ne l’annonce plus.
Nous pouvons donc configurer ce sous-réseau sur l’interface WAN puis vérifier que les clients connectés au niveau de la Freebox parviennent toujours à le rejoindre.
La configuration se fait ainsi :
|
|
La configuration de l’interface montre que celle-ci a déjà récupéré une adresse dans ce sous-réseau :
|
|
Configuration des VLAN
Afin de séparer les réseaux domicile et mobile entre les différents ports du switch, nous allons utiliser deux VLAN.
Le VLAN2 est utilisé pour le réseau mère.
Il est accessible sur les ports 2 et 3 du switch :
|
|
Il faut ensuite indiquer l’adresse du sous-réseau correspondant à l’interface et activer l’auto-configuration.
|
|
Une configuration similaire est appliquée pour le VLAN3, qui est utilisé pour le réseau mobile sur les ports 4 et 5 :
|
|
Configuration de Mobile IPv6 sur le routeur
Afin que les clients puissent utiliser Mobile IPv6 sur les VLAN, le routeur va jouer le rôle de home agent :
|
|
Quatre commandes sont disponibles pour afficher des détails sur Mobile IPv6 une fois qu’il est activé :
|
|
Notre routeur est maintenant configuré et prêt à être utilisé avec Mobile IPv6.
Configuration du Mobile Node
Il existe plusieurs implémentations de Mobile IPv6 sous Linux.
J’ai choisi UMIP (Universal Mobile IP for Linux), qui est une implémentation de la RFC6275.
UMIP nécessite le support du noyau pour pouvoir fonctionner. Sous Fedora, ce support est disponible nativement et le paquet mipv6-daemon peut être installé directement :
|
|
On peut alors créer le fichier de configuration /etc/mip6d.conf, qui spécifie que le client joue ici le rôle de mobile mode, ainsi que l’adresse du réseau mère et du home agent :
|
|
Il faut ensuite redémarrer le démon pour prendre en compte cette configuration :
|
|
Il faut aussi stopper firewalld pour laisser passer certains paquets nécessaires à MIPv6 :
|
|
Expérimentation
Maintenant que tout est configuré, on peut réaliser la démonstration.
L’objectif est de connecter un client dans le réseau mère, puis de le connecter dans le réseau mobile et de vérifier qu’il est toujours joignable sur son adresse d’origine.
Pour vérifier cela, on utilisera un tiers qui envoie des ping vers l’adresse dans le réseau mère.
Le tiers pourra se trouver dans un réseau quelconque.
Une première remarque importante à faire concerne la gestion de l’état des interfaces VLAN par le routeur.
Conformément à une note sur le site de Cisco, une interface VLAN n’est disponible que si au moins un périphérique est connecté à une interface dans ce VLAN.
Ainsi, si le client mobile de test est le seul périphérique connecté au switch et qu’on le branche sur un port du VLAN mobile, les ports 2 et 3 ne sont pas connectés.
Le switch va alors désactiver le VLAN2 et passer l’interface à l’état up/down au lieu de up/up.
Si on regarde l’état du Mobile IPv6 sur le routeur dans ces conditions, on constate effectivement qu’aucune adresse n’est détectée sur l’interface VLAN2 :
|
|
Il faut donc veiller à laisser un périphérique connecté en permanence dans le réseau mère.
Vous pouvez tester en utilisant les étapes suivantes :
- Activation de l’interface sur le mobile node;
- Démarrage de mip6d sur le mobile node;
- Ping du correspondent node vers le mobile node en continu;
- Le mobile node est débranché du VLAN2 et branché sur le VLAN3;
- Le ping doit toujours fonctionner.
Résumé
Nous avons pu mettre en place une configuration qui permet à un noeud de se déplacer entre plusieurs réseaux, en conservant son adresse IP et sans couper ses connexions (le temps de changement de réseau doit être inférieur au délai du timeout de la connexion TCP).