Page 1

3 Le reti Si dice in giro che Linux sia un sistema eccellente per le applicazioni in rete, che molti server di grandi dimensioni vengano fatti funzionare utilizzando questo sistema operativo e gli applicativi installati su di esso; insomma, Internet ha beneficiato dei vantaggi, della robustezza e sicurezza intrinseca di questo ambiente. Se questo è vero per la macro scala, perché non dovrebbe essere altrettanto corretto per i micro ambienti, quindi anche per le intranet e le reti locali in genere? È bene sfatare l’idea, fin troppo radicata, che le intranet non sono solamente le grandi reti aziendali che collegano uffici e sedi geograficamente decentrate, poiché intranet indica reti di piccole e medie dimensioni, caratterizzate dalla presenza di servizi offerti agli utenti. Certo, vi si possono trovare forum e mailing list, siti di documentazione riservata a uso interno, ma sempre di reti si sta parlando. Ma, cosa impedisce a un utente di creare la propria intranet? In primo luogo, bisogna avere un minimo di competenze sistemistiche per installare i servizi che si vogliono erogare in rete, ma soprattutto è necessario installare una rete. Per esempio, due computer collegati da un cavo o una Wi-Fi costituiscono già una LAN (Local Area Network) ma, come si vedrà nel Capitolo 7, si può arrivare a un livello di sofisticazione tale da consentire una rete fra due sistemi operativi ospitati sullo stesso computer e funzionanti in contemporanea: uno reale, l’altro emulato, entrambi in comunicazione e in grado di scambiarsi dati ed erogare a vicenda servizi. Tuttavia, il primo passo consiste nell’imparare le nozioni di base necessarie a implementare una rete, bisogna sapere distinguere le varie classi di indirizzi, conoscere il significato di termini come routing e netmask, prendere confidenza con strumenti come il DHCP, che permette una convivenza più facile fra i vari computer in rete.


Capitolo 3

Gli indirizzi delle reti private Qualsiasi cosa in rete ha un indirizzo, poiché i dati scambiati dai computer devono avere una porta cui bussare e un “numero civico” cui consegnare i propri contenuti. A bene vedere, ogni sito Internet è identificato da un indirizzo IP (Internet Protocol) numerico; infatti, i nomi di dominio così facili da ricordare vengono in realtà tradotti in indirizzi numerici prima che il client dell’utente proceda al collegamento. Schematizzando, si può riassumere lo scenario di una visita a un sito web nel seguente modo: l’utente inserisce nel navigatore l’URL di un sito, quindi il programma chiede ai server DNS indicati dal sistema operativo che il nome venga tradotto in numeri. Ricevuto l’indirizzo numerico, il browser effettua finalmente la chiamata. Una rete locale funziona allo stesso modo, deve appoggiarsi a una serie di indirizzi numerici per identificare le interfacce di rete dei computer collegati e indirizzarvi dati che devono essere scambiati. Tuttavia, esiste una differenza di non poco conto: se gli indirizzi IP di un sito internet sono raggiungibili da qualsiasi nodo della grande rete, gli indirizzi delle reti private sono visibili solo dall’interno della LAN di appartenenza e non vi si può arrivare direttamente dall’esterno. Insomma, in una LAN il router costituisce la barriera di questo piccolo mondo.

Figura 3.1 Sul sito dello IANA www.iana.net, si possono reperire tutte le informazioni riguardanti le classi di indirizzi assegnate alle reti.

48


Le reti

Lo IANA (Internet Assigned Numbers Authority) ha riservato alcune classi, ovvero alcuni insiemi di indirizzi IP proprio per l’utilizzo di reti che non sono direttamente connesse a Internet. Tali indirizzi vengono definiti privati proprio perché sono utilizzabili in un ambito ristretto e, non essendo direttamente visibili all’esterno, chiunque può possedere all’interno della propria piccola rete una serie di indirizzi simili o identici a quelli di un’altra: non potendo interoperare direttamente, questa coincidenza di indirizzi di rete non creerà problemi. Per approfondire la questione relativa agli indirizzi privati è consigliabile consultare la RFC (Request For Comment) numero 1918, scaricabile all’indirizzo ftp://ftp.rfc-editor.org/in-notes/rfc1918.txt.

Ecco i blocchi relativi alle classi di indirizzi utilizzabili: ● da 10.0.0.0 a 10.255.255.255: questo insieme di indirizzi viene definito Classe A e individua 126 reti da 16.774.214 indirizzi ciascuna; ●

da 172.16.0.0 a 172.31.255.255: è l’insieme di indirizzi comunemente definito Classe B e conta 16.384 reti da 65.534 indirizzi ognuna; da 192.168.0.0 a 192.168.255.255: si chiama Classe C e prevede 2.097.152 reti da 254 indirizzi ciascuna.

Cosa differenzia queste classi di indirizzi e perché alcune individuano un numero più elevato di reti, mentre altre privilegiano un conto maggiore di singoli indirizzi? La questione è abbastanza tecnica e decisamente complessa per un utente alle prime armi, ma può essere riassunta identificando un indirizzo IP come una sequenza binaria a 32 bit esprimibile in notazione decimale, come un numero composto da quattro ottetti, ognuno dei quali può assumere un valore compreso tra 0 e 255. Nella Classe A, il primo ottetto viene utilizzato per definire il numero di reti che l’utente può impiegare per segmentare la propria LAN. Il valore di tale ottetto è compreso fra 1 e 126, poiché la prima cifra, espressa in notazione binaria, ha come valore 0 e quindi è possibile utilizzare solo i rimanenti 7 bit, su 8, per calcolare l’ID di rete. Questo porta a una combinazione di 2^7 ID di rete possibili, ovvero alla possibilità di segmentare la propria LAN in 128 sotto reti, ma mentre il valore 0 è riservato a indicare la rete locale, il valore 127 identifica l’indirizzo del loopback. Tolti questi due valori, rimangono a disposizione 126 identificativi e quindi l’utente, utilizzando questa classe, può segmentare la propria LAN in 126 sotto reti. 49


Capitolo 3

I tre ottetti rimanenti, 24 bit in totale, vengono impiegati per identificare gli host appartenenti a ogni singolo segmento, il che porta alla possibilità di avere ben 16.774.214 indirizzi per ogni sotto rete. In una Classe A, quindi, un indirizzo del tipo: xxx.xxx.xxx.xxx

può essere letto come: ID_rete.ID_host.ID_host.ID_host

Nella Classe B ci sono i primi due ottetti, per un totale di 16 bit a disposizione, che vengono utilizzati per creare le sotto reti, mentre gli altri 16 bit sono impiegati per identificare i singoli host su ciascun segmento. Il valore del primo ottetto va da 128 a 191 e questo porta, seguendo il ragionamento appena delineato, all’identificazione di 16.384 segmenti di rete da 65.534 host ognuno. In una Classe B, quindi, un indirizzo del tipo: xxx.xxx.xxx.xxx

può essere letto come: ID_rete.ID_rete.ID_host.ID_host

Una Classe C utilizza i 24 bit iniziali, ovvero i primi tre ottetti, per indicare le sotto reti in cui un utente può segmentare la propria LAN, mentre gli ultimi 8 bit vengono impiegati per identificare gli host su ogni singolo segmento. Il valore del primo ottetto va da 192 a 223, quindi si hanno a disposizione 2.097.152 reti da 254 host ognuna. In una Classe C, quindi, un indirizzo del tipo: xxx.xxx.xxx.xxx

può essere letto come: ID_rete.ID_rete.ID_rete.ID_host

Quale classe utilizzare dipende, soprattutto, dalla topologia della propria LAN. Infatti, un’azienda con grandi dipartimenti e sezioni troverà conveniente una Classe B, così da segmentare e isolare ogni sua divisione in un segmento proprio, mentre per gli utenti domestici la scelta classica è la Classe C, in cui ogni sotto rete conta solo 254 computer. Nel prossimo paragrafo verrà descritta la procedura di configurazione di un’interfaccia di rete in un sistema Linux basato su Debian e derivati. Tuttavia, è importante tenere presente che anche se da distribuzione a distribuzione il nome di qualche file e la sua posizione potrebbe cambiare, le procedure descritte sono valide per qualsiasi sistema Linux con minimi adattamenti. 50


Le reti

Configurare le interfacce di rete Il modo più compatibile, ma sicuramente meno semplice, per configurare una rete è mettere le mani direttamente sui file di configurazione di sistema, adattandoli alle proprie esigenze, con il vantaggio di poter controllare in maniera molto precisa i dati inseriti. I file modificabili sono i seguenti: ● /etc/network/interfaces: in questo file vengono definite le interfacce da attivare al boot, gli indirizzi da assegnare e i dettagli delle reti cui collegarsi; ●

/etc/hosts: vengono definiti gli accoppiamenti nome host/indirizzo

IP. È un po’ come se fosse un DNS locale, statico, utile per la risoluzione dei nomi delle macchine presenti nella LAN e su internet; ●

/etc/resolv.conf: per navigare su Internet è necessario appoggiarsi

a un servizio di risoluzione dei nomi. Qui vengono indicati gli indirizzi IP dei server DNS da utilizzare; ●

/etc/host.conf: viene mostrato se ha la precedenza ciò che è scritto

nel file hosts oppure quello che viene indicato dal servizio DNS cui ci si appoggia. Ora non resta che esaminarne la sintassi e modificarne il contenuto, così da implementare la prima configurazione di rete. Ovviamente, tutti i computer sulla stessa rete locale dovranno avere le medesime impostazioni, a eccezione del solo indirizzo IP che, essendo univoco per ogni interfaccia, dovrà cambiare.

Gestire le interfacce di rete Il file deputato alla definizione e configurazione di un’interfaccia è /etc/ network/interfaces. Per capire com’è strutturato tale file e qual è il significato delle istruzioni che si trovano al suo interno, si procederà alla lettura e al commento interlineare, seguendo così da vicino il flusso delle informazioni: auto lo iface lo inet loopback

Il primo termine interessante in cui ci si imbatte è costituito dalla parola chiave auto. Esso indica al sistema operativo di attivare in automatico l’interfaccia definita nella riga di istruzioni, in questo caso lo, ossia l’interfaccia di loopback attraverso la quale passa il flusso di informazioni generato dal computer e diretto a se stesso, attraverso il medium di rete. Questo viene specificato dalla seconda riga, in cui lo viene definita come interfaccia di rete, ovvero inet, di tipo loopback e quindi di tipo locale, con indirizzo 127.0.0.1. È 51


Capitolo 3

bene tenere sempre presente l’indirizzo 127.0.0.1: sarà utile ogni volta che si desidera indicare la propria macchina, per esempio, quando si vuole istruire un servizio presente sul proprio computer a rispondere solo alle chiamate provenienti da se stesso. Proseguendo, si incontra un ulteriore blocco di istruzioni, molto simile al precedente: auto eth0

Facendo riferimento a quanto visto per il blocco precedente, la sua interpretazione risulta semplice: il sistema viene istruito affinché attivi in automatico all’avvio l’interfaccia di rete eth0. eth0 è la prima vera interfaccia di rete gestibile da Linux: il sistema operativo, infatti, indica le interfacce di rete secondo la convenzione: ethX

con x che può assumere valori da 0 per la prima interfaccia, quindi, semplificando, si può dire per la prima scheda di rete in su. Ecco la riga in cui vengono definite le proprietà dell’interfaccia appena attivata: iface eth0 inet static

Si tratta di un’interfaccia di rete (inet), che assumerà un indirizzo statico (static). Avendo a disposizione un servizio di configurazione automatica degli indirizzi IP, si può consentire all’interfaccia di ottenere un indirizzo richiedendolo direttamente a un server DHCP (Dinamic Host Configuration Protocol), definendola come dinamica (dhcp). Si vedrà in seguito come configurare un semplice server DHCP in grado di assegnare a ogni computer della LAN un indirizzo IP in automatico, evitando in questo modo possibili conflitti di indirizzamento delle periferiche e consentendo a qualsiasi PC collegato fisicamente l’accesso automatico alla rete. Avendo indicato una configurazione statica dell’interfaccia di rete, è necessario far seguire una serie di istruzioni che dicano al sistema quali sono le impostazioni da applicare all’interfaccia: address 192.168.10.100 netmask 255.255.255.0 network 192.168.10.0 broadcast 192.168.10.255 gateway 192.168.10.1

Tali istruzioni indicano, rispettivamente: ● address: specifica l’indirizzo posseduto in rete dall’interfaccia del computer, in questo caso da eth0; ●

netmask: si riferisce alla maschera di rete. All’interno di una classe è

possibile eseguire una segmentazione in più sotto reti, quindi una ma52


Le reti

schera è necessaria affinché il computer possa calcolare a quale segmento appartenga, interpretando quali ottetti di un indirizzo indichino gli id di rete e quali gli id di un host; ●

network: serve per indicare quale è l’indirizzo che identifica la rete di

appartenenza. Le interfacce poste nel segmento di rete potranno assumere un indirizzo immediatamente superiore a quello indicato per la rete; ●

broadcast è un indirizzo speciale: inviandogli un pacchetto di dati,

per esempio un ping, questo verrà ricevuto indistintamente da tutte le macchine nel segmento di rete di appartenenza; ●

gateway: rappresenta lo scambiatore di rete. È da questo indirizzo

che devono passare tutti i pacchetti destinati a reti esterne a quella di appartenenza dell’interfaccia definita. Una volta configurata l’interfaccia di rete, si può rendere più semplice la navigazione nella LAN e in Internet associando a ogni indirizzo numerico un nome mnemonico, che consenta di raggiungere con più facilità ogni singolo host, sia all’interno sia all’esterno del proprio segmento, utilizzando un tipo di combinazione statico che si avvale delle informazioni conservate all’interno del file /etc/hosts.

La risoluzione statica La risoluzione statica si basa su un accoppiamento: indirizzo_ip nome_host

contenuto all’interno del file /etc/hosts e consente di avere un servizio simile a quello fornito da un DNS, con qualche vantaggio in più e qualche evidente svantaggio. Partendo dai vantaggi, una risoluzione statica basata su file consente: ● di associare a un IP un nome di host anche all'interno di una rete privata, non raggiungibile da Internet. I DNS sono servizi pubblici che riconoscono solo IP pubblici, quindi non consentono di associare un nome di host a un indirizzo privato della propria rete domestica; ●

di velocizzare il processo di risoluzione. Leggere da un file contenuto sul disco rigido del proprio sistema è un’operazione di gran lunga più veloce di quella che prevede l’inoltro di una chiamata via Internet a un server su Internet il quale, mentre serve altre richieste, deve rispondere e spedire al mittente l’indirizzo IP risolto.

Per quanto riguarda gli svantaggi: ● Il file hosts è di tipo statico e quindi al cambiare dell’indirizzo IP di un host, avviene una desincronizzazione delle informazioni, il che rende inutilizzabile il meccanismo di risoluzione per l’host interessato; 53


Capitolo 3 ●

Il file hosts non consente di definire le impostazioni di DNS avanzate, quali campi MX o PTR.

Ecco un esempio del formato di un file hosts: 192.168.10.100 miopc server.casalingo server fileserver www.fileserverdomestico.it. Il particolare che balza subito all’occhio è che a uno stesso IP numerico possono essere associati più nomi di host, in diversi formati, anche utilizzando nomi del tutto simili, se non identici a quelli di veri server internet. Tuttavia, se si volesse utilizzare un servizio DNS esterno per ricevere in automatico gli indirizzi IP di tutti gli host che si intendono contattare, il sistema va istruito affinché sappia quali server DNS interrogare e dove trovarli nella rete. Questo è proprio lo scopo per cui andrà modificato il file /etc/resolv.con

La risoluzione dinamica Il discorso sembra quasi cadere in un circolo vizioso: per contattare un server di cui si conosce il nome, bisogna scoprirne il vero indirizzo, quello numerico. Per fare questo bisogna interrogare un server che offra un servizio DNS, un nameserver al quale inviare il nome di host di cui si voglia scoprire l’IP, per riceverne in cambio l’indirizzo numerico. I server DNS vanno indicati in forma numerica, altrimenti si entrerebbe in un nodo gordiano impossibile da sciogliere.

Figura 3.2 In genere i provider forniscono una pagina di assistenza contenente tutti i dati utili alla configurazione dei parametri di rete, per esempio Libero all’indirizzo http://assistenza.libero.it/supporto/parametri_conf.phtml.

54


Le reti

A tale scopo, i provider all’atto della sottoscrizione di un abbonamento forniscono proprio gli indirizzi numerici dei server DNS che mettono a disposizione dei clienti e che, per il fatto di appartenere alla stessa rete cui si collega l’utente, risultano particolarmente veloci da consultare. Affinché Linux possa utilizzare dei server DNS per la risoluzione dei nomi di dominio nei corrispondenti indirizzi numerici, è necessario indicare i relativi indirizzi in formato numerico, utilizzando la parola chiave nameserver: domain zarrelli.org nameserver 195.210.91.100 nameserver 193.70.192.100 nameserver 213.140.2.43

Innanzitutto, bisogna tenere presente che il file resolv.conf può indicare fino a un massimo di 3 server DNS da interrogare. Se un’interrogazione non ha risposta dal primo nameserver, si passa al secondo, quindi al terzo, per finire con un fallimento in caso di mancata risoluzione. È sempre bene indicare almeno un server DNS esterno alla rete del proprio provider. Questo consentirà, in caso di malfunzionamento delle infrastrutture DNS del proprio fornitore, di poter continuare la navigazione senza altri inconvenienti che un leggero aumento nella latenza connessa ai tempi di risposta dei nameserver.

L’istruzione di configurazione domain indica il dominio predefinito sul quale vengono condotte le interrogazioni. Questo significa che se si esegue una risoluzione senza fornire un nome di host completo, ma solo la prima parte, il nome di dominio completo verrà ricostruito aggiungendo l’informazione specificata dalla parola chiave domain. Per esempio, l’host indicato semplicemente con: giorgio

verrà considerato come: giorgio.zarrelli.org

Spesso, nel file resolv.conf è presente un’ulteriore riga di configurazione che rimpiazza la direttiva domain: search zarrelli.org

Normalmente il dominio di appartenenza predefinito viene indicato dalla direttiva domain o, in alternativa, viene preso il nome di host del sistema. A volte si ha l’esigenza di completare i nomi di host utilizzando nomi di dominio alternativi, anche più di uno. In questa riga vanno indicati i domini da utilizzare per completare l’informazione riguardante l’host da contattare. 55


Capitolo 3

Niente di troppo complicato, ma qualcosa non convince. Per esempio, se uno stesso dominio fosse elencato sia nel file hosts, sia nei DNS pubblici, ma con due indirizzi numerici differenti? Come superare l’impasse di due definizioni non coincidenti? Semplicemente ordinando le interrogazioni tramite la configurazione del file /etc/host.conf.

Mettere ordine nelle interrogazioni Il file host.conf ha una sintassi di base molto semplice: order hosts,bind multi on

Attenzione alla parola chiave order: ordina i tentativi di lettura. Nell’esempio, quando verrà tentata una risoluzione, prima verrà interrogato il file /etc/ hosts e solo se non verrà trovata una associazione, saranno contattati i server DNS esterni, elencati in /etc/resolv.conf. La seconda riga di configurazione riguarda direttamente il file /etc/hosts. Abilitando la direttiva multi con l’opzione on, l’interrogazione del file hosts restituirà tutti gli indirizzi IP associati a uno stesso nome di host. Disattivando la direttiva, con l’opzione off, verrà restituito solo il primo indirizzo IP valido associato. In caso di file hosts corposi, conviene disattivare l’opzione multi per evitare possibili rallentamenti nella risoluzione dei nomi di host. Una volta modificato un qualsiasi file di configurazione, è opportuno riavviare i servizi di rete per assicurarsi che vengano caricate le nuove impostazioni. Questo è realizzabile attraverso il comando /etc/init.d/networking restart.

Configurare la rete al volo Il vantaggio di inserire una configurazione all’interno di file fisici consiste nel renderla permanente: al riavvio dei servizi di rete o del sistema si ritroveranno le stesse impostazioni senza aver toccato alcunché. Tuttavia, a volte può essere necessario alterare la configurazione di rete per sperimentare qualche nuovo servizio o per altri scopi, senza però rendere queste modifiche permanenti. Per farlo, basta prendere confidenza con le utility di sistema deputate alla gestione della rete, iniziando da ifconfig, strumento essenziale per la configurazione delle interfacce di rete.

La configurazione delle interfacce di rete L’utility ifconfig è un vero e proprio coltellino svizzero; infatti, consente di esaminare l’impostazione delle interfacce di rete, ma anche di manipolarne le impostazioni con una grande facilità: 56


Le reti /sbin/ifconfig -a eth0 Link encap:Ethernet HWaddr 00:D0:B7:2D:E5:3B inet addr:192.168.10.101 Bcast:192.168.10.255 Mask:255.255.255.0 inet6 addr: fe80::2d0:b7ff:fe2d:e53b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:61925 errors:0 dropped:0 overruns:0 frame:0 TX packets:72885 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:13477177 (12.8 MiB) TX bytes:94353184 (89.9 MiB) lo

Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:1339 errors:0 dropped:0 overruns:0 frame:0 TX packets:1339 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1671146 (1.5 MiB) TX bytes:1671146 (1.5 MiB)

L’opzione -a associata al comando ifconfig consente di ispezionare lo stato delle interfacce di rete associate al sistema, compresa quella di loopback, poco interessante ai fini di questo capitolo e che verrà quindi tralasciata. Più interessanti, invece, sono i dati riportati per la prima interfaccia di rete, ovvero eth0. Innanzitutto, si tratta di un’interfaccia ethernet (Link encap:Ethernet), con MAC address 00:D0:B7:2D:E5:3B (HWaddr 00:D0:B7:2D:E5:3B) e indirizzo di rete 192.168.10.101 (inet addr:192.168.10.101), mentre l’indirizzo del broadcast di rete è 192.168.10.255 (Bcast:192.168.10.255), associato a una maschera di rete 255.255.255.0 (Mask:255.255.255.0). Il MAC (Media Access Control) è un codice di 48 bit, espresso in forma esadecimale, che ha la caratteristica di essere unico per ogni scheda di rete prodotta, e che nei primi 24 bit codifica l’identificativo della casa produttrice, mentre nei rimanenti indica in maniera univoca la scheda cui è assegnato.

Una volta compresi i dati fondamentali relativi a un’interfaccia, è possibile lanciarsi in un’analisi diagnostica veloce. Per esempio, si può osservare come l’interfaccia sia attiva (UP), abbia ricevuto 61925 pacchetti di dati senza alcun errore e ne abbia trasmessi 72885. Inoltre, non vi sono state collisioni all’interno della rete, il che è indice di un buon funzionamento del supporto fisico, segnatamente dei cavi, delle schede e degli hub o switch. Un ultimo dato interessante, dalla scheda di rete sono passati 12,8 Megabyte in ricezione e 89,9 Megabyte in trasmissione. 57


Capitolo 3

Se si desidera alterare la configurazione della scheda di rete, bisogna utilizzare sempre ifconfig, con una sintassi che segue il seguente schema: ifconfig interfaccia indirizzo_di_rete netmask up

Per esempio, volendo assegnare alla prima interfaccia di rete il nuovo indirizzo 192.168.10.133, basterebbe digitare: ifconfig eth0 192.168.10.133 255.255.255.0 up

Se la netmask è quella tipica della classe di indirizzi utilizzata, è possibile ometterla, così come l’opzione UP: ifconfig eth0 192.168.10.133

Volendo, è possibile disattivare la scheda, escludendo la macchina dalla rete cui l’interfaccia è associata: ifconfig eth0 down

In breve, all’interno della proprio segmento di rete basta configurare opportunamente le interfacce, affinché i computer si vedano reciprocamente. Infatti, i pacchetti attraversano l’intero circuito di cavi, passando attraverso tutte le schede e quei dati che sono indirizzati a una particolare interfaccia vengono catturati e dirottati alla macchina di pertinenza, mentre gli altri vengono ignorati. Il discorso si fa più complicato quando si mette di mezzo un router, che collega segmenti di rete differenti, normalmente non comunicanti fra di loro. In questo caso bisogna istruire ogni interfaccia di rete, affinché conosca a quale scambiatore, normalmente rappresentato da un router, inviare i pacchetti destinati a una rete esterna, così che questi li possa prendere e reindirizzare verso l’esterno.

Instradare i pacchetti Se si desidera che il proprio computer dialoghi con quelli presenti su un’altra rete, per esempio Internet, è necessario che invii a un router i propri pacchetti destinati all’esterno, affinché quest’ultimo possa rilanciarli nella grande rete. Il problema è come dire al proprio sistema dove trovare lo scambiatore. Nei file interfaces questo compito è lasciato alla direttiva gateway, che indica l’indirizzo IP del “ponte” verso l’esterno. Tuttavia, nel caso in cui si voglia manipolare a mano la tabella di routing del sistema, nella quale sono elencate le possibili vie di fuga, bisogna affidarsi all’utility route. Questa, come per ifconfig, ha una funzione di analisi e una di manipolazione. Prima di apportare qualsiasi modifica alla tabella di routing è buona pratica ispezionarne i valori: route Kernel IP routing table Destination Gateway localnet * default 192.168.10.1

58

Genmask 255.255.255.0 0.0.0.0

Flags Metric Ref U 0 0 UG 0 0

Use Iface 0 eth0 0 eth0


Le reti

Interessante, ma decisamente poco comprensibile. Per un maggiore controllo sugli instradamenti, meglio chiedere a route di fornire la tabella senza cercare di interpretare gli indirizzi IP con dei valori simbolici, dando come output solo i valori numerici delle interfacce di rete: route -n Kernel IP routing table Destination Gateway 192.168.10.0 0.0.0.0 0.0.0.0 192.168.10.1

Genmask 255.255.255.0 0.0.0.0

Flags Metric Ref U 0 0 UG 0 0

Use Iface 0 eth0 0 eth0

Ora le informazioni sono più facilmente decifrabili. La tabella presenta otto differenti colonne, ma non tutte sono interessanti per un utilizzo comune. Nella prima colonna viene indicata la rete di destinazione verso la quale possono essere inviati i pacchetti, la seconda definisce l’indirizzo dello scambiatore per i pacchetti diretti verso la rete indicata, nella terza si ha la maschera della rete di destinazione e nell’ultima viene mostrata l’interfaccia attraverso la quale i dati devono passare per raggiungere la rete di destinazione. Detto questo, ecco quale significato hanno le due righe che costituiscono la tabella di routing appena mostrata: 192.168.10.0

0.0.0.0

255.255.255.0

U

0

0

0 eth0

La prima rete indica le istruzioni fondamentali per inviare pacchetti alla rete 192.168.10.0. Trattandosi della rete locale (localnet), sulla quale risiede l’host, non vi è bisogno di un router particolare, basterà inviare i dati attraverso l’host stesso, convenzionalmente indicato con 0.0.0.0 per vedere i pacchetti percorrere tutto il segmento di appartenenza. Anche la maschera di rete ha un valore noto, poiché la rete di destinazione è la stessa dell’host da cui si vogliono inviare e ricevere pacchetti, quindi è la medesima. Da notare il flag U presente nel campo successivo, a indicare che il percorso definito è attivo e utilizzabile, mentre nell’ultimo campo viene definita l’interfaccia attraverso quale inviare e ricevere dati per e dalla sottorete indicata, in questo caso eth0. La seconda riga esprime qualcosa di diverso: 0.0.0.0

192.168.10.1

0.0.0.0

UG

0

0

0 eth0

La rete di destinazione è 0.0.0.0, valore che in questo esempio è utilizzato come wildcard a indicare che la regola di instradamento vale per qualsiasi rete di destinazione non esplicitamente indicata da una precedente regola. Poiché questa regola vale per ogni destinazione possibile, anche esterna alla sottorete di appartenenza dell’host, non è sufficiente semplicemente lanciare pacchetti in rete sperando che il computer di destinazione li riceva. Infatti, quest’ultimo potrebbe trovarsi ovunque, anche in Internet e quindi non essere raggiungibile senza l’intervento di un router. È necessario dunque indicare un indirizzo preciso dove trovare il router, in questo caso 192.168.10.1, mentre 59


Capitolo 3

la maschera di rete deve necessariamente essere una wildcard per coprire qualsiasi tipo di sottorete. Da notare i flag U e G: il primo indica che il percorso è attivo (U) e che porta al gateway di rete (G). Una volta esaminata la tabella di routing predefinita e imparato a leggerne i contenuti, si può anche pensare di manipolarla utilizzando la seguente sintassi: route add -net indirizzo_rete netmask indirizzo_netmask gw indirizzo_gateway

come, per esempio: route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.10.1 dev eth0

che fa riferimento allo stesso router per inviare dati via eth0 alla sottorete 192.168.20.0. Invece, se si volesse indicare un nuovo instradamento predefinito, fra quelli disponibili: route add default gw indirizzo_gateway

come, per esempio: route add default gw 192.168.10.1

Default indica un valore wildcard corrispondente a 0.0.0.0, già visto in precedenza.

Assegnare gli indirizzi in automatico Assegnare un IP a una qualsiasi macchina in rete non è poi così difficile: basta scegliere una classe, una maschera di rete, un gateway e il gioco è fatto. Il tutto si complica quando si ha a che fare con una rete che inizia ad annoverare venti o trenta host. Infatti, se non si è seguita una strategia di assegnazione degli IP, ci si ritrova ben presto senza più idea di quali indirizzi sono rimasti liberi e per ogni nuovo computer collegato bisognerà rieseguire la procedura di configurazione della rete. La soluzione al problema è semplice, basta appoggiarsi a un server DHCP (Dynamic Host Configuration Protocol) in grado di assegnare a tutti i client un indirizzo IP, ma soprattutto di passare qualsiasi informazione necessaria a configurare la rete. Si tratta di un’architettura client server che vede su ogni singolo host un client DHCP interrogare il server e ricevere le informazioni necessarie, che rimarranno valide per un periodo di tempo prestabilito. Allo 60


Le reti

scadere del tempo, il client si troverà costretto a richiedere un nuovo indirizzo e il server ne servirà uno che al momento risulti disponibile, che sia lo stesso assegnato in precedenza o un altro. Per fortuna degli utenti domestici, spesso i router ADSL impiegati fra le quattro mura di casa posseggono un semplice server DHCP, a volte abbastanza sofisticati da consentire l’associazione statica di un particolare indirizzo al MAC di una scheda di rete, realizzando in questo modo una configurazione automatica permanente dell’host: a ogni richiesta verrà fornito sempre lo stesso indirizzo. In pratica, il server DHCP fornisce tutte le informazioni necessarie, quelle che verrebbero indicate nei file di configurazione visti in precedenza, tenendo traccia di quali IP sono stati forniti, a chi e per quanto tempo. In tal modo non si offre a un client un indirizzo già utilizzato da un altro host, il che creerebbe un conflitto di rete, con il risultato di vedere entrambi i computer uscire e rientrare dalla rete in maniera apparentemente casuale. Utilizzare un server DHCP ha dunque l’innegabile vantaggio di semplificare notevolmente la messa in rete di un computer: basta collegare alla scheda il cavo di rete, lanciare il client DHCP e in automatico l’host viene configurato e inizia a comunicare con gli altri apparati della LAN. In Linux esistono diversi client DHCP, già pronti in soluzione pacchettizzata da installare, per esempio dhclient o pump. Basterà installare uno di questi e, nel file interfaces, sostituire alla configurazione dell’interfaccia la seguente semplice riga: iface eth0 inet dhcp

Questo consentirà al sistema di utilizzare un qualsiasi client DHCP installato per interrogare il server di rete e ottenere una configurazione valida per l’interfaccia eth0, su protocollo TCP/IP (inet). Non è necessario indicare al client l’indirizzo di un server DHCP: sarà il client stesso a inoltrare su tutta la rete la propria richiesta, affinché arrivi al server e questo possa rispondergli.

Configurare un server DHCP Se il proprio router ADSL non è provvisto di server DHCP non è il caso di disperarsi, poiché per Linux esistono diversi programmi in grado di erogare questo servizio ed è possibile configurarne uno con poche semplici istruzioni. Nell’esempio successivo a questo paragrafo, verrà utilizzato il server fornito dal pacchetto dhcp3-server dato con Ubuntu, una fra le più diffuse distribuzioni Linux fra i relativi utenti. 61


Capitolo 3

Dopo avere installato il pacchetto, la prima operazione da compiere consiste nell’informare il server su quali interfacce deve rimanere in ascolto per rispondere alle richieste dei client. È possibile indicare uno o più schede di rete, anche wireless, modificando il file: /etc/default/dhcp3-server

inserendo la seguente riga di configurazione: INTERFACES=”eth0 eth1”

anche se nella maggior parte dei casi sarà sufficiente indicare solamente un’interfaccia, quella collegata alla rete sulla quale si vuole offrire il servizio. In altre distribuzioni potrebbe non essere necessario indicare l’interfaccia di servizio in questo file, ma direttamente nello script di avvio in /etc/init.d. Il passo successivo consiste nell’indicare quale configurazione si vuole fornire ai client, modificando il file di configurazione: /etc/dhcp3/dhcpd.conf

Più che esplorare le molte opzioni di configurazione, fin troppe per un utilizzo domestico, si può ipotizzare uno scenario in cui il server DHCP offra una serie di indirizzi dinamici ai client che si colleghino e distacchino frequentemente dalla rete, come potrebbero essere i portatili di amici in visita, mentre per i PC fissi domestici verranno riservati alcuni IP, assegnati sempre alle stesse macchine. Ecco come potrebbe apparire un file di configurazione adatto a questo scenario: option domain-name “lan.domestica” option domain-name-servers 195.210.91.100, 193.70.192.100, 213.140.2.43

Alla luce di quanto si è già visto per la configurazione statica della rete, le due righe di istruzioni appaiono chiare: ai client che fanno richiesta di una configurazione di rete valida viene inviato un nome di dominio e una lista di DNS server da utilizzare per la risoluzione dei nomi, né più né meno che se si scrivessero i dati direttamente nel file /etc/resolv.conf. default-lease-time 600 max-lease-time 7200

In un ambiente in cui diversi host, come per esempio i portatili, possono disconnettersi frequentemente, per esempio perché vengono portati altrove, gli indirizzi di rete rimarrebbero assegnati anche se inutilizzati, rendendoli indisponibili agli altri host. Sicuramente ciò costituisce uno spreco di risorse cui si può ovviare introducendo una “scadenza” del lease, dell’assegnazione, introducendo un tempo predefinito (default-lease-time), espresso in secondi, dopo il quale il client dovrà richiedere nuovamente l’assegnazione di un indi62


Le reti

rizzo e un tempo massimo di assegnazione, che non può essere in alcun caso superato. I due tipi diversi di scadenza dell’assegnazione vengono introdotti perché, come si vedrà fra poco, è possibile definire blocchi di configurazione specifici per i quali indicare tempi di scadenza maggiori o minori rispetto a quelli predefiniti. Basti immaginare il caso in cui si abbiano degli indirizzi riservati a portatili che rimangono connessi per poco tempo alla rete e, in questo caso, conviene stabilire un tempo massimo di assegnazione minore rispetto a macchine più stabilmente in rete log-facility local7

Sfruttando il meccanismo di configurazione del logger di sistema è possibile indicare una facility personalizzata, come per esempio local7, e utilizzarla per indirizzare i file di log del server verso un file specifico. In questo caso, bisognerà modificare il file di configurazione di syslogd, ovvero /etc/syslog. conf e associare a local7 un file sul quale scrivere il log del server DHCP: local7.debug /var/log/dhcpd.log

Cosa succede se nella stessa rete sono presenti più server DHCP? authoritative

Ovviamente ci sarebbe una situazione a dir poco confusionaria, se non si corresse ai ripari, rendendo il proprio server autoritativo per la rete. In questo modo, i client che provengano da una rete servita da un diverso server DHCP, collegandosi alla nuova LAN riconosceranno questo server DHCP come unico autorizzato a gestire gli IP e rinnoveranno la richiesta di configurazione. Ora è arrivato il momento di scrivere una blocco di configurazione che gestisca l’assegnazione degli indirizzi di una sottorete: subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.2 192.168.10.100; range 192.168.10.150 192.168.10.254; option routers 192.168.10.1; }

Il blocco apre con la parola chiave subnet seguita dall’indirizzo della rete per la quale si intende servire gli IP e la relativa netmask. Sta all’utente decidere quali indirizzi assegnare alla propria LAN, l’importante è che l’IP della rete, la netmask e gli indirizzi dei singoli host siano coerenti fra loro. Le parentesi graffe racchiudono le istruzioni che definiscono le proprietà degli host appartenenti alla subnet appena indicata: da notare la possibilità di definire più range di indirizzi da assegnare in automatico, il che indica anche quali rimangono indisponibili ai clienti che ricevono il proprio indirizzo dinamicamente. In questo caso, vengono esclusi dall’assegnazione dinamica gli indirizzi che vanno da .101 a .149, che verranno utilizzati per un’associa63


Capitolo 3

zione “statica”. È importante fare attenzione a non rendere disponibili dinamicamente gli indirizzi .0, riservato all’indirizzo della rete, .255, riservato per l’IP di broadcast e il .1, che nell’esempio viene associato al router, che deve avere un’assegnazione statica. Riservati alcuni IP per un’assegnazione statica, si procederà ora a definire un blocco di istruzioni in grado di configurare in maniera statica l’indirizzo di un host. Il meccanismo si basa sul riconoscimento dell’indirizzo MAC della scheda di rete dell’host e all’associazione MAC/IP, che consentirà di assegnare alla scheda sempre lo stesso indirizzo a ogni successiva richiesta. Come reperire il MAC di un host? Semplicemente collegandosi al computer e lanciando il comando ifconfig seguito dall’identificativo dell’interfaccia di rete di cui si vuole reperire l’informazione: ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:D0:B7:2D:E5:3B inet addr:192.168.10.101 Bcast:192.168.10.255 Mask:255.255.255.0 inet6 addr: fe80::2d0:b7ff:fe2d:e53b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:127426 errors:0 dropped:0 overruns:0 frame:0 TX packets:154195 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:21728625 (20.7 MiB) TX bytes:206968476 (197.3 MiB)

Il dato relativo al MAC è contenuto nella stringa HWaddr 00:D0:B7:2D:E5:3B. Ora è possibile configurare un host che, evocativamente, verrà chiamato “letto”: host letto { hardware ethernet 00:D0:B7:2D:E5:3B; fixed-address 192.168.10.151; }

Decifrare il blocco è abbastanza semplice: quando la richiesta proviene da una scheda di rete il cui MAC corrisponde a quello indicato, va restituito l’indirizzo IP definito dalla direttiva fixed-address. L’esempio qui mostrato è molto semplice, ma consente già di definire una rete abbastanza complessa, dotata di indirizzamenti misti. Studiando con attenzione la documentazione del server DHCP si possono definire blocchi di istruzione estremamente sofisticati e sensibili. Non solo all’interno dei blocchi che sono stati appena mostrati è possibile inserire diverse opzioni, anche in contrasto con quelle più generali definite in apertura di file, ma anche nuove sezioni adatte a diversi scenari che, però, difficilmente si possono riscontrare in un ambiente domestico. Tuttavia, se non si ha intenzione di configurare una rete via DHCP e di editare i file a mano, basta utilizzare gli strumenti messi a disposizione dai due più 64


Le reti

diffusi desktop manager, Gnome e KDE, che costituiscono l’argomento del prossimo paragrafo.

Configurare la rete da KDE e Gnome Con le conoscenze che si sono acquisite finora, la configurazione della rete utilizzando gli strumenti grafici messi a disposizione da Gnome e KDE risulta un’operazione molto semplice e veloce. In pratica, è sufficiente inserire le stesse informazioni che si sono indicate nei vari file esaminati nei paragrafi precedenti, solo che ora la coerenza delle interfacce messe a disposizione dell’utente rende il tutto più intuitivo, veloce e a prova di errore.

Gnome Gnome mette a disposizione uno strumento, network-admin, raggiungibile attraverso il menu Applicazioni, selezionando Strumenti di sistema e quindi Rete. Se la distribuzione dovesse avere modificato il percorso di questa applicazione all’interno dei menu di Gnome, nessun problema: nella peggiore delle ipotesi basta aprire una console e digitare il comando: network-admin

Figura 3.3 Il pannello di gestione della rete di Gnome presenta l’elenco delle connessioni disponibili nel sistema.

Nel pannello che appare all’utente, suddiviso in diverse sezioni, la parte più interessante è Connessioni, dove sono elencate le connessioni di rete del sistema e il gateway predefinito: selezionare la connessione sulla quale si vuole agire e premere il pulsante Proprietà per vedere apparire il pannello in 65


Capitolo 3

cui inserire informazioni ormai familiari, come l’indirizzo IP dell’interfaccia, la maschera di rete e l’IP del gateway. Da notare che oltre a configurare un IP statico è possibile selezionare l’autoconfigurazione attraverso il servizio DHCP e l’abilitazione della connessione che, altrimenti, rimarrebbe configurata ma inutilizzata.

Figura 3.4 Selezionando una delle connessioni visualizzate e cliccando il pulsante Proprietà è possibile modificarne le impostazioni di rete.

Anche le rimanenti sezioni del pannello risultano familiari e interessanti. Sotto l’etichetta Generale è possibile impostare la stringa di identificazione dell’host all’interno di una rete Windows, mentre in DNS si può modificare la lista dei DNS utilizzati dal sistema e i domini di ricerca predefiniti; in Host, infine, vanno inseriti i nomi di host e i relativi indirizzi di rete per i quali si vuole creare una risoluzione statica. Gli utenti Gnome hanno a disposizione un altro strumento estremamente flessibile per la gestione della rete, i Network Tools, raggiungibili dal menu Applicazioni selezionando Strumenti di Sistema e infine Strumenti di rete. Da qui, nella sezione Interfacce, diventa semplice non solo modificare gli indirizzi delle schede di rete, ma anche e soprattutto tenere sotto controllo tutta una serie di dati informativi, tutto sommato identici a quelli offerti da ifconfig ma molto più semplici da leggere. Ma non solo: le rimanenti sezioni del pannello contengono tutto l’armamentario di cui ha bisogno un amministratore di rete per diagnosticare possibili problemi sulla LAN e su Internet: ● i classici ping; ● ●

66

netstat, per l'ispezione delle tabelle di routing; traceroute, che consente di vedere per quali nodi della rete passano i pacchetti prima di giungere a destinazione; l'utilissima scansione delle porte, per esaminare i servizi offerti da un computer;


Le reti ● ●

il lookup, che permette di conoscere l'indirizzo IP di un host; l'ormai anacronistico finger, che consente di ottenere informazioni sull’utente di un computer; whois, che elenca i dati di registrazione di un dominio.

KDE Anche KDE ha il proprio strumento di configurazione della rete, richiamabile attraverso il pannello delle Preferenze di Sistema alla voce Internet e Rete > Impostazioni di rete. L’impostazione è molto simile a quella vista per l’utility di amministrazione in Gnome, con un pannello diviso in sezioni: ● Network Interfaces è dedicata alla configurazione delle interfacce di rete; ● ●

in Routes è possibile impostare il gateway predefinito; Domain Name System permette la configurazione dei DNS, del nome dell’host e del dominio; in Network Profiles si possono salvare tutte le precedenti impostazioni in un profilo che può essere caricato a discrezione dell’utente.

Figura 3.5 Nella finestra Impostazioni di rete è possibile gestire qualsiasi interfaccia di rete.

67


Capitolo 3

Accanto alla voce per le impostazioni di rete, KDE presenta un’interessante Connessioni: è da qui che è possibile impostare i proxy di sistema, da utilizzare per esempio in ambienti protetti da firewall per consentire la navigazione. La sezione dedicata alla Rete senza fili permette di impostare i dettagli relativi alle reti wireless, quali il tipo di autenticazione, comprese le chiavi, la modalità operativa, la velocità e la gestione dell’energia. Le reti wireless saranno appunto l’argomento del prossimo paragrafo: una volta entrati in possesso di una scheda Wi-Fi, cosa bisogna fare per installarla, configurarla e utilizzarla?

Le reti wireless Creare una rete domestica non è sempre un lavoro alla portata di tutti. Spesso è necessario costruire a mano dei cavi Ethernet della lunghezza giusta, fare buchi nei muri, scegliere e applicare le canaline più adatte, tirare cavi per ogni dove e installare le prese a muro. Decisamente troppo per un utente alle prime armi e spesso una scomodità anche per chi con le reti ci lavora ma non vuole tirare cavi per tutta la casa. Una soluzione esiste, e già da qualche anno: basta installare una rete Wi-Fi che veicoli i dati non su cavo ma su onde radio in grado di passare attraverso le pareti più spesse, eliminando ogni supporto fisico e quindi qualsiasi attività di bricolage poco gradita. I problemi, in questo caso, sono di natura diversa: l’utente deve imparare a destreggiarsi fra nuovi standard e chipset non sempre digeriti dal sistema operativo: per esempio, deve imparare che una scheda che segua lo standard 802.11b viaggia a soli 11 Mbps, mentre quelle di tipo 802.11g corrono a 54 Mbps; inoltre, varie marche implementano diverse soluzioni proprietarie che innalzano le prestazioni, rinunciando alla compatibilità. Ci si ritrova così con adattatori di rete che, pur essendo nominalmente aderenti alle specifiche 802.11g, viaggiano a 125 Mbps, ma solo se accoppiati ad access point della stessa marca; inoltre, esistono schede che funzionano correttamente con alcuni router mentre con altri hanno comportamenti erratici. Occorre molta più attenzione nella scelta dei componenti rispetto alle tradizionali schede Ethernet. In Linux il supporto per la gestione delle connessioni Wi-Fi è affidato alle wireless-extension, un insieme di utility per la configurazione degli adattatori di rete il cui utilizzo è molto simile a ifconfig (se ne riparlerà più avanti). Ciò che costituisce una forte barriera di ingresso all’utilizzo delle schede Wi-Fi in Linux è lo scarso numero di chipset supportati in questo sistema operativo. Un kernel precompilato fornito con una qualsiasi distribuzione, infatti, supporta un discreto numero di chipset, solitamente Prism2, Cisco, Aironet e Hermes, ma sul mercato se ne trovano molti di più. È bene chiarire un particolare importante: a fronte della grande quantità di schede wireless in commercio, in realtà vi è un numero ridotto di chipset che 68


Le reti

implementano le funzionalità Wi-Fi. Ciò significa che seppure vi siano molte marche di adattatori in circolazione, in realtà il cuore del sistema è creato solo da poche aziende, che rivendono i chip ai grandi produttori. Questo porta a una considerazione: non vi è corrispondenza fra marca e chipset e spesso e nemmeno tra modello e chipset. Un produttore può utilizzare per differenti modelli diversi chipset a seconda della disponibilità di questi ultimi sul mercato, del loro costo o delle prestazioni raggiunte. Allo stesso modo, all’interno della gamma offerta da una stessa marca, il medesimo modello, in revisioni diverse, può basarsi su chipset wireless differenti. Tutto questo si traduce per l’utente in un gran mal di testa: non esiste una corrispondenza certa fra marca e driver da utilizzare, visto che i chipset possono variare per molte ragioni e in modi imprevedibili. Per Windows, ciò non costituisce un problema visto che i driver per la gestione della scheda viene fornito insieme all’apparato stesso, ma per Linux si ripropone lo stesso scenario che si è visto per i modem: sono rare le case che forniscono i driver o la documentazione necessaria per scriverli, quindi tutto è affidato a progetti nati su base volontaria e che vedono gli utenti stessi tentare di scrivere il supporto per questi adattatori. Visto che nella maggior parte dei casi non esistono driver ufficiali forniti con le schede, l’utente deve sforzarsi di capire quali progetti abbiano creato il supporto software adatto alla propria scheda, alla sua marca, modello e revisione, il che non è semplice. Oltretutto, ciò è complicato dal fatto che solitamente, quando si acquista un adattatore wireless, sulla scatola non vi è scritto il chipset sul quale esso è basato. A complicare ulteriormente la situazione, c’è da dire che tutti i progetti sono basati su materiale in commercio fuori dall’Italia, con marchi e denominazioni commerciali spesso non riscontrabili nel nostro paese: una scheda che all’estero ha un nome, in Italia potrebbe averne un altro e quindi anche recandosi in un negozio con la lista degli apparati supportati da un progetto, si potrebbe non essere in grado di accertare la compatibilità In questo paragrafo si porterà un esempio classico, mostrando l’installazione di una chiave USB Wi-Fi assolutamente non supportata da alcun driver Linux. Le chiavi USB sono apparecchi molto comodi: basta collegarle a un computer per fornirgli la connettività e, quando non se ne ha più bisogno, si può metterle in un taschino e portarle con sé ovunque. La chiave utilizzata sarà una ROPER RO80211GTI-USB [FreeLan 802.11g Wireless 125 Mbps Usb 2.0 Adapter], un adattatore molto comune acquistabile per poche decine di euro in qualsiasi centro commerciale o negozio specializzato. La prima sorpresa la si ha leggendo con attenzione le specifiche: la velocità di trasmissione dati si attesta a 125 Mbps solo in presenza di access point compatibili, altrimenti si scende ai classici 54 Mbps garantiti dalle specifiche 802.11g. 69


Capitolo 3

Ma visto che sulla confezione non è in alcun modo riportato il chipset che fornisce le funzionalità wireless a questa chiave, come recuperarne i dettagli in modo da confrontarli con le liste di chip supportati dai vari progetti disponibili in Internet? Il primo passo consiste nel collegare la chiave alla porta USB: qualsiasi kernel fornito con una distribuzione recente supporta le periferiche USB e non avrà difficoltà a rilevare la chiave. Una volta connesso l’adattatore, se ne possono ispezionare i dettagli con il comando: lsusb -v

Fra le molte righe di informazioni, riguardanti le varie periferiche e i controller USB collegati al sistema e riconosciuti, se ne possono riscontrare alcune molto interessanti: Bus 004 Device 003: ID 0cde:0017 Z-Com Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 224 Wireless bDeviceSubClass 1 Radio Frequency bDeviceProtocol 1 Bluetooth bMaxPacketSize0 64 idVendor 0x0cde Z-Com idProduct 0x0017 bcdDevice 1.84 iManufacturer 0 iProduct 0 iSerial 1 TIC6A3803B0600TNETW

Si tratta senza dubbio della chiave USB Wi-Fi e dal seriale l’utente smaliziato può riconoscere che il chipset è prodotto dalla Texas Instruments ed è il TNETW1450. Tale modello rientra tra quelli supportati da uno dei progetti più interessanti dedicati al supporto Wi-Fi per Linux, denominato acx100, reperibile all’indirizzo http://acx100.sourceforge.net/matrix.html. In Internet è possibile trovare tre importanti progetti dedicati al supporto delle periferiche wireless sotto Linux e conviene sempre controllare la lista degli adattatori supportati da ognuno di essi se si vuole anche solo sperare di poter mettere in rete Wi-Fi il proprio computer. È bene quindi visitare i seguenti progetti: ● Linux wlan-ng - http://www.linux-wlan.org - Supporta i chipset IntersilPrism2/2.5/3; ●

70

MadWiFi (Multiband Atheros Driver for WiFi) - http://www.madwifi. net - Fornisce i driver per schede basate su chipset Atheros AR5210, AR5211, AR5212 e AR5213; Acx100 - http://acx100.sourceforge.net - Fornisce supporto per chipset Texas Instruments ACX100/ACX111;


Le reti

Figura 3.6 Il progetto acx100 è tra i più utili per l’utente, dato che il chipset TI ACX100/ACX111 è molto diffuso fra le schede Wi-Fi commercializzate in Italia.

NdisWrapper - http://ndiswrapper.sourceforge.net - È l’ultima spiaggia per chi non ha trovato alcun driver in grado di supportare la propria scheda; fornisce infatti un meccanismo in grado di utilizzare i driver Windows all’interno del sistema operativo Linux. Se nessuno di questi progetti, nemmeno NdisWrapper, è in grado di mettere in funzione la scheda wireless, si può comunque effettuare un ultimo tentativo consultando il Wireless LAN resources for Linux (http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/), sito in cui si possono trovare puntatori alle risorse Internet dedicate al wireless per Linux e nel quale eventualmente può essere presente l’indicazione a qualche driver, prodotto da un progetto minore, che possa risolvere la situazione.

La chiave USB utilizzata per gli esempi di questo paragrafo fa parte di quella categoria per la quale ci sono poche speranze: solo il progetto acx100 offre un supporto sperimentale che, però, non è ancora in grado di pilotare correttamente la periferica e quindi risulta inutilizzabile nella pratica. Come risolvere il problema? L’unica speranza, dato che non esistono proprio driver compatibili, consiste nell’affidarsi al progetto NdisWrapper e utilizzare i driver forniti con la chiave USB. 71


Capitolo 3

NdisWrapper Il progetto NdisWrapper implementa quello che viene comunemente definito un workaround, ovvero tenta di aggirare l’ostacolo costituito dalla mancanza di driver fornendo al kernel Linux le kernel API di Windows e le Network Driver Interfaces Specification API. Così si consente ai driver Windows di funzionare in maniera nativa anche sotto Linux, rendendolo in grado di gestire la periferica wireless. Ma come installare i driver NdisWrapper? Essenzialmente in due modi: partendo dai sorgenti o dalla soluzione pacchettizzata. Nell’esempio seguente verrà illustrata l’installazione da sorgenti, che ha un innegabile vantaggio: garantisce la possibilità di utilizzare l’ultima versione stabile di NdisWrapper, mettendo l’utente nella condizione di avere il massimo supporto per le periferiche Windows installate.

Figura 3.7 Il Wiki del progetto NdisWrapper, raggiungibile all’URL http://ndiswrapper.sourceforge.net/mediawiki/index. php/Main_Page, rappresenta un’ottima fonte di informazioni per superare ogni problema.

Installazione da sorgenti Prerequisito fondamentale per l’utilizzo dei moduli NdisWrapper è l’utilizzo di un kernel recente, almeno una versione 2.6.6 o 2.4.26, e che i sorgenti siano installati nel sistema, anche semplicemente quelli forniti dalla distribuzione stessa. In secondo luogo, è necessario assicurarsi che sia presente un link dalla directory dei moduli a quella dei sorgenti del kernel. Nel caso non vi fosse, bisogna provvedere a crearlo tramite il comando: ln -s /usr/src/linux-<kernel-versione> /lib/modules/versione/ build

72


Le reti

dove versione assume il valore numerico della versione del kernel installato. È necessario, inoltre, che i file di header siano presenti, come per esempio succede dopo aver già provveduto a una precedente compilazione. A questo punto, scaricare i sorgenti di NdisWrapper dal seguente indirizzo: http://sourceforge.net/projects/ndiswrapper e decomprimerne il file di archivio. Questa operazione creerà una directory il cui nome sarà: ndiswrapper-versione

con versione che assume il valore numerico della versione di NdisWrapper scaricata. Entrare nella directory appena creata, lanciare il comando: make distclean

e quindi: make install

Al termine dell’operazione saranno installati sia i nuovi moduli del kernel sia i tool di gestione dei driver Windows.

Installazione dei driver Windows La documentazione fornita dal progetto è chiara: non vanno utilizzati i driver originali forniti con il CD-ROM accluso alla confezione della periferica wireless, ma bisogna scaricare la versione per Windows XP per il proprio adattatore fornita dalle pagine del Wiki all’URL: http://ndiswrapper.sourceforge.net/mediawiki/index.php/List Ma come fare a identificare, nella lunga lista presentata, il driver appropriato per la periferica in uso? Semplicemente esaminando l’output del comando lsusb -v e cercando nella prima riga l’ID associato all’adattatore: ID 0cde:0017

Ora, con questo ID in mano, basta eseguire una ricerca nella pagina dei driver, trovare quello che è identificato dallo stesso codice e scaricarlo. A questo punto, non rimane che accertarsi che nella directory creata dopo aver scompattato il file dei driver vi siano i file INF, SYS e BIN necessari. Sfortunatamente, l’ID della scheda ROPER non è presente nella lista dei driver compatibili forniti dal progetto. Allora, che fare? Basta contravvenire alle raccomandazioni e infilare nel lettore CD il CD-ROM dei driver fornito con la chiave. Non sempre è consigliabile farlo, è meglio utilizzare i driver compatibili che danno meno problemi, ma in caso di necessità nulla vieta di provare anche questa soluzione. 73


Capitolo 3

Figura 3.8 Il contenuto della cartella creata dopo aver scompattato il file del driver.

Aprire una console di root e, una volta montato il CD-ROM e identificata la cartella contenente i driver, entrarvi e lanciare il comando: /usr/sbin/ndiswrapper -i filename.inf

Nel caso in esempio, il comando diventa: ndiswrapper -i WlanUTG.INF Installing wlanutg

Finito. I driver sono stati correttamente installati nella directory: /etc/ndiswrapper

all’interno della quale si trova anche il file di configurazione della periferica: ls /etc/ndiswrapper/wlanutg/ 0451:60C5.0.conf 0CDE:0017.0.conf wlanutg.sys

fwusb1b.bin

wlanutg.inf

Ma i driver ora funzionano? È sufficiente utilizzare l’utility NdisWrapper per saperlo: ndiswrapper -l Installed ndis drivers: wlanutg driver present, hardware present

Bene, i driver sono presenti e l’hardware è stato riconosciuto ed è pronto a essere utilizzato (present). Ma non è finita qui. Per poter usare la periferica wireless in maniera continuativa, bisogna fare in modo che il sistema carichi 74


Le reti

i nuovi moduli a ogni avvio e per farlo basta ricorrere nuovamente all’utility NdisWrapper: ndiswrapper -m Adding “alias wlan0 ndiswrapper” to /etc/modprobe.d/ndiswrapper

Manca poco: i nuovi moduli sono stati aggiunti alla lista di quelli che verranno caricati all’avvio di Linux, ma ora bisogna aggiornare il file delle dipendenze tra i moduli che gestisce l’ordine di caricamento di ognuno di essi: depmod -a

Se non vi sono stati messaggi di errore, il più è fatto. Non rimane che effettuare una prova sul campo, caricando il modulo ndiswapper: modprobe ndiswrapper

Ha funzionato? Per saperlo basta dare un’occhiata al file /var/log/syslog: Mar 24 11:36:01 localhost kernel: [4294716.442000] ndiswrapper version 1.1 loaded (preempt=no,smp=no) Mar 24 11:36:01 localhost kernel: [4294716.495000] usbcore: registered new driver ndiswrapper Mar 24 11:38:21 localhost kernel: [4294862.477000] ndiswrapper: driver wlanutg (Roper,03/14/2005,7.2.0.40) loaded Mar 24 11:38:21 localhost kernel: [4294862.487000] ndiswrapper (NdisAllocateMemory:200): Windows driver allocating too big a block at DISPATCH_LEVEL: 781216 Mar 24 11:38:21 localhost kernel: [4294862.487000] ndiswrapper (NdisAllocateMemory:200): Windows driver allocating too big a block at DISPATCH_LEVEL: 201600 Mar 24 11:38:21 localhost kernel: [4294862.489000] ndiswrapper (NdisAllocateMemory:200): Windows driver allocating too big a block at DISPATCH_LEVEL: 593920 Mar 24 11:38:25 localhost kernel: [4294866.017000] wlan0: ndiswrapper ethernet device 00:60:b3:08:3a:6c using driver wlanutg, configuration file 0CDE:0017.0.conf

Ottimo, il modulo è stato caricato e, a parte qualche avviso, non ha dato alcun problema. Non rimane quindi che configurare la nuova interfaccia di rete utilizzando i wireless-tools, un set di utility il cui compito consiste proprio nel gestire la configurazione delle periferiche wireless.

Configurare la WLAN con i wireless-tools Per gestire le interfacce di rete wireless è sufficiente installare i wirelesstools, una serie di utility disponibile in forma pacchettizzata per qualsiasi distribuzione in circolazione. Non è necessario scaricare l’ultima versione disponibile da sorgenti: basterà utilizzare Adept o apt-get o qualsiasi altro

75


Capitolo 3

gestore di pacchetti e scaricare ciò che la propria distribuzione mette a disposizione. Il primo passo consiste nel riavviare il computer, per assicurarsi che il sistema si avvii in maniera pulita e carichi il nuovo modulo NdisWrapper. Fatto questo, aprire una console di root e digitare il comando: iwconfig

Se la procedura di installazione del modulo e delle utility a corredo è andata buon fine, si dovrà ottenere a video un risultato simile al seguente: wlan0

IEEE 802.11g ESSID:off/any Mode:Managed Frequency:2.412 GHz Access Point: 00:00:00:00:00:00 Bit Rate:54 Mb/s Tx-Power:10 dBm Sensitivity=0/3 RTS thr:4096 B Fragment thr:4096 B Encryption key:off Power Management:off Link Quality:100 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0

Tutto sembra funzionare correttamente: iwconfig vede la nuova chiave Wi-Fi come interfaccia di rete wlan0. Attenzione, però, a non confondere una scheda wireless con una Ethernet. Le interfacce Wi-Fi hanno bisogno di qualche dato di configurazione in più. Infatti, per inserire un computer in una rete wireless vi è bisogno di configurare i seguenti parametri: ● ESSID (Extended Service Set Id): consiste in una stringa che identifica univocamente la rete nella quale si intende far entrare il proprio computer. È un valore che va impostato nell’access point che funge da punto di collegamento tra i vari computer in rete e bisogna che venga configurato su ogni interfaccia di rete: ciò consente a un computer immerso in più reti wireless di distinguere quella a cui vuole connettersi; ●

76

Mode: esistono due tipi di architetture di reti wireless. L'architettura denominata ad-hoc, in cui tutti gli host possono collegarsi tra loro, è consigliabile per le piccole reti, mentre la modalità managed è ideale per WLAN di maggiori dimensioni in cui tutti i computer comunicano attraverso un apparato denominato access point; Channel: Ogni rete wireless può comunicare su più canali, ma è necessario che tutti si scambino i dati utilizzandone sempre e solo uno, che va indicato al momento di configurare l’interfaccia di rete; Rate: Semplicemente, è la velocità alla quale la scheda wireless è in grado di scambiare dati in rete; Ap: Indica il MAC dell'Access Point utilizzato per i collegamenti;


Le reti ●

Key: è la chiave di crittografia mediante la quale si può rendere più difficile l’intercettazione dei dati che viaggiano sulle frequenze radio; Keymode: indica il tipo di autenticazione utilizzata. Dato che le comunicazioni wireless viaggiano su onde radio e hanno un raggio di azione piuttosto ampio, è possibile che vengano catturate e analizzate da chiunque si trovi nei paraggi. Per rendere più difficile questa evenienza è possibile utilizzare diversi sistemi di crittografia. È vivamente sconsigliato l’utilizzo del sistema WEP, già da tempo compromesso, mentre una maggiore sicurezza è assicurata dal protocollo WPA e derivati. Per aumentare ulteriormente la sicurezza della rete, è consigliabile filtrare gli accessi in base all’indirizzo MAC di ogni scheda, evitando nel contempo il broadcast dell’ESSID di rete in modo che solo chi conosce preventivamente il nome associato alla WLAN possa utilizzarlo per configurare il proprio adattatore.

Come configurare una scheda WLAN? La risposta è semplice: allo stesso modo di una scheda di rete tradizionale. Basta aprire il file: /etc/network/interfaces

e aggiungere un blocco di configurazione simile al seguente: auto wlan0 iface wlan0 inet static wireless_essid FON wireless_mode Managed wireless_key s:mia_chiave wireless_keymode open wireless_channel 6 wireless_rate 54M address 192.168.10.30 netmask 255.255.255.0 network 192.168.10.0 broadcast 192.168.10.255 gateway 192.168.10.1

La maggior parte delle opzioni non dovrebbe costituire una novità; si sono già viste durante la configurazione di una scheda tradizionale. Quello che cattura immediatamente l’attenzione sono le righe che riportano la seguente sintassi: wireless-opzione valore

Sono queste le opzioni di configurazione specifiche per gli apparati wireless e non dovrebbero costituire un problema. Inserito il blocco di configurazione nel file /etc/network/interfaces, non rimane che riavviare il supporto di rete: /etc/init.d/networking restart

77


Capitolo 3

e controllare l’output del più tradizionale comando ifconfig: wlan0

Link encap:Ethernet HWaddr 00:60:B3:08:3A:6C inet addr:192.168.10.30 Bcast:192.168.10.255 Mask:255.255.255.0 inet6 addr: fe80::260:b3ff:fe08:3a6c/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

L’interfaccia ha acquisito l’indirizzo configurato nel file /etc/network/interfaces, ma quali proprietà wireless ha al momento? Per saperlo, basta rilanciare il comando iwconfig e leggerne l’output: wlan0

IEEE 802.11g ESSID:”FON” Nickname:”FON” Mode:Managed Frequency:2.437 GHz Access Point: 00:16: B6:01:5F:D6 Bit Rate=54 Mb/s Tx-Power:10 dBm Sensitivity=0/3 RTS thr=4096 B Fragment thr=4096 B Encryption key:6368-6961-7665-0000-0000-0000-00 Security mode:open Power Management:off Link Quality:100/100 Signal level:-50 dBm Noise level:256 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:5 Invalid misc:11 Missed beacon:0

Il computer sembra correttamente inserito nella rete e ha rilevato l’access point, del quale è in grado di mostrare l’indirizzo MAC. Da notare che l’architettura è in modalità managed, il che conferma che l’apparato è in comunicazione con l’access point. Ma se si volesse configurare al volo una scheda wireless? Per quanto riguarda indirizzi e routing si utilizza la tradizionale utility ifconfig, mentre per le proprietà wireless bisogna nuovamente affidarsi a iwconfig. Ecco un esempio di configurazione al volo: iwconfig wlan0 essid altro_essid mode Ad-Hoc

In questo caso, ci si è limitati a cambiare l’identificativo della rete e la modalità di connessione: ora tutti gli host possono collegarsi direttamente gli uni agli altri. Volendo si può fare anche di più, come per esempio modificare anche il canale di trasmissione, la chiave di crittografia e la velocità di trasmissione dei dati: iwconfig wlan0 essid ancora_essid mode Ad-Hoc rate 54M channel 3 key s:nuova_chiave

Un ultimo trucco prima di abbandonare la configurazione manuale delle interfacce wireless. Come fare a scoprire quali access point e quali host sono 78


Le reti

presenti nel raggio di azione della scheda wireless? Quali ESSID, velocità, protocolli, canali e frequenze sono utilizzati? Semplice: iwlist wlan0 scanning wlan0 Scan completed : Cell 01 - Address: 00:16:B6:01:5F:D6 ESSID:”FON” Protocol:IEEE 802.11g Mode:Managed Frequency:2.437 GHz (Channel 6) Quality:0/100 Signal level:-51 dBm level:-256 dBm Encryption key:off Bit Rate:1 Mb/s Bit Rate:2 Mb/s Bit Rate:5.5 Mb/s Bit Rate:11 Mb/s Bit Rate:6 Mb/s Bit Rate:9 Mb/s Bit Rate:12 Mb/s Bit Rate:18 Mb/s Bit Rate:24 Mb/s Bit Rate:36 Mb/s Bit Rate:48 Mb/s Bit Rate:54 Mb/s Extra:bcn_int=100 Extra:atim=0

Noise

Gestire le WLAN da KDE e Gnome Come per le schede di rete tradizionali, anche per le wireless gli ambienti grafici forniscono un supporto in grado di semplificare notevolmente le operazioni di gestione e configurazione. Le informazioni da inserire in un’interfaccia grafica sono le stesse che si possono utilizzare da riga di comando, tuttavia molti utenti troveranno più semplice aprire le Preferenze di sistema di KDE, accedere alla sezione Internet e Rete e da qui arrivare alla voce Connessioni e quindi al pannello di configurazione Rete senza fili. Da qui è possibile creare diversi profili di rete, indicare gli ESSID, le chiavi di autenticazione o anche imporre l’esecuzione di uno script all’avvio di KDE, più o meno come se si trattasse di iwconfig, solo un po’ più semplice. È possibile è richiamare un piccolo pannello di monitoraggio della scheda wireless lanciando l’applicazione KwiFIManager, raggiungibile dal menu K, nella sezione Internet, cliccando su KwiFIManager.

79


Capitolo 3

Figura 3.9 Il pannello Rete senza fili è un valido aiuto per chi non ama la linea di comando.

Per modificare le proprietà di rete non wireless bisogna invece appoggiarsi, come per le operazioni manuali, al pannello classico di gestione delle proprietà di rete, raggiungibile sempre dalla sezione Internet e Rete ma entrando nel pannello Impostazioni di Rete. Qui basterà selezionare la scheda wlan0 nella lista degli adattatori disponibili e configurarla come se fosse una qualsiasi interfaccia di rete. In Gnome è disponibile un’applicazione altrettanto semplice nell’utilizzo, WiFi Radar, che è allo stesso tempo un rilevatore di reti e un configuratore

Figura 3.10 KWiFiManager permette di temere sotto controllo i principali aspetti di una connessione wireless.

80


Le reti

di interfacce. Nella schermata principale del programma, raggiungibile dal menu Applicazioni attraverso il sottomenu Internet selezionando la voce WiFi Radar, la prima informazione che appare è un elenco delle reti wireless presenti nel raggio di azione della scheda, con la qualità del loro segnale, il tipo di architettura e il protocollo utilizzato. È sufficiente cliccare il pulsante Connect per ritrovarsi all’interno della rete selezionata. Oppure, si può creare un nuovo profilo con il pulsante New, che porta a un interessante pannello di configurazione. Da qui è possibile gestire ogni dettaglio, wireless e tradizionale di una connessione, dal mode alla chiave di crittografia, dalla configurazione statica o via DHCP degli indirizzi fino ai comandi di connessione da eseguire prima e dopo il collegamento.

Figura 3.10 WiFi Radar non solo consente di controllare lo stato della rete wireless, ma permette anche di modificare i parametri di configurazione delle interfacce.

Insomma, una volta superato lo scoglio del riconoscimento della scheda o chiave USB acquistata un po’ alla cieca in un centro commerciale, configurare una rete wireless in Linux non è più difficile che in altri sistemi operativi. Anzi, a volte è persino più semplice e quasi divertente. 81


Le reti  

Guida alla reti

Advertisement