[Mdk 10.1] Configurar una red Bluetooth en Mandrake y Debian GNU/Linux

Enviado por NoP el 8 Febrero, 2005 - 10:25

Esta semana pasada configuré una red Bluetooth con 2 dispositivos USB Bluetooth de 22 euros cada uno: los Conceptronics CBT100U (alcance de 100 metros). Estos dispositivos son bastante baratos y me han permitido montar una red inalámbrica fácilmente entre mi servidor Debian Woody y mi portátil MandrakeLinux 10.1, permitiéndo a este el acceso a Internet así como al resto de equipos de mi red local.

En este artículo explico paso a paso cómo he realizado la configuración.

Tendréis siempre una versión actualizada del Howto en mi página web:

http://pinsa.escomposlinux.org/sromero/linux/bluetooth_ht.php

En cualquier caso, voy a reproducir aquí la versión actual del howto para los lectores de BlogDrake:


Montando una red bluetooth en Linux


Este documento es un pequeño y rápido howto que muestra la configuración
de mi red con 2 dispositos de bluetooth. El objetivo del montaje era que
mi portátil pudiera acceder al servidor y, a ser posible, a Internet,
estando conectados el portátil y el servidor por 2 Bluetooth USB modelo
Conceptronics CBT100U.

Mi portátil es Mandrake GNU/Linux y mi servidor es Debian GNU/Linux, de
modo que el Howto muestra la configuración en ambos sistemas. En este ejemplo
se ha configurado Mandrake (el portatil) como cliente PANU y Debian (el
servidor) como NAP, es decir, Debian será la que dará acceso a Internet
al portátil con Mandrake.

Cabe destacar también que con la presente configuración un portátil
Windows configurado con la IP adecuada (192.168.6.69 en este caso),
y el PIN/clave adecuado (el que estableceremos en la configuración
del BT en Linux) también podrá emparejarse con el servidor Linux y
salir a internet a través de él (utilizando el software para Windows
que viene normalmente con los USB). Escaneando en Windows el entorno
veremos el servidor Bluetooth Linux y podremos conectar a él y usar
su "Acceso a red" para navegar.



Mandrake GNU/Linux

En Mandrake debemos instalar los siguientes paquetes:

$ urpmi hotplug
$ urpmi bluez-hcidump bluez-hciemu bluez-pin bluez-utils

Hay que asegurarse de que se tienen insertados los módulos adecuados para
el chipset USB de nuestra placa, entre los siguientes (si no se
tienen, insertarlos con modprobe):

uhci-hcd
ohci-hcd
ehci-hcd

El kernel tiene que tener compilado como módulo el soporte
de bluetooth (en el kernel oficial de Mandrake 2.6.x viene así).
En mi caso, al insertar los 2 Conceptronics USBde 100 metros
(modelo CBT100U), se inserta el modulo usb_hci, así como el
resto de módulos de bluetooth.



Debian GNU/Linux

En esencia, la configuración se realiza igual que en Mandrake,
pero con las siguientes particularidades:

Para instalar el software, añadir las siguientes fuentes de apt:

# Software de bluetooth para Debian Woody
deb http://bluez.sourceforge.net/download/debian/woody ./

o bien:

# Software de bluetooth para Debian Sarge
deb http://bluez.sourceforge.net/download/debian/ ./

Instalar los siguientes paquetes:

$ apt-get install bluez-utils bluez-sdp bluez-hcidump bluez-pan
$ apt-get install hotplug

Recompilar el kernel activando las opciones de USB y Bluetooth
necesarias como modulos.



Detectando el dispositivo USB BT

Al tener instalado Hotplug y pinchar el bluetooth se detecta
automáticamente, y aparece lo siguiente en los logs:

/var/log/kernel/info:

compiler kernel: usb 3-1: new full speed USB device using address 2
compiler kernel: Bluetooth: HCI USB driver ver 2.7
compiler kernel: usbcore: registered new driver hci_usb
compiler kernel: Bluetooth: HIDP (Human Interface Emulation) ver 1.0
compiler kernel: Bluetooth: BNEP (Ethernet Emulation) ver 1.2
compiler kernel: Bluetooth: BNEP filters: protocol multicast

Tras realizar esto en ambas máquinas, ambos dispositivos bluetooth deberían verse.
Podemos chequear el estado de nuestro dispositivo con el comando
"hcitool dev", y realizar una búsqueda de dispositivos bluetooth
disponibles mediante "hcitool scan". En este último veremos la
MAC de los dispositivos, de forma que podemos hacer un ping a
nivel 2 (l2ping) para ver si responde nuestro dispositivo
remoto, mediante "l2ping MAC" (ej: l2ping 00:30:A5:10:80:10).

# hcitool dev
Devices:
        hci0    00:80:A5:03:8C:41

# hcitool scan
Scanning ...
        00:80:A5:03:8C:2D       pinsa (0)

# l2ping 00:80:A5:03:8C:2D
Ping: 00:80:A5:03:8C:2D from 00:80:5A:30:8C:41 (data size 20) ...
20 bytes from 00:80:A5:03:8C:2D id 200 time 25.25ms
20 bytes from 00:80:A5:03:8C:2D id 201 time 12.02ms
20 bytes from 00:80:A5:03:8C:2D id 202 time 25.02ms
3 sent, 3 received, 0% loss

Si el dispositivo responde, tenemos enlace a nivel 2, es decir,
ambos dispositivos se ven y podemos hacer ping entre ellos
a nivel casi físico. Ahora es necesario crear una capa TCP/IP
sobre ellos para poder asignar una IP a cada uno de ellos.
Antes de continuar es imprescindible que podamos hacer ping
de nivel 2 desde cada uno de los 2 dispositivos al otro.



PIN o clave de comunicaciones entre 2 dispositivos

Obviamente, no vamos a permitir a cualquier otro dispositivo
bluetooth que se conecte a nuestro servidor para tener acceso a
nuestra red, por lo que deberemos configurar ambos dispositivos
(tanto cliente como servidor) con el mismo PIN o clave (debe de
ser una clave fuerte, que no se pueda averiguar fácilmente).

Podemos configurar el PIN para la conexion en /etc/bluetooth/pin .

$ cat /etc/bluetooth/pin
clave123456789



Configuración del enlace

Editamos el fichero /etc/bluetooth/hcid.conf para que contenga los
siguientes valores de configuración:

(
Para el servidor sería el siguiente fichero (para el cliente
sería igual, pero con las opciones que van comentadas con
triple comentario o ### delante):
).

#
# HCI daemon configuration file.
#
# $Id: hcid.conf,v 1.4 2004/04/29 20:14:21 holtmann Exp $
#

# HCId options
options {
        # Automatically initialize new devices
        autoinit yes;

        # Security Manager mode
        #   none - Security manager disabled
        #   auto - Use local PIN for incoming connections
        #   user - Always ask user for a PIN
        security auto;

        # Pairing mode
        #   none  - Pairing disabled
        #   multi - Allow pairing with already paired devices
        #   once  - Pair once and deny successive attempts
        pairing multi;

        # PIN helper
        pin_helper /bin/bluepin;

        # D-Bus PIN helper
        dbus_pin_helper;
}

# Default settings for HCI devices
device {
        # Local device name
        #   %d - device id
        #   %h - host name
        name "%h-%d";

        # Local device class
        ###class 0x120104;
        class 0x100;

        # Default packet type
        #pkt_type DH1,DM1,HV1;

        # Inquiry and Page scan
        iscan enable; pscan enable;

        # Default link mode
        #   none   - no specific policy
        #   accept - always accept incoming connections
        #   master - become master on incoming connections,
        #            deny role switch on outgoing connections
        #
        #lm accept,master;
        #
        lm accept;

        # Default link policy
        #   none    - no specific policy
        #   rswitch - allow role switch
        #   hold    - allow hold mode
        #   sniff   - allow sniff mode
        #   park    - allow park mode
        #
        #lp hold,sniff;
        #
        ###lp rswitch,hold,sniff,park;
        lp hold,sniff,park;

        # Authentication and Encryption
        #auth enable;
        #encrypt enable;
}



Estableciendo el enlace bnep0

A continuación configuramos pand para permitir conexiones entrantes en el caso
del servidor y para conectarse al servidor remoto de forma
continuada en el caso del cliente, mediante el fichero
/etc/sysconfig/pand en caso de Mandrake o /etc/default/bluez-pan.

Para el servidor:

$ cat /etc/default/bluez-pan.
DUND_ENABLED=0
PAND_ENABLED=1
PAND_OPTIONS="-s -M --role=NAP"

Para el cliente:

$ cat /etc/sysconfig/pand
PANDARGS='--role=PANU --search --persist --encrypt'

Para que el BT USB funcione hay que asegurarse de que:

  • El servicio /etc/init.d/bluetooth ha sido arrancado.
  • El servicio /etc/init.d/pand ha sido arrancado.
  • El BT-USB está pinchado y ha sido detectado (ver logs).

Así pues, desconectamos el BT-USB, paramos ambos servicios y los arrancamos
en ese orden (que será el mismo en que arrancaría al iniciar
el PC).

Al hacer esto en ambos PCs, podremos ver en el fichero
/var/log/messages cómo se establece un diálogo con el
siguiente aspecto (en el servidor):

 Portatil:

tatil pand[3683]: Inquiring
tatil pand[3683]: Searching for NAP on 00:60:57:8E:63:B2
tatil pand[3683]: Searching for NAP on 00:80:A5:03:8C:2D
tatil pand[3683]: Connecting to 00:80:A5:03:8C:2D
tatil pand[3683]: bnep0 connected

 Servidor:

compiler pand[4247]: New connection from 00:80:A5:03:8C:41 bnep0

En el cliente vemos un diálogo de búsqueda de dispositivos,
conexión con el dispositivo remoto y establecimiento del
dispositivo bnep0, mientras que en el servidor vemos la
conexión establecida.

Al levantar el dispositivo bnep0 se ejecuta el script de
/etc/bluetooth/pan/dev-up (creadlo y dadle +x), que contendrá
los comandos para levantar la IP deseada en el dispositivo
bnep0. En mi caso tengo 192.168.6.1 para el servidor y
192.168.6.69 para el cliente (portatil):

Para el servidor:

$ cat /etc/bluetooth/pan/dev-up
#!/bin/sh
/sbin/ifconfig bnep0 192.168.6.1
/sbin/route add 192.168.6.69 dev bnep0

$ cat /etc/bluetooth/pan/dev-down
#!/bin/sh

ifconfig bnep0 down
route del 192.168.6.69

Para el cliente:

$ cat /etc/bluetooth/pan/dev-up
#!/bin/sh
/sbin/ifconfig bnep0 192.168.6.69
/sbin/route add 192.168.6.1 dev bnep0

$ cat /etc/bluetooth/pan/dev-down
#!/bin/sh

ifconfig bnep0 down
route del 192.168.6.1

Estos scripts levantarán las IPs y las rutas para el nuevo
interfaz bnep0. Tras esto ya podremos hacer ping entre las
máquinas.

Recomiendo añadir las máquinas al /etc/hosts para mayor
comodidad al nombrarlas. Por ejemplo, en el servidor:

$ grep 192.168.6 /etc/hosts
192.168.6.69    tatil-bt
192.168.6.1     compiler-bt



Dando routing a Internet

En el script dev-up del servidor podemos, aparte de levantar
la interfaz, añadir reglas de firewall sobre bnep0 o activar IP forwarding e IP Masquerade,
para compartir la conexión a Internet. Con esto, aparte de
que nuestro portatil pueda hacer ping, telnet, ssh, y VNC
(entre otros) al servidor, tambien podremos salir directamente
a Internet desde el portatil.

En mi caso al principio no necesité masquerade, porque con VNC
podía conectar al servidor y hacer de todo, pero al final lo
activé por comodidad.

Basta con las siguientes reglas de fw en mi red de ejemplo:

 #bluetooth
 #sromero 03-02-2005
 echo "Adding bluetooth network rules"
 echo "1" > /proc/sys/net/ipv4/ip_forward
 ${IPTABLES} -A INPUT -s 192.168.6.69/32 -j ACCEPT
 ${IPTABLES} -t nat -A POSTROUTING \
             -s 192.168.6.69/32 -o eth0 -j MASQUERADE
 ${IPTABLES} -A FORWARD -i bnep0 -o eth0 -j ACCEPT
 ${IPTABLES} -A FORWARD -o bnep0 -i eth0 -j ACCEPT

 ${IPTABLES} -t nat -A POSTROUTING \
             -s 192.168.6.69/32 -o eth1 -j MASQUERADE
 ${IPTABLES} -A FORWARD -i bnep0 -o eth1 -j ACCEPT
 ${IPTABLES} -A FORWARD -o bnep0 -i eth1 -j ACCEPT



El routing a eth0 da acceso a internet, mientras que
el acceso a eth1 da al portatil acceso a la red local
pinchada al servidor. En resumen: desde mi portatil llego
al servidor, llego a Internet, y llego al resto de PCs de
la red, y todo con 2 pequeños dispositivos USB que aprox.
20 euros cada uno.

Santiago Romero

NoP/Compiler

Comentarios

2 comentarios escritos

Opciones de visualización de comentarios

Seleccione la forma que desee de mostrar los comentarios y haga clic en «Guardar opciones» para activar los cambios.
y porque no lo agrgan en los libros

esta muy buena la informacion

Un espacio para Juliuss.

--



Ya tengo blog.

Gravatar de juliuss
Escrito por juliuss el 9 Diciembre, 2006 - 03:09
Porque se traspapeló

Gracias por el recordatorio ;-)

Sólo añadir que, en la actualizad, en teoría hotplug ya no es necesario, udev hace lo necesario por sí mismo.

Saludos


¡BUGs!

JID: pacho@jabber-hispano.org
El Blog de Pacho

--


¿Cómo enviar un BUG?
Documentación
El Blog de Pacho

Gravatar de pacho
Escrito por pacho el 9 Diciembre, 2006 - 13:31

Opciones de visualización de comentarios

Seleccione la forma que desee de mostrar los comentarios y haga clic en «Guardar opciones» para activar los cambios.
Feed
Feed