span.fullpost {display:inline;}

miércoles, 8 de abril de 2009

Montar una red Ad-Hoc en Hardy

Desde hace mas de dos años tengo un pocket PC con WiFi incluido que me gusta utilizar de vez en cuando, mayormente para navegar, escribir notas y poco más. Cuando la adquirí no tenía ningún punto de acceso inalámbrico, ni nada que se le pareciera, así que cada vez que necesitaba conectarme a Internet me veía obligado a tener que allanar conexiones ajenas pertenecientes a vecinos incautos que no tomaban -ni siguen tomando- la precaución de poner una contraseña para protegerse de intrusos como yo. La situación cambió cuando hice un plan renove a mi ordenador y me agencié uno nuevo que, entre otras características, posee una tarjeta wireless Conceptronic C54Ri, con chipset RaLink RT2561/RT61, la cual instalé con la sana intención de usarla como router WiFi para crear mi propio espacio inalámbrico, y no tener que andar robando anchos de banda ajenos.
Como no andaba muy puesto en materia de conectividad inalámbrica bajo Linux, me puse a buscar información al respecto, y la primera conclusión a la que llegué fue que necesitaba poner la tarjeta en modo Master, conclusión tan errónea como inviable, ya que solo unos pocos modelos son capaces de soportar este modo, y mi Conceptronic no se encuentra entre ellos. Y errónea, porque después supe que no es necesario soportar dicho modo para poder compartir la conexión a Internet, ya que existe otro modo, llamado Ad-Hoc, que permite interconectar dos ordenadores directamente y compartir dicha conexión. Así que me puse a buscar toda la información necesaria para:
  1. instalar los controladores del chipset de la tarjeta Wifi para que pueda ser reconocida por Ubuntu
  2. configurar dicha tarjeta para ponerla en modo Ad-Hoc y que actúe como punto de acceso a la red
  3. ... y modificar las iptables para redireccionar el acceso a Internet
En aquellos momentos utilizaba la versión 7.10 de Ubuntu (Gutsy) y, tras mucho buscar y leer en manuales, tutoriales y foros de todo tipo, llegué a deducir que con dicha versión me iba a resultar del todo punto imposible pasar siquiera del primer punto, debido a cierto bug residente en Gutsy. Así que decidí dejarlo por imposible y posponer la tarea para más adelante, cuando llegara la siguiente versión, hecho que se produciría a los pocos meses con el lanzamiento de la 8.04 (Hardy). Tras instalarla volví a ponerme en faena, rescatando los conocimientos adquiridos durante los meses anteriores y poniéndolos de nuevo en práctica. Y tras varios intentos conseguí, ahora sí, hilvanar los pasos necesarios para lograr esta receta, gracias a la cual puedo conectarme y navegar mediante la PDA sin tener que perder tiempo en infructuosos intentos de conexión a las redes de los vecinos. Ni que decir tengo que la primera parte de este howto solo es válida con tarjetas inalámbricas que posean algún chipset del fabricante RaLink. Si este no es tu caso, tendrás que averiguar cuales son los controladores mas apropiados para el chipset de tu tarjeta, donde encontrarlos y como instalarlos. No obstante, si es un modelo de Ralink distinto al rt61, puede que no se ejecuten correctamente algunas de las instrucciones que doy a continuación.

Dicho lo cual, me dispongo a exponer a continuación la secuencia ordenada de pasos que seguí:

PRIMERA PARTE
  • Ubuntu trae un driver instalado por defecto pero no funciona bien, cuelga el ordenador a veces sí a veces no. Para deshabilitarlo lo metemos en la lista negra, añadiéndo la siguiente línea al fichero /etc/modprobe.d/blacklist, de manera que dicho módulo no será cargado al arrancar:
    $ sudo echo blacklist rt61pci >> /etc/modprobe.d/blacklist
    si lo desea, puede desinstalar antes dicho módulo mediante:
    $ sudo rmmod rt61
  • Bajarse los drivers que ofrece el fabricante RaLink desde su página web. Buscamos el enlace de descarga que corresponda a nuestro modelo, en mi caso rt61. En el momento de escribir esta entrada, la última versión disponible para el modelo rt61 data del 23 de enero de 2009. Tenemos que compilar el módulo a partir del código fuente, para lo cual necesitaremos tener instalados los paquetes build-essential y linux-headers-[version-nuestro-kernel], asimismo habrá que desinstalar el paquete network-manager:
    $ sudo aptitude purge network-manager network-manager-gnome
    $ sudo aptitude install build-essential linux-headers-$(uname -r)
  • Para compilar ejecutar en un terminal los siguientes comandos, dentro del mismo directorio donde hayamos descargado el archivo comprimido del controlador:
    $ tar -xjvf 2009_0123_RT61_Linux_STA_v1.1.2.3.tar.bz2
    $ cd 2009_0123_RT61_Linux_STA_v1.1.2.3.tar.bz2/Module
    $ make all
    Esperamos un ratito mientras se compilan los módulos.
  • La compilación genera una serie de ficheros que habrá que copiar en el directorio /etc/Wireless/RT61STA. Pero antes debemos crear dicho directorio.
    $ sudo mkdir /etc/Wireless
    $ sudo mkdir /etc/Wireless/RT61STA
    $ sudo cp *.bin rt61sta.dat /etc/Wireless/RT61STA
    $ sudo cp rt61.ko /lib/modules/$(uname -r)/kernel/drivers/net
  • Pues ya está instalado, el resto del trabajo es pura configuración. Levantamos el driver y terminamos de configurar:
    $ sudo depmod
    $ sudo modprobe rt61
  • Para que levante el módulo al arrancar el sistema, añadimos la línea rt61 al archivo /etc/modules:
    $ sudo echo rt61 >> /etc/modules
    y reiniciamos el sistema para que los cambios hagan efecto.
SEGUNDA PARTE
  • Para comprobar que la tarjeta es reconocida por el sistema ejecutamos en un terminal la orden iwconfig, nos debería de salir algo parecido a esto:
    $ iwconfig
    lo no wireless extensions.

    eth0 no wireless extensions.

    eth1 no wireless extensions.

    ra0 RT61 Wireless ESSID:"" Nickname:""
    Mode:Ad-Hoc Frequency:2.412 GHz Cell: C2:66:04:EF:65:EF
    Bit Rate=11 Mb/s
    RTS thr:off Fragment thr:off
    Link Quality=0/100 Signal level:-121 dBm Noise level:-107 dBm
    Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
    Tx excessive retries:0 Invalid misc:0 Missed beacon:0
    Al tener dos tarjetas ethernet me aparecen dos dispositivos (eth0 y eth1). La tarjeta wireless adopta el nombre simbólico ra0, aunque puede cambiar de un modelo a otro.
  • Ahora vamos a configurar la tarjeta para crear una red Ad-Hoc, para ello empezaremos por modificar el fichero /etc/network/interfaces. Voy a suponer que nos conectamos a Internet mediante una tarjeta ethernet llamada eth0:
    $ cat /etc/network/interfaces
    auto lo
    iface lo inet loopback

    ## tarjeta "alambrica" de conexion a internet ##
    auto eth0
    iface eth0 inet dhcp

    ## tarjeta inalámbrica de red ad-hoc ##
    auto ra0
    iface ra0 inet static
    address 192.168.25.1
    netmask 255.255.255.0
    network 192.168.25.0
    wireless_mode ad-hoc
    wireless_essid nombre-de-red
    Las direcciones pueden ser cualesquiera que sigan este patrón: 192.168.xxx.yyy. El valor que asignemos a xxx deberá ser el mismo en el campo address y en network, no así el valor que le asignemos a yyy.
  • Ahora procedemos al enmascaramiento de la red, se pretende que todos los ordenadores "clientes" a los que queramos darle acceso utilicen nuestro ordenador como pasarela o puerta de enlace para conectar a Internet. Para ello vamos a crear el fichero /etc/init.d/iptablesconf con el script que crea las reglas de iptables necesarias:
    #### Script que configura iptables ####
    #!/bin/bash
    echo "Aplicando reglas de redireccionamiento....."
    iptables -F
    iptables -X
    iptables -Z
    iptables -t nat -F
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 192.168.25.0/25 -d 0.0.0.0/0 -j MASQUERADE
    iptables -A INPUT -p TCP -m state --state RELATED -j ACCEPT
    echo "....hecho"
  • Guardamos el fichero, le damos permisos de ejecución al script y lo añadimos a los servicios de inicio del sistema, después se reinicia el nuevo servicio creado y el de red:
    $ sudo chmod -v 755 /etc/init.d/iptablesconf
    $ sudo update-rc.d iptablesconf start 20 2 .
    $ sudo /etc/init.d/iptablesconf start
    $ sudo /etc/init.d/networking restart
  • En el ordenador cliente (en mi caso el pocket PC), será necesario configurar los siguientes parámetros de conexión:
    IP: 192.168.25.10 (se puede sustituir el 10 por cualquier número entre 2 y 25)
    Mascara de subred: 255.255.255.0
    Puerta de enlace: 192.168.25.1
    Y como servidores DNS se pueden especificar los dos que se desee. Por ejemplo, los mismos que tengamos en el fichero /etc/resolv.conf. En cualquier caso reiniciar el sistema del ordenador cliente para que se hagan efectivo los cambios.
Y eso es todo, comprobaremos que hay acceso a Internet en el sistema cliente, y si no lo hay es que algo has hecho mal. En otra ocasión explicaré como instalar un servidor DNS propio que resuelva nombres de dominio en todos los sistemas conectados entre sí. Para cualquier sugerencia o duda que quieras exponer puedes dejarme un comentario más abajo.

1 comentario:

  1. Me viene perfecto, compadre, gracias, ya que es la misma tarjeta de red wifi que he adquirido ya, mismo chip y todos, gracias jeje

    un saludo de Mkiki webmaster de mkiki.ec.tf

    ResponderEliminar

Escriba a continuación su comentario. Los comentarios serán publicados tras ser aprobados por el moderador. Gracias por participar ;-)