Una delle ragioni per cui Linux viene maggiormente apprezzato è sicuramente l'efficienza nel gestire le reti. Questo è anche il motivo per cui ormai qualunque distribuzione - anche in versione live - offre all'utente gli strumenti più idonei e user-friendly per connettersi ad Internet.
Ma come fare se, ad esempio durante la fase di installazione, si dispone solo di una connessione 3G? O se, riscontrando problemi alla scheda grafica, si renda necessario connettersi in emergenza alla rete dalla shell dei comandi? O se, utilizzando distribuzioni minimaliste e/o un po' datate, non si disponga del caro vecchio Network Manager?
In questo articolo viene, appunto, spiegato come connettersi ad Internet da linea di comando in Linux, e quindi cavarsela in tutte quelle situazioni nelle quali non sia disponibile una delle usuali interfacce grafiche.
I metodi qui descritti sono stati verificati in ambiente Arch Linux. Le singole istruzioni, in particolare, potrebbero eccezionalmente richiedere minimi adattamenti se utilizzate in altre distribuzioni. Ciò nondimeno, la trattazione ha carattere del tutto generale.
Nel seguito dell'articolo si adotterà la convenzione classica di far precedere i singoli comandi dai simboli # o $ per indicare, rispettivamente, che l'istruzione dovrà essere eseguita con i diritti di amministratore o come semplice user.
1. Verificare la connessione
In ambiente Linux, per verificare la presenza di connessione la soluzione più semplice è offerta dall'istruzione
$ ping -c <n> <ip-address>
Il comando ping viene, difatti, impiegato per verificare la connettività tra due host su una rete. In particolare, il parametro n (= 1, 2, 3, ...) indica il numero di pacchetti (o Internet Control Message Protocol echo request packets) da inviare dal primo al secondo host, di indirizzo ip_address, per verificarne la raggiungibilità.
Eseguendo, ad esempio, dalla propria macchina,
$ ping -c 3 www.google.com
si potrebbero ottenere messaggi del tipo:
64 bytes from mil01s17-in-f17.1e100.net (173.194.35.49): icmp_seq=1 ttl=55 time=20.3 ms
ad indicare che è possibile raggiungere il sito Google via Internet, o, viceversa, un messaggio del tipo:
ping: unknown host www.google.com
che ne indica la indisponibilità (ovviamente, in quest'ultimo caso, le cause della non raggiungibilità dell'host remoto potrebbero essere anche diverse dall'assenza di connessione alla rete).
Di seguito, si supporrà, ovviamente, l'assenza di connessione alla rete. Volendo simulare sulla propria macchina questa condizione per sperimentare direttamente quanto di seguito descritto , si consiglia di arrestare tutti i servizi di rete:
# systemctl stop NetworkManager.service
# systemctl stop dhcpcd.service
# systemctl stop wpa_supplicant.service
# systemctl stop wpa_supplicant.service
2. Identificare le interfacce di rete
La prima cosa da fare è identificare le interfacce di rete sul proprio computer, ovvero sapere come Linux referenzia i dispositivi di connessione a disposizione.
L'istruzione che elenca le interfacce di rete disponibili è:
$ ifconfig -a
Ifconfig (o interface configurator), appartenente al pacchetto net-tools, è difatti il principale comando dei sistemi Unix-like per configurare e controllare un'interfaccia di rete TCP/IP. Se invocato senza argomenti, ifconfig mostra i dettagli delle interfacce di rete attive; se utilizzato col parametro a (sta per all) mostra i dettagli di tutte le interfacce di rete, attive e non, come risulta anche dall'esempio seguente:
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether c8:0a:a9:3f:0d:fc txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 266 bytes 20148 (19.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 266 bytes 20148 (19.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.2 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::f27b:cbff:fe35:3977 prefixlen 64 scopeid 0x20<link>
ether f0:7b:cb:35:39:77 txqueuelen 1000 (Ethernet)
RX packets 4136 bytes 1095874 (1.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5200 bytes 2945003 (2.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
É qui abbastanza intuitivo riconoscere in eth0 un'interfaccia di rete ethernet e in wlan0 un'interfaccia wireless. Con lo viene, invece, usualmente indicata l'interfaccia di loopback utilizzata nelle reti TCP/IP per identificare la macchina locale.
Altri usi di ifconfig verranno illustrati più avanti nel documento.
3. Connettersi ad Internet dalla shell dei comandi
Connettersi ad internet da riga di comando è abbastanza agevole in Linux e, come detto, può costituire "la soluzione" in tutte quelle situazioni nelle quali non risulti disponibile un'interfaccia grafica.
Di seguito vengono esaminate le tre situazioni più comuni:
3.1 Connessione ad una rete via cavo
Dovendosi connettere ad una rete via cavo, una volta identificata l'interfaccia di rete wired (es. wlan0), stabilire una connessione è immediato:
Di seguito vengono esaminate le tre situazioni più comuni:
3.1 Connessione ad una rete via cavo
Dovendosi connettere ad una rete via cavo, una volta identificata l'interfaccia di rete wired (es. wlan0), stabilire una connessione è immediato:
# ifconfig <nome_interfaccia> up
# dhcpcd <nome_interfaccia>
In dettaglio,
- ifconfig <nome_interfaccia> up: abilita l'interfaccia di rete specificata
- dhcpcd <nome_interfaccia> (DHCP = Dynamic Host Configuration Protocol) configura l'interfaccia e le assegna un indirizzo IP dinamico.
Se, inoltre, si intende configurare manualmente l'interfaccia in esame, il comando
# ifconfig [<nome-interfaccia> <ip-address>] [netmask <ip-address>] [broadcast <ip-address>]
è in grado di impostare un indirizzo IP statico e/o netmask e/o broadcast.
3.2 Connessione ad una rete wireless
Nel caso di rete wireless, per identificare l'interfaccia di rete, oltre ad ifconfig, è possibile utilizzare il comando:
$ iwconfig
Iwconfig (o wireless interface configurator) appartiene difatti al pacchetto wireless_tools ed è preposto alla gestione delle interfacce di rete wireless.
Per attivare l'interfaccia di rete wireless di interesse, anche in questo caso, è possibile usare il comando
# ifconfig <nome-interfaccia> up
Infine, il comando
$ iwlist <nome-interfaccia> scann
(iwlist è anch'esso contenuto nel pacchetto wireless_tools) è in grado di eseguire lo scanning delle rete wireless circostanti e di fornire in particolare informazioni su:
- ESSID (o Extended Service Set Identification) ovvero il nome della rete wireless, e
- Encryption Key il cui valore pari ad on indica la presenza di linee protette con cifratura WEP o WPA
É ora necessario distinguere fra:
3.2.1 Connessione ad una rete aperta
Per connettersi ad una rete wireless non protetta, è sufficiente eseguire:
# iwconfig <nome-interfaccia> essid '<nome-rete>' key open
# dhcpcd <nome-interfaccia>
3.2.2 Connessione ad una rete protetta con chiave a cifratura WEP
Nel caso in cui la rete risulti protetta da chiave WEP, 64 o 128 bit, sarà necessario eseguire:
# iwconfig <nome-interfaccia> essid '<nome-rete>' key '<chiave>'
# dhcpcd <nome-interfaccia>
3.2.3 Connessione ad una rete protetta con chiave a cifratura WPA/WPA2
La situazione è leggermente più complessa nel caso in cui ci si trovi in presenza di rete wireless protetta con chiave a cifratura WPA/WPA2. In questo caso è, difatti, necessario generare preventivamente un file di configurazione a partire dalla password di rete come mostrato di seguito:
La situazione è leggermente più complessa nel caso in cui ci si trovi in presenza di rete wireless protetta con chiave a cifratura WPA/WPA2. In questo caso è, difatti, necessario generare preventivamente un file di configurazione a partire dalla password di rete come mostrato di seguito:
# wpa_passphrase '<nome-rete>' '<password>' > <path-file-di-configurazione>
É quindi possibile stabilire la connessione alla rete mediante:
# wpa_supplicant -D nl80211 -i <nome-interfaccia> -c <path-file-di-configurazione>
# dhcpcd <nome-interfaccia>
É in ogni caso necessaria la presenza del pacchetto wpa_supplicant che contiene gli applicativi wpa_supplicant e wpa_passphrase.
3.3 Connettersi ad una rete mobile
Qualora, infine, ci si trovi nella necessità di connettersi ad Internet tramite operatore mobile (utilizzando ad esempio una chiavetta o un cellulare come modem remoto), questa la procedura da seguire:
A. Inserire la SIM all'interno di un qualunque dispositivo mobile e disabilitare la richiesta del PIN;
B. Verificare che sul computer risulti attivo il modulo kernel usbserial. A tal fine eseguire
$ lsmod
per visualizzare la lista di moduli del kernel caricati e verificare la presenza del modulo usbserial, o usbcore (che include usbserial). Qualora il modulo usbserial non dovesse risultare attivo, è possibile caricarlo manualmente tramite il comando
# modprobe usbserial
C. Per identificare ora il dispositivo di connessione, collegarlo via USB al computer e, dopo qualche secondo, eseguire
$ lsusb
L'istruzione mostra difatti l'elenco dei device connessi alla macchina via USB; si prenda, in particolare, nota della stringa relativa al proprio modem, che sarà del tipo
Bus <numero-bus> Device <numero-device>: ID <id-produttore>:<id-prodotto> <descrizione-dispositivo>
Si presti particolare attenzione al fatto che alcuni dispositivi sono progettati per funzionare sia come modem, sia come memory card: alle due funzioni corrispondono codici differenti.
D. Utilizzando infine il pacchetto wvdial, eseguire il comando:
# wvdialconf
il cui effetto è quello di generare automaticamente un file di configurazione /etc/wvdial.conf del tipo:
[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = Analog Modem
ISDN = 0
Modem = /dev/ttyUSB2
Baud = 9600
[Dialer thenet]
Phone = <numero-connessione>
Username = <utente-connessione>
Password = <password-connessione>
Stupid Mode = 1
Baud = 460800
Init3 = AT+CGDCONT=1,"IP","<apn>"
Per quanto completo, il file di configurazione così generato potrebbe necessitare di qualche ulteriore configurazione manuale. In ogni caso sarà necessario impostare manualmente i parametri:
<numero-connessione> (normalmente *99#)
<utente_connessione> (tipicamente non necessario)
<utente_connessione> (tipicamente non necessario)
<apn> (a seconda dell'operatore telefonico: ibox.tim.it, web.omnitel.it, internet.wind, tre.it)
E. Per connettersi ad Internet è ora sufficiente eseguire
# wvdial
Per terminare la connessione, utilizzare la combinazione di tasti CTRL+C
F. In caso di mancata connessione è comunque possibile:
- modificare opportunamente il file di configurazione /etc/wvdial.conf
- installare l'utility usb_modeswitch per il riconoscimento dei dispositivi non supportati direttamente dal kernel (modulo usbserial). In particolare, usb_modeswitch gestisce l'insieme di regole in /lib/udev/rules.d/40-usb_modeswitch.rules: se necessario, dopo aver identificato il proprio dispositivo (vd, p.to 3), aggiungere manualmente una nuova regola.
- in alternativa, sempre dopo aver identificato il proprio USB Modem, è possibile forzarne il riconoscimento eseguendo:
modprobe usbserial vendor=0x<id-produttore> product=0x<id-prodotto>
- eventualmente eseguire uno script del tipo
usb_modeswitch
sleep 2
modprobe usbserial vendor=0xVVVV product=0xMMMM maxSize=4096
sleep 2
wvdial thenet
Commenti
Posta un commento