Non ho nulla contro NM, anzi secondo me è un progetto veramente valido sotto molti punti di vista: nel 90% dei casi riesce a far funzionare al primo colpo la rete, sia essa wired o wireless, e senza nessuno sbattimento. Però…
Molti di voi si sono imbattuti nei problemi che affligono NM: non gestisce gli ip statici (aspetto più evidente), non utilizza lo standard /etc/network/interfaces e quindi non funzionano gli script standard di debian ifup/ifdown e tutti i tool che ne fanno uso… ecc.. ma, la cosa più importante a mio avviso, è che quando non va non si sa dove mettere le mani. (mi ricorda un altro s.o…
Quando poi devo fare dei test sulla rete voglio avere le mani libere, poter settare a mano i parametri e usare i tool di gestione classici della rete senza nessuno che mi riconfiguri il tutto sotto il naso.
Dopo un po’ di ricerche per trovare delle alternative che facessero al caso mio, avevo deciso di provare due soluzioni: guessnet e whereami. Mi intrigava più la prima, perchè si integra completamente all’interno del classico file interfaces e non necessita di ulteriori file di configurazione, ma con edgy andava in segfault e non sono proprio riuscito a venirne a capo (su feisty adesso non dà errori, ma non ho avuto il tempo di testare..)
Ho provato quindi whereami, che uso tuttora con risultati soddisfacenti.
Qui di seguito provo a illustrare un esempio di configurazione (la mia è davvero incasinata)
Scenario:
Con il mio notebook ho la necessità di connettermi a diverse reti, alcune wireless, altre wired, con e senza dhcp.
- Casa: wireless, dhcp – wired, statico
- Ufficio1: wired, dhcp
- Ufficio2: wired, statico
La nostra soluzione dovrà permetterci di avere la rete perfettamente operativa appena “attaccato il cavo di rete”, riconoscendo in automatico la rete alla quale ci siamo collegati, configurando i relativi parametri ed eventualmente stoppare/avviare dei servizi specifici, montare delle unità di rete, ecc…
Prerequisiti:
Prima ho parlato di “attaccare il cavo di rete”: ovviamente nel caso di connessione wireless non sarà fatto realmente, però lo strato fisico deve essere già configurato e funzionante. in pratica l’output di ifconfig deve visualizzare la vostra scheda di rete (eth1, wlan0, o altro secondo il vostro hardware) e iwconfig vi deve confermare che siete correttamente associati all’access point, con o senza cifratura (io preferirei con, poi fate vobis)
Se non avete ancora configurato il wireless (sempre riferito allo strato fisico), potete riferirvi alla guida sul wiki:
http://wiki.ubuntu-it.org/Hardware/Wireless/WpaSupplicant
L’unica variazione che posso suggerire è di utilizzare il comando wpa_passphrase per la generazione del file /etc/wpa_supplicant.conf
sudo wpa_passphrase VostroSSID VostraPassphrase > /etc/wpa_supplicant.conf
Successivamente dobbiamo tirar via tutti i “maghetti” che autoconfigurano le nostre schede: oltre a NetworkManager io ho disinstallato anche avahi, di cui al momento non sento la necessità e del quale ho il dubbio che sia stato il colpevole di alcuni insuccessi iniziali.
sudo apt-get remove avahi-daemon avahi-autoipd network-manager
Insieme a questi pacchetti, apt vi dirà che deve disinstallarne altri, tra i quali ubuntu-desktop; tranquilli, non vi ritroverete senza il vostro desktop preferito, questo è solo un “metapacchetto” che consente di installare tutti quanti i pacchetti standard in un colpo solo, contiene solo delle dipendenze e null’altro.
Fatto ciò il nostro sistema è pronto per whereami e ifplugd
Configurazione iniziale:
Tiriamo giù intanto le interfacce di rete
sudo ifdown eth0 sudo ifdown eth1
Poi modifichiamo il nostro /etc/network/interfaces (non prima di averne fatta una copia)…
sudo cp /etc/network/interfaces /etc/network/interfaces.funzionante
… in modo che risulti più o meno così (ovviamente sostituite i parametri di rete con i vostri)
sudo gedit /etc/network/interfaces
################################################
#/etc/network/interfaces
#
# Interfaccia di loopback
auto lo
iface lo inet loopback
noauto eth0 eth1
################################################
#Mappatura profili interfaccia wireless - eth1
################################################
mapping eth1
map whome
### PROFILO whome - wifi ###
iface whome inet dhcp
wpa_driver wext
wpa-conf /etc/wpa_supplicant.conf
################################################
#Mappatura profili interfaccia wired - eth0
################################################
mapping eth0
map home
map work1
map work2
### PROFILO home - wired ###
iface home inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
broadcast 192.168.1.255
dns-nameservers 192.168.1.1
### PROFILO work1 - wired ###
iface work1 inet dhcp
up hostname PC239
### PROFILO work2 - wired ###
iface work2 inet static
address 10.0.10.100
netmask 255.255.255.0
gateway 10.0.10.1
broadcast 10.0.10.255
dns-nameservers 10.0.10.200
Notiamo che adesso le interfacce fisiche sono state “mappate” con dei nomi logici (whome, home, work1, work2): se a siamo a casa, e vogliamo connetterci attraverso il cavo di rete, adesso dobbiamo tirar su l’interfaccia eth0 così:
sudo ifup eth0=home
…e controlliamo che sia tutto ok con ifconfig, cioè che siano stati assegnati correttamente gli ip indicati nel file interfaces.
Adesso ci stacchiamo dalla rete (anche fisicamente) e ci colleghiamo tramite il wireless
sudo ifdown eth0 sudo ifup eth1=whome
Vediamo che per ifdown basta indicare il nome dell’interfaccia fisica, al contrario di ifup, al quale dobbiamo passare anche la configurazione da attivare (dopo l’=)
Installazione di whereami
Installiamo adesso whereami, ovviamente con:
sudo apt-get install whereami
mettiamo da parte i file di configurazione originali (che sono comunque fonte di ottimi spunti)
sudo mv /etc/whereami/detect.conf /etc/whereami/detect.conf.originale sudo mv /etc/whereami/whereami.conf /etc/whereami/whereami.conf.originale
Partiamo con la configurazione del detect.conf. All’interno di questo file vanno definiti i test da effettuare per stabilire a quale rete siamo connessi e settare il corrispondente “stato”
sudo gedit /etc/whereami/detect.conf
##############################
### /etc/whereami/detect.conf
##############################
#set DEBUGWHEREAMI 1
default conn-none
### Controlliamo se il cavo di rete è collegato
testmii eth0 conn-wired
### Se è stato passato il parametro stop, settiamo gli stati corrispondenti
if stop
always at conn-norete
always notat conn-wired,conn-wireless
fi
### se siamo collegati con il cavo, verifichiamo a quale rete, attraverso il MAC address
if conn-wired
set INTERFACE eth0
testarp 00:11:22:33:44:55,192.168.1.1 s-home
testarp AA:BB:CC:DD:EE:FF,192.168.168.1 s-work1
testping 10.0.10.100,10.0.10.1 s-work2
testdhcp '*.*.*.*' s-wfree
notat conn-wired
### altrimenti, tiriamo su l'interfaccia wireless e vediamo se ci sono ap in in giro
else
set INTERFACE eth1
always modprobe ipw3945 conn-wireless
always testap scan conn-wireless
fi
### se stiamo sul wireless controlliamo se riusciamo a contattare il nostro AP
### ....se no... ci accontentiamo di quello che c'è...
if conn-wireless
set INTERFACE eth1
testappassive VostroSSID s-home-w
testappassive .+ s-other-w
notat conn-wireless
fi
### ..basta che ci dia un indirizzo ip....
if s-other-w
testdhcp '*.*.*.*' s-wfree
notat s-other-w
fi
Ho cercato di commentare il file di configurazione per renderlo il più possibile autoesplicativo.
Possiamo subito notare che tutto si appoggia a dei test (testmii, testarp, testping) che non sono altro che degli script perl presenti nella cartella /usr/share/whereami/tests (una descrizione dettagliata degli script disponibili e dei relativi parametri la si può trovare in /usr/share/doc/whereami/html/detection.html); nulla vieta, avendone la possibilità, di scriversene dei propri (basta che lo script, anche bash, ritorni 0 o 1 al termine dell’esecuzione per indicare l’esito positivo o negativo del test)
I MAC address da passare come parametro a testarp possono essere ricavati con il comando
arping -I <interfaccia> <ip_da_controllare>
utilizzando preferibilmente degli host sicuramente presenti sulla rete, ad esempio un router o un server…ovviamente, con la rete funzionante; in alternativa si può utilizzare testping.
Se un test ha esito positivo, allora whereami imposta la variabile che noi indichiamo subito dopo. Sulle variabili che così impostate, possiamo effettuare ulteriori controlli.
Da notare che se un test all’interno di un “if…fi” risulta vero, vengono saltati tutti i controlli successivi.
Una volta eseguiti i test, e quindi aver determinato che tipo di connessione abbiamo attivato e a quale rete siamo collegati, impostiamo le relative azioni da intraprendere nel file /etc/whereami/whereami.conf
sudo gedit /etc/whereami/whereami.conf
############################## ### /etc/whereami/whereami.conf ############################## !conn-wired ifdown eth0 !conn-wired ifconfig eth0 down !conn-wireless ifdown eth1 !conn-wireless modprobe -r ipw3945 =s-home-w ifup eth1=s-home-w =s-home ifup eth0=s-home =s-work1 ifup eth0=s-work1 +s-work1 smbmount //serverwin/dati /mnt/serverwin/ -s-work1 umount /mnt/pcwin/ =s-work2 ifup eth0=s-work2 +s-work2 /etc/init.d/apache start -s-work2 /etc/init.d/apache stop
Le righe che iniziano con ! indicano le azioni da intraprendere quando NON siamo in quello stato (ad esempio, se non siamo connessi via wireless, viene rimosso il modulo della scheda in modo da “spegnerla”); quelle con + quando si entra, quelle con – quando si esce.
Prima di provare il tutto, dobbiamo eliminare il file
sudo rm /etc/interfaces/pre-up.d/whereami
che ad ogni ifup/ifdown rilancerebbe whereami, e finalmente eseguire
sudo whereami --debug
Il parametro –debug ci permette di controllare le operazioni svolte da whereami e verificare eventuali errori degli script.
Proviamo a rilanciare whereami dopo avere staccato/riattaccato il cavo di rete e controllato se è tutto ok con i soliti comandi ifconfig, iwconfig
Installazione ifplugd
A questo punto, la chicca finale: installiamo ifplugd, che è un demone che si “accorge” se è stato inserito o disinserito il plug della scheda ethernet ed esegue gli script che si trovano in /etc/ifplugd/action.d. Dovremo sistemare tutto quanto in modo che venga ogni volta chiamato in causa whereami anzichè lo script standard:
sudo apt-get ifplugd sudo rm /etc/ifplugd/action.d/ifupdown sudo gedit /etc/ifplugd/action.d/whereami
Incolliamo le righe che seguono:
#!/bin/sh
# Quit if we're called for the loopback
[ "$1" = lo ] && exit 0
# Just exit if whereami is no longer installed
test ! -e /usr/sbin/whereami && exit 1
# Can't use --syslog because syslog starts after the network
/usr/sbin/whereami --syslog --run_from ifplugd --hint "${1}-${2}"
exit 0
e rendiamolo eseguibile:
sudo chmod +x /etc/ifplugd/action.d/whereami
A questo punto, ogni volta che accendiamo il pc, o colleghiamo-scolleghiamo il cavo di rete, avremo tutto “automagicamente” configurato secondo le nostre direttive.
Se vogliamo anche sentire il “beep” generato da ifplugd, carichiamo il modulo pcspkr
sudo modprobe pcspkr
Come tornare indietro (!!!)
Se voleste a questo punto, per qualche oscuro motivo,tornare alla configurazione precedente, ripristinate il file /etc/network/interfaces originale, disinstallate ifplugd e whereami, e infine reinstallate networkmanager e avahi…
