span.fullpost {display:none;}
Mostrando entradas con la etiqueta dispositivos. Mostrar todas las entradas
Mostrando entradas con la etiqueta dispositivos. Mostrar todas las entradas

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.

Seguir leyendo ...

miércoles, 29 de octubre de 2008

Audacity se queda mudo

Hace pocos dias tuve la imperiosa necesidad de editar una serie de ficheros de audio y recurrí -como no podía ser menos- al Audacity, que no sé si es el único programa de edición de sonido o el mejor, pero seguro que es el más utilizado.
Pues bien, a lo que voy, el caso es que no suelo usar esa aplicación con demasiada frecuencia así que cuando llega el momento de echarle mano tengo que reciclarme y ponerme al dia en cuanto a su manejo. La cuestión es que cuando cargo el fichero .wav y le doy al botón de reproducir no se oye absolutamente nada. Ni por los auriculares ni por los altavoces.

Acotación: tengo conectados los auriculares a una tarjeta de sonido NVidia MCP61 integrada, y los altavoces a una tarjeta SB Live!.

Compruebo en las preferencias (Editar->Preferencias->Audio E/S) que dispongo de varios dispositivos de reproducción (OSS: /dev/dsp, ALSA: SB Live 5.1: ADC Capture/Standard..., ALSA: SB Live 5.1: Multichannel Capture/PT..., ALSA: SB Live 5.1: Multichannel Playback..., ALSA: HDA NVidia: ALC883 Analog, ALSA: HDA NVidia: ALC883 Digital,... y otros genéricos), aunque con ninguno de ellos Audacity suena, incluso con algunos de tales dispositivos aparece el mensaje "Error al abrir dispositivo de sonido bla, bla, bla...".

Decido por tanto buscar por la red, donde me encuentro varias posibles explicaciones a tal cuestión y sus correspondientes soluciones. Desde la existencia de una versión de Audacity que contiene un bug que impide reproducir audio, y que casualmente es la misma que uso en mi sistema (la 1.3.4-beta), hasta alguien que propone ejecutar Audacity mediante aoss, un cargador de programas que ofrece compatibilidad con ALSA a las aplicaciones escritas para funcionar con el obsoleto OSS. Por supuesto ninguna de tales soluciones me funcionan.

Hasta que por fin encuentro un foro donde alguien expone la idea de que Audacity podría no funcionar por un determinado canal de audio si el mismo se encuentra ocupado por otra aplicación en ese momento. Así que me dispongo a realizar una prueba y cierro todas las aplicaciones que hacen uso de los dispositivos de sonido (audacious, gmplayer, etc...), tras lo cual reinicio Audacity, y entonces sí. Al abrir las preferencias veo como se encuentra disponible el dispositivo /dev/dsp1, (además del /dev/dsp que ya lo estaba) en la lista de dispositivos de reproducción.


Así pues, ya puedo oir por auriculares los ficheros de audio abiertos con Audacity, siempre y cuando no exista otra aplicación usando la tarjeta NVidia en el momento de lanzarlo. Si quiero conmutar entre una salida u otra solo he de seleccionar en Preferencias el dispositivo de reproducción adecuado. En este caso, /dev/dsp para la SB, o bien /dev/dsp1 para la NVidia.

Y eso es todo, espero que esta receta os sea de utilidad.



Seguir leyendo ...