User Tools

Site Tools


mipl

This is an old revision of the document!


MIPL2

Installation

  • L'installation de MIPL2 requiert une recompilation du noyau. Actuellement, le dernier patch n'est disponible que pour le noyau 2.6.8.1 .
    • Télécharger les sources du noyau 2.6.8.1 sur votre miroir favori ou sur kernel.org.
    • Installer les sources :
# tar xvjf linux-2.6.8.1.tar.bz2
  • patcher le noyau :
# cd /usr/src/linux
# zcat mipv6-patch.gz | patch -p1
# make menuconfig
  • Configurer les options du noyau. Le script chkconf_kernel.sh, fourni avec l'application mipv6-2.0-rc2, vérifie la présence de certains éléments compilés dans le noyau. Ce script devrait alors répondre “All kernel options are as they should”.
     CONFIG_EXPERIMENTAL=y
     CONFIG_SYSVIPC=y
     CONFIG_PROC_FS=y
     CONFIG_NET=y
     CONFIG_INET=y
     CONFIG_IPV6=y
     CONFIG_IPV6_MIP6=y
     CONFIG_XFRM=y
     CONFIG_XFRM_USER=y
     CONFIG_XFRM_ENHANCEMENT=y

   The Home Agent and Mobile Node also need:

     CONFIG_IPV6_TUNNEL=y
     CONFIG_IPV6_ADVANCED_ROUTER=y
     CONFIG_IPV6_MULTIPLE_TABLES=y

   The Mobile Node also needs:

     CONFIG_IPV6_SUBTREES=y

   For some additional movement indicators on the Mobile Node you may set:

     CONFIG_ARPD=y

   For IPsec support you need at least:

     CONFIG_INET6_ESP=y

   If you plan to use IPsec tunnel you need:

     CONFIG_NET_KEY=y
     CONFIG_NET_KEY_MIGRATE=y
# make && make modules_install
  • Construire les exécutables. Sous Debian, installer les packages indent et libssl-dev.
# tar xvzf mipv6-2.0-rc2.tar.gz
# cd mipv6-2.0-rc2
# ./configure
  • préciser éventuellement le répertoire des entêtes du noyaux fraichement compilé

# CPPFLAGS='-isystem /usr/src/linux/include' ./configure

  • puis la compilation

# make

Attention, des problèmes lors de la génération du fichier d'entête src/pmgr.h (mipv6-2.0-rc2) peuvent survenir. Vérifier que vous avez bien l'exécutable ident et que sed est suffisamment récent. Finalement vous pouvez toujours remplir le fichier src/pmgr.h à la main (déconseillé tout de même) :

#ifndef __PMGR_H__
#define __PMGR_H__ 1

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <limits.h>
#include "policy.h"

struct pmgr_cb {
        int (*discard_binding) (const struct in6_addr_bundle * in_addrs,
        const struct ip6_mh_binding_update * bu,
        const struct mh_options * opts);
        int (*use_keymgm) (const struct in6_addr_bundle * addrs);
        char so_path[_POSIX_PATH_MAX + 1];
        void *handle;
        struct pmgr_cb *old;
};

int pmgr_init(char *libpath, struct pmgr_cb *lb);

int pmgr_close(struct pmgr_cb *lb);

#endif

relancer

# make

puis

# make install

Configuration

radvd.conf

Le fichier de configuration du RA /etc/radvd.conf. A noter que les temps d'annonces ont été considérablement baissé dans le but de créer un lien local le plus rapidement possible pour la MN.

interface eth0
{
        AdvSendAdvert on;
        MaxRtrAdvInterval 0.07;
        MinRtrAdvInterval 0.03;
        AdvIntervalOpt off;
        AdvHomeAgentFlag on;
        HomeAgentLifetime 10000;
        HomeAgentPreference 20;
        AdvHomeAgentInfo on;

        prefix 2001:660:2402:f003::aa/64
        {
                AdvRouterAddr on;
                AdvOnLink on;
                AdvAutonomous on;
                AdvPreferredLifetime 10000;
                AdvValidLifetime 12000;
        };
};

ha.conf

Fichier de configuration du HA, /usr/local/etc/ha.conf

NodeConfig HA;

## If set to > 0, will not detach from tty
DebugLevel 10;

## List of interfaces where we serve as Home Agent
Interface "eth0";
#Interface "eth1";

##
## IPsec configuration
##

UseMnHaIPsec disabled;

## Key Management Mobility Capability
KeyMngMobCapability disabled;

IPsecPolicySet {
        HomeAgentAddress 2001:660:2402:f003::aa;
        HomeAddress 2001:660:2402:f003::666/64;

        #HomeAddress 3ffe:2620:6:1::1235/64;

        IPsecPolicy HomeRegBinding UseESP;
        IPsecPolicy MobPfxDisc UseESP;
        IPsecPolicy TunnelMh UseESP;
}

mn.conf

Fichier de configuration de la node mobile, /usr/local/etc/mn.conf

NodeConfig MN;

## If set to > 0, will not detach from tty
DebugLevel 10;

## Support route optimization with other MNs
DoRouteOptimizationCN disabled;

## Use route optimization with CNs
DoRouteOptimizationMN disabled;

UseCnBuAck disabled;

Interface "eth0";

MnRouterProbesRA 0;
MnRouterProbesLinkUp 0;

MnHomeLink "eth0" {
        HomeAgentAddress 2001:660:2402:f003::aa;
        HomeAddress 2001:660:2402:f003::666/64;

#               proto   type    code    route opt.
#       MnRoPolicy      ICMP    129     0       enabled;
#       MnRoPolicy      ICMP    any     any     disabled;
#               proto   dst     src     route opt.
#       MnRoPolicy      TCP     80      any     enabled;
#       MnRoPolicy      TCP     any     any     disabled;
}

##
## IPsec configuration
##

UseMnHaIPsec disabled;

## Key Management Mobility Capability
KeyMngMobCapability disabled;

IPsecPolicySet {
        HomeAgentAddress 2001:660:2402:f003::aa;
        HomeAddress 2001:660:2402:f003::666/64;

        IPsecPolicy HomeRegBinding UseESP;
        IPsecPolicy MobPfxDisc UseESP;
        IPsecPolicy TunnelMh UseESP;
}

Utilisation

Home Agent

On peut alors lancer le HA, il convient de fixer l'adresse de l'interface, la route par défaut, avec le script suivant :

#!/bin/sh
ifconfig eth0 inet6 add 2001:660:2402:f003::aa/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
#ajout de la route par défaut
ip -6 route add ::/0 via 2001:660:2402:f003:ff::

lancement du démon :

# mip6d -c /usr/local/etc/ha.conf

Node mobile

Et on peut lancer la node mobile, initialisation de l'interface réseau avec le script suivant :

#!/bin/sh
ifconfig eth0 inet6 add 2001:660:2402:f003::666/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

lancement du démon :

# mip6d -c /usr/local/etc/mn.conf

Déplacements

Faire se déplacer la MN entre différents sous-réseaux et vérifier que le binding update avec le HA a bien lieu. On peut tester que les flux ne sont pas coupés avec un des logiciels clients.

Sécurisation

Rajout de IPsec pour l'authentification lors des BU/BA. Permet de restreindre l'utilisation du HA à des utilisateurs authentifiés. Dans notre même exemple,

  • le HA a l'ip 2001:660:2402:f003::666 2001:660:2402:f003::aa
  • la MN a l'ip 2001:660:2402:f003::666 2001:660:2402:f003::666

Voici les points à vérifier pour activer l'authentification sécurisée.

ha.conf et mn.conf

Portion identique pour les deux fichiers de configuration du HA et de la MN. Bien Mettre la variable UseMnHaIPsec à enabled

UseMnHaIPsec enabled;

## Key Management Mobility Capability
KeyMngMobCapability disabled;

IPsecPolicySet {
        HomeAgentAddress 2001:660:2402:f003::aa;
        HomeAddress 2001:660:2402:f003::666/64;

        IPsecPolicy HomeRegBinding UseESP;
        IPsecPolicy MobPfxDisc UseESP;
        IPsecPolicy TunnelMh UseESP;
}

sa.conf

voici le fichier d'échange des clés, il doit être identique sur le HA et le MN.

# sa.conf
#
# 2001:660:2402:f003::666 is home address of MN
# and 2001:660:2402:f003::aa is address of HA

# MN -> HA transport SA for BUs
add 2001:660:2402:f003::666 2001:660:2402:f003::aa esp 2000
        -m transport
        -E des-cbc "TAHITEST"
        -A hmac-sha1 "this is the test key" ;

# HA -> MN transport SA for BAs
add 2001:660:2402:f003::aa 2001:660:2402:f003::666 esp 2001
        -m transport
        -E des-cbc "TAHITEST"
        -A hmac-sha1 "this is the test key" ;

# MN -> HA tunnel SA for HoTIs
add 2001:660:2402:f003::666 2001:660:2402:f003::aa esp 2004
        -m tunnel
        -E des-cbc "TAHITEST"
        -A hmac-sha1 "this is the test key" ;

# HA -> MN tunnel SA for HoTs
add 2001:660:2402:f003::aa 2001:660:2402:f003::666 esp 2005
        -m tunnel
        -E des-cbc "TAHITEST"
        -A hmac-sha1 "this is the test key" ;

Les règles sont donc lancées manuellement sur le HA et la MN avec la commande :

# setkey -f sa.conf

:!: L'enregistrement et l'authenfication sur le HA sont protégés, mais le traffic entre le HA et la MN n'est pas crypté.

Tests

Stabilité

Dans la pratique, MIPL2 est relativement stable (version rc2, noyau 2.6.8.1). En simulant des déplacements d'un MN entre différents sous-réseaux (changement de vlans avec commutateur) , il apparait quelques limitations.

  • Rapidité de mise à jour de la Home Address
  • Echec de la mise à jour de la route vers la MN lors de changements successifs de sous-réseaux trop rapides. Il semblerait que la MN doit rester au moins quelques secondes dans le sous-réseau visité avant de repartir pour un autre.
  • Pour des changements de sous-réseaux réels (WiFi par ex.), Linux ne permet pas d'opérer un roaming suffisamment rapide pour la mobilité IPv6 : quand la carte a un signal trop faible, elle choisit un nouvel AP en scannant pendant plusieurs secondes. Il s'agit de changer manuellement d'Access Point (AP) en précisant la SSID et l'adresse MAC avec iwconfig pour ne pas perdre de précieuses secondes. Pour un client mobile Linux, la limitation se situe donc plus au niveau de l'implémentation du roaming que au niveau de l'implémentation de la mobilité IPv6.

Optimisations

Pour avoir des Router Advertisement suffisament rapides ( problèmes avec les Juniper, et Cisco ???), il s'agit d'installer un démon radvd sous Linux toujours. La version 0.7.3 permet des RA suffisament rapides pour la mobilité.

Note: sur le sous-réseau mère, si le HA n'est pas la passerelle, il doit quand même faire tourner lui-même radvd avec les options spéficiques au HA.

Exemples

Topologie

Configuration des démons radvd sur les routeurs Linux

##configuration du RA_X
interface ethX
{
        AdvSendAdvert on;
        AdvIntervalOpt on;

        MaxRtrAdvInterval 0.07;
        MinRtrAdvInterval 0.03;
        AdvHomeAgentFlag off;

        prefix 2001:660:2402:f002::ff/64
        {
                AdvRouterAddr on;
                AdvOnLink on;
                AdvAutonomous on;
        };
};

##configuration du RA_Y
interface ethY
{
        AdvSendAdvert on;
        AdvIntervalOpt on;

        MaxRtrAdvInterval 0.07;
        MinRtrAdvInterval 0.03;
        AdvHomeAgentFlag off;

        prefix 2001:660:2402:f004::ff/64
        {
                AdvRouterAddr on;
                AdvOnLink on;
                AdvAutonomous on;
        };
};

Configuration de radvd sur le HA

interface eth0
{
        AdvSendAdvert on;
        MaxRtrAdvInterval 0.07;
        MinRtrAdvInterval 0.03;
        AdvIntervalOpt off;
        AdvHomeAgentFlag on;
        HomeAgentLifetime 10000;
        HomeAgentPreference 20;
        AdvHomeAgentInfo on;

        prefix 2001:660:2402:f003::aa/64
        {
                AdvRouterAddr on;
                AdvOnLink on;
                AdvAutonomous on;
                AdvPreferredLifetime 10000;
                AdvValidLifetime 12000;
        };
};

Liens

mipl.1124723965.txt.gz · Last modified: (external edit)