Difference between revisions of "WPA supplicant (Italiano)"

From ArchWiki
Jump to: navigation, search
m (Connessione)
(Installazione)
(26 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
[[Category:Wireless Networking (Italiano)]]
 +
[[es:WPA supplicant]]
 
[[en:WPA supplicant]]
 
[[en:WPA supplicant]]
[[es:WPA Supplicant]]
 
 
[[ru:WPA Supplicant]]
 
[[ru:WPA Supplicant]]
 
[[zh-CN:WPA Supplicant]]
 
[[zh-CN:WPA Supplicant]]
[[Category:Wireless Networking (Italiano)]]
 
  
Una rete protetta da una chiave WEP (sia statica che dinamica), può essere facilmente compromessa da un utente malevolo. WPA risolve il problema della chiave statica, cambiandola dopo un certo numero di pacchetti trasmessi/ricevuti, oppure dopo un certo lasso di tempo: questa operazione è svolta da un demone che è strettamente legato all'hardware wireless di cui si dispone.
+
{{Article summary start}}
 +
{{Article summary text|Installazione ed utilizzo di wpa_supplicant}}
 +
{{Article summary heading|Argomenti correlati}}
 +
{{Article summary wiki|Configuring Network (Italiano)|Configurazione della rete}}
 +
{{Article summary wiki|Wireless Setup (Italiano)|Installazione dispositivi wireless}}
 +
{{Article summary end}}
  
Drivers di scarsa qualità (ad esempio quelli usati attraverso ndiswrapper), possono dar luogo a fastidiosi problemi, se usati assieme a [http://hostap.epitest.fi/wpa_supplicant/ wpa_supplicant]. E' quindi consigliabile, se possibile, usare hardware con un supporto adeguato e munito di driver di qualità.
 
  
==Considerazioni==
+
[http://hostap.epitest.fi/wpa_supplicant/ wpa_supplicant] è un [[Wikipedia:Supplicant_(computer) | Supplicant WPA]] con supporto a WPA e WPA2 ([[Wikipedia:IEEE_802.11i|IEEE 802.11i]] / RSN (Robust Secure Network)) adatto all'uso con PC desktop e portatili e in sistemi embedded. {{ic|wpa_supplicant}} è il componente IEEE 802.1X/WPA utilizzato dai client, implementa la negoziazione della chiave con un WPA Authenticator, controlla il roaming e l'associazione / autenticazione del driver wlan.
 
+
Questo articolo assume che si abbia familiarità con il proprio hardware, e si sia in grado di districarsi tra i files di configurazione, oltre a saper configurare il proprio sistema. E' di fondamentale importanza aver '''letto e capito''' l'articolo [[Wireless Setup (Italiano)|Wireless Setup]], poichè fungerà da base per tutto ciò che verrà spiegato qui.
+
 
+
Questo documento non costituisce un prerequisito se il proprio hardware funziona out-of-the-box e viene gestito attraverso un demone come [[NetworkManager (Italiano)|NetworkManager]] o similari. Se si preferisce connettersi alla rete usando un tool grafico, questo articolo non fa per voi.
+
  
 
==Installazione==
 
==Installazione==
  
Si installi il demone:
+
Si installi {{Pkg|wpa_supplicant}} dai [[Official Repositories (Italiano)|repository ufficiali]].
  
# pacman -S wpa_supplicant
+
È inoltre possibile installare {{Pkg|wpa_supplicant_gui}}; un frontend grafico per {{ic|wpa_supplicant}} che utilizza il toolkit {{Pkg|qt4}}.
  
Il pacchetto è stato compilato con il supporto ad una larga gamma di hardware wireless. A titolo informativo, questa è la lista completa, ottenibile eseguendo {{ic|wpa_supplicant}}:
+
==Connessione tramite wpa_cli==
  
{{hc|
+
Per associarsi ad un Access Point wireless utilizzando {{ic|wpa_supplicant}}, utilizzare il tool a riga di comando {{ic|wpa_cli}}, incluso nel pacchetto. Per utilizzare {{ic|wpa_cli}} è necessario specificare una interfaccia di controllo nel file di configurazione, aggiungendo una linea simile a {{ic|1=ctrl_interface=/var/run/wpa_supplicant}}.
wpa_supplicant|
+
<nowiki>
+
Driver list:
+
  
*HostAP
+
{{Suggerimento|Si faccia riferimento al file {{ic|/etc/wpa_supplicant/wpa_supplicant.conf}} per ulteriori informazioni.}}
*Prism54
+
*NDISWrapper
+
*AMTEL
+
*IPW (both 2100 and 2200 drivers)
+
*WEXT (Generic Linux wireless extensions)
+
*Wired ethernet
+
</nowiki>
+
}}
+
  
La maggior parte dell'hardware wireless è già supportato da wpa_supplicant. Anche se il produttore del vostro Chipset non è nell'elenco (il che, a dire il vero, è molto probabile), è possibile utilizzare la Generic Wireless Extension (WEXT) per connettersi a reti utilizzanti il sistema di cifratura WPA. Circa il 75% dell'hardware è supportato da WEXT; un 20% può funzionare ricompilando wpa_supplicant e/o drivers, mentre  il restante 5% è definitivamente incompatibile. Il PKGBUILD per wpa_supplicant è disponibile in {{ic|/var/abs/core/support/wpa_supplicant}}, se il tree di [[Arch Build System (Italiano)|ABS]] è installato.
+
Per abilitare il salvataggio delle modifiche effettuate tramite {{ic|wpa_cli}}, si aggiunga {{ic|1=update_config=1}} al file di configurazione, quindi si avvii {{ic|wpa_supplicant}} come segue:
  
===Opzionale: Installare l'interfaccia grafica===
+
# wpa_supplicant -B -i ''interface'' -c ''/percorso/al/file/di/configurazione''
  
Per chi preferisce disporre di un'interfaccia grafica, è possibile utilizzare una GUI creata dagli stessi sviluppatori di wpa_supplicant, e disponibile nel repository {{ic|[extra]}}:
+
Si invochi {{ic|wpa_cli}} senza argomenti per ottenere un prompt interattivo ({{ic|>}}). Il prompt supporta la tab completion e contiene le descrizioni dei comandi autocompletati. Ad esempio, il comando {{ic|scan}} avvia una scansione delle reti wireless vicine ed invia una notifica una volta che l'operazione è stata completata.
  
# pacman -S wpa_supplicant_gui
+
Si esegua quindi:
 +
{{bc|<nowiki>
 +
> scan_results
 +
bssid / frequency / signal level / flags / ssid
 +
00:00:00:00:00:00 2462 -49 [WPA2-PSK-CCMP][ESS] MYSSID
 +
11:11:11:11:11:11 2437 -64 [WPA2-PSK-CCMP][ESS] ANOTHERSSID
 +
</nowiki>}}
  
==Configurazione e connessione==
+
Per associarsi con ''MYSSID'' sarà necessario informare {{ic|wpa_supplicant}}. Ogni rete è numerata a partire da zero ed è possibile inserire la [http://en.wikipedia.org/wiki/Pre-shared_key PSK] senza apici, alternativamente all'inserimento della passphrase proposto nell'esempio sotto:
  
WPA Supplicant è pacchettizzato con un file di configurazione d'esempio: {{ic|/etc/wpa_supplicant/wpa_supplicant.conf}}, il quale è ben commentato e fornisce numerose informazioni sulle meccaniche di rete. Tutte le variabili usate in questo articolo sono descritte in questo file, che contiene inoltre molte configurazioni d'esempio già preimpostate, pertanto ne è fortemente consigliata la lettura, assieme alle pagine di manuale {{ic|man wpa_supplicant}} e {{ic|man wpa_supplicant.conf}}.
+
{{bc|<nowiki>
 +
> add_network
 +
0
 +
> set_network 0 ssid "MYSSID"
 +
> set_network 0 psk "passphrase"
 +
> enable_network 0
 +
<2>CTRL-EVENT-CONNECTED - Connection to 00:00:00:00:00:00 completed (reauth) [id=0 id_str=]
 +
</nowiki>}}
  
Il file di configurazione di WPA Supplicant contiene tutte le impostazioni relative a {{ic|wpa_supplicant}}. È possibile crearne quanti se ne vuole e posizionarli dove più vi aggrada, dal momento che è necessario specificare il file di configurazione da utilizzare ad ogni invocazione di {{ic|wpa_supplicant}}.
+
Per salvare le informazioni di rete nel file di configurazione si esegua:
  
Il contenuto del file è molto semplice:
+
> save_config
 +
OK
  
* La prima parte riguarda la configurazione generale. È una serie di linee contenenti coppie ''chiave-valore''.
+
Sarà ora possibile ottenere un indirizzo IP tramite {{Pkg|dhcpcd}} o {{Pkg|iproute2}}.
* La seconda parte è composta dai ''network blocks'', uno per ogni profilo che si desidera impostare.
+
  
Per semplificare, si lascerà invariato il file di configurazione d'esempio e si partirà da zero creando il file {{ic|/etc/wpa_supplicant.conf}}.
+
==Configurazione==
  
Ci sono molti modi per configurare {{ic|wpa_supplicant}}, ed è possibile scegliere tra quelli sotto elencati.
+
{{Pkg|wpa_supplicant}} fornisce un file di configurazione d'esempio situato in {{ic|/etc/wpa_supplicant/wpa_supplicant.conf}} che documenta in modo dettagliato tutte le opzioni disponibili e relative configurazioni.
  
===Metodo manuale===
+
Il contenuto minimo richiesto dal file di configurazione è un network block; ad esempio:
  
====File di configurazione====
+
{{hc|/etc/wpa_supplicant/foobar.conf|<nowiki>
 
+
Innanzitutto è necessario essere in possesso di tutti i parametri relativi alla connessione al proprio Access Point, gran parte dei quali ottenibili con il tool {{ic|iwlist}}:
+
 
+
# iwlist wlan0 scan
+
 
+
Ulteriori dettagli sono disponibili [https://wiki.archlinux.org/index.php/Wireless_Setup_%28Italiano%29#Ricerca_degli_Access_Points qui].
+
 
+
Ora dovreste conoscere i seguenti parametri necessari a {{ic|wpa_supplicant}} per funzionare:
+
 
+
* SSID
+
* proto (opzionale su reti non protette)
+
* key_mgmt
+
* pairwise
+
* group
+
 
+
Inoltre, si potrebbe aver bisogno dei parametri di autenticazione (EAP, PEAP, ecc.) se si è su reti particolari, come quelle universitarie, ad esempio.
+
 
+
'''Primi ritocchi'''
+
 
+
È ora possibile procedere con la creazione di un network block nel file di configurazione:
+
 
+
{{hc|wpa_supplicant.conf|
+
<nowiki>
+
 
network={
 
network={
        ssid="mywireless_ssid"
+
    ssid="..."
        psk="secretpassphrase"
+
  }
        # parametri aggiuntivi (proto, key_mgmt, etc.)
+
}
+
 
</nowiki>}}
 
</nowiki>}}
  
Questo è il file di configurazione di base necessario affinchè l'autenticazione WPA funzioni. La prima riga è la dichiarazione d'apertura del network block, la seconda contiene l'SSID dell'Access Point al quale si vuole connetterti, mentre la terza è la passphrase.
+
Quanto sopra può essere facilmente generato utilizzando il tool {{ic|wpa_passphrase}}:
  
{{Attenzione|Ci si ricordi di usare i doppi apici alle voci ssid e psk!}}
+
{{hc|$ wpa_passphrase ''essid'' ''passphrase''|2=
 
+
network={
'''Passphrase e PSK'''
+
  ssid=''essid''
 
+
  #psk=''passphrase''
Il lettore attento avrà notato che la PSK dovrebbe essere una stringa esadecimale. Infatti, la passphrase e la PSK non sono esattamente la stessa cosa: la passphrase è una chiave leggibile dall'utente che viene usata in combinazione con il SSID per generare la chiave di rete "machine friendly" conosciuta come "PSK". A livello di rete, la passphrase non viene mai usata, e rappresenta solamente un modo comodo per gestire la chiave da parte degli utenti.
+
   psk=f5d1c49e15e679bebe385c37648d4141bc5c9297796a8a185d7bc5ac62f954e3
 
+
Se si vuole risparmiare tempo, è possibile fornire direttamente la versione esadecimale della passphrase, usando l'utility {{ic|wpa_passphrase}}, che è fornita dal pacchetto {{Pkg|wpa_supplicant}} stesso. Si utilizzi la sintassi {{ic|wpa_passphrase [ssid] [passphrase]}}.
+
 
+
* Un esempio:
+
 
+
# wpa_passphrase mywireless_ssid "secretpassphrase"
+
 
+
Il comando dovrebbe generare il seguente network block:
+
 
+
network={
+
        ssid="mywireless_ssid"
+
        #psk="secretpassphrase"
+
        psk=7b271c9a7c8a6ac07d12403a1f0792d7d92b5957ff8dfd56481ced43ec6a6515
+
}
+
 
+
La terza linea è la passphrase (la chiave leggibile dall'utente) e la quarta la PSK (la chiave esadecimale), che è richiesta per la connessione. Il {{ic|#}} commenta la linea relativa alla passphrase, dal momento che utilizzeremo la PSK per la connessione.
+
 
+
{{Nota|La PSK esadecimale non deve essere inclusa tra doppi apici.}}
+
 
+
* Utilizzando {{ic|wpa_passphrase}} si specifichi il proprio SSID reale e la propria passphrase, e si rediriga l'output su {{ic|/etc/wpa_supplicant.conf}}:
+
 
+
# wpa_passphrase mywireless_ssid "secretpassphrase" >> /etc/wpa_supplicant.conf
+
 
+
Il {{ic|>>}} redirigerà l'output su {{ic|/etc/wpa_supplicant.conf}}, aggiungendolo ad eventuali righe preesistenti. È possibile aggiungere un numero illimitato di network blocks, e wpa_supplicant saprà quale utilizzare in base agli SSID trovati nell'area.
+
 
+
'''Opzioni del network block'''
+
 
+
Tutti i parametri di sicurezza devono essere specificati qui. Si noti che se si è insicuri sui valori richiesti dal proprio Access Point, è possibile utilizzarne diversi contemporaneamente, e {{ic|wpa_supplicant}} sceglierà automaticamente quello funzionante.
+
 
+
Ad esempio, è possibile aggiungere:
+
 
+
proto=WEP WPA
+
 
+
in modo che il se prorpio Access Point utilizza WEP o WPA, il tutto funzionerà in entrambi i casi. Se però lo stesso utilizza RSN (ovvero WPA2), sarà necessario aggiungerlo agli altri valori.
+
 
+
Se il SSID è nascosto, si aggiunga la seguente opzione al network block:
+
 
+
scan_ssid=1
+
 
+
Se è necessario connettersi a più reti, si definisca un altro network block nello stesso file. È possibile specificare la priorità per ognuno di essi:
+
 
+
priority=17
+
 
+
Si cambi la priorità a piacere, ricordandosi che i numeri più grandi avranno la precedenza.
+
 
+
Ci sono inoltre numerose altre opzioni di configurazioni impostabili nel network block che è possibile trovare nel file di configurazione originale.
+
Nella maggior parte dei casi non si avrà bisogno di specificare nulla oltre ai paremetri di default.
+
 
+
'''Opzioni globali'''
+
Sarà infine necessario specificare le opzioni globali. Aggiungerle in testa al proprio {{ic|/etc/wpa_supplicant.conf}} con il proprio editor preferito. La seguente linea è obbligatoria:
+
 
+
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
+
 
+
{{Nota|Per l'uso con netcfg-2.6.1-1 in {{ic|[testing]}} (dal 25-06-2011), ctrl_interface dovrebbe avere valore {{ic|/run/wpa_supplicant}} (si noti l'assenza di {{ic|/var/...}}). Tuttavia, questo causerà il mancato funzionamento di {{ic|wpa_cli}} (si utilizzi l'opzione {{ic|-p}} per forzare il valore di default). Se l'impostazione non viene cambiata, si riscontreranno errori simili a: "Failed to connect to wpa_supplicant - wpa_ctrl_open: no such file or directory".}}
+
 
+
Sono disponibili molti parametri opzionali (si legga {{ic|/etc/wpa_supplicant/wpa_supplicant.conf}}
+
 
+
ap_scan=0
+
fast_reauth=1
+
 
+
{{Nota|Le proprie informazioni di rete sarano immagazzinate in plain text, ed è pertanto consigliabile cambiare i permessi del file {{ic|/etc/wpa_supplicant.conf}} appena creato (es: {{ic|chmod 600 /etc/wpa_supplicant.conf}} per renderlo leggibile solamente a root), a seconda di quanto si è attenti alla propria sicurezza.}}
+
 
+
'''Esempio completo'''
+
 
+
{{hc|
+
wpa_supplicant.conf|
+
<nowiki>
+
ctrl_interface = DIR=/var/run/wpa_supplicant GROUP=wheel
+
fast_reauth = 1
+
ap_scan = 1
+
 
+
network ={
+
    ssid    = "mySSID"
+
    proto   = RSN
+
    key_mgmt = WPA-EAP
+
    pairwise = TKIP CCMP
+
    auth_alg = OPEN
+
    group    = TKIP
+
    eap      = PEAP
+
    identity = "myUsername"
+
    password = "********"
+
 
}
 
}
</nowiki>
 
 
}}
 
}}
 +
È ora possibile combinare l'utilizzo di {{ic|wpa_supplicant}} e {{ic|wpa_passphrase}} per collegarsi a praticamente tutte le reti WPA2 personali:
  
Configurazioni più sofisticate, come l'autenticazione tramite server RADIUS o EAPOL sono descritte in dettaglio nella pagina di manuale {{ic|wpa_supplicant.conf}} ({{ic|man wpa_supplicant.conf}}). Ci si ricordi di leggere anche {{ic|/etc/wpa_supplicant/wpa_supplicant.conf}}, poichè tali configurazioni esulano dallo scopo di questo documento.
+
# wpa_supplicant -B -i ''interfaccia'' -c <(wpa_passphrase ''essid'' ''passphrase'')
 +
# dhcpcd -A ''interfaccia''
  
====Connessione====
+
===Gestire una configurazione personalizzata===
  
È ora possibile provare a connettersi manualmente.
+
{{Nota|Per identificare il nome dell'interfaccia di rete in uso, utilizzare il comando {{ic|ip link}}.}}
  
Innanzitutto, si attivi la propria interfaccia Wi-Fi. In questo esempio, si utilizzerà l'interfaccia ''wlan0''.
+
Come si è visto sopra, è possibile utilizzare {{ic|wpa_passphrase}} per generare una configurazione di base a cui aggiungere poi reti aggiuntive ed opzioni di propria scelta, che potrebbero essere necessarie in caso di configurazioni di rete avanzate che utilizzano [[Wikipedia:Extensible_Authentication_Protocol|EAP]] in modo estensivo.
  
# ip link set wlan0 up
+
Innanzitutto, si generi un file di configurazione minimale con {{ic|wpa_passphrase}}:
  
Tipicamente, si dovrebbe essere in grado di utilizzare il driver '''W'''ireless '''EXT'''ensions per {{ic|wpa_supplicant}}. Se ciò non dovesse funzionare, potrebbe essere necessario cercare informazioni su come connettersi con il proprio adattatore wireless.
+
# wpa_passphrase ''essid'' ''passphrase'' > /etc/wpa_supplicant/foobar.conf
  
Si esegua il seguente comando come root:
+
{{Suggerimento|Alcune passphrase particolarmente complesse potrebbero dover essere immesse in un file prima dell'utilizzo: {{ic|# wpa_passphrase foobarssid < passphrase.txt > /etc/wpa_supplicant/foobar.conf}}. }}
  
# wpa_supplicant -B -Dwext -i wlan0 -c /etc/wpa_supplicant.conf
+
Si aggiunga quindi l'opzione {{ic|ctrl_interface}}, in modo da poter controllare il demone {{ic|wpa_supplicant}}. È possibile autorizzare {{ic|wpa_cli}} ad effettuare modifiche al file con l'opzione {{ic|1=update_config=1}}.  
  
Il comando di cui sopra indica a {{ic|wpa_supplicant}} di utilizzare la propria configurazione hardware di default (WEXT - Linux '''W'''ireless '''EXT'''ensions) ed i associarsi con il SSID specificato nel file {{ic|/etc/wpa_supplicant.conf}} utilizzando il dispositivo ''wlan0'' e spostando il processo in background ({{ic|-B}}). Per un output più prolisso, si aggiungano i parametri {{ic|-d}} o {{ic|-dd}} (debug). È possibile trovare ulteriori esempi a [http://www.examplenow.com/wpa_supplicant/ questo] indirizzo.
+
{{hc|/etc/wpa_supplicant/foobar.conf|<nowiki>
 +
ctrl_interface=DIR=/run/wpa_supplicant GROUP=wheel # consente ai membri del gruppo 'wheel' di controllare il demone
 +
  update_config=1
 +
  ap_scan=1
  
Nell'output a console, dovrebbe apparire una linea contenente '''Associated:''', seguita da un indirizzo MAC. Ora si avrà bisogno di un indirizzo IP.
+
  network={
 +
    ssid="foobarssid"
 +
    psk=f5d1c49e15e679bebe385c37648d4141bc5c9297796a8a185d7bc5ac62f954e3
 +
  }
 +
</nowiki>}}
  
{{Nota|Se non si desidera modificare il file {{ic|/etc/wpa_supplicant.conf}} (ad esempio se si sta installando Arch), è possibile passare l'output di {{ic|wpa_passphrase}} direttamente a {{ic|wpa_supplicant}}:
+
È possibile aggiungere network blocks multipli al file di configurazione di cui sopra.
{{bc|wpa_passphrase essid pass <nowiki>|</nowiki> wpa_supplicant -B -i wlan0 -c /dev/stdin}} }}
+
  
Come root, si esegua:
+
Per connettersi alla rete prescelta si eseguano i seguenti comandi:
  
  # dhcpcd wlan0
+
# ip link set ''interfaccia'' up
 +
# wpa_supplicant -B -D nl80211 -i ''interfaccia'' -c /etc/wpa_supplicant/foobar.conf
 +
  # dhcpcd -A ''interfaccia''
  
{{ic|Non si richieda immediatamente un indirizzo IP! È necessario aspettare per assicurarsi che l'associazione con l'Access Point sia avvenuta con successo. Se si sta scrivendo uno script, si utilizzi {{ic|sleep 10s}} per attendere 10 secondi.}}
+
{{Notapreferibile utilizzare {{ic|nl80211}} rispetto al driver {{ic|wext}}, da considerarsi deprecato. Per ottenere un elenco dei driver supportati, si esegua {{ic|wpa_supplicant -h}}.}}
  
Si verifichi quindi che l'interfaccia abbia ricevuto un indirizzo IP usando il pacchetto {{Pkg|iproute}}:
+
Per reti di complessità crescente si studino gli esempi forniti nel file di configurazione di default sito in {{ic|/etc/wpa_supplicant/wpa_supplicant.conf}}.
  
{{bc|
+
===Avvio tramite systemd===
<nowiki>
+
# ip addr show wlan0
+
  
  wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
+
Per avviare la connessione wireless automaticamente al boot, si abiliti il servizio {{ic|wpa_supplicant}} sull'interfaccia interessata. Se la propria connessione ottiene gli indirizzi tramite DHCP, abilitare anche {{ic|dhcpcd.service}}. Per gestire eventuali connessioni ethernet si installi {{Pkg|ifplugd}} e si abiliti il relativo servizio sull'interfaccia interessata.
  link/ether 00:1C:BF:66:4E:E0 brd ff:ff:ff:ff:ff:ff
+
  inet 192.168.0.62/24 brd 192.168.0.255 scope global eth0
+
  inet6 fe80::224:2bff:fed3:759e/64 scope link
+
      valid_lft forever preferred_lft forever
+
</nowiki>
+
}}
+
  
Se l'output è simile a quello sopra, ci si è connessi alla rete.
+
I comandi da eseguire potrebbero essere simili ai seguenti:
  
Si noti che l'intero procedimento ''non'' è permanente, il che significa che al prossimo riavvio sarà necessario ripetere nuovamente i comandi.
+
# systemctl enable wpa_supplicant@wlp3s1
 +
# systemctl enable dhcpcd
 +
# systemctl enable ifplugd@enp5s2
  
Ci sono varie altrnative per ottenere un setup autometico della propria rete:
+
{{ic|wpa_supplicant}} gestirà il roaming per tutti i SSID contenuti nel suo file di configurazione e {{ic|ifplugd}} configurerà automaticamente l'interfaccia ethernet spegnendo quella wireless all'inserimento di un cavo ethernet nella macchina, mentre {{ic|dhcpcd}} si occuperà dell'asegnazione degli indirizzi IP alle varie interfacce.
  
* Scrivere tutti i comandi necessari in uno script, ed eseguirlo automaticamente al boot inserendolo in {{ic|/etc/rc.local}}.
+
È necessario modificare il servizio {{ic|wpa_supplicant@.service}} per farlo puntare al file di configurazione corretto.
* Usare tool di terze parti per la gestione della rete. È possibile utilizzare gli script forniti dal pacchetto {{Pkg|netcfg2}} per ottenere una configurazione permanente ed accedere alla rete all'avvio della macchina.
+
Per ridefinire il valore della riga {{ic|1=ExecStart=}} si crei il seguente file:
Si può inoltre utilizzare un'interfaccia grafica non in vasiva come [[Wicd (Italiano)|Wicd]] o i profili di rete forniti da [[Netcfg (Italiano)|Netcfg]].
+
  
===wpa_gui e wpa_cli===
+
{{hc|/etc/systemd/system/wpa_supplicant@.service.d/foo.conf|<nowiki>
 
+
  [Service]
Esistono due frontends a wpa_supplicant scritti dagli sviluppatori dello stesso: {{ic|wpa_cli}} e {{ic|wpa_gui}}. wpa_cli è, come ci si aspetterebbe, un frontend a linea di comando, mentre "wpa_gui" è un'interfaccia a wpa_supplicant che utilizza le librerie Qt. wpa_cli è inclusa nel pacchetto wpa_supplicant, mentre {{Pkg|wpa_supplicant_gui}} è fornito separatamente.
+
  ExecStart=
I dettagli relativi all'impostazione di wpa_supplicant per funzionare con l'uno o l'altro frontend sono riportati in [[#Metodo dinamico: 'wpa_gui', 'wpa_cli']]
+
  ExecStart=/usr/bin/wpa_supplicant -c/etc/wpa_supplicant/bar.conf -i%i
 
+
</nowiki>}}
Quando si invoca {{ic|wpa_cli}} senza argomenti, verrà avviato un prompt specifico. Si scriva {{ic|help}} per ricevere aiuto.
+
 
+
L'interfaccia wpa_gui è abbastanza intuitiva. Se si preme il bottone "Scan", verrà visualizzata una lista degli SSID rilevati. Se si effettua un doppio click su uno di questi, comparirà una finestra di dialogo che consentirà di inserire le informazioni richieste per l'associazione alla rete. Nella maggior parte dei casi, si dovrà inserire la pre-shared key (PSK) se si sta utilizzando WPA/WPA2, o la propria {{ic|key0}} se si utilizza WEP. Il protocollo utilizzato dalla rete dovrebbe essere rilevato automaticamente. Altre cose, come l'autenticazione 802.1X richiederanno configurazioni aggiuntive.
+
 
+
{{Attenzione|Il protocollo WEP è compromesso e non dovrebbe venir utilizzato al di fuori di ambienti di laboratorio o di test. Si utilizzi ''almeno'' WPA (WPA2 è raccomandato) per una rete più sicura.}}
+
 
+
Dopo aver aggiunto una rete, è possibile modificarla se ad esempio si è  cambiata la PSK (Pre-shared Key). Si clicchi sul tab "Manage Networks" e si selezioni la rete da modificare/rimuovere. È inoltre possibile aggiungere una rete anche senza effettuare la scansione; operazione obbligatoria se il proprio access point non effettua il broadcast del SSID.
+
 
+
{{Nota|Impostare il proprio access point per non effettuare il broadcast del SSID '''non''' aumenterà la sicurezza della propria rete wireless. È infatti molto semplice identificare SSID nascosti.}}
+
 
+
{{Nota|wpa_cli e wpa_gui non richiedono un indirizzo IP, né creano una tabella di routing: servono infatti solo per l'associazione all'access point. È possibile utilizzare lo script {{AUR|wpa_auto}}, disponibile su [[AUR (Italiano)|AUR]], per avviare  {{ic|wpa_supplicant}} al boot ed avviare automaticamente un client DHCP per configurare la propria connessione una volta che ci si è associati alla rete wireless, oppure è possibile scrivere uno script di proprio pugno. Utility per la gestione della rete di più alto livello sono in grado di gestire sia reti cablate che wireless.}}
+
 
+
====Action script====
+
 
+
Si scriva uno script simile al seguente:
+
 
+
{{hc|
+
~/libexec/wpa_cli-action.sh|
+
<nowiki>
+
case $2 in
+
CONNECTED)
+
dhcpcd -x $1 >/dev/null
+
dhcpcd $1 >/dev/null
+
;;
+
esac
+
</nowiki>
+
}}
+
 
+
Lo si renda eseguibile e si lanci {{ic|wpa_supplicant}} con il file di configurazione predefinito:
+
 
+
# wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlan0
+
 
+
{{Nota|È necessario che il file di configurazione abbia l'impostazione {{ic|ctrl_interface}} affinchè {{ic|wpa_cli}} funzioni.}}
+
 
+
Si lanci ora {{ic|wpa_cli}} in modalità demone, indicandogli lo script appena scritto:
+
 
+
# wpa_cli -B -a ~/libexec/wpa_cli-action.sh
+
 
+
Per avviare automatcamente {{ic|wpa_supplicant}} e {{ic|wpa_cli}} al boot, si aggiungano le seguenti linee al file {{ic|/etc/rc.local}}:
+
 
+
wpa_supplicant -B -D wext -i wlan0 -c /etc/wpa_supplicant.conf
+
wpa_cli -B -a  /path/al/proprio/wpa_cli-action.sh
+
 
+
===netcfg===
+
 
+
Si installi netcfg:
+
 
+
# pacman -S netcfg
+
 
+
Si crei un profilo di rete copiando il file di esempio:
+
 
+
# cp /etc/network.d/examples/wireless-wpa-config /etc/network.d/wpa_suppl
+
 
+
Si modifichi il file appena creato, assicurandosi che usi l'interfaccia corretta:
+
 
+
INTERFACE="wlan0"
+
 
+
Il resto del file dovrebbe rimanere inalterato.
+
 
+
Si modifichi ora {{ic|/etc/rc.conf}}, e si aggiunga il profilo di rete all'array NETWORKS:
+
 
+
NETWORKS=(wpa_suppl)
+
 
+
Infine, si aggiunga il demone net-profiles  all'array DAEMONS, per falo partire al boot:
+
 
+
DAEMONS=(... @net-profiles)
+
 
+
Al prossimo riavvio, l'interfaccia wireless verrà attivata e wpa_supplicant sarà avviato e se una rete conosciuta è disponibile, verrà stabilita una connessione.
+
 
+
Per ulteriori informazioni si veda la pagina del wiki relativa a [[Netcfg (Italiano)|netcfg]].
+
 
+
===Wicd===
+
 
+
Si installi Wicd:
+
 
+
# pacman -S wicd
+
 
+
L'utilizzo di Wicd è molto semplice; si effettui la scansione delle reti, si inseriscano i dati necessari e si effettui la connessione. Potrebbe essere necessario aggiungere {{ic|/usr/lib/wicd/autoconnect.py}} agli script di init e power management per riconnettersi alle proprie reti, se si è impostata la connessione automatica alle stesse.
+
 
+
==Risoluzione dei problemi==
+
 
+
La maggior parte dei problemi è riscontrabile nel processo di associazione, perciò si dovrebbe controlalre attentamente l'output di wpa_supplicant se si sospetta che non stia funzionando a dovere. Si aggiunga {{ic|-d}} (per il debug) per aumentare la verbosità. Solitamente {{ic|-dd}} è abbastanza, mentre {{ic|-dddd}} potrebbe essere eccessivo.
+
 
+
Mentre si controlla il log, si cerchino voci simili a questa:
+
 
+
ioctl[QUALCOSA]: Operation not supported
+
 
+
Se è apparso un messaggio del genere, significa che ci sono problemi con i driver: si provi ad aggiornarli, oppure a cambire il parametro {{ic|-D}} di wpa_supplicant.
+
 
+
Un altro problema comune sono i messaggi: {{ic|No suitable AP found}}. In questo caso, wpa_supplicant potrebbe avere problemi a trovare reti con SSID nascosto. Solitamente aggiungere {{ic|1=scan_ssid=1}} al proprio blocco {{ic|network}} risolverà il problema.
+
 
+
===Fallback: ricompilazione di wpa_supplicant===
+
 
+
Ci si procuri una copia del sorgente di {{ic|wpa_supplicant}} dalla relativahomepage o usando [[ABS (Italiano)|ABS]]. Una volta scaricato ed estratto il tarball, si controlli il contenuto del file {{ic|.config}} (sì, è nascosto!). La sintassi è simile a quella di un file di configurazione del kernel; solo più in piccolo.
+
 
+
Si cerchino le sezioni chiamate {{ic|CONFIG_DRIVER_''NOMEDRIVER''}} e si scelga se abilitarle o meno, a seconda del driver che si intende utilizzare. Si faccia attenzione durante la scelta delle opzioni, poichè sarà necessario speficiare il percorso al sorgende dei propri driver wireless per compilare correttamente i componenti di associazione di basso livello.
+
 
+
Alcuni adattatori basati su chipset Atheros, potrebbero richiedere la compilazione di {{ic|wpa_supplicant}} utilizzando l'ultima release dei driver  {{ic|madwifi-svn}}. Se questo è il vostro caso, ecco un esempio per aiutarvi durante il processo di compilazione:
+
 
+
'''esempio con driver madwifi''': Si modifichino le seguenti linee nel file di configurazione, assumendo che si sia compilato madwifi tramite ABS e che il codice sorgente della build risieda in {{ic|/var/abs/local/madwifi/src/}}:
+
 
+
#Driver interface for madwifi driver
+
CONFIG_DRIVER_MADWIFI=y
+
#Change include directories to match with the local settings
+
CFLAGS += -I/var/abs/local/madwifi/src/madwifi
+
 
+
Una volta terminata la configurazione, si proceda con {{ic|makepkg}} come al solito.
+
 
+
===Non è possibile usare wpa_gui per configurare nuove reti===
+
 
+
Di default, la variabile {{ic|ap_scan}} ha valore {{ic|0}}, il che significa che wpa_supplicant delega al driver LAN il compito di effettuare la scansione degli access points. Se il proprio driver non supporta questa operazione, wpa_supplicant terminerà quando gli verrà richiesta la scansione. Si aggiunga quindi:
+
 
+
ap_scan=1
+
 
+
al proprio {{ic|/etc/wpa_supplicant.conf}}
+
 
+
===Impossibile ottenere un indirizzo IP dal server DHCP===
+
 
+
Quanto segue è frutto di un'esperienza personale. Non so perchè il tutto funziona in questo modo, ma forse altri utenti hanno lo stesso problema. Dopo i seguenti comandi, non mi viene assegnato un IP dal server DHCP:
+
 
+
ifconfig wlan0
+
iwconfig wlan0 essid "myEssid"
+
wpa_supplicant -B -D wext  -i wlan0 -c /etc/wpa_supplicant.conf
+
sleep 15; dhcpcd wlan0 #oppure dhclient wlan0
+
 
+
Per aggirare il problema, uso questo workaround:
+
 
+
killall wpa_supplicant -SIGHUP
+
iwconfig wlan0 essid "myEssid" key on #forse "key on" è opzionale
+
sleep 15; dhcpcd wlan0
+
 
+
Quando scrivo:
+
 
+
ps aux | grep wpa
+
 
+
Noto un processo di {{ic|wpa_supplicant}} attivo benchè l'abbia appena ucciso. Sembrerebbe che {{ic|iwconfig}} avvii il servizio per me.
+
 
+
La mia scheda wireless è:
+
 
+
Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection (rev 02)
+
 
+
===Errore di associazione al boot con netcfg===
+
 
+
Quanto segue è un'esperienza personale. La mia scheda di rete Broadcom BCM4322 è abbastanza lenta nella fase di associazione durante l'avvio del sistema. Si provi quindi ad aggiungere la seguente lina in {{ic|/etc/network.d/<vosto profilo>}}:
+
 
+
TIMEOUT=30
+
 
+
Si riavvii per applicare i cambiamenti.
+
  
{{Nota|{{ic|1=TIMEOUT=30}} potrebbe essere un valore troppo alto, ma è possibile cambiarlo con uno più consono alla propria configurazione.}}
+
La direttva {{ic|WantedBy}} del .service correntemente fornito non è corretta. Se la riga nel servizio {{ic|wpa_supplicant@.service}} non corrisponde al nome della propria interfaccia di rete (wlan0), sarà necessario copiare il servizio in {{ic|/etc/systemd/system}} ed apportare le dovute modifiche.
  
===La connessione wireless cade spesso===
+
[Install]
 +
WantedBy=multi-user.target
  
Se la propria connessione cade spesso e dmesg mostra questo messaggio:
+
Il problema è stato risolto in [http://hostap.epitest.fi/gitweb/gitweb.cgi?p=hostap.git;a=commitdiff;h=893a0a558cd8fd9a7dc5827f379e0f8a273a4fe5 questo] commit.
  
wlan0: deauthenticating from XX:XX:XX:XX:XX:XX by local choice (reason=3)
+
==Link correlati==
  
una soluzione potrebbe essere quella di disabilitare l'opzione "group key update interval" nel pannello di configurazione del proprio router.
+
* [http://wireless.kernel.org/en/users/Documentation/wpa_supplicant documentazione di wpa_supplicant su kernel.org]

Revision as of 16:43, 12 September 2013

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary end


wpa_supplicant è un Supplicant WPA con supporto a WPA e WPA2 (IEEE 802.11i / RSN (Robust Secure Network)) adatto all'uso con PC desktop e portatili e in sistemi embedded. wpa_supplicant è il componente IEEE 802.1X/WPA utilizzato dai client, implementa la negoziazione della chiave con un WPA Authenticator, controlla il roaming e l'associazione / autenticazione del driver wlan.

Installazione

Si installi wpa_supplicant dai repository ufficiali.

È inoltre possibile installare wpa_supplicant_gui; un frontend grafico per wpa_supplicant che utilizza il toolkit qt4.

Connessione tramite wpa_cli

Per associarsi ad un Access Point wireless utilizzando wpa_supplicant, utilizzare il tool a riga di comando wpa_cli, incluso nel pacchetto. Per utilizzare wpa_cli è necessario specificare una interfaccia di controllo nel file di configurazione, aggiungendo una linea simile a ctrl_interface=/var/run/wpa_supplicant.

Suggerimento: Si faccia riferimento al file /etc/wpa_supplicant/wpa_supplicant.conf per ulteriori informazioni.

Per abilitare il salvataggio delle modifiche effettuate tramite wpa_cli, si aggiunga update_config=1 al file di configurazione, quindi si avvii wpa_supplicant come segue:

# wpa_supplicant -B -i interface -c /percorso/al/file/di/configurazione

Si invochi wpa_cli senza argomenti per ottenere un prompt interattivo (>). Il prompt supporta la tab completion e contiene le descrizioni dei comandi autocompletati. Ad esempio, il comando scan avvia una scansione delle reti wireless vicine ed invia una notifica una volta che l'operazione è stata completata.

Si esegua quindi:

> scan_results
bssid / frequency / signal level / flags / ssid
00:00:00:00:00:00 2462 -49 [WPA2-PSK-CCMP][ESS] MYSSID
11:11:11:11:11:11 2437 -64 [WPA2-PSK-CCMP][ESS] ANOTHERSSID

Per associarsi con MYSSID sarà necessario informare wpa_supplicant. Ogni rete è numerata a partire da zero ed è possibile inserire la PSK senza apici, alternativamente all'inserimento della passphrase proposto nell'esempio sotto:

> add_network
0
> set_network 0 ssid "MYSSID"
> set_network 0 psk "passphrase"
> enable_network 0
<2>CTRL-EVENT-CONNECTED - Connection to 00:00:00:00:00:00 completed (reauth) [id=0 id_str=]

Per salvare le informazioni di rete nel file di configurazione si esegua:

> save_config
OK

Sarà ora possibile ottenere un indirizzo IP tramite dhcpcd o iproute2.

Configurazione

wpa_supplicant fornisce un file di configurazione d'esempio situato in /etc/wpa_supplicant/wpa_supplicant.conf che documenta in modo dettagliato tutte le opzioni disponibili e relative configurazioni.

Il contenuto minimo richiesto dal file di configurazione è un network block; ad esempio:

/etc/wpa_supplicant/foobar.conf
network={
    ssid="..."
  }

Quanto sopra può essere facilmente generato utilizzando il tool wpa_passphrase:

$ wpa_passphrase essid passphrase
network={
   ssid=essid
   #psk=passphrase
   psk=f5d1c49e15e679bebe385c37648d4141bc5c9297796a8a185d7bc5ac62f954e3
}

È ora possibile combinare l'utilizzo di wpa_supplicant e wpa_passphrase per collegarsi a praticamente tutte le reti WPA2 personali:

# wpa_supplicant -B -i interfaccia -c <(wpa_passphrase essid passphrase)
# dhcpcd -A interfaccia

Gestire una configurazione personalizzata

Nota: Per identificare il nome dell'interfaccia di rete in uso, utilizzare il comando ip link.

Come si è visto sopra, è possibile utilizzare wpa_passphrase per generare una configurazione di base a cui aggiungere poi reti aggiuntive ed opzioni di propria scelta, che potrebbero essere necessarie in caso di configurazioni di rete avanzate che utilizzano EAP in modo estensivo.

Innanzitutto, si generi un file di configurazione minimale con wpa_passphrase:

# wpa_passphrase essid passphrase > /etc/wpa_supplicant/foobar.conf
Suggerimento: Alcune passphrase particolarmente complesse potrebbero dover essere immesse in un file prima dell'utilizzo: # wpa_passphrase foobarssid < passphrase.txt > /etc/wpa_supplicant/foobar.conf.

Si aggiunga quindi l'opzione ctrl_interface, in modo da poter controllare il demone wpa_supplicant. È possibile autorizzare wpa_cli ad effettuare modifiche al file con l'opzione update_config=1.

/etc/wpa_supplicant/foobar.conf
ctrl_interface=DIR=/run/wpa_supplicant GROUP=wheel # consente ai membri del gruppo 'wheel' di controllare il demone
  update_config=1
  ap_scan=1

  network={
     ssid="foobarssid"
     psk=f5d1c49e15e679bebe385c37648d4141bc5c9297796a8a185d7bc5ac62f954e3
  }

È possibile aggiungere network blocks multipli al file di configurazione di cui sopra.

Per connettersi alla rete prescelta si eseguano i seguenti comandi:

# ip link set interfaccia up
# wpa_supplicant -B -D nl80211 -i interfaccia -c /etc/wpa_supplicant/foobar.conf
# dhcpcd -A interfaccia
Nota: È preferibile utilizzare nl80211 rispetto al driver wext, da considerarsi deprecato. Per ottenere un elenco dei driver supportati, si esegua wpa_supplicant -h.

Per reti di complessità crescente si studino gli esempi forniti nel file di configurazione di default sito in /etc/wpa_supplicant/wpa_supplicant.conf.

Avvio tramite systemd

Per avviare la connessione wireless automaticamente al boot, si abiliti il servizio wpa_supplicant sull'interfaccia interessata. Se la propria connessione ottiene gli indirizzi tramite DHCP, abilitare anche dhcpcd.service. Per gestire eventuali connessioni ethernet si installi ifplugd e si abiliti il relativo servizio sull'interfaccia interessata.

I comandi da eseguire potrebbero essere simili ai seguenti:

# systemctl enable wpa_supplicant@wlp3s1
# systemctl enable dhcpcd
# systemctl enable ifplugd@enp5s2

wpa_supplicant gestirà il roaming per tutti i SSID contenuti nel suo file di configurazione e ifplugd configurerà automaticamente l'interfaccia ethernet spegnendo quella wireless all'inserimento di un cavo ethernet nella macchina, mentre dhcpcd si occuperà dell'asegnazione degli indirizzi IP alle varie interfacce.

È necessario modificare il servizio wpa_supplicant@.service per farlo puntare al file di configurazione corretto. Per ridefinire il valore della riga ExecStart= si crei il seguente file:

/etc/systemd/system/wpa_supplicant@.service.d/foo.conf
  [Service]
  ExecStart=
  ExecStart=/usr/bin/wpa_supplicant -c/etc/wpa_supplicant/bar.conf -i%i

La direttva WantedBy del .service correntemente fornito non è corretta. Se la riga nel servizio wpa_supplicant@.service non corrisponde al nome della propria interfaccia di rete (wlan0), sarà necessario copiare il servizio in /etc/systemd/system ed apportare le dovute modifiche.

[Install]
WantedBy=multi-user.target

Il problema è stato risolto in questo commit.

Link correlati