4. Environnement de test

On dispose à présent d'un noyau opérationnel modifié pour MIPL, d'utilitaires et de scripts de démarrage automatique. Si une anomalie se produit, il est conseillé de reprendre les sections précédentes très attentivement.

4.1. Scénario de test

Les adresses employées pour le scénario de test sont de type site-local. On peut également employer des adresses globales mais il faut noter que les adresses locales ne fonctionneront pas. L'environnement de test comprend quatre stations comme indiqué par le schéma du test de mobilité IPv6.

  1. HA — station d'accueil : la station d'accueil se trouve dans le réseau domestique à l'adresse fec0:106:2700::2. Elle comprend une interface sans fil.

  2. MN — station mobile : l'adresse de la station mobile dans le réseau domestique est fec0:106:2700::4. Quand la station mobile se déplace, elle engendre une nouvelle « adresse temporaire primaire ».

  3. R — routeur : il s'agit du routeur entre le réseau domestique et Internet. Il inclut une interface réseau sans fil d'adresse fec0:106:2700::1 et une interface filaire d'adresse fec0:106:2300::2.

  4. AR — routeur d'accès : le lien réseau entre AR et R constitue l'« internet » du banc de test. Dans le cadre du test, il se limite à deux adresses IP aux extrémités d'un câble croisé mais il peut s'agir de n'importe quel type de réseau. Le routeur d'accès est équipé de deux interfaces. Une interface filaire se trouve à l'adresse fec0:106:2300::1 tandis qu'une interface sans fil occupe l'adresse fec0:106:1100::1.

Environnement de test de mobilité IPv6

Environnement de test de mobilité IPv6

4.2. Description des étapes de la configuration

4.2.1. Mise en place d'un réseau IPv6 fonctionnel

Avant de procéder au test de la mobilité IPv6, un réseau IPv6 fonctionnel est nécessaire. Toutes les stations doivent être en mesure de s'atteindre les unes les autres au moyen de l'utilitaire ping. Le point précédent est fondamental. Ainsi, lorsqu'AR n'est pas capable de joindre HA, il n'y a pas de mise à jour de raccordement.

De brèves instructions pour élaborer un réseau IPv6 sont présentées ci-dessous. L'excellent Guide pratique IPv6 pour Linux de Peter Bieringer contient davantage d'informations pour effectuer cette tâche.

Le chiffrement a été désactivé pour simplifier la présentation mais il est conseillé de toujours y avoir recours dans le cas de réseaux sans fil.

Il convient de noter que des réseaux sans fil distincts relèvent de ESSID différents.

  1. MN : la station mobile est équipée d'une interface sans fil. Le renvoi doit être inhibé mais il faut activer autoconf et ra :

    # iwconfig eth0 mode ad-hoc essid homenet enc off
    # ifconfig eth0 inet6 add fec0:10:2700::4/64
    # echo "0" > /proc/sys/net/ipv6/conf/eth0/forwarding
    # echo "1" > /proc/sys/net/ipv6/conf/eth0/autoconf
    # echo "1" > /proc/sys/net/ipv6/conf/eth0/accept_ra
    # echo "1" > /proc/sys/net/ipv6/conf/eth0/accept_redirects
    # /etc/init.d/mobile-ip6 start
    
  2. HA : la station d'accueil comprend une interface sans fil. Le renvoi doit être activé puisque des trames reçues depuis l'interface physique sont transmises via l'interface virtuelle de tunnel. Remarque : une route par défaut est nécessaire sans quoi le HA aura des difficultés pour contacter la station mobile MN dans le réseau distant. Une solution consiste à employer HA en tant que routeur du réseau domestique.

    # iwconfig eth0 mode ad-hoc essid homenet enc off
    # ifconfig eth0 inet6 add fec0:106:2700::2/64
    # echo "1" > /proc/sys/net/ipv6/conf/eth0/forwarding
    # echo "0" > /proc/sys/net/ipv6/conf/eth0/autoconf
    # echo "0" > /proc/sys/net/ipv6/conf/eth0/accept_ra
    # echo "0" > /proc/sys/net/ipv6/conf/eth0/accept_redirects
    # ip route add ::/0 via fec0:106:2700::1
    # /etc/init.d/mobile-ip6 start
    
  3. R : le routeur domestique comprend deux interfaces, une sans fil et une filaire. Le renvoi doit être activé dans le routeur domestique.

    # ifconfig eth0 inet6 add fec0:106:2300::2/64
    # iwconfig eth1 mode ad-hoc essid homenet enc off
    # ifconfig eth1 inet6 add fec0:106:2700::1/64
    # echo "1" > /proc/sys/net/ipv6/conf/all/forwarding
    # echo "0" > /proc/sys/net/ipv6/conf/all/autoconf
    # echo "0" > /proc/sys/net/ipv6/conf/all/accept_ra
    # echo "0" > /proc/sys/net/ipv6/conf/all/accept_redirects
    # ip route add fec0:106:1100::/64 via fec0:106:2300::1
    
  4. AR : le routeur d'accès qui appartient à un réseau distant comprend également deux interfaces (filaire et sans fil). Là encore, le renvoi des trames doit être activé.

    # ifconfig eth0 inet6 add fec0:106:2300::1/64
    # iwconfig eth1 mode ad-hoc essid visitnet enc off
    # ifconfig eth1 inet6 add fec0:106:1100::1/64
    # echo "1" > /proc/sys/net/ipv6/conf/all/forwarding
    # echo "0" > /proc/sys/net/ipv6/conf/all/autoconf
    # echo "0" > /proc/sys/net/ipv6/conf/all/accept_ra
    # echo "0" > /proc/sys/net/ipv6/conf/all/accept_redirects
    # ip route add fec0:106:2700::/64 via fec0:106:2300::2
    

L'utilitaire sysctl évite d'avoir à accéder directement au système de fichiers sous proc.

Remarque : l'environnement de test s'appuie sur des routes statiques. Tous les hôtes doivent à présent pouvoir se contacter avec ping.

4.2.2. Configuration de la mobilité IPv6

La dernière étape de la configuration est relative à MIPL et s'effectue dans le fichier network-mip6.conf. Avec une distribution de type Debian ou Slackware, ce fichier se trouve dans le répertoire /etc tandis qu'avec une distribution RedHat, il figure dans le répertoire /etc/sysconfig. Le contenu du fichier est en principe assez parlant.

  1. HA : le fichier de configuration doit contenir les informations ci-dessous :

    # cat /etc/network-mip6.conf
    
    # Fichier de configuration de la station d'accueil
    FUNCTIONALITY=ha
    DEBUGLEVEL=1
    MIN_TUNNEL_NR=1
    MAX_TUNNEL_NR=5
    TUNNEL_SITELOCAL=yes
    
  2. MN : le fichier de configuration doit contenir les informations ci-dessous :

    # cat /etc/network-mip6.conf
    
    # Fichier de configuration de la station mobile
    FUNCTIONALITY=mn
    DEBUGLEVEL=1
    TUNNEL_SITELOCAL=yes
    MIN_TUNNEL_NR=1
    MAX_TUNNEL_NR=3
    HOMEDEV=mip6mnha1
    HOMEADDRESS=fec0:106:2700::4/64  # adresse d'origine de la station mobile
    HOMEAGENT=fec0:106:2700::2/64    # adresse de la station d'accueil
    
  3. On active ensuite la mobilité IP :

    # /etc/init.d/mobile-ip6 start
    Starting Mobile IPv6 : OK
    

On vérifie que le HA a démarré correctement au moyen de la commande ifconfig. Si le tunnel ip6tnl1 apparaît, la mobilité IPv6 est active :

# ifconfig
eth1     Link encap:Ethernet  HWaddr 00:02:2D:2D:DE:79
         inet6 addr: fec0:106:2700::2/64 Scope:Site
         inet6 addr: fe80::202:2dff:fe2d:de79/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:618 errors:6 dropped:6 overruns:0 frame:6
         TX packets:1485 errors:22 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:100
         RX bytes:87914 (85.8 KiB)  TX bytes:252596 (246.6 KiB)
         Interrupt:3 Base address:0x100

ip6tnl1  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 1
         UP POINTOPOINT RUNNING NOARP  MTU:1460  Metric:1
         RX packets:6 errors:0 dropped:0 overruns:0 frame:0
         TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:576 (576.0 b)  TX bytes:624 (624.0 b)

ip6tnl2  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 2
         UP RUNNING NOARP  MTU:1460  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

lo       Link encap:Local Loopback
         inet addr:127.0.0.1  Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host
         UP LOOPBACK RUNNING  MTU:16436  Metric:1
         RX packets:8 errors:0 dropped:0 overruns:0 frame:0
         TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:560 (560.0 b)  TX bytes:560 (560.0 b)
1

Le tunnel est actif et prêt à établir des connexions.

2

Un autre tunnel actif.

Les modules mipv6 du noyau doivent également être chargés (MN) :

# lsmod
Module                  Size  Used by    Not tainted
mip6_mn                59888   0  (unused)
ipv6_tunnel            11448   1  [mip6_mn]
mip6_base              40728   0  [mip6_mn]
ipv6                  179764  -1  [mip6_mn ipv6_tunnel mip6_base]
...

4.2.3. Configuration de radvd au niveau du routeur d'accès (AR)

Quand la station mobile arrive dans un nouveau réseau, elle configure une adresse lien-local avant de poursuivre. [RFC2462] (IPv6 Stateless Address Autoconfiguration) décrit la phase suivante :

 

La phase suivante de l'autoconfiguration implique d'obtenir une annonce de routeur ou bien de déterminer qu'aucun routeur n'est disponible. Si des routeurs se manifestent, ils vont envoyer des annonces qui précisent le type d'autoconfiguration que le système hôte doit effectuer. En l'absence de routeur, une autoconfiguration à état connu est nécessaire.

Les routeurs émettent périodiquement des annonces mais le délai d'attente entre annonces est en général bien supérieur à la durée qu'une station ne souhaite consacrer à son autoconfiguration. Pour recevoir rapidement une annonce, une station émet une ou plusieurs sollicitations à destination du groupe de multidiffusion (multicast) de l'ensemble des routeurs.

 
  -- page 8

radvd intervient à ce moment là.

[RFC2462] fournit davantage de renseignements au sujet de l'autoconfiguration sans état des adresses IPv6.

On configure radvd au niveau de l'interface sans fil d'AR. Le fichier radvd.conf doit contenir :

# cat /etc/radvd.conf
interface eth1
{
      AdvSendAdvert on;
      AdvIntervalOpt on;

      MinRtrAdvInterval 3;
      MaxRtrAdvInterval 10;
      AdvHomeAgentFlag off;

      prefix fec0:106:1100::/64
      {
          AdvOnLink on;
          AdvAutonomous on;
          AdvRouterAddr on;
      };
};

On démarre alors radvd :

# /etc/init.d/radvd start

On peut à présent employer radvdump pour examiner les messages réellement envoyés par radvd :

# radvdump
Router advertisement from fe80::202:2dff:fe54:d1b2 (hoplimit 255)
Received by interface eth1
      # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
      AdvCurHopLimit: 64
      AdvManagedFlag: off
      AdvOtherConfigFlag: off
      AdvHomeAgentFlag: off
      AdvReachableTime: 0
      AdvRetransTimer: 0
      Prefix fec0:106:1100::/64
              AdvValidLifetime: 2592000
              AdvPreferredLifetime: 604800
              AdvOnLink: on
              AdvAutonomous: on
              AdvRouterAddr: off
      AdvSourceLLAddress: 00 02 2D 54 D1 B2

Remarque : le recours à radvd pour HA conjugué à l'activation d'« autoconf » (via proc) conduit à l'apparition d'une adresse IPv6 (superflue) générée automatiquement au niveau de MN en plus de son adresse statique.

4.2.4. Configuration de radvd au niveau de la station d'accueil

Pour que la station mobile MN sache quand elle est de retour dans son réseau domestique, la station d'accueil HA doit également envoyer des annonces de routeurs. On active donc également RADVD au niveau de la station d'accueil. Le fichier /etc/radvd.conf doit contenir :

# cat /etc/radvd.conf
interface eth0
{
   AdvSendAdvert on;
   MaxRtrAdvInterval 3;
   MinRtrAdvInterval 1;
   AdvIntervalOpt off;
   AdvHomeAgentFlag on;
   HomeAgentLifetime 10000;
   HomeAgentPreference 20;
   AdvHomeAgentInfo on;
   prefix fec0:106:2700::2/64
   {
     AdvRouterAddr on;
     AdvOnLink on;
     AdvAutonomous on;
     AdvPreferredLifetime 10000;
     AdvValidLifetime 12000;
   };
};

De même que précédemment, radvdump permet de vérifier que des messages sont périodiquement envoyés par radvd :

# radvdump
Router advertisement from fe80::202:2dff:fe54:d11e (hoplimit 255)
Received by interface eth0
    # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
    AdvCurHopLimit: 64
    AdvManagedFlag: off
    AdvOtherConfigFlag: off
    AdvHomeAgentFlag: on
    AdvReachableTime: 0
    AdvRetransTimer: 0
    Prefix fec0:106:2700::2/64
            AdvValidLifetime: 12000
            AdvPreferredLifetime: 10000
            AdvOnLink: on
            AdvAutonomous: on
            AdvRouterAddr: on
    AdvSourceLLAddress: 00 02 2D 54 D1 1E
    AdvHomeAgentInfo:
            HomeAgentPreference: 20
            HomeAgentLifetime: 1000
# ifconfig eth0
eth0  Link encap:Ethernet  HWaddr 00:90:7D:F3:03:1A
      inet6 addr: fec0:106:2700:0:290:7dff:fef3:31a/64 Scope:Site 1
      inet6 addr: fec0:106:2700::4/64 Scope:Site                  2
      inet6 addr: fe80::290:7dff:fef3:31a/64 Scope:Link           3
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:513 errors:89 dropped:89 overruns:0 frame:85
      TX packets:140 errors:41 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:100
      RX bytes:56084 (54.7 Kb)  TX bytes:19212 (18.7 Kb)
      Interrupt:3 Base address:0x100
1

Une nouvelle adresse autogénérée (superflue). Comme autoconf est activé par le positionnement de /proc/sys/net/ipv6/conf/eth0/autoconf à 1, la station mobile MN génère une nouvelle adresse avec le préfixe de la station d'accueil HA et sa propre adresse MAC. L'auteur ne connaît pas de méthode pour éviter l'apparition d'une telle adresse.

2

L'adresse statique IPv6 d'origine.

3

L'adresse lien-local créée au démarrage.