Utente:Metaldaze/Draft: differenze tra le versioni

Pagina svuotata completamente
(Nuova pagina: {{Versioni compatibili|Tutte le versioni di Debian}} __TOC__ ==Gestire automaticamente configurazioni wifi multiple== Chi si sposta frequentemente con il proprio portatile ha, spesso,...)
 
(Pagina svuotata completamente)
 
Riga 1: Riga 1:
{{Versioni compatibili|Tutte le versioni di Debian}}
__TOC__
==Gestire automaticamente configurazioni wifi multiple==


Chi si sposta frequentemente con il proprio portatile ha, spesso, la necessità di collegarsi a reti wifi differenti, ma editare ogni volta il file <code>/etc/network/interfaces</code> per cambiare la configurazione dell'interfaccia wireless può risultare alquanto fastidioso. Per questo motivo alcuni si affidano a tool grafici per gestire diverse configurazioni di rete, ma questi strumenti non sono esenti da difetti e, talvolta, possono avere comportamenti imprevedibili. Un'altra valida soluzione è quella di usare [[ Switchconf ]], sicuramente più affidabile, che però richiede un intervento manuale per la scelta della configurazione adatta al luogo in cui ci si trova.<br/>
Questa guida vuole proporre una soluzione alternativa, completamente automatica, al problema della gestione delle configurazioni wifi multiple, utilizzando <code>/etc/network/interfaces</code> come unico file di configurazione e un piccolo script in perl.
==Le interfacce logiche==
Normalmente siamo abituati a vedere nel file <code>/etc/network/interfaces</code> una configurazione simile alla seguente
<pre>
iface eth0 inet static
  address 192.168.0.2
  netmask 255.255.255.0
  network 192.168.0.0
  broadcast 192.168.0.255
  gateway 192.168.0.1
</pre>
dove <code>eth0</code> è il nome dell'interfaccia fisica a cui la configurazione si riferisce.<br/>
Per abilitare una configurazione come questa basta lanciare il comando
<pre>
# ifup eth0
</pre>
Non tutti sanno, però, che è perfettamente lecito scrivere
<pre>
iface rete_casa inet static
  address 192.168.0.2
  netmask 255.255.255.0
  network 192.168.0.0
  broadcast 192.168.0.255
  gateway 192.168.0.1
</pre>
dove il nome dell'interfaccia fisica è sostituito da un nome di fantasia (rete_casa).<br/>
Per rendere operativa una configurazione del genere si userà sempre il comando <code>ifup</code> creando l'associazione tra l'interfaccia logica e una interfaccia fisica. Ad esempio con
<pre>
ifup eth0=rete_casa
</pre>
viene attivata e configurata l'interfaccia fisica eth0 come specificato per l'interfaccia logica rete_casa.
==Rendere automatica la configurazione wifi==
A questo punto è facile capire come sia possibile, utilizzando le interfacce logiche, creare in /etc/network/interfaces tutte le configurazioni wifi che ci servono. Vediamo come, però, possiamo automatizzare la scelta della configurazione corretta in base al luogo in cui ci troviamo.<br/>
Ipotizziamo di voler configurare il nostro portatile in modo che si connetta automaticamente a due reti: wifi_casa e wifi_lavoro.
In /etc/network/interfaces scriveremo qualcosa di simile a
<pre>
iface wifi_casa inet dhcp
        wpa-driver wext
        wpa-ssid "wifi_casa"
        wpa-psk "ddff442dg4"
iface wifi_lavoro inet dhcp
        wireless-essid wifi_lavoro
        wireless-channel 1
        wireless-key "6303727062"
</pre>
facendo attenzione che il nome dell'interfaccia logica corrisponda allo [http://it.wikipedia.org/wiki/SSID SSID] della rete a cui la configurazione si riferisce. Creiamo, poi, in <code>/root/wifiup.pl</code> (o in un altro percorso a piacere) lo script in perl che, in base al risultato della scansione delle reti disponibili, attiverà la giusta configurazione.<br/>
Il contenuto dello script è il seguente:
<pre>
#!/usr/bin/perl -w
####################################################################################
#                                                                                  #
#          wifiup.pl  2009  Scritto da Metaldaze (Cristiano Inturri)              #
#                                                                                  #
####################################################################################
# ultima modifica: 19/02/2010
use strict;
my $interface = shift or die "Specificare il nome dell\'interfaccia wifi\n";
my @knownNetwork = "";
my $foundNetwork = "";
my $knownNetwork;
my @iwlist = "";
if ($interface eq "-h" or $interface eq "--help") {
print "USO: wifiup.pl interfaccia\nOPZIONI:\n\t--h --help\tVisualizza questo messaggio\n";
exit 0;
}
die "ERRORE: L\'interfaccia $interface non fa riferimento ad un dispositivo wifi\n" if ( `iwconfig $interface 2>&1` !~ /ESSID/ );
foreach (`grep iface /etc/network/interfaces`) {
push(@knownNetwork,$1) if /iface\s+(.*)\s+inet/;
}
system("ifconfig $interface up");
push(@iwlist,$_) foreach (`iwlist $interface scan | grep ESSID`);
foreach $knownNetwork (@knownNetwork) {
foreach (@iwlist) {
$foundNetwork = $knownNetwork  if /$knownNetwork/;
}
}
if ($foundNetwork eq "") {
print "wifiup.pl: Nessuna rete wifi conosciuta.\n";
} else {
print "wifiup.pl: Configuro $interface per la rete  $foundNetwork.\n";
system("ifup $interface=$foundNetwork");
}
</pre>
Rendiamo <code>wifiup.pl</code> eseguibile con
<pre>
# chmod +x wifiup.pl
</pre>
A questo punto possiamo testarne il funzionamento tenendo presente che lo script richiede come argomento il nome dell'interfaccia wifi. Ad esempio
<pre>
# /root/wifiup.pl wlan0
</pre>
Ora dobbiamo fare in modo che il nostro script venga eseguito ad ogni avvio di Debian. Per fare questo basta inserire il comando in <code>/etc/rc.local</code>.
{{ warningbox|Lo script funziona solo nel caso in cui l'access point non nasconda lo SSID della rete wifi. }}
----
Autore: [[Utente:Metaldaze|Metaldaze]]
[[Categoria:Wireless]]
[[Categoria:Networking]]
24

contributi