Dongle Wifi USB con chipset ZyDAS en Linux

Sé lo que estarán pensando: "hay miles de howtos en Internet explicando cómo se hace esto". Será cierto, pero yo llevo aquí una hora precisamente por hacer caso de uno de ellos. Así que les pongo unas breves notas de lo que tuve que hacer por si sirven de ayuda. Hago notar que no tenía (casi) ni idea de cómo funcionan las redes Wifi en Linux antes de empezar. Ahora sigo sin tener ni idea pero sé cómo hablar para que no sea tan evidente.

Antes de nada, explico lo que quería hacer. Que me he dejado llevar por la emoción (y la hora) y seguramente no he sido muy claro.

Un compañero de trabajo me pasó un dongle USB Wifi, que pretendo usar para que mi hermana pueda tener un ordenador conectado a Internet en su habitación sin tener que agujerear la pared para pasar cable. Me dijo que funciona en Linux, y es cierto; pero recuerdo que mencionó algo de que "no era del todo fácil" (a lo que, típico de mí, no di mucho crédito). También es cierto.

Lo primero que hice fue enchufar el chisme y asegurarme de que se veía con lsusb:

root@howler:~# lsusb
Bus 004 Device 004: ID 0ace:1211 ZyDAS 802.11b/g USB2 WiFi
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 004: ID 413c:3200 Dell Computer Corp.
Bus 001 Device 003: ID 413c:2003 Dell Computer Corp.
Bus 001 Device 001: ID 0000:0000

(Como nota curiosa, no sé qué es eso de "Dell" que sale ahí; el ordenador en el que estoy probando es un clónico.)

La distribución que uso en el ordenador es Ubuntu "Feisty". El módulo del kernel para usar el dongle es zd1211rw, que debería cargarse automáticamente tras insertarlo.

En casa tengo una pequeña red con un servidor DHCP, y el AP está haciendo de "puente" entre esa red y la Wifi. Con WEP funciona de forma muy sencilla, insertando unas líneas en /etc/network/interfaces como éstas:

iface eth1 inet dhcp
        hostname howler-wl
        wireless-essid "mi red wifi"
        wireless-key "1234567890ABCDEF"

Los valores del ESSID y la key son los de su red, como es lógico.

Ahora bien: yo no uso WEP, sino WPA con AES. Hay un howto para Ubuntu con muy buena pinta aquí:

http://ubuntuforums.org/showthread.php?t=92327

Y como dijo alguien una vez, "siempre hay una explicación sencilla y convincente pero equivocada". El enlace que les puse ahí es un buen ejemplo. Supongo que será por lo antiguo (es del 2005), pero aunque los pasos son los correctos, hay varios detalles que hacen que, al menos en mi caso, nada funcione si lo hago como dice el autor.

Hay varias cosas que tuve que hacer de otra forma. Lo primero: no hace falta compilar módulos, porque los que vienen con Feisty funcionan bien. Idem para wpasupplicant. Ésta era fácil.

La manera de comprobar si su dispositivo Wifi está ahí es, como se indica, ejecutar iwconfig. En Feisty los dispositivos Wifi aparecen como tarjetas Ethernet estándar: el mío aparece como eth1. Para ver la configuración habría que teclear iwconfig eth1.

Pero a continuación se dice que hay que hacer iwlist scanning, y eso a mí no me funcionó a menos que levantara antes el interfaz "a pelo" con ifconfig eth1 up. Así, sin haberlo configurado ni nada. Bruto que es uno. Para ver todas las redes Wifi que detecta el dongle, además, tuve que desactivar el ESSID con iwconfig eth1 essid off. A lo mejor "desactivar el ESSID" no es la expresión correcta; me remito a mi ignorancia de estos temas para excusarme. Una vez hechas estas dos cosas ya podía hacer iwlist scanning y detectar varias redes (entre las que estaba la mía).

Para usar WPA hay que utilizar el programa wpa_supplicant, del paquete wpasupplicant. La traducción entre los términos que aparecen en la configuración de wpa_supplicant y los de la configuración de mi AP (un Linksys WAP54G) son inmediatas salvo porque el cifrado "AES" del Linksys es el "CCMP" del programa. Teniendo esto en cuenta, el fichero de configuración /etc/wpa_supplicant/wpa_supplicant.conf (una variación del wpa-psk-tkip.conf que viene en los ejemplos) queda así:

network={
        ssid="mi essid"
        scan_ssid=1
        pairwise=CCMP
        psk="mi clave muy secreta"
        key_mgmt=WPA-PSK
        proto=WPA
}

El programa es muy quisquilloso con la sintaxis del fichero. Al principio tenía la línea de network con un espacio separando el signo igual y la llave, y no funcionaba. Al ejecutar el programa en línea de comandos no decía nada, salvo que no usara el parámetro -Bw que aparece en el howto y que añadiera algo para mostrar la información de debug (-dd). Aparte, el parámetro -D zydas que aparece en el documento no existe. El que funciona es -D wref.

Otro detalle divertido: la autenticación con WPA no funcionaba salvo cuando desactivaba el ESSID. Cuando intentaba levantar el interfaz, aparecía este mensaje en los logs del kernel:

howler kernel: [ 4324.104000] ADDRCONF(NETDEV_UP): eth1: link is not ready

Y que si quieres arroz, Catalina. Así que desactivé primero el ESSID y luego levanté el interfaz otra vez.

En resumen, para configurar la conexión "a pelo" habría que hacer esto:

iwconfig eth1 essid off
ifconfig eth1 up
wpa_supplicant -dd -i eth1 -c /etc/wpa_supplicant/wpa_supplicant.conf -D wext

Si les sale una línea como ésta:

EAPOL: SUPP_PAE entering state AUTHENTICATED

Entonces es que ha funcionado. Si no ... bueno, es culpa suya: ¿quién les manda fiarse de lo que pone en una página web cualquiera? ¿No han prestado atención a lo que les dije?

Ahora sólo queda configurar el dispositivo en /etc/network/interfaces. Para eso añadí estas líneas:

iface eth1 inet dhcp
        hostname howler-wl
        wireless-essid any
        wpa_conf /etc/wpa_supplicant/wpa_supplicant.conf

La última línea es la que marca la diferencia: no funcionó hasta que la puse. Durante un rato no conseguí que se lanzara automáticamente wpa_supplicant al hacer ifup del dispositivo, y leyendo /etc/network/if-pre-up.d/wpa_supplicant descubrí que debía haber una variable IF_WPA_CONF definida con el nombre del fichero de configuración para que la cosa funcionara. No sé si estará documentado en algún sitio (algo tipo Las 10 razones más frecuentes por las que no le funciona la tarjeta Wifi, o algo así), pero yo no lo vi1. El por qué IF_WPA_CONF y la línea wpa_conf están relacionadas está explicado en man interfaces.

Con eso, al fin, tengo Wifi con el dongle USB. Ignoro si alguna de las herramientas "visuales" de Ubuntu hace todo esto más fácil.

Dejo esto aquí para que Google pueda decirles algo si llegan a hacer una búsqueda parecida. Así no les saldrán páginas con datos equivocados y no perderán una hora de su vida como yo. Aunque por otro lado, éstas son las cosas divertidas de usar Linux.


1 Otra cosa curiosa de ésas en las que la solución no parece tener ninguna relación con el problema: los thumbnails de videos en Konqueror no me funcionaron hasta que instalé el paquete libarts1-xine. Había instalado antes todos los paquetes de Xine sin resultado, pero era ése el que hacía falta. Que me lo expliquen.

Coincidencias

Estos últimos días escuché dos frases que vienen a decir la misma verdad:

  • "Hay que escoger entre hacer lo fácil o lo correcto".
  • "Hay dos formas de hacer las cosas: hacerlas bien, o hacerlas rápido".

Lo curioso es que una se la escuché a Albus Dumbledore en una película de Harry Potter (la última, si no me falla la memoria; pero también podría ser la penúltima) y otra a un técnico que estaba cableando un par de racks.

Indiana Jones 4

Vía Slashdot, una preview de Harrison Ford en la película Indiana Jones 4 (pinchen para ver la imagen en grande).

Tiene buena pinta. Parece que Indy está tomando el sol en e porche de su casa tras un duro día de aporrear nazis, saltar precipicios y hacer proezas con el látigo. Porque claro, a su edad, empieza a necesitar un descansito de vez en cuando.

Ha fallecido Angus McBride

El 15 de Mayo falleció Angus McBride, un dibujante extraordinario. Cualquiera que haya visto un libro de MERP (Middle-Earth Role Playing) ha visto alguna de sus ilustraciones. Es triste ver que desaparece alguien que formó parte de tu adolescencia. Algo más para hacerte sentir viejo.

Una lista de portadas para MERP que hizo están aquí.

"Skye Boat Song"

Por la presente declaro que nadie, NADIE puede morirse sin haber escuchado Skye Boat Song, en la versión hecha por el pianista John Boswell. Yo la he escuchado en el disco Celtic Twilight Vol. 1, pero seguro que la pueden encontrar en otros sitios.

Syndicate content