Esta receta describe cómo configurar una red inalámbrica multisalto (MANET) bajo GNU Linux totalmente funcional.

Introducción

Las redes inalámbricas multisalto no necesitan de infraestructura fija para compartir datos entre distintos PC's, cada uno de los nodos que forman la red hacen las labores de un router de forma que se enrutan datos de unos a otros para formar una infraestructura de red dinámica. Si uno de los nodos tiene una conexión a Internet, los demas nodos pueden utilizar a éste como pasarela.

Requisitos previos

Como paso previo hay que hacer lo siguiente (a modo de precondiciones):
  • En el kernel tienes que tener compilado el "Netfilters"
  • Habilitar el Packet Forwarding. En /etc/sysconfig/network añadir una línea:
    FORWARD_IPV4=yes
  • Tener configuradas las tarjetas wireless.

Montar la red ad-hoc

En lo relativo a la configuración de las tarjetas, es muy útil el comando iwconfig que permite la configuración de las tarjetas de forma similar al clásico ifconfig. En Debian, ese comando está en el paquete wireless-tools. Bien, tenemos una tarjeta Wireless (en mi caso PC Card WL100) configurada en un portátil con Debian. El iwconfig nos dice que tenemos:
eth1      IEEE 802.11-DS  ESSID:"COMPAQ"  Nickname:"Prism  I"
          Mode:Managed  Frequency:2.457GHz  Access Point: 00:02:A5:2D:06:35
          Bit Rate:11Mb/s   Tx-Power=15 dBm   Sensitivity:1/242700000
          Retry min limit:8   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:49/1  Signal level:-53 dBm  Noise level:-144 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
Es el momento de observar dos cuestiones importantes, la primero de ellas es el Mode que está en "Managed" (utilizado para asociarse a puntos de acceso) y el segundo es el ESSID. Hay que señalar que para que esta tarjeta pueda formar parte de una red ad-hoc todas las tarjetas tienen que tener el mismo ESSID y estar puestas en modo ad-hoc. Para ello, y utilizando el iwconfig ejecutamos:
homer:~# iwconfig eth1 mode ad-hoc
homer:~# iwconfig eth1 essid ARCO
homer:~# iwconfig
eth1      IEEE 802.11-DS  ESSID:"ARCO"  Nickname:"Prism  I"
          Mode:Ad-Hoc  Frequency:2.457GHz  Cell: 02:23:7A:CF:F1:E5
          Bit Rate:5.5Mb/s   Tx-Power=15 dBm   Sensitivity:1/242700000
          Retry min limit:8   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
El segundo ordenador a utilizar en nuestra red es un ordenador de sobremesa con una tarjeta PCI-PCMCIA y con una tarjeta Wireless PC Card WL110. La salida del iwconfig es similar a la anterior, mientras que la salida del lsmod nos muestra el módulo orinoco_plx que es el driver que se ha usado. Ahora es el momento de configurar las direcciones IP que van a formar parte de nuestra red ad-hoc. Idealmente, un nodo ad-hoc debería ser capaz de autoconfigurarse para formar parte de la red. En principio nosotros vamos a asignar estas direcciones de forma estática. Edita el archivo /etc/networks/interfaces y añade la configuración de la interfaz eth1, por ejemplo:
auto eth1
iface eth1 inet static
      address 10.10.0.4
      netmask 255.255.255.0
      gateway 10.10.0.1
De forma que si ejecutamos:
radia:~# ifdown eth1
radia:~# ifup eth1
radia:~# ifconfig
eth1      Link encap:Ethernet  HWaddr 00:02:A5:6F:28:FC
          inet addr:10.10.0.4  Bcast:10.255.255.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1091 errors:0 dropped:0 overruns:0 frame:0
          TX packets:89 errors:20 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:81419 (79.5 KiB)  TX bytes:20266 (19.7 KiB)
          Interrupt:11 Base address:0xd800
Vemos la interfaz configurada con la dirección IP asociada. Debemos hacer lo mismo tanto en el portátil como el otro PC.(obviamente con direcciones IP distintas). Bien, en este momento deberíamos poder realizar un simple ping de un ordenador a otro a las direcciones que hayamos puesto, siempre y cuando estemos en el ámbito de cobertura.

Enrutando paquetes

Para tener una verdadera red inalámbrica multisalto debemos hacer que cada nodo enrute paquetes, para ello debemos instalar un algoritmo de enrutado, en nuestro caso vamos a usar el algoritmo AODV cuya implementación (una de ellas) podeis bajar de aodv_kernel Siguiendo los pasos del archivo README no debe haber ningún problema. Básicamente:
  • Te bajas el archivo y lo descomprimes.
    homer:~# tar xvzf kernel-aodv_v2.2.2.tgz
  • Ejecutas
    homer:~# make
  • Cambias los ficheros start.sh y start_gateway.sh según los parámetros de la subred
  • ejecutas start.sh si eres cliente sin acceso a internet
  • ejecutas start_gateway.sh si vas a funcionar como gateway dentro de la red ad-hoc
En este momento detectará todos los nodos dentro de su alcance y los añadirá a la tabla de enrutado. Para ver la tabla de enrutado:
homer:~# less /proc/aodv/route_table

Recetas relacionadas

Estas recetas pueden ser útiles:


blog comments powered by Disqus