Instalación de MobileIP

1. Introducción

En este documento se explica como realizar la instalación de Mobile IP sobre linux. El trabajo se ha realizado sobre 4 PCs con la distribución de linux Debian en version testing, y los PCs tienen kernel 2.4.1.

Para empezar lo primero que hay que hacer es crear dos subredes distintas, y después instalar instalar el software necesario para hacer funcionar Mobile IP.

2. Creación de dos subredes

Lo primero que hay que hacer es crear dos subredes para poder hacer las pruebas con la implementación de Mobile IP de la Helsinki University of Technology. Para ello, uno de los requisitos es que el Home Agent y el Foreign Agent están en distintas subredes.

La estructura de la red elegida es la siguiente:

Esquema de la maqueta

Para ello hay que seguir varios pasos:

* Recompilar los kernels de los PCs con las opciones adecuadas.
* Configurar los interfaces de red.

2.1 Recompilar kernels

La primera etapa a la hora de recompilar el kernel es (si no se tienen ya) instalarse los ficheros fuentes del kernel. Para trabajar con Dynamics (la implementación de la Helsinky University of Technology para Mobile IP) es necesario tener un kernel con versión 2.2.x o superior (la versión actual a fecha de hoy del kernel de linux es la 2.4.3).

Para conseguir instalarte los ficheros fuentes del kernel puedes usar tu forma habitual de instalar paquetes en linux (a partir de la herramienta ”dselect” si tu distribución es Debian, o directamente a partir del fichero .deb también en Debian, o bien del .rpm si usas Red Hat).

El lugar por defecto donde se instalarán los fuentes es ”/usr/src/kernel-2.x.x/” (si estás en Debian). Lo siguiente que hay que hacer es arrancar una de las tres herramientas que te permiten recompilar el kernel. Para ello hay que situarse en el diretorio anteriormente mencionado y ejecutar una de estas tres opciones:

* make menuconfig
* make oldconfig
* make xconfig

Nosotros utilizamos la tercera de las opciones, ”make xconfig”, que usa las X y es más vistosa.

Una vez arrancada la herramienta para recompilar el kernel, se han de seleccionar las siguientes opciones para que funcione correctamente la solución Dynamics de la Helsinky University of Technology para Mobile IP. Las opciones que hay que seleccionar son las siguientes (todas incluidas dentro de la sección Networking options:

* Packet socket (opción CONFIG_PACKET)
* Kernel/User netlink socket (opción CONFIG_NETLINK)
* Routing messages (opción CONFIG_RTNETLINK)
* Socket filtering (opción CONFIG_FILTER, para los MNs; opcional pero recomendado)
* IP: advanced router (opción CONFIG_ADVANCED_ROUTER, para los FAs)
* IP: policy routing (opción CONFIG_IP_MULTIPLE_TABLES, para los FAs)
* IP: tunneling (opción CONFIG_NET_IPIP)

Aunque vienen opciones con el comentario ”para los MNs” o ”para los FAs ” es conveniente marcarlas todas a pesar de que nuestra máquina no vaya hacer la función que se cita.

Con las opciones ya marcadas, sólo queda guardar los cambios y recompilar el kernel:

* make dep
* make clean
* make bzImage
* make modules
* make modules_install

Ya está preparado el kernel para poder funcionar con Dynamics y para que la máquina encargada de hacer de router de las redes encamine los paquetes. Sólo queda actualizar LILO. Para ello hay que hacer una copia de la imagen del kernel recién compilado (bajo ”/usr/src/kernel/2.x.x/arch/i386/boot/bzImage”) dentro del directorio con las imágenes de kernel habitual (normalmente en ”/boot”):

* cp arch/i386/boot/bzImage /boot/vmlinuz-2.x.x

Ahora hay que añadir una nueva entrada en el fichero ”/etc/lilo.conf” con el siguiente texto:


image=/boot/vmlinuz-2.x.x
label=Linux-2.x.x
readonly

Si se han completado todos estos pasos satisfactoriamente, lo único que queda es ejectuar ”lilo” desde un terminal (para que los cambios realizados en ”/etc/lilo.conf” tengan efecto) y reiniciar la máquina. Cuando aparezca LILO escribiremos Linux-2.x.x y ya tendremos nuestro equipo con la configuración adecuada.

2.2 Configurar interfaces de red

El fichero clave a la hora de configurar las interfaces de red es el fichero ”/etc/network/interfaces”. De este fichero coge la información el kernel cuando arranca para configurar las interfaces de red que tenga la máquina.

El fichero de configuración de interfaces para el router de nuestras redes tienen el siguiente aspecto:

# /etc/network/interfaces — configuration file for ifup(8), ifdown(8)

# The loopback interface
# automatically added when upgrading
auto lo
iface lo inet loopback

# The first network card – this entry was created during the Debian installation
# (network, broadcast and gateway are optional)
# automatically added when upgrading
auto eth1
iface eth1 inet static
address 192.168.242.3
netmask 255.255.255.0
network 192.168.242.0
broadcast 192.168.242.255
gateway 192.168.242.3
auto eth0
iface eth0 inet static
address 192.168.240.3
netmask 255.255.255.0
network 192.168.240.0
broadcast 192.168.240.255
gateway 192.168.240.3

Tras configurar la interfaz de loopback, se configuran las dos tarjetas de red que tiene el router, eth0 y eth1 con las direcciones IP 192.18.240.3 y 192.168.242.3 respectivamente.

Otras informaciones relevantes son la máscara de red, la dirección de la red, la dirección de broadcast y el gateway.

Para asegurarse que las interfaces de red están correctamente configuradas se puede usar el comando ”ifconfig” desde un terminal. Si las interfaces están bien configuradas debería mostrarse una información como la que sigue (ejemplo de una máquina con una sola tarjeta de red):

eth0 Link encap:Ethernet HWaddr 00:01:02:29:3E:59
inet addr:192.168.242.3 Bcast:192.168.242.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1617627 errors:0 dropped:0 overruns:0 frame:0
TX packets:80109 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:787664102 (751.1 Mb) TX bytes:23374191 (22.2 Mb)
Interrupt:10 Base address:0xd800

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16144 Metric:1
RX packets:269 errors:0 dropped:0 overruns:0 frame:0
TX packets:269 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:14508 (14.1 Kb) TX bytes:14508 (14.1 Kb)

Para activar/desactivar interfaces de red se usa este mismo comando ”ifconfig” con una serie de argumentos. Así, para desactivar la interfaz eth0 se usa:

* ifconfig eth0 down

Si lo que se quiere es levantar un interfaz se ha de usar la siguiente línea (por ejemplo, para levantar la interfaz de la máquina cuya dirección IP es la 192.168.242.1):

* ifconfig eth0 192.168.242.1 up

Con el comando ”netstat -rn” se puede visualizar la tabla de encaminamiento del kernel de una máquina:

debian:# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window
irtt Iface
192.168.242.1 0.0.0.0 255.255.255.0 U 40 0 0
eth0

Para añadir una nueva ruta a esta tabla de encaminamiento se usa el comando ”route” de la siguiente forma:

* route add -net 0.0.0.0 gw 192.168.242.1 dev eth0

Otro aspecto a tener en cuenta en la máquina que hace de router es el contenido del fichero ”/proc/sys/net/ipv4/ip_forward”. Para que el router funcione perfectamente ha de contener un 1, pues por defecto el valor que trae es 0.

Con toda esta información, ya es posible montar dos subredes como las de la figura al comienzo del capítulo y comenzar a probar la implementación Dynamics para Mobile IP de la Helsinky University of Technology.

3. Instalar Mobile IP

Una vez que las dos redes están montadas y funcionan perfectamente ya podemos empezar a instalar el software necesario para hacer funcionar Mobile IP en nuestras subredes.

3.1 Instalación del software

El software utilizado lo puedes encontrar en http://www.cs.hut.fi/Research/Dynamics/software.html. Actualmente está disponible en paquetes .deb, .rpm (hasta versión 0.6.1), pero tuvimos problemas con esta versión que se arreglaron cuando pasamos a la versión 0.6.2, disponible solamente en formato .tar.gz.

La implementación necesita como mí­nimo un kernel 2.2.x, y resumiendo las opciones necesarias son las siguiente:

* Networking options:

Packet socket (CONFIG_PACKET)
Kernel/User netlink socket (CONFIG_NETLINK)
Routing messages (CONFIG_RTNETLINK)
IP: Socket Filtering (CONFIG_FILTER)
IP: tunneling (CONFIG_NET_IPIP)

* Adicionalmente para los Foreign Agents:

IP: Advanced router (CONFIG_IP_ADVANCED_ROUTER)
IP: policy routing (CONFIG_IP_MULTIPLE_TABLES)

* Opción adicional para el MN si se quiere probar con wireless:

Wireless LAN (non-hamradio) (CONFIG_NET_RADIO)

Por lo tanto el primer paso es conseguir esos paquetes y prepararnos para instalarlo en cada uno de los nodos (Mobile Node, Foreign Agent y Home Agent). Descomprimimos los fuentes:

tar xvfz dynamics-0.6.2.tar.gz

Después compilamos e instalamos de la manera tradicional:

* ./configure
* make
* make install

Tenemos que seguir esos pasos en cada uno de los nodos, y ya tendremos instalado el software para trabajar con Mobile IP sobre IPv4.

3.2 Configuración

Lo siguiente que tenemos que hacer es configurar cada uno de los nodos, para que haga la función de MN, HA o FA. Para ello tenemos unos ficheros de configuración bastante bien comentads en /usr/local/etc/ que se llaman:

* /usr/local/etc/dynmnd.conf: Para el Mobile Node.
* /usr/local/etc/dynhad.conf: Para el Home Agent.
* /usr/Local/etc/dynfad.conf: Para el Foreign Agent.

Después de instalar, los ficheros ya tienen por defecto una configuración básica para probar Mobile IP. Esta configuración es la siguiente:

Las direcciones IP son las que se muestran al principio del documento, y el comienzo de la prueba comienza cuando el MN está en la red de “casa”, es decir con el HA.

Al comenzar la ejecución el HA manda mensajes para ver si el MN está en casa, si es así­ el MN se registra en su HA y todo el tráfico del MN va directamente desde y hacia el MN (CN->MN y MN->CN).

Cuando cambiamos al MN de su red y lo llevamos a la red del Foreign Agent, el FA está mandando mensajes a ver si llega el MN, y cuando llega (sin cambiar la dirección IP) se registra en el FA, y entonces el FA establece un tunnel entre el FA y el HA. Desde ese momento todo el tráfico del MN, pasa desde el CN->HA->FA->MN y al revés MN->FA->HA->CN. Este modo se llama FA decapsulation, porque los paquetes llegan “encapsulados” hasta el FA, que es quien los desencapsula y se los entrega al MN.

Los parámetros de configuración más importantes de cada uno de los nodos son los siguientes:

* Home Agent:

# Dirección IP del Home Agent
HAIPAddress 192.168.242.1

# Número máximo de nodos conectados
MaxBindings 20

# Tiempo de vida del tunnel
HADefaultTunnelLifetime 600

# Especifica que manda avisos para localizar al MN
SendAdvertisements TRUE

# Tiempo entre avisos
AdvertisementInterval 1

# Triangle tunneling. Los paquetes van MN->FA->HA->CN y CN->HA->FA->MN
EnableTriangleTunneling TRUE

* Mobile Node:

# Dirección IP del MN
MNHomeIPAddress 192.168.242.2

# Dirección IP del HA
HAIPAddress 192.168.242.1

# FADecapsulation. Los paquetes hacia el MN son desencapsulados por el
# FA. Esto debe ser así­ si la dirección IP del MN no cambia cuando se
# va a la Foreign Network
EnableFADecapsulation TRUE

* Foreign Agent:

# Se especifica el interfaz que utiliza en FA, y el intervalo de
# tiempo entre los mensajes de aviso que manda.
INTERFACES_BEGIN
# interface type agentadv interval force_IP_addr
eth0 1 1 30

# Dirección IP del FA mayor. Esta opción y la siguiente se utiliza
# porque puede haber una estructura de FA en árbol, y solo el HighestFA
# se comunica con el HA
dHighestFAIPAddress 192.168.240.1

# Especifica si este nodo es el HiguestFA, quien se comunica con el HA.
HighestFA TRUE

3.3 Ejecución

Después de configurar los nodos, hay que lanzar los demonios que corren en cada uno de ellos y empezar a hacer pruebas. Para arrancar los demonios:

* MN: dynmnd -fg -debug -no-wireless Con esto conseguimos que se ejecute en ForeGround y en modo debug para poder observar posibles errores, y ver todo el proceso de comunicación entre los nodos. También se indica que no se utiliza wireless.
* HA: dynhad -fg -debug Igual que antes, se ejecuta en foreground y en modo debug.
* FA: dynfad -fg -debug Idem …

Con todos estos pasos se consigue hacer funcionar Mobile IP, pero hay muchas opciones que se pueden variar en los ficheros de configuración para poder hacer pruebas …

4. Experiencia Propia

Bueno, pues a partir de aquí­ vamos a contar un poco cual ha sido nuestra experiencia con este software y cuales han sido los problemillas que hemos ido teniendo.

Nuestras primeras pruebas las hicimos con los ficheros de configuración tal cual vienen con los fuentes, pero esto no nos termino de funcionar. El problema que teniamos era con el parámetro timestamp, definido en el Home Agent, que por defecto venía puesto a 400. Este parámetro comprueba algo así­ como la diferencia horaria entre el HA y FA, hace alguna comprobación de ese tipo por razones de seguridad. Lo que hicimos fue sincronizar los relojes y reducir ese tiempo poniéndolo a 120 y empezá a funcionar más o menos bien.

Después teníamos el problema de que tardaba mucho en empezar a establecerse el tunnel cuando el MN se cambiaba a la Foreign Network. Después de investigar mucho, y al final recurriendo al código fuente, observamos que el tiempo que tardaba en empezar a establecerse el tunel era igual a 3 veces el intervalo de tiempo con el que el HA mandaba mensajes de aviso. Es algo aparentemente sin sentido, pero puede que tenga alguno, hemos mandado un mensaje a los desarrolladores para que nos lo expliquen, pero todavía no nos han contestado. La solución a este problema es reducir el intervalo de tiempo en el que el HA manda los mensajes de aviso al MN, y el tiempo que tarda en empezar a establecerse el tunel también se reduce. Actualmente tenemos puesto este intervalo a 1 segundo. (Este parámetro, que está en el fichero de configuración del HA se llama AdvertisementInterval).

Un comentario en “Instalación de MobileIP”

  1. ¿Tengo una duda?

    He seguido este manual tal como lo indicaron, solo que con una implementacion de wireless, cuento con 3 laptops para eso, con tarjetas inalabricas que funcionan como access point. Ya puedo recibir el registro del nodo movil pero no se crea el tunel al recibir los avisos del agente foraneo, me gustaria que tuvieran mas documentacion al respecto para asi poder resolver este problema.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *