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:
- instalar los controladores del chipset de la tarjeta Wifi para que pueda ser reconocida por Ubuntu
- configurar dicha tarjeta para ponerla en modo Ad-Hoc y que actúe como punto de acceso a la red
- ... y modificar las iptables para redireccionar el acceso a Internet
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
Esperamos un ratito mientras se compilan los módulos.
$ cd 2009_0123_RT61_Linux_STA_v1.1.2.3.tar.bz2/Module
$ make all - 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.
- 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
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.
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 - 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
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.
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 - 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.
Seguir leyendo ...