Wireless, reti ad-hoc con la minima spesa

E' orami il momento del wireless: vediamo, passo per passo, come collegare il nostro Notebook Linux al desktop con la minima spesa




L'informatica si evolve in fretta e questa pagina e' obsoleta, risale infatti al 2005, ed oggi (ottobre 2007) molte cose sono cambiate; ma altre cose restano valide, specie quelle sul wireless in generale; in due anni le novita' principali sono state che:



Introduzione


Negli ultimi anni il mondo dei protocolli wireless e' stato abbastanza prolifico, ed e' stato tutto un passare di sigle come: 802.11a, 802.11+, 802.11b, Hiperlan, Hiperlan II, ed anche un po' di varianti proprietarie non ben standardizzate ed incompatibili.

Ma ora il mercato sembra essersi accordato sull'802.11g, anche se gia' si sente magnificare il futuro 802.11n. Le prestazioni dovrebbero essere ormai decenti ed i prezzi sono calati di un bel po'; anche la diffusione dei Notebook ( il Centrino prevede esplicitamente la dotazione di una scheda wireless) sta spingendo verso il wireless.

Su Linux fin dal lontano 1997 ci sono stati appassionati al wireless, Jean Tourrilhes ( vedi http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html ) ha scritto allora le wireless tools, che permettono all'utente di configurare le schede di rete wireless. Allora c'erano poche schede wireless per Linux, ma adesso la situazione e' molto migliorata.

E' quindi il momento di provare la tecnologia, verificarne le prestazioni, e vedere se fa al caso nostro. Proviamo a collegare il nostro Notebook Linux al nostro desktop ( ed alla nostra LAN ) con la minima spesa.


Reti con access-point e reti "ad hoc"


Potremmo comperarci un access point wireless: per un centinaio di euro se ne trovano in commercio che fanno di tutto, comprensivi di un router ADSL, porte ethernet 10/100 autosensitive, DHCP, firewall , NAT e quant'altro, sono anche facili da usare,con una interfaccia web per la configurazione, intesa per il tipico utente Windows. Questa e' la soluzione migliore se abbiamo l'ADSL e 3 o 4 computer da collegare, ma se abbiamo poche esigenze, vogliamo risparmiare per le vacanze, o l'acquisto del notebook ha ridotto all'osso le nostre finanze, possiamo far tutto con un semplice wi-fi adapter USB, che si trova in giro per una trentina di euro.


Il tipo di collegamento che non utilizza access points, ma ove tutti i nodi wireless si vedono direttamente fra loro direttamente si chiama "ad-hoc", "peer-to-peer" od anche "unmanaged".

Managed invece e' il tipo di collegamento in cui i diverso nodi si collegano ad uno o piu' access points (AP), che li che li mettono in rete.

A noi basta una rete ad-hoc, anche se certe cose non si possono fare con questa configurazione, ad esempio limitare l'accesso a certi MAC address ( gli indirizzi fisici della scheda di rete wireless), utilizzare certi sistemi di autenticazione, o fare il roaming, cioe' andarsene in giro con il portatile restando collegati all'access point al momento piu' vicino.
Per la verita' c'e' anche chi prova a fare di queste cose con reti ad-hoc, ma sono ancora soluzioni sperimentali, non entrate nell'uso comune.


Wireless ed In-sicurezza


Prima di cominciare due parola sui problemi di sicurezza del wireless; non e' come un cavo, che isola il passaggio dei nostri dati, qui chiunque e' a portata del nostro segnale radio puo' captarlo ed, in linea di principio, infilarsi nel nostro collegamento per gli scopi piu' perversi.

Per questo fin dal 1997, nel protocollo 802.11, e' stato previsto un sistema di cifratura dei dati. Questo sistema e' detto WEP (Wired Equivalent Privacy), la crittografia e' una materia complicata ed il WEP non fa eccezione, ma per farla semplice diciamo che in questo caso i 2 sistemi che comunicano utilizzano una specie di password comune (a 40 o 128 bits) per inizializzare un generatore di numeri pseudo-casuali, usati poi come chiavi per codificare e decodificare i dati. Siccome la chiave non e' sempre la stessa potrebbe sembrare che i messaggi siano indecifrabili. Peccato che questi numeri pseudo-casuali non siano abbastanza casuali, per cui collezionando un gran numero di pacchetti si riesce a trovare la password originale.

Quando nel 2001 Fluhrer &C scoprirono la cosa fu un mezzo terremoto, (l'articolo originale e' in: http://downloads.securityfocus.com/library/rc4_ksaproc.pdf), e la Wi-fi alliance, ( consorzio che promuove e certificare il wireless) si affretto' a cambiare i sistemi di codifica, senza poter aspettare che il comitato IEEE 802.11 facesse un nuovo standard, ed introdusse il WPA (Wi-fi Protected Access). Il WEP puo' essere utilizzato per evitare intrusioni accidentali, ma non e' adatto a proteggere la connessione, e, perche' cio' fosse chiaro a tutti, ad un convegno sulla sicurezza a Los Angeles, alcuni agenti dell'FBI fecero un intervento shock, in cui si esibirono craccando una chiave WEP a 128 bit in 3 minuti. Il resoconto si puo' trovare in: http://www.tomsnetworking.com/; ed anche tutte le istruzioni detagliate su come si fa; chiunque puo' leggerle e craccare la vostra rete wireless WEP.

L'anno scorso (2004) il comitato 802.11 ha finito il suo lavoro, ed ora abbiamo l'802.11i, con il WPA-2 che implementa le nuove specifiche di sicurezza.

Il WPA adotta sistemi di crittografia sicuri, per lo meno nessuno li ha craccati velocemente ( non ancora ...). Nella versione WPA-professional, e' previsto un server apposito sulla rete per autenticare le stazioni, cun un sistema tipo i certificati che si utilizzano per le transazioni web.

La morale di tutto questo e' che sappiamo che il wireless e' un sistema intrinsecamente insicuro, solo contro intrusioni accidentali possiamo proteggerci con il WEP, altrimenti dobiamo usare il WPA, se poi siamo una ditta medio-grossa con problemi di sicurezza veri ci conviene passare al WPA-professional, di cui esistono implementazioni anche per Linux.


Configurazione del software.


Quasi tutte le distribuzioni sono gia' pronte per far funzionare la nostra connessione wireless; ad ogni modo controlliamo: innanzitutto nel kernel deve esserci il supporto per il wireless. Se c'e' abbiamo uno pseudo file: /proc/net/wireless con dentro le statistiche della connessione wireless.

Per il Centrino occorrre hotplug ed il supporto al loading del firmware. Opzione di configurazione del kernel: "hotplug firmware loading support" (le opzioni di configurazione del kernel dovrebbero essere nel file: /proc/config.gz oppure in /boot). I kernel piu' recenti hanno un sistema di "hotplug" che carica anche i firmware e questa opzione del kernel non si trova piu'; vedi: http://linux-hotplug.sourceforge.net

Per usare connessioni criptate serve il supporto alla crittografia nel kernel: gli algoritmi ARC4, e CRC32 per il WEP; l' "AES cipher algorithm" ed il "Michael MIC keyed digest algorithm" per il WPA.

Poi dobbiamo avere sysfs, un file system speciale utilizzato per far comunicare il kernel con i programmi in user-space; se lo abbiamo troviamo in /sys una serie di directory che ci ricordano la configurazione del nostro sistema.

Ci serve ovviamente che il kernel comprenda il supporto al TCP/IP, e piu' avanti ci servira' sul PC il supporto ad iptables ed abilitato l'ip_forwarding.

Tutte queste cose sono gia' comprese nei kernel delle maggiori distribuzioni. Se siamo sfortunati e non le abbiamo dobbiamo ricompilarci il kernel, o cercarcene uno gia' pronto per la nostra distribuzione con tutto quanto serve. Cosa brigosa, ma non impossibile

Ci servono anche i "Linux wireless extension tools" di Jean Tourrilhes ( http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html ) anche questi dovrebbero essere forniti dalla vostra distribuzione. Io ho la Debian, e li trovo nel pacchetto: "wireless-tools"; questi tools ci mettono a disposizione vari comandi: "iwconfig", che serve a configurare le caratteristiche "standard" delle schede di rete wireless; "iwpriv" per quelle specifiche della scheda; "iwlist" mostra quali sono le caratteristiche specifiche che possiamo configurare nella nostra scheda.


I drivers: il Centrino.


L'architettura Centrino prevede una scheda wireless Intel , qui ci riferiremo alla Intel PRO/Wireless 2200 BG, ma le procedure sono simili anche se avete un modello diverso.

L'intel all'inizio non forniva driver Linux per questa scheda; ha iniziato a fornire driver piuttosto tardi, sommersa dalle lamentele degli utenti, ma ora fornisce un driver open-source, che puo' quindi essere inserito nel kernel e seguirne l'evoluzione. Questo driver e' abbinato ad un firmware proprietario. L'Intel si dice obbligata ad un firmware chiuso per evitare che gli utenti violino tutte le infinite norme internazionali sulle trasmissioni radio, smanettando con le sue schede; e intanto la concorrenza non puo' sbirciarne il funzionamento.

Molte distribuzioni hanno gia' inclusi i drivers per la scheda wireless del Centrino; se la vostra distribuzione non li ha dovete reperirli in rete.

I driver sono supportati da un gruppo indipendente, sostenuto da Intel: http://ipw2200.sourceforge.net/ e vogliono un kernel > 2.6.8. Per la scheda 2100 si puo' fare riferimento ad: http://ipw2100.sourceforge.net/. I driver sono anche sul sito dell'Intel.

Le varie versioni del firmware si trovano sempre in: http://ipw2200.sourceforge.net I firmware sono dei tar compressi, vanno decompressi e messi ove il vostro hotplug agent possa trovarli, puo' essere in /usr/lib/hotplug/firmware , /lib/hotplug/firmware, /usr/local/lib/hotplug/firmware od anche in /etc/

Attenzione che varie versioni del driver vogliono diverse versioni del firmware.

driver firmware
< 0.6 1.2
0.6 - 0.16 2.0
0.17-0.18 2.1
0.19-1.0.3 2.2
1.0.4-1.0.6 2.3
> 1.0.7 2.4

Le versioni del driver oltre la 1.0.5 utilizzano un modulo per il protocollo 802.11 sviluppato da un altro gruppo indipendente, reperibile in: http://ieee80211.sourceforge.net. I kernels recenti hanno comprendono anche questo modulo.

Qui useremo il kernel 2.6.14 che comprende la versione 1.0 del driver, il nome del modulo e' ipw2200. Serve il firmware 2.2, che decomprimo, de-tarro e metto in: /etc/firmware, l'hotplug agent (Ubunto 5.10) che ho sul portatile lo trova li'. Per certe funzioni occorre una versione piu' recente del driver, ma per il momento ci accontenteremo.


I drivers: l'USB WLAN adapter


Per il collegamento wireless del PC utilizzeremo l'adattatore USB Wireless ASUS WL-167G, del costo di una trentina di euro. Questo adattatore e' basato sul cipset RT2500USB della Ralink corp. (http://www.ralinktech.com)

La Ralink rilascia i drivers per Linux sotto GPL, ed anche un'utility grafica per la configurazione: RaConfig2500. Alcune distribuzioni includono questo driver nei loro kernel ( modulo rt2570 ). I drivers sono reperibili anche sul sito dell'ASUS, ma non fatevi ingannare! i files hanno un suffisso .zip, ma sono dei .tar.gz .

La cosa interessante e' che un gruppo indipendente riscrive i drivers : http://rt2x00.serialmonkey.com/. All'ottobre 2005 era disponibile una versione beta dei loro drivers, inoltre c'e un gruppo: http://cbbk.free.fr/bonrom/ che sviluppa utilities per la configurazione dei cipset della Ralink. In rete, nel 2005, si trovano varie lamentele di gente che non riesce a fare andare questo driver, ma nel 2007 il driver sembra maturo ed e' inserito in parecchie distribuzioni (modulo rt2x00).

Puo' essere che non abbiamo questo driver nel nostro kernel, e che non troviamo un driver compilato gia' fatto per noi, vediamo brevemente cosa fare in questi casi.

Per compilare un modulo per il kernel dobbiamo avere sulla nostra macchina i sources del kernel, od almeno gli headers, con la descrizione delle routine e variabili del kernel. Tutte le distribuzioni hanno un pacchetto con gli headers, anche se alcune trascurano un po' i sources, visto che pochi si ricompilano un kernel personalizzato.

Se non avete quello che vi serve potete usare i kernel originali che sono in http://www.kernel.org/ (sempre che la vostra distribuzione non abbia un kernel molto modificato)

I kernel sono dei tar compressi, estraete i files in una directory, col solito comando: tar -xvjf linux-2.6.14.2.tar.bz2

Dobbiamo fare tutto questo perche' il Makefile, che guida la compilazione del modulo rt2570, utilizza i Makefile e gli header del kernel, e perche' possa farlo deve trovare un link: /lib/modules/2.6.14/build che punta alla directory ove avete i source del kernel. Se il link manca lo mettete, col kernel 2.6.14 ed i sources in /usr/src/linux si fa semplicemente:

ln -s /usr/src/linux /lib/modules/2.6.14/build 

I source del driver possiamo scaricarli dal sito della Ralink, sono nel file: RT25USB-SRC-V2.0.6.0.tar.gz Si decomprime l'archivio e si estraggono i files con il solito:

tar -xvzf RT25USB-SRC-V2.0.6.0.tar.gz
otteniamo una directory: RT25USB-SRC-V2.0.6.0 che contiene un file README con tutte le istruzioni; nel nostro caso abbiamo un kernel della serie 2.6 procediamo quindi con:
cp Makefile.6 Makefile ; make
e se tutto va bene ci ritroviamo un file: rt2570.ko , che e' il nostro driver, lo copiamo dove sono gli altri moduli e poi ricostruiamo i files con le dipendnze fra i moduli con i 2 comandi:

cp rt2570.ko /lib/modules/2.6.14/kernel/drivers/usb/net/ 
depmod 



Configurazione


E' il momento di collegare l'USB adapter alla porta USB del desktop. E' raccomandata una porta usb 2, ma anche un usb 1.1 puo' andare.

Se il vostro sistema hot-plug ed usb fa il suo dovere la spia dell'ASUS WL-167G lampeggia, l'hardware e' riconosciuto ed il modulo rt2570 caricato automaticamente. Date un'occhio ai messaggi del kernel ( con dmesg ) per vedere se tutto e' andato bene. Il comando: lsmod , che mostra i moduli caricati, dovrebbe farvi vedere anche l'rt2570 .

Se il modulo non e' venuto su lo tirate su a mano, con il comando: modprobe rt2570 .

Ora accendiamo il notebook, il comando: modprobe ipw2200 serve a caricare il modulo per il wireless, se non viene caricato in modo automatico al boot.

La mini-LAN che andiamo a configurare e' fatta come in figura:

My old home LAN

Nella figura a sinistra vediamo il notebook, il desktop con l'adapter wireless USB e' al centro, un PC piu' vecchio e' a sinistra, ed ha ad un vetusto modem a 33 K, per acceder ad internet.

I 2 PC sono collegati con 2 normali schede ethernet, siccome ci sono solo 2 macchine non serve uno switch od un hub, ma basta un cavo "crossed" fra le 2 schede di rete.

Il PC al centro fa da router, girando i pacchetti fra la rete wireless e la rete ethernet. A tutti gli effetti e' come se avesse due schede di rete.

Alla rete wireless abbiamo dato il numero: 192.168.2.0, alla rete ethernet il numero 192.168.1.0; sono numeri di reti di classe C (cioe' con massimo 255 nodi ) privati, cioe' di uso libero per reti locali e non visibili globalmente in internet.

Questa non e' l'unica configurazione possibile, ad esempio il PC al centro potrebbe essere configurato come un bridge invece che un router ( Vedi ad esempio: Linux network Administrator Guide, 3rd Edition; di Bautts,Dawson & Purdy; Wiley 2005, pagina 306 )

Ora dobbiamo usare il classico comando ifconfig per configurare le'interfacce di rete ed iwconfig per le estensioni wireless.

Sul PC al centro:

ifconfig rausb0 inet 192.168.2.2 up 
iwconfig rausb0 mode ad-hoc key off essid "home"

In questo modo abbiamo dato un numero IP alla nostra scheda, e abbiamo attivato l'interfaccia. Con iwconfig abbiamo specificato che vogliamo una rete ad-hoc, senza cifratura (key off) e di nome: "home"

Analogamente sul notebook:

ifconfig eth1 inet 192.168.2.5 up   
iwconfig ewth1 mode ad-hoc key off essid "home"

Se tutto e' andato bene PC2 e Notebook si vedono, per controllare si puo' fare un ping, dal notebook: ping 192.168.2.2 , e da PC2 : ping 192.168.2.5 .

Ora abbiamo la nostra connessione wireless, ma completamente sprotetta, chiunque nei dintorni puo' collegarsi alla nostra macchina. Non ci siamo dimenticati della sicurezza, in realta' gia' sappiamo che intorno non c'e' nessuno in ascolto. Ad ogni modo, seguendo la prima legge di base della sicurezza , controlliamo.

Su PC centrale facciamo partire l'utility grafica RaConfig2500, che fa poi le stesse cose dei wireless tools, ma e' piu' comoda, e facciamo uno scan della rete. Bene, non troviamo reti wireless, se non la nostra.


Prestazioni


Adesso controlliamo fin dove arriva il segnale , ed in base a questo definiamo la nostra "policy" di sicurezza. L'Asus nella sua pubblicita' parla di 40m in interno e 300 in esterno, trasmettendo a 54 Mbit/sec, 25m in interno e 60 in esterno ad 11Mbit/sec, vediamo quanto mentono. Scarichiamo dal desktop al notebook, via http, con l'utility wget, un file gigantesco ed intanto spostiamo in giro col nostro notebook, controllando la connessione con la funzione di monitor dell'utility RaConfig2500, che ci da l'attenuazione in percentuale del segnale originario.

Abbiamo i risultati mostrati in figura, prendete i valori per indicativi, ci sono molte variabili che influiscono sulla trasmissione, disturbi vari, forni a microonde etc.

Copertura wirelss dell'appartamento

Si riesce a coprire tutto l'appartamento, ma non molto di piu', con velocita' di trasferimento effettivo di qualche Mbit/sec. Nella stessa stanza del PC abbiamo un massimo sui 4 Mbit/sec, 2 Mbit/sec nelle stanze adiacenti, e si arriva ad una distanza massima di 15-20 metri. Non e' ovviamente paragonabile ad una LAN a 100 Mbits, ma tuttavia accettabile per un uso, diciamo di routine.

Il segnale riesce a passare 2 pietrinfogli, l'attenuazione dipende molto da cosa c'e' nelle immediate vicinanze del notebook; tavolini in ferro, tubature ed anche la rete del letto si fanno sentire.

Adesso andiamo a bussare alla vecchietta del piano di sopra, e, mentre ci racconta dei suoi acciacchi per l'ennesima volta, vediamo come copriamo il suo appartamento. I risultati sono in figura. La posizione corrispondente al PC con l'USB WLAN Adapter e' segnata con un cerchietto.

copertura appartamento sopra

A seconda della posizione abbiamo un 10-20% del segnale, con velocita' di trasferimento sui 2 Mbit, mentre la velocita' nominale della connessione cala a 5-11Mb/sec. In certi punti non si prende piu' nulla.

Il trasmettitore USB da 10 milliwatt copre quindi l'appartamento, ma arriva anche al piano di sopra, a quello di sotto, e nell'appartamento adiacente a sud (non indicato in mappa).

Sono sicuro che fra i vicini non si celano crakers malvagi, il vero pericolo e' che nell'appartamento vicino qualcuno accenda un giorno un notebook; e sara' certamente un Windows XP, e anche mal configurato; per cui potrebbe, all'insaputa del proprietario, infilarsi nella mia rete, contattare il sito della Microsoft ed iniziare a scaricare il service pack 1 attraverso la mia misera connessione a 33 K. Dovrei, in questo caso, andare a bussare al vicino per spiegargli cosa sta succedendo... un'impresa oltre le mie capacita', per evitare questa esperienza proteggero' la mia connessione con il semplice WEP, su PC e sul notebook si fa rispettivamente con:

iwconfig rausb0 key s:0123456789abc 
iwconfig eth1 key s:0123456789abc 

Ho messo una password veramente stupida, ma tanto il mio nemico: (il Windows XP del vicino), non la sa. Col WEP la velocita' di connessione cala circa alla meta'; appena i vicini vanno in vacanza torno ad una rete sprotetta!

Diversa e' la situazione in ufficio, al piano di sotto c'e' un certo via-vai di studenti, che per definizione sono un insieme inconoscibile, e qui usero' il WAP. Anche qui ho una velocita' di trasferimento effettivo sui 5 Mb/sec ed il segnale copre gli uffici accanto e sotto.

Ho pero' una sorpresa; ricevo chiaramente il segnale della ditta che ha il capannone a fianco. Ho continui disturbi e disconnessioni, fino a che non cambio canale di trasmissione. I canali possibili per il wireless sono 11, larghi circa 22 kHz, in una banda attorno ai 2.4 Ghz, i canali si sovrappongono parzialmente, e dicono che in 3 sono abbastanza separati da convivere insieme: i canali 1,6,11. A scanso di equivoci vado sul canale 8 e risolvo il problema.

Il capannonne della ditta e' a circa 200 metri, la loro rete e' una vecchia 802.11b, protetta da WEP, per intenderci quella che l'FBI cracca in pochi minuti. Il loro fornitore deve avergli piazzato un'antenna gigante, per coprire tutto il capannone con un solo access points; se arrivano da me arrivano anche al capannone dall'altra parte, ed al palazzo a lato. Devono essere dei veri sostenitori delle liberta' digitali, visto che stanno fornendo connettivita' anonima e gratuita a chiunque nelle vicinanze abbia la pazienza di infilarsi nella loro rete, ed in piu' sono pronti a prendersi le colpe di qualunque cosa facciano i loro ospiti anonimi su internet, veramente encomiabili!

Vediamo ora di completare la configurazione della nostra LAN permettendo al notebook di vedere anche il PC collegato ad internet. Se dal notebook facciamo : ping 1892.168.2.2 non vediamo nulla, dobbiamo mettere un percorso di default nella routing table, per dire al notebook che quello che non e' sulla rete wireless e' visto attracerso il PC cui e' collegato via wireless:

 
route add default gateway 192.168.2.2
Ora il notebook vede le interfacce del PC con il wireless, sia la 192.168.2.2 che la 192.168.1.2, ma il PC con il modem non gli risponde, per fare le cose per bene dobbiamo anche dire al PC collegato ad internet dove trovare la rete 192.168.2.0, su questo PC facciamo quindi:

route add -host 192.168.1.2 dev eth0 
route add -net 192.1658.2.0 netmask 255.255.255.0 dev eth0 gw 192.168.1.2 

Ora le nostre 3 macchine si vedono tutte.

Se abbiamo problemi possiamo controllare con uno sniffer il percorso dei pacchetti; sui due PC facciamo: tcpdump -i eth0, per vedere i paccehtti che passano fra i PC, e per vedere i pacchetti che attraversano la rete wireless, sul PC col wireless:

tcpdump -i rausb0.

Il comando route ci permette di controllare le tabelle per il routing.

In ufficio la configurazione e' un po' diversa. Colleghiamo la nostra rete wireless (192.168.2.0) ad un PC con IP pubblico, per far vedere internet al PC usero' il NAT (network address translation) , cioe e' il PC che gestisce il collegamento della rete wireless verso l'esterno, e la rete wireless non e' visibile da fuori. Per fare questo si usa il comando:

iptables -t nat -A POSTROUTING -o eth0 -J MASQUERADE

l'uso di iptables e' abbastanza complicato, magari lo vederemo un'altra volta.