Habilitar Roaming en APs con diferentes ESSIDs

De GALPon WiKi

Que significa itinerancia o roaming.

Roaming es la capacidad de cambiar de un área de cobertura a otra sin interrupción en el servicio o pérdida en conectividad. Para que esto sea posible debe existir un área de solapamiento en el que el cliente puede recibir el servicio desde diferentes puntos. [1]

La forma más habitual de dar este servicio es distribuyendo APs a lo largo de una estancia de tal forma que la red queda definida por un único ESSID y un conjunto de BSSIDs. Habitual en universidades/empresas ... pero no es mi caso :(

Mi situación

Dispongo de 2 APs, con ESSIDs diferentes y mi intención es pasar de conectarme a un AP a conectarme al otro, sin perder paquetes.

Por experiencia sé que, al menos en Squeeze, tanto Network-Manager como Wicd manejan mal el tema del roaming y se pierden cierto numero de paquetes. Pero esto si la red no cambia de ESSID.

Para realizar la prueba tengo que parar mi gestor habitual de conexiones (Wicd), para lo que ejecuto:

insserv -r wicd
sed -i '/^START_DAEMON/ s/yes/no/' /etc/default/wicd

Ahora editamos el archivo /etc/network/interfaces para que el servicio networking administre nuestra tarjeta wifi (wlan0). En Squeeze, si usas Network-Manager como gestor de conexión basta con editar este archivo para evitar que Network-Manager tome el control de la interfaz wifi [2].

auto wlan0
iface wlan0 inet manual
    wpa-roam /etc/wpa_supplicant/roam.conf

Es importante fijarse en manual, ya que solo se puede usar el wpa-roam si la interfaz está configurada de esta forma.

El archivo roam.conf

Llega lo interesante.

Este archivo guarda la configuración de wpa_supplicant para conectarse a cierto AP. Así tendremos, dentro de este archivo, tantos network como ESSIDs tengamos en nuestra malla. En mi caso 2.

Como no voy a pararme con la configuración de wpa_supplicant os dejo dos enlaces para que os informéis de lo que es necesario según el caso. [3] y [4]

Es necesario añadir esta línea al inicio del archivo:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

de donde:

  • DIR indica la ruta donde se encuentra los sockets de wpa_supplicant.
  • GROUP con el asignamos el grupo que tiene permisos para administrar wpa_supplicant con herramientas como wpa_cli o wpagui

Para poder añadir configuraciones nuevas, así como modificar las que ya están, sin tener que parar y levantar el servicio, debemos añadir update_config=1 al archivo roam.conf

En mi caso, con una configuración bastante sencilla, el archivo me quedó parecido a este:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

network {
    ssid="AP_1"
    psk="La contraseña"
    id_str="primer_ap"
}

network {
    ssid="AP_2"
    psk="La otra contraseña"
    id_str="segundo_ap"
}

Muy importante las líneas id_str ya que estas unen una configuración de red con una configuración de wpa_supplicant.

De nuevo el archivo interfaces

Una vez que acabamos con el archivo roam.conf volvemos a editar el archivo /etc/network/interfaces.

Nuestra configuración no solo puede variar en cuanto a ESSIDs, sino que puede también variar respecto a ip, dns, rutas....

Vamos a añadir la configuración primer_ap y segundo_ap.

iface primer_ap inet dhcp

iface segundo_ap inet static
    address 192.168.220.100
    netmask 255.255.255.224
    gateway 192.168.220.97

Se puede establecer cualquier configuración que fuese necesaria, pero debemos respetar los id_srt establecidos en roam.conf'.


Levantando el servicio

Ahora como root, o con sudo, ejecutaremos:

service networking restart

y, si no da ningún error, ya lo tenéis funcionando.

Pruebas

Para comprobar que funciona correctamente podemos, en una zona solapada, ejecutar en una terminal ping 8.8.8.8 y en otra tail -f /var/log/syslog. Ahora nos dedicamos a dar unas vueltas de forma que se pierdan las señales de un u otro AP y debemos ver que el ping no pierde paquetes.

Enlaces

[1] http://www.adrformacion.com/cursos/wifi/leccion3/tutorial3.html

[2] http://wiki.debian.org/NetworkManager#Wired_Networks_are_Unmanaged

[3] http://www.esdebian.org/wiki/configuracion-manual-wpasupplicant

[4] http://wiki.debian.org/WiFi/HowToUse#wpa_supplicant

Realizado tras leer http://ubuntuforums.org/showthread.php?t=1259003