jueves, noviembre 02, 2006

Montar un Punto de Acceso Barato Wireless 802.11g en Linux con Madwifi

Uno de mis principales objetivos de la infraestructura que intento montar en mi red casera es desplegar un punto de acceso para poder conectarme a Internet desde mi salón :) (lo se, soy un poco vago). Dos son las principales ventajas de esta tarjeta inalambrica. La primera, la que se menciona en el titulo, y es que es bastante barata, y la segunda es que es una tarjeta 802.11g. La mayoría de los artículos o páginas que he encontrado se referían a puntos de acceso 802.11b. La ventaja que añade el uso de esta tarjeta es que funciona con el driver madwifi, que utiliza una interesante característica que se llama VAPs o Virtual Access Points. La ventaja es que puedes crear varios interfaces virtuales, en diferentes modos, de tal manera que puedes tener diferentes interfaces de red, p.ej.: un interfaz en la que te puedas conectar sin clave, otra interfaz cifrada con WEP o WPA/2 o incluso crear una interfaz en modo infraestructura (managed) o bridge y conectarlo con otro Punto de Acceso (lo cual puede ser interesante para edificios grandes o para comunidades Wireless).

Aunque la interfaz wireless del portatil Dell 600 que tengo, es una Intel 2100 y por tanto 802.11b, quería montar un punto de acceso G (y que es compatible hacía atrás con B). Hice una busqueda por Internet y descubrí el driver madwifi y su soporte al chip Atheros. Otro requisito que me marqué fue que la tarjeta fuera PCI y no PCMCIA y no tener que gastar mas dinero en un adaptador PCI para PCMCIA. Después de buscar encontré la tarjeta SMCWPCI que tiene un chipset Atheros y que me costó cerca de 20 euros. Compré primero la tarjeta de 54 Mbps (se puede ver en la imagen debajo), y como todo fue bien, compré una tarjeta más para otro punto de acceso para mi familia y una tarjeta con mayor ganancia (5 dBi) que la que antena que venía con la tarjeta que tenia sólo 2 dBi. La diferencia fue, que la señal podía atravesar dos pareces y llegar a misalón :)

La primera tarjeta que compré era de 54 Mbps, y funcionaba perfectamente en un Pentium MMX con 128 Mb con una RedHat 7.3.En el punto limpio de mi ciudad encontré varios PCs, y descubrí que alguien dejo un AMD XP 1800 y un AMD 1000, los cuales los he convertido en PCs de sobremesa. Tenía varios PCs antiguos, Pentium II y III, así que decidí convertir los Pentium II en mis routers y puntos de acceso Wifi e intentar hacer cosas más sofisticadas como utilizar OpenVPN, que demandan mas CPU. Cuando compré la tarjeta extra para el otro router para mi familia, no me di cuenta de que era realmente una tarjeta de 108 Mbps. Asumir que era una tarjeta 54 Mbps me dió algunos dolores de cabeza, pero al final conseguí hacerla funcionar.El driver como ya he comentado es madwifi (http://madwifi.org).

Seguir las instrucciones fue bastante fácil. Inicialmente en el primer router que tenía un Pentium MMX con una RedHat recompile el kernel 2.4.x y funcionó perfectamente. Pero como he migrado mis servidores a Debian, decidí utilizar las instrucciones para Debian dadas en la web de madwifi.

Para poder instalar el paquete Debian, tienes que añadir estas entradas en tu fichero sources.list (yo utilizo testing):

# Testing
deb http://ftp.au.debian.org/debian testing main contrib non-free
deb-src http://ftp.au.debian.org/debian testing main contrib non-free

y ejecutar:

$ su
# apt-get update
# apt-get install madwifi-source
# apt-get install madwifi-tools
# m-a prepare
# m-a a-i madwifi

Esto instala el driver, que se puede cargar utilizando modprobe:

# modprobe ath_pci

Y se obtiene algo así:

ath_hal: 0.9.16.16 (AR5210, AR5211, AR5212, RF5111, RF5112, RF2413, RF5413)
wlan: 0.8.4.2 (svn 1451)
ath_rate_sample: 1.2 (svn 1451)
ath_pci: 0.9.4.5 (svn 1451)
ACPI: PCI Interrupt 0000:02:02.0[A] -> Link [LNKC] -> GSI 10 (level,
low) -> IRQ 10
wifi0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
wifi0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps
24Mbps 36Mbps 48Mbps 54Mbps
wifi0: H/W encryption support: WEP AES AES_CCM TKIP
wifi0: mac 5.6 phy 4.1 radio 1.7
wifi0: Use hw queue 1 for WME_AC_BE traffic
wifi0: Use hw queue 0 for WME_AC_BK traffic
wifi0: Use hw queue 2 for WME_AC_VI traffic
wifi0: Use hw queue 3 for WME_AC_VO traffic
wifi0: Use hw queue 8 for CAB traffic
wifi0: Use hw queue 9 for beacons
wifi0: Atheros 5212: mem=0xd0000000, irq=10
ACPI: PCI Interrupt 0000:03:00.0[A] -> Link [LNKC] -> GSI 10 (level,
low) -> IRQ 10
wifi1: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
wifi1: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps
24Mbps 36Mbps 48Mbps 54Mbps
wifi1: turboG rates: 6Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
wifi1: H/W encryption support: WEP AES AES_CCM TKIP
wifi1: mac 7.9 phy 4.5 radio 5.6
wifi1: Use hw queue 1 for WME_AC_BE traffic
wifi1: Use hw queue 0 for WME_AC_BK traffic
wifi1: Use hw queue 2 for WME_AC_VI traffic
wifi1: Use hw queue 3 for WME_AC_VO traffic
wifi1: Use hw queue 8 for CAB traffic
wifi1: Use hw queue 9 for beacons
wifi1: Atheros 5212: mem=0xd2000000, irq=10

y solo hay que añadirlo a la lista de modulos:

# echo ath_pci >> /etc/modules

Después de esto, comienza la peor parte, que para mi fue hacerlo funcionar cuando el sistema arranca :)

La página de madwifi recomienda el uso de los scripts pre-up y post-up

Mi intención era configurar la tarjeta en modo master y lo intenté añadiendo lo siguiente en el script interfaces de Debian:

iface ath0 inet static
pre-up wlanconfig ath0 destroy
pre-up wlanconfig ath0 create wlandev wifi0 wlanmode ap
pre-up iwconfig ath0 essid breinestorm rate auto
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0

pero aunque me configuraba la tarjeta en modo master, pero no era capaz de cambiar la potencia de 9 a 15 dB, tenía que hacerlo siempre una vez ejecutado el script interfaces.Por tanto opté por añadir el siguiente script bash en /etc/rc.local, que es el último servicio que se ejecuta:

con mi RedHat funcionaba el siguiente script:

#!/bin/bash
echo "Arrancando Access Point"
wlanconfig ath0 destroy
ifdown ath0
wlanconfig ath0 create wlandev wifi0 wlanmode ap
ifup ath0
iwconfig ath0 essid breinestorm rate auto

con la antena original de 2 dBi funcionaba bien, pero incluso con la tarjeta de 108 Mbps, la calidad de la conexión no era muy buena (20/94) así que busque un poquito y descubrí en un foro que ejecutando esto la calidad mejoraba:

iwconfig ath0 channel 9

y repentinamente la calidad del enlace mejoró a 50/94 :) Para hacer uso de la antena de 5 dBi tuve que añadir:

iwconfig ath0 txpower 16

asi que mi script terminó siendo:

#!/bin/bash
echo "Arrancando Access Point"
wlanconfig ath0 destroy
ifdown ath0
wlanconfig ath0 create wlandev wifi0 wlanmode ap
#iwpriv ath0 bgscan removed
ifup ath0
iwconfig ath0 essid breinestorm rate auto
#athctrl ath0 -d 20
sleep 10
iwconfig ath0 txpower 16
iwconfig ath0 channel 9

Las lineas que he comentado las dejo como ejemplo de diferentes posibilidades para mejorar la conexion :)

Espero que esto sirva de ayuda básica a la gente, no pretende ser una guía exhaustiva sino una pequeña referencia para no tener que darle vueltas a la hora de encontrar una tarjeta barata 802.11g y que tenga el chipset Atheros soportado por el driver madwifi.Espero comentarios o
posibles mejoras.

9 comentarios:

Anonymous Anónimo ha dicho...

muy majo el artículo.step by step.
ahora solo falta que la pongas a trabajar en modo adhoc con los otros nodos (tú elijes el protocolo de enrutado) y ya tienes tu propia red mesh ;-)

3:58 a. m.  
Blogger tyler durden ha dicho...

Conocia las MANETS pero no conocia las redes mesh. Lamentablemente donde estoy yo no hay ningun nodo wireless al que conectarme :(

Gracias por los animos :)

12:20 p. m.  
Anonymous juanjo ha dicho...

Bien tio, guapísimos los artículos. Y muy interesantes.

Saludos

11:56 a. m.  
Anonymous Anónimo ha dicho...

lo mejor de todo es qu eme parece genial el reciclado qeu has hecho de lso peces, en mi ciudad tb hay puntos llimpios pero no dejan cojer nada de nada, es una lastima porqeu los veo desde mi ventaa como se mojan con la lluvia y se desperdicia,a mi un xp athlon me vendria de perlas, no entiendo como la gente puede tirar cosas asi, en fin lo del reciclado genial , ojala tomaran ejemplo muchas personas, porqeu para el uso qeu el damos al pc el 90% de la gente iria va que se mata un pc de esos, no creo que haga falta la ultima maquina del mercado, sobre el resto del articulo me parece muy interesante, aunqeu pense qu eel wifi podria llegar mas lejos que solo dos paredes

8:09 p. m.  
Blogger tyler durden ha dicho...

Gracias por los comentarios. No quiere decir que la wifi no pueda tener mas potencia, la potencia viene marcada por la antena, pero por 9 euros que me costó hace la función que yo quería, y es que llegará a todos los sitios de la casa. Si hubiera querido, hubiera podido comprarme una antena bidireccional. De todas maneras estoy seguro que la señal llega más lejos, pero lo importante es que atraviese 3 paredes (me he confundido en el número) y que sobre todo no pierda calidad (practicamente me da calidades de excelente).

Lo de los puntos limpios, es una posibilidad, otra son las empresas que a veces retiran equipos, amigos que tiran PCs...Para cacharrear con linux, no necesitas un gran equipo, yo esto como comento en el articulo lo he montado en un Pentium MMX, aunque como quiero probar otras cosas, lo migré todo a un Pentium II.

Otra opción es el mercado de segunda mano, ebay, etc...

9:24 p. m.  
Anonymous Anónimo ha dicho...

Estoy buscando algo parecido para saber si se puede. Vivo al lado de mi hermano y el posee un router inalambrico, como todavia los de telefonica no me ponen un simple cable que llegue a mi casa(y eso que ya me enviaron toda la documentacion para conectarme) me compre un tarjeta pci inalambrica, sustitui la antena por otra, y recibo señal perfectamente.

Ahora me he comprado la psp que se puede conectar por wifi a internet, pero no pilla la señal.

Mi pregunta es, con mi tarjeta de red puedo crear un punto de acceso y con la psp conectarme a mi tarjeta? Es lo que has hecho tu?.

8:57 p. m.  
Anonymous Kui ha dicho...

holas!! muy interesante el articulo pero yo tengo una duda... keria montar una red en mi casa con un punto de acceso en el salon como tu, y mi duda es: hace falta que el punto de acceso este unido fisicamente a un ordenador? muxas gracias!! y un saludo

6:41 p. m.  
Anonymous lsaavedr ha dicho...

Hola, muchas gracias, ta mu weno todo. También considero que la parte más difícil es hacer partir la tarjeta en el booteo. Yo le añadí al /etc/network/interfaces

auto ath0
iface ath0 inet static
pre-up wlanconfig ath0 destroy
pre-up wlanconfig ath0 create wlandev wifi0 wlanmode ap
pre-up iwconfig ath0 essid "Nodo -3" key 0994855510 channel 11
address 192.168.3.1
netmask 255.255.255.0
network 192.168.3.0

y funcionó perfectamente, sin necesidad del script.

Saludos y muchas gracias, ¡que sin tu artículo no lo hago!

9:44 a. m.  
Anonymous Anónimo ha dicho...

Hola, un apregunta sencilla, de prinipiante: el cifrado (WPA o Wep) quien lo realiza? La tarjeta o el S.O.?
Tengo una tarjeta un tanto antigua en el portatil, y quisiera conectarme a redes wpa, pero no soy capaz. Utiliza el driver orinico_cs y la tarjeta es de lucent. probé con wpa-replicant y no lo pude echar a andar...
¿Alguna idea?

9:28 a. m.  

Publicar un comentario

Suscribirse a Enviar comentarios [Atom]

<< Página principal