Linux e le interfacce di rete
Transcript
Linux e le interfacce di rete
Linux e le interfacce di rete Scritto da Slack Martedì 20 Marzo 2007 18:10 - Ultimo aggiornamento Mercoledì 24 Febbraio 2010 21:09 PREMESSA Tutti i comandi che seguiranno sono stati eseguiti su Slackware 11. Poiche' fanno uso di una semplice shell dovrebbero, comunque, funzionare su tutti i sistemi Linux ove non diversamente specificato. Per avviare una shell cercate la voce Konsole o Terminale nel menu del vostro ambiente grafico (kde o gnome). Il segno $ indica il prompt di una shell utente, il comando che lo segue puo essere eseguito da qualunque utente del sistema. Il segno # indica, invece, la shell di root, il comando che segue deve essere eseguito dal superuser (root). Qualora un comando di root sia solo descrittivo (non effettui, cioe', alcuna modifica al sistema) puo' essere eseguito anche da utente normale con la semplice aggiunta del percorso completo. Per esempio i due comandi di seguito danno lo stesso risultato: # ifconfig $ /sbin/ifconfig questo perche' da utente normale la cartella /sbin non e' contenuta nella variabile PATH che elenca tutti percorsi dove trovare i comandi. Per maggiori informazioni sull'uso dei comandi consultate le pagine man $ man nome_comando I DRIVERS Il primo passo consiste nel verificare il completo riconoscimento della scheda, wired o wireless, dal sistema ed il corretto caricamento dei drivers necessari. Eseguite # ifconfig Il risultato dovrebbe essere simile a questo: eth0 Link encap:Ethernet HWaddr 00:c2:F6:e3:74:40 inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST MULTICAST MTU:1500 Metric:1 ... lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 ... eth1 Link encap:Ethernet HWaddr 00:55:31:35:a9:00 inet addr:192.168.1.5 Bcast:192.168.1.5 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 ... Il comando ha rilevato 3 interfaccie: una ethernet eth0, una loopback lo (utilizzata per i 1 / 12 Linux e le interfacce di rete Scritto da Slack Martedì 20 Marzo 2007 18:10 - Ultimo aggiornamento Mercoledì 24 Febbraio 2010 21:09 collegamenti a localhost) ed una wireless eth1 . Per conoscere quali di queste ha capacita' wireless e' necessario eseguire # iwconfig Questo comando mostrera' le eventuali estenzioni wireless per ogni interfaccia presente nel sistema: lo no wireless extensions. eth0 no wireless extensions. eth1 IEEE 802.11b/g ESSID:off/any Nickname:"slack" Mode:Managed Frequency=2.484 GHz Access Point: Invalid Bit Rate=1 Mb/s Tx-Power=19 dBm RTS thr:off Fragment thr:off Encryption key:off Link Quality=0/100 Signal level=-256 dBm Noise level=-256 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 In questo caso e' presente un'interfaccia wireless con il nome eth1 e ne vengono elencati una serie di parametri che il driver gli ha attribuito di default (le prime 5 righe), seguono delle informazioni sul segnale radio (sesta riga) e dati statistici sulla connessione (ultime 2 righe). Tutto cio' accade quando le relative schede di rete sono perfettamente riconosciute e caricate con i rispettivi driver. Qualora esse non vengano mostrate dai precedenti comandi occorre rimboccarsi le maniche e cercare di capire con che hardware abbiamo a che fare. Iniziamo con la marca ed il modello della scheda. Lo facciamo con l'aiuto del comando # lspci il suo output sara' qualcosa di simile: ... 00:09.0 Network controller: Broadcom Corp. BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller ... 00:0b.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8169 Gigabit Ethernet ... Il comando elenca tutto l'hardware presente. Qui ho riportato le righe relative ai controller di rete wireless e ethernet. Occupiamoci del primo: BCM4318 e' la sua sigla e Broadcom Corporation 2 / 12 Linux e le interfacce di rete Scritto da Slack Martedì 20 Marzo 2007 18:10 - Ultimo aggiornamento Mercoledì 24 Febbraio 2010 21:09 l'azienda che lo produce. Dobbiamo adesso scoprire se esiste un driver adatto per il nostro kernel. Tutto quello che ci serve e' una connessione internet ed un browser. Usiamo il nostro motore di ricerca preferito (google ?) per cercare parole del tipo bcm4318+driver+linux e navigare fra i risultati ottenuti. E' sufficiente il primo link per scoprire che un driver per questo controller (bcm43xx) e' stato inserito nel kernel a partire dal 2.6.17. E' necessario, quindi, fare un aggiornamento del kernel per far riconoscere la scheda al sistema. Cercando, invece, informazioni sulla scheda ethernet troviamo che il driver necessario e' r8169 ed e' normalmente presente in ogni distribuzione. Quando il driver necessario non e' presente all'interno del kernel occorre cercarlo, scaricarlo, compilarlo (normalmente assieme ad i sorgenti e' presente un file README con le istruzioni) ed installarlo. In alcuni casi puo' accadere che il driver, pur presente all'interno del vostro kernel, non venga attivato, erroneamente, perche' non ritenuto adatto alla scheda in questione. In questo caso e' possibile forzare il suo caricamento (la probabilita' che funzioni senza errori e' molto bassa, ma... tentar non nuoce). Quello che vi serve e', ancora una volta, il nome del driver (cercato attraverso internet). Solitamente i drivers sono presenti nel vostro sistema come moduli del kernel, per averne una lista completa digitate: # modprobe -l l'elenco conterra' tutti i moduli a disposizione del kernel (non solo i driver di rete), se volessimo poter scorrere avanti o indietro il risultato (quando, per esempio, abbiamo una console e non una finestra di kde) e' possibile usare: # modprobe -l | less Quando si utilizzano comandi che forniscono un lungo output e possibile utilizzare un filtro per mostrare solo le righe desiderate. Nel caso si voglia ricevere solo le righe che contengono il testo 'wireless' si puo' usare # modprobe -l | grep wireless Se il vostro driver appare nell'elenco potete provare a caricarlo cosi': # modprobe nomedriver Dove nomedriver e' fornito senza il path e senza l'estenzione (ko). Se il riconoscimento della 3 / 12 Linux e le interfacce di rete Scritto da Slack Martedì 20 Marzo 2007 18:10 - Ultimo aggiornamento Mercoledì 24 Febbraio 2010 21:09 scheda e' avvenuto correttamente il comando ifconfig o iwconfig vi fornira' le informazioni necessarie. Altre informazioni relative al caricamento dei driver si possono avere con $ dmesg $ dmesg | less $ dmesg | grep testo_da_filtrare Il kernel fornisce molti messaggi durante la sua esecuzione, Il precedente comando serve, appunto, a visualizzare questi messaggi. Se avete una periferica usb o anche una chiavetta usb provate a inserirla o a disinserirla e richiamando (popo qualche secondo) dmesg. A quanto mi risulta il supporto del kernel alle schede ethernet e' ottimo, la maggior parte di queste sono perfettamente riconosciute e funzionanti. Al contrario potremmo incontrare non pochi problemi con la nostra scheda di rete wireless. Nel caso questa non ne voglia proprio sapere di funzionare, esiste un'ultima possibilita': utilizzare ndiswrapper ed i driver rilasciati per Windows. Ndiswrapper implementa le specifiche dei driver di rete di Windows all'interno del kernel di Linux, creando, per il driver in questione (NDIS), un ambiente adatto alla sua esecuzione. Per informazioni e modalita' di utilizzo sul sito e' presente tutta la documentazione necessaria. Al momento un semplice howto in italiano lo potete trovare qui Quando l'interfaccia sara' perfettamente funzionante potremmo passare alla sua configurazione. Le interfaccie ethernet non hanno bisogno di particolari configurazioni, per esse e' sufficiente passare alla sezione degli indirizzi. RETI WIRELESS Per poter configurare al meglio una rete wireless occorre comprendere la sua geometria e le protezioni che ne fanno parte. Fisicamente si possono distinguere in due gruppi: ad-hoc ed infrastructure. Il primo caso si ha quando la connessione avviene fra due computer, situazione poco usata nonche' limitata sia in velocita' che in protezione, nel secondo, caso piu' comune, un particolare dispositivo (Access Point) funge da stazione centrale mettendo in comunicazione tutti i computer connessi fra di loro. l'Access Point puo' essere connesso ad una rete cablata (LAN) e mettere in comunicazione i computer con accesso wireless con quelli presenti nella LAN, puo' inoltre integrare un modem ADSL e, quindi, collegare entrambe le reti (wireless e fissa) ad internet. 4 / 12 Linux e le interfacce di rete Scritto da Slack Martedì 20 Marzo 2007 18:10 - Ultimo aggiornamento Mercoledì 24 Febbraio 2010 21:09 PROTEZIONI In assenza di protezioni tutti possono collegarsi all'Access Point, il traffico generato e' in chiaro, senza alcuna cifratura. Chiunque, nel raggio d'azione del segnale, puo', utilizzare la rete oppure, con semplici strumenti, catturare ed usare i dati in transito. La protezione piu' semplice che e' possibile adottare consiste nel WEP (Wired Equivalent Privacy) oggi ritenuta di facile violazione. Con WEP e' necessario specificare una chiave (password) ed uno dei due modi possibili: shared ed open. Nel primo caso la chiave e' utilizzata sia per l'autenticazione che per la cifratura del traffico, nel secondo solamente per la cifratura del traffico, in quest'ultimo caso tutti sono in grado di collegarsi all'AP ma solo chi possiede la chiave corretta e' in grado di comunicare con quest'ultimo. E' opinione comune ritenere la modalita' open leggermente piu' sicura. In entrambi i casi e' consigliabile disabilitare il broadcast dell'essid nell'Access Point (nascondere le rete) e cambiare spesso la chiave. Un sistema di protezione piu' avanzato e' offerto da WPA (Wi-Fi Protected Access). Lo standard utilizzato prevede l'uso di un server esterno per gestire l'autenticazione, ma e' prevista una modalita' leggermente meno sicura, ma piu' semplice, da usare negli ambienti domestici chiamata WPA-PSK (Pre-Shared Key). Utilizzate questo sistema, qualora sia possibile. CONFIGURAZIONE WIRELESS Nell'Access Point sono presenti molti parametri che influenzano il comportamento della rete wireless. I piu' importanti sono: PARAMETRO ESSID CHANNEL RATE SECURITY KEY DESCRIZIONE identificativo della rete canale usato dalle comunicazioni (spesso automatico) velocita' della rete (normalmente automatico) tipo di protezione chiave di accesso (relativa al tipo di protezione) Per avere informazioni dalla vostra interfaccia wireless e possibile utilizzare il comando iwlist. Comunemente e' usato per verificare il ricevimento del segnale della rete wireless: # iwlist scan lo Interface doesn't support scanning. eth0 Interface doesn't support scanning. eth1 Scan completed : 5 / 12 Linux e le interfacce di rete Scritto da Slack Martedì 20 Marzo 2007 18:10 - Ultimo aggiornamento Mercoledì 24 Febbraio 2010 21:09 Cell 01 - Address: 00:e1:C1:14:4B:33 ESSID:"miarete" Protocol:IEEE 802.11g Mode:Managed Frequency:2.437 GHz (Channel 6) Quality:91/100 Signal level:-50 dBm Noise level:-96 dBm Encryption key:on Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 6 Mb/s; 9 Mb/s 11 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s ... In questo caso si riceve un segnale di una rete il cui MAC e' 00:e1:C1:14:4B:33, questo e' l'identificativo hardware del dispositivo che trasmette il segnale, seguono altre informazioni necessarie per configurare la nostra interfaccia wireless se vogliamo allacciarci a questa rete. Ovviamente non sono mostrate (perche' sconosciute) le impostazioni di protezione Per impostare questi ed altri parametri necessari alla nostra scheda wireless si si usa il comando # iwconfig nome_interfaccia nome_parametro valore Se la nostra interfaccia wireless (vedi sezione precedente) e' eth1 e vogliamo impostare l'essid a "miarete" eseguiamo: # iwconfig eth1 essid "miarete" Per accedere ad una rete infrastructure iwconfig utilizza il modo "Managed", settato di default. Per impostare il modo "Ad-Hoc": # iwconfig eth1 mode "Ad-Hoc" Per impostare il channel a 6: # iwconfig eth1 channel 6 Ogni volta e' possibile controllare i parametri impostati fino a quel momento semplicemente eseguendo: # iwconfig A questo punto se utiliziamo una protezione WEP continuiamo cosi: Per impostare una protezione wep con chiave open 6 / 12 Linux e le interfacce di rete Scritto da Slack Martedì 20 Marzo 2007 18:10 - Ultimo aggiornamento Mercoledì 24 Febbraio 2010 21:09 # iwconfig eth1 key testo_password Per impostare una protezione wep con chiave shared # iwconfig eth1 key restricted testo_password Se invece ci vogliamo avvalere del sistema WPA dobbiamo ricorrere a wpa_supplicant . WPA_SUPPLICANT Questo strumento comprende quattro elementi: wpa_supplicant, wpa_passphrase, wpa_cli, wpa_gui. il primo e' il server che deve essere in esecuzione durante tutto il collegamento, il secondo serve a creare le chiavi da inserire nel file di configurazione, il terzo e' il client e permette di gestire la connessione, il quarto e' un client fornito di interfaccia grafica. Potete installare il pacchetto dal dvd della Slackware dalla cartella testing/packages, oppure compilare i sorgenti prelevati dal sito. Editate il file di configurazione /etc/wpa_supplicant.conf al fine di rispecchiare le impostazioni di protezione settate nell'Access Point, seguite la documentazione sul sito o tramite le pagine man: $ man wpa_supplicant.conf Per fare un esempio impostiamo questi parametri nell'Access Point ESSID="miarete" AUTENTICAZIONE=WPA-PSK CIFRATURA WPA=TKIP CHIAVE WPA="password_segreta" in /etc/wpa_supplicant.conf mettiamo: ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=wheel network={ ssid="miarete" psk=35ae89d398397cb9f749deb48a492ec8a615f84b14f5d588d87da92b19af909a proto=WPA key_mgmt=WPA-PSK pairwise=TKIP } Questa configurazione dovrebbe essere sufficiente per la maggior parte dei casi. La prima riga 7 / 12 Linux e le interfacce di rete Scritto da Slack Martedì 20 Marzo 2007 18:10 - Ultimo aggiornamento Mercoledì 24 Febbraio 2010 21:09 e' necessaria. La seconda permette agli utenti appartenenti al gruppo wheel di utilizzare wpa_cli o wpa_gui per gestire la connessione altrimenti e' necessario esse root. psk e' la chiave cifrata, cio permette di non essere rilevata a chi legge il file di configurazione. Per ottenerla eseguiamo $ wpa_passphrase miarete password_segreta Benche' sia possibile disabilitare il broadcast dell'essid, con WPA non e' di alcuna utilita'. Il sistema e' molto sicuro ed al momento inviolato, non solo, ma nascondendo la rete, con linux, si possono verificare problemi di mancata associazione. Potete quindi lasciare l'essid visibile. Poi avviate il server: # wpa_supplicant -Dnome_driver -iinterfaccia -c/etc/wpa_supplicant.conf -B cambiate nome_driver e interfaccia come necessario, seguite sempre la documentazione, nel mio caso utilizzando ndiswrapper come driver e wlan0 come interfaccia eseguo: # wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf -B wext e' il nome utilizzato per versioni di ndiswrapper superiori alla 1.12 CONFIGURAZIONE DEGLI INDIRIZZI DI RETE Conclusa la fase di configurazione possiamo attivare l'interfaccia. Se nella nostra rete e' attivo un servizio DHCP (da un router o un access point), in grado di assegnare gli indirizzi IP in modo automatico, e' sufficiente avviare il client DHCP: # dhcpcd distribuzioni diverse da Slackware potrebbero richiedere: # dhclient e sarete collegati. Se volete complicarvi la vita e procedere manualmente alla configurazione dell'indirizzo di rete procedete cosi: Dovete conoscere l'indirizzo IP del gateway sulla vostra rete (il dispositivo che vi separa dalla rete principale). Per gli access-points e router normalmente e' 192.168.1.1 (a volte anche 192.168.0.1), decidete un indirizzo da assegnare alla vostra interfaccia che appartenga alla stessa rete (primi tre numeri identici) potrebbe essere 192.168.1.5 (utilizzare un numero da 2 a 254). Attenzione, nella rete non devono esistere due indirizzi IP uguali. Procediamo: 8 / 12 Linux e le interfacce di rete Scritto da Slack Martedì 20 Marzo 2007 18:10 - Ultimo aggiornamento Mercoledì 24 Febbraio 2010 21:09 # ifconfig eth1 192.168.1.5 definiamo le strategie di routing, informando il sistema dove inviare tutto il traffico di rete: il gateway descritto in precedenza (default gw) # route add default gw 192.168.1.1 controllate di avere impostato almeno un indirizzo DNS nel file /etc/resolv.conf. Se il vostro router o access point funziona anche da relay-dns (in genere i modelli con modem adsl lo sono, consultate la documentazione) potete utilizzare il suo lindirizzo IP: # echo "nameserver 192.168.1.1" > /etc/resolv.conf et-voila', la connessione e' servita. AUTOMATIZZARE LE IMPOSTAZIONI Una volta compreso il processo di configurazione dell'interfaccia e' possibile risparmiare l'uso della tastiera e rendere tutto il processo automatico. I metodi esposti di seguito sono validi solo per Slackware o per distribuzioni da essa derivate. Se il kernel non carica i moduli necessari e' possibile forzare il loro caricamento aggiungendo al file /etc/rc.d/rc.modules una o piu' righe come la seguente /sbin/modprobe nome_modulo La gestione dei parametri di rete e' gestita in Slackware da due file di configurazione /etc/rc.d/rc.wireless.conf /etc/rc.d/rc.inet1.conf Il primo fornisce un meccanismo per caricare automaticamente i parametri specifici per ogni scheda di rete, necessari, per esempio, quando inseriamo nel sistema hardware removibile (usb o pcmcia). Noi ci serviremo del secondo file. Apritelo con un editor (servono i permessi di root). Al suo interno sono presenti quattro gruppi di parametri a cui e' possibile attribuire un valore. Ogni gruppo e' identificato da un indice (un numero compreso fra parentesi quadre) e contiente tutti i parametri che verranno caricati per ogni interfaccia di rete (wired o wireless che sia). La seguente riga assegna l'indirizzo 192.168.1.5 alla prima interfaccia di rete. 9 / 12 Linux e le interfacce di rete Scritto da Slack Martedì 20 Marzo 2007 18:10 - Ultimo aggiornamento Mercoledì 24 Febbraio 2010 21:09 IPADDR[0]="192.168.1.5" Il nome dell'interfaccia se non specificato e' eth + il numero indice del gruppo, nell'esempio precedente eth0. Si puo' comunque specificare un nome diverso, ad esempio wlan0, aggiungendo la riga: IFNAME[0]="wlan0" Se durante l'installazione avete configurato la rete, il gruppo 0 sara' gia in uso con i valori attribuiti alla scheda di rete ethernet (eth0), il gruppo 4 fornisce gia' i parametri necessari per il wireless, sono pero commentati (hanno un # ad inizio riga), e quindi ignorati dal sistema. Questa e' la lista dei parametri che potete utilizzare: PARAMETRO IFNAME IPADDR NETMASK DESCRIZIONE Nome dell'interfaccia ethx, rax, wlanx, ... dove x puo' essere 0,1,2,3,... Indirizzo IP statico Maschera di rete GATEWAY USE_DHCP DHCP_HOSTNAME DHCP_IPADDR DHCP_KEEPRESOLV DHCP_KEEPNTP DHCP_KEEPGW WLAN_ESSID WLAN_MODE WLAN_CHANNEL WLAN_RATE WLAN_KEY WLAN_IWPRIV WLAN_WPA WLAN_WPADRIVER Indirizzo IP del gateway Se impostato a yes abilita la ricerca di un server DHCP per l'assegnazione d Nome del server DHCP (non necessario) Indirizzo IP del server DHCP (non necessario) Se impostato a yes impedisce la modifica del file /etc/resolv.conf (relativo ai Se impostato a yes impedisce la modifica del file /etc/ntp.conf (relativo ai se Se impostato a yes impedisce la modifica del gateway della rete L'essid della rete wireless Tipo di rete wireless (Managed o Ah-Hoc) Canale usato per le trasmissioni (puo' essere automatico) Velocita' della rete wireless (normalmente automatica) Chiave di cifratura (se utilizzata WEP) Parametri addizionali da passare a iwpriv Server per la gestione della WPA Driver utilizzato dal gestore della WPA Adesso che conoscete il nome dei parametri da usare potete compilare il relativo gruppo con i valori necessari. La nostra interfaccia e' eth1, quindi non e' necessario specificarne il nome. Usiamo a tal fine il gruppo 1. Impostiamo l'indirizzo di rete manualmente: 10 / 12 Linux e le interfacce di rete Scritto da Slack Martedì 20 Marzo 2007 18:10 - Ultimo aggiornamento Mercoledì 24 Febbraio 2010 21:09 IPADDR[1]="192.168.1.5" NETMASK[1]="255.255.255.0" USE_DHCP[1]="no" In alternativa possiamo usare il DHCP: IPADDR[1]="" NETMASK[1]="" USE_DHCP[1]="yes" Inserite il Gateway (indirizzo del dispositivo che gestisce le connessioni con l'esterno) GATEWAY="192.168.1.1" Questa configurazione sarebbe sufficiente per una scheda ethernet. Proseguiamo inserendo i dati relativi all'Access Point WLAN_ESSID[1]="miarete" WLAN_CHANNEL[1]="6" Nella maggioranza dei casi dovrebbe essere sufficiente, se non lo fosse inserite gli altri parametri necessari. Passiamo alle protezioni. Con una WEP open utiliziamo: WLAN_KEY[1]="testo_password" Con una WEP shared utiliziamo: WLAN_KEY[1]="restricted testo_password" Se invece abbiamo una WPA utiliziamo: WLAN_WPA[1]="wpa_supplicant" WLAN_WPADRIVER[1]="wext" Cio' permette di caricare wpa_supplicant che si occupera' di gestire i processi di cifratura WPA. Salvate. 11 / 12 Linux e le interfacce di rete Scritto da Slack Martedì 20 Marzo 2007 18:10 - Ultimo aggiornamento Mercoledì 24 Febbraio 2010 21:09 Adesso potete attivare la vostra interfaccia con il comando: # /etc/rc.d/rc.inet1 nome-interfaccia_start oppure disattivarla con # /etc/rc.d/rc.inet1 nome-interfaccia_stop nel caso di eth1: # /etc/rc.d/rc.inet1 eth1_start # /etc/rc.d/rc.inet1 eth1_stop oppure gestire tutte le interfaccie contemporaneamente: # /etc/rc.d/rc.inet1 start # /etc/rc.d/rc.inet1 stop Se lo script /etc/rc.d/rc.inet1 possiede i permessi di esecuzione, normalmente presenti, tutte le interfaccie verranno attivate durante l'avvio del sistema. Per verificarlo provate: $ ls -l /etc/rc.d/rc.inet1 -rwxr-xr-x 1 root root 8325 2006-09-21 02:48 /etc/rc.d/rc.inet1 se la x e' presente nella parte relativa ai permessi lo script e' eseguibile. Se, per qualche motivo, non volete l'avvio automatico rimuovete il permesso di esecuzione: # chmod -x /etc/rc.d/rc.inet1 Adesso per avviare le interfaccie manualmente dove forzarne l'esecuzione con il comando sh: # sh /etc/rc.d/rc.inet1 start 12 / 12