User Tools

Site Tools


mipl

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
mipl [2006/02/24 16:45] – schreinermipl [2019/01/22 11:18] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +====== MIPL2 ======
  
 +===== Installation =====
 +
 +==== Téléchargement ====
 +
 +  * Télécharger les sources de la dernière version de [[http://mobile-ipv6.org/|MIPL]] (2.0) ainsi que le patch pour le noyau 2.6.14
 +    * [[http://mobile-ipv6.org/software/download/mipv6-2.0.tar.gz|mipv6-2.0.tar.gz]]
 +    * [[http://mobile-ipv6.org/software/download/mipv6-2.0-linux-2.6.14.patch.gz|mipv6-2.0-linux-2.6.14.patch.gz]].
 +  
 +
 +  * L'installation de MIPL2 requiert une recompilation du noyau. Actuellement, le dernier patch n'est disponible que pour le noyau 2.6.14 .         
 +    * Télécharger les sources du noyau 2.6.14 sur votre miroir favori ou sur [[ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2|kernel.org]].
 +
 +==== Recompilation du noyau ====
 +
 +    * Installer les sources :
 +
 +  # tar xvjf linux-2.6.14.tar.bz2 -C /usr/src
 +  # ln -s /usr/src/linux-2.6.14 /usr/src/linux
 +  # cp mipv6-2.0-linux-2.6.14.patch.gz /usr/src/linux
 +
 +    * patcher le noyau :
 +  
 +
 +  # cd /usr/src/linux
 +  # zcat mipv6-2.0-linux-2.6.14.patch.gz | patch -p1
 +  # make menuconfig
 +
 +    * Configurer les options du noyau. Le script **chkconf_kernel.sh**, fourni avec l'application mipv6-2.0, 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".
 +
 +<file>
 +     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
 +
 +</file>
 +
 +  # make && make modules_install
 +
 +:!: La compilation du noyau 2.6.8.1 de la précédente version (MIPL2.0-rc2) nécessite une version 3.3 de gcc.
 +
 +  * Copier le noyau de le répertoire /boot
 +
 +  # cp arch/i386/boot/bzImage /boot/vmlinux-2.6.14.MIPL
 +
 +  * Editer le fichier /etc/lilo.conf si vous utilisez LILO ou le fichier /boot/grub/menu.lst si vous utilisez GRUB et rajouter le noyau fraichement compiler.
 +
 +==== Compilation du démon mip6d ====
 +
 +  * Construire les exécutables. Sous Debian, installer les packages //indent// et //libssl-dev//.
 +
 +  # tar xvzf mipv6-2.0.tar.gz -C /usr/local/src
 +  # cd /usr/local/src/mipv6-2.0
 +  # ./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) :
 +
 +<code>
 +#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
 +</code>
 +
 +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. 
 +
 +<code>
 +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;
 +        };
 +};
 +</code>
 +
 +==== ha.conf ====
 +
 +Fichier de configuration du HA, /usr/local/etc/ha.conf
 +
 +<file>
 +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;
 +}
 +</file>
 +
 +==== mn.conf ====
 +Fichier de configuration de la node mobile, /usr/local/etc/mn.conf
 +
 +<file>
 +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;
 +}
 +</file>
 +
 +===== 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 : 
 +
 +<code>
 +#!/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::
 +</code>
 +
 +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 :
 +
 +<code>
 +#!/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
 +</code>
 +
 +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|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** 
 +
 +<file>
 +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;
 +}
 +</file>
 +
 +
 +
 +
 +==== sa.conf ====
 +voici le fichier d'échange des clés, il doit être identique sur le HA et le MN. 
 +
 +<file>
 +# 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" ;
 +</file>
 +
 +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|Juniper]], et Cisco ???), il s'agit d'installer un démon [[http://v6web.litech.org/radvd/|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 ===
 +
 +{{wiki_mipl2_1.png}}
 +
 +=== Configuration des démons radvd sur les routeurs Linux ===
 +
 +<file>
 +
 +##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;
 +        };
 +};
 +</file>
 +
 +
 +
 +=== Configuration de radvd sur le HA ===
 +
 +<file>
 +
 +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;
 +        };
 +};
 +
 +</file>
 +
 +
 +
 +===== Liens =====
 +  * [[http://mobile-ipv6.org/|http://mobile-ipv6.org]]
 +  * [[http://www.tldp.org/HOWTO/Mobile-IPv6-HOWTO/|Linux Mobile IPv6 HOWTO]]