Site icon pollycoke :)

Utilizzo del bluetooth per reti wireless

di balla & fe

Ogni linuxiano che si rispetti, dopo aver comprato un qualsiasi oggetto elettronico si aspetta di poterlo utilizzare in tutte le sue caratteristiche, nel nostro caso abbiamo testato la possibilità di poter creare delle piccole reti ( si parla di non più di 8 computer) utilizzando dispositivi bluetooth.

Il dispositivo provato è un pennino usb, (la marca non importa) in primis per cercare dell’hardware supportato dal nostro OS è d’obbligo una ricerca nel web, un sito utile è: http://www.bluez.org qua si trova sia la documentazione, i dispositivi supportati e i programmi utili per poter gestire le periferiche del “dente blu” :)

(si possono consultare anche le ottime guide di imu e AAAle in questo stesso sito – N.d.R.)

Il protocollo bluetooth non necessita di enormi quantità di energia, la distanza di utilizzo tra due dispositivi varia da 10 a 100 metri, non è stato costruito per gestire elevate quantità di dati come il wi-fi, (banda media di 721 Kbps) però se si è alle strette e non si vuole inciampare nei cavi può rimanere utile sapere che esiste una alternativa.

Kernel:

Iniziamo con la gestione della configurazione del kernel per poter attivare le opzioni necessarie allo scopo.

I kernel precedenti al 2.4.20 hanno bisogno di una patch (scaricabile all’indirizzo http://bluez.sf.net/patches/patch-2.4.19-bluetooth-*), per tutti gli altri basta aggiungere le varie opzioni per il bluetooh:

Percorsi per il Kernel 2.4.x:

bluetooth support:

Bluetooth subsystem support
BNEP protocol support
Multicast filter support
Protocol filter support
Bluetooth support - Bluetooth device drivers
HCI USB driver
HCI VHCI (Virtual HCI device) driver
Networking-support>Networking-Options
802.1d Eterner Bridging

percorsi per il kernel 2.6.x:

Device driver - Networking-support - Bluetooth-subsistem-support:
bnep
Multicast filter support
protocol fiter support

Device driver - Networking-support - Bluetooth-subsistem-support - Bluetooth-Device-Drivers:
HCI-USB-driver

Qua dobbiamo cercare il driver del nostro dispositivo.

Device driver - Networking-support - Networking-Options
802.1d Eternet Bridging

IMPORTANTE IL DRIVER BLUETOOTH PRESENTE NELLA SEZIONE USB VA IN CONFLITTO CON I DRIVER DELLA SEZIONE NETWORK!!!!

Software:

Tutto il software necessario è raccolto in questi pacchetti

bluez-libs-2.10
bluez-utils-2.10
bluez-pin-0.24
bluez-firmware-1.0
bluez-hcidump-1.11
bluez-hciemu-1.0

Per un utilizzo minimo bastano i primi due, ma gli autori del programma consigliano di installare anche gli altri.

Veniamo all’opera; la modalità di connessione utilizzata non permette simmetria di ruoli: un dispositivo bluetooth dovrà svolgere la funzione “server”, uno quella di “client”. Il procedimento può essere espletato con sfumature diverse, ma in questa sede ci occuperemo della situazione in cui il server agisca da “NAP” (Network Access Point), il client da “PANU” (Pan User). Caliamoci inoltre in un ambiente facile: le macchine sono soltanto due. Nel seguito generalizzeremo il discorso a otto macchine (un NAP che accoglie sette connessioni PANU).

I software che verranno utilizzati in un primo momento (hcid e pand) sono contenuti nel pacchetto “bluez-utils” che deve essere installato badando alle dipendenze. Se il kernel è stato ben compilato e il demone hcid avviato, il comando:

$ hcitool dev

ci darà conferma sul fatto che il dispositivo bluetooth è pronto all’uso.

Per avere meno scrupoli nel caso qualcosa non funzionasse, si cominci con l’accertarsi che i dispositivi bluetooth si vedano l’un l’altro: attiviamo il demone hcid su entrambe le macchine; il comando:

$ hcitool scan

permette di rilevare il dispositivo remoto, leggendo inoltre il suo “BDA”, (BT Device Address); ecco un esempio:

$ hcitool scan
$
$

Hcid è avviato; i dispositivi si “sentono”; questa è la prima tappa. Proseguiamo.

Occorre mettere in ascolto il dispositivo sul NAP: per effettuare questo passo modifichiamo il file /etc/bluetooth/hcid.conf: nella sezione “device” dovrà essere presente la linea:

lm accept,master;

Sui Panu potremo lasciare l’impostazione di default che con tutta probabilità risulterà:

lm accept;

Nel caso in cui fosse stato necessario modificare il file riavviamo hcid e prepariamoci a mettere in ascolto, pronto a ricevere connessioni, il dispositivo bluetooth lato NAP:

# pand  -listen -role NAP

Ora spostiamoci sul PANU e connettiamoci (hcid deve essere avviato, ricordatevi):

# pand -role PANU -connect

dove “nap-bda” è il bluetooth device address del dispositivo presente sul NAP, facilmente individuabile eseguendo un “$ hcitool scan”.

Se tutto è andato liscio, su entrambe le macchine sarà possibile gestire l’interfaccia bnep0, alle quali dovremo assegnare un ip e una netmask; un ping decreterà il successo dell’opera:

NAP:   ifconfig bnep0 192.168.0.1 netmask 255.255.255.0
PANU:  ifconfig bnep0 192.168.0.2 netmask 255.255.255.0
PANU:  ping 192.168.0.1

Qui termina la seconda tappa; vediamo ora che cosa accade nei particolari: ci sarà utile per automatizzare la configurazione delle interfacce bnep0.

Quando PANU e NAP entrano in comunicazione tramite la chiamata “connect” di pand, essi lanciano lo script:

/etc/bluetooth/pan/./dev-up bnep

dove “n” è il minor intero tale che l’interfaccia bnep sia utilizzabile; in altre parole, se dovessimo aver attivato bnep0 e bnep1 per altri oscuri scopi, pand lancierà lo script “dev-up bnep2”.

Il file dev-up deve essere eseguibile e può contenere ciò che vogliamo: su PANU, ad esempio, potrà essere simile a questo:

#!/bin/bash
ifconfig $1 192.168.0.2 netmask 255.255.255.0 up

Sul NAP provvederemo a sostituire l’opportuno ip; in questo modo la configurazione delle interfaccie non dovrà essere più gestita manualmente, e non solo: modificando lo script dev-up potremo eseguire qualsiasi direttiva sia lato PANU che lato NAP (firewall, log, routing etc.), direttiva che verrà eseguita appena verrà installata la connessione.

La quarta ed ultima tappa, il passaggio alle otto macchine, si basa sull’ethernet bridging; si crea un’interfaccia virtuale, non legata a nessun dispositivo fisico, e si convogliano su di essa le connessioni bluetooth; sarà sufficiente scrivere opportunamente, lato NAP, lo script dev-up; le procedure lato PANU rimarrranno identiche.

Installiamo bridge-utils.

Creiamo l’interfaccia virtuale sul NAP:

# brctl addbr pan0
# ifconfig pan0 192.168.0.1

I seguenti comandi servono ad ottimizzare lo scambio dati, eliminando lo “Spanning Tree Protocol” e il “Listening and Learning States”:

# brctl setfd pan0 0
# brctl stp pan0 off(oppure disable)

Il dado sta per essere tratto: modifichiamo lo script dev-up in modo che le interfacce bnep che verranno a crearsi si leghino a pan0:

#!/bin/bash
brctl addif pan0 $1
ifconfig $1 0.0.0.0

Che succede? Ogni volta che pand (lato NAP) inizializza una connessione con un dispositivo che ne fa richiesta, l’interfaccia che si crea (e che viene passata allo script dev-up come primo argomento) è rediretta prima sull’interfaccia pan0, in seguito privata di un ip vero e proprio.
In questo modo pan0 sostituisce in toto le bnep presenti sul NAP, permettendo di gestire la situazione multi-PANU in maniera più elegante ed efficace.

Non resta che sbizzarrirsi: grazie allo script dev-up si potrà gestire la tabella di routing, il firewall e qualsiasi cosa possa saltare in mente; sui PANU, ad esempio, si potrà impostare il NAP come default gateway.

Considerazioni:

Creare una rete bluetooth non è difficile anche se la banda non è altissima comunque a nostro parere è utile per lo scambio di piccoli file, per leggere la posta e navigare, (alla fine quasi l’80%)

Riferimenti:

http://www.bluez.org/redirect.php?url=http%3A%2F%2Fbluez.sf.net%2Fcontrib%2FHOWTO-PAN

Balla & Fe

nb: grazie a imu per aver convertito l’sxw in txt :-)

Vai alla barra degli strumenti