SDB:Tenere traccia dei problemi del wireless
Questo articolo ha bisogno della tua attenzione perché ancora non segue i principi guida del nostro wiki. Seems to be not up to date - e. g. no warning about Wired Equivalent Privacy (WEP) as a deprecated and insecure old technique. --Pistazienfresser 16:32, 6 February 2011 (MST) Se vuoi contribuire, per favore familiarizza con questi prima. Se hai domande, non esitare a contattarci, ti aiuteremo più che volentieri! :-) |
Indice
- 1 Obiettivo
- 2 Problemi frequenti
- 3 NetworkManager
- 4 Come configurare manualmente una connessione
- 5 Catturare i pacchetti, ovvero la modalità monitoraggio
- 6 Domande frequenti (FAQ)
- 7 Collegamenti alle pagine di Novell e openSUSE
- 8 Collegamenti a pagine esterne
- 9 Autori
Obiettivo
I principali componenti usati nella configurazione di una connessione wireless sono:
- nm-applet (in GNOME), KNetworkManager (in KDE 3) o Gestione della rete (in KDE SC 4, applet nel vassoio di sistema o plasmoide)
- NetworkManager e YaST, oppure entrambi
- wpa_supplicant
- il driver della scheda wireless (qualcuno in associazione al modulo mac80211)
Problemi frequenti
MAC Address Filter (Filtraggio indirizzi MAC)
Assicurati di disabilitare il MAC address filter (ovvero il Filtraggio degli indirizzi MAC) nel tuo access point wireless (WAP, AP) (punto d'accesso wireless in italiano) oppure aggiungi l'indirizzo MAC (MAC address) della tua scheda wireless.
Interruttore di sicurezza (anche detto Kill Switch)
La maggior parte delle schede wireless integrate può essere attivata e disattivata usando un interruttore hardware. Assicurati in tal caso che il dispositivo wireless sia fisicamente acceso. Se l'interruttore hardware è disattivato il driver non avrà alcuna possibilità di configurare la rete wireless.
Firmware
Alcuni dispositivi wireless (es. iwl3945, iwlagn, b43, ...) necessitano di un cosiddetto firmware che deve essere fornito dal sistema operativo in cui sono in funzione. I file di alcuni firmware sono già forniti con openSUSE in forma di pacchetti rpm (es. iwl3945-ucode o ralink-firmware); altri file contenenti firmware invece non sono forniti per questioni legali. Devono quindi essere installati manualmente. I file di alcuni di questi firmware possono essere scaricati utilizzando gli script forniti in /usr/sbin (es. install_acx100_firmware, install_bcm43xx_firmware e install_intersil_firmware).
Per stabilire se hai bisogno di installare il firmware esegui il comando:
dmesg | less
scorri attentamente l'output alla ricerca di messaggi d'errore.
I canali 12, 13 e 14 sono disabilitati (wrong regulatory domain - dominio regolatore errato)
A partire da openSUSE 11.0 la gran parte dei driver wireless dipende da mac80211. La gestione del dominio regolatore (regulatory domain) è stata implementata nello stack wireless (anche detto "pila wireless"), ma non è stata resa disponibile fino al kernel 2.6.27. Per essere conforme alla FCC lo stack abilita soltanto il sottoinsieme minimo dei canali disponibili (1-11 nella banda b/g). Per esempio in Germania sono ammessi anche i canali 12 e 13 ma sono disabilitati per impostazione predefinita. Questi canali si possono abilitare sovrascrivendo il dominio regolatore (regulatory domain) (parametri ammessi sono: US, EU e JP):
echo "options cfg80211 ieee80211_regdom=EU" > /etc/modprobe.d/cfg80211
Infine, per abilitare il nuovo dominio regolatore (regulatory domain) ricarica tutti i moduli wireless (mac80211, cfg80211, iwl3945, etc.), o soltanto riavvia il sistema.
Questo problema è stato corretto nella versione Factory ricorrendo a CRDA (Central Regulatory Domain Agent)
NetworkManager
Quali log (registri di sistema) sono necessari
Al fine di rintracciare i problemi del wireless con NetworkManager i seguenti registri (log) sono necessari dopo un tentativo di connessione non andato a buon fine:
- /var/log/NetworkManager
- /var/log/wpa_supplicant (se possibile con output di debug dettagliato)
- l'output di dmesg
Abilitare l'output di debug del wpa_supplicant
Permanentemente
Per ottenere il massimo output di debug dal wpa_supplicant si deve modificare il file /usr/share/dbus-1/system-services/fi.epitest.hostap.WPASupplicant.service.
Basta cambiare la linea
Exec=/usr/sbin/wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -u -f /var/log/wpa_supplicant.log
in
Exec=/usr/sbin/wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -u -dddt -f /var/log/wpa_supplicant.log
ed eseguire i seguenti comandi come root:
> rcnetwork stop > killall wpa_supplicant > rcnetwork start
D'ora in poi wpa_supplicant scriverà l'output di debug il più dettagliato possibile su /var/log/wpa_supplicant.log
Per un breve periodo
Se si dovesse abilitare l'output di debug solo per un breve periodo di tempo (per esempio per correggere i bug di un tentativo di connessione), il livello di debug può essere cambiato con
> kill -SIGUSR1 `pidof wpa_supplicant`
Il registro (log) del supplicant (/var/log/wpa_supplicant) stamperà una linea indicante il nuovo livello di debug:
Signal 10 received - changing debug level to MSGDUMP
Nota informativa: ciò è specifico di openSUSE, il gestore dei segnali non è implementato nella versione upstream di wpa_supplicant
Come configurare manualmente una connessione
Fermare NetworkManager e wpa_supplicant
Al fine di configurare manualmente una connessione assicurati che in quel momento non ci siano istanze di NetworkManager né di wpa_supplicant in esecuzione.
> rcnetwork stop > killall wpa_supplicant
Se il tuo punto di accesso (in inglese access point) non usa nessun tipo di sicurezza puoi usare il solo iwconfig per configurare la connessione. Anche le connessioni sicure WEP (Wired Equivalent Privacy) possono essere configurate in questo modo. Per tutti gli altri tipi di connessione (WPA-PSK, WPA-EAP, 802.1x con WEP dinamico) è richiesto wpa_supplicant.
Comandi base
Esegui dapprima iwconfig per scoprire qual è l'interfaccia wireless che vuoi usare.
> iwconfig lo no wireless extensions. eth1 no wireless extensions. eth0 unassociated ESSID:"" Mode:Managed Frequency=2.412 GHz Access Point: Not-Associated Bit Rate:0 kb/s Tx-Power=20 dBm Sensitivity=8/0 Retry limit:7 RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:3 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:53 Missed beacon:0
In questo esempio eth0 è l'interfaccia wireless.
Nel caso in cui tu non conosca il nome (Essid) della tua rete wireless potrai eseguire una scansione:
> iwlist eth0 scan ... Cell 02 - Address: XX:XX:XX:XX:XX:XX ESSID:"XXXXXX" Protocol:IEEE 802.11bg Mode:Master Channel:2 Frequency:2.417 GHz (Channel 2) Encryption key:off 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 Quality=37/100 Signal level=-78 dBm Extra: Last beacon: 488ms ago ...
Questo comando stampa in output tutti i punti di accesso (access point) nel raggio d'azione. Se il punto d'accesso d'interesse non compare nell'elenco quasi certamente è perché non trasmette il suo essid. Prova a fare una scansione di quella specifica rete.
> iwlist eth0 scan essid tuo_essid_qui ...
iwconfig
Connessione non sicura
Se stai usando un driver che dipende dal modulo mac80211 (e.g. iwl3934, iwl4965, ath5k, b43, rtl8187, rt2x00, ...) l'interfaccia deve essere attiva, prima che si possa stabilire una connessione:
> ip link set eth0 up
Configurare una connessione wireless non sicura con iwconfig è davvero facile:
> iwconfig eth0 essid tuo_essid_qui
Attendi alcuni secondi e poi esegui iwconfig per controllare se è stata stabilita una connessione:
> iwconfig eth0 eth0 IEEE 802.11g ESSID:"XXXXXX" Mode:Managed Frequency:2.417 GHz Access Point: XX:XX:XX:XX:XX:XX Bit Rate:54 Mb/s Tx-Power=20 dBm Sensitivity=8/0 Retry limit:7 RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality=58/100 Signal level=-68 dBm Noise level=-90 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:10
I dati importanti sono:
- Access Point: XX:XX:XX:XX:XX:XX - dovrebbe contenere il MAC-address del tuo access point
- Link Quality=58/100 - dovrebbe essere un valore diverso da 0
- Signal level=-68 dBm - dovrebbe essere un valore diverso da 0
- Noise level=-90 dBm - dovrebbe essere un valore diverso da 0
Ora la connessione wireless è configurata :)
Ma prema di poter fare realmente qualcosa di utile con questa connessione devi ottenere un indirizzo IP, come descritto più avanti (vedi "Ottenere un indirizzo IP").
Connessione sicura WEP
Da sviluppare
wpa_supplicant
Configurare una connessione utilizzando wpa_supplicant è un po' più complesso della configurazione di una connessione ad una rete wireless non sicura. Per prima cosa devi scrivere un file di configurazione che contenga tutte li informazioni necessarie. Su tale file di configurazione dovranno dapprima comparire alcune informazioni di base che sono identiche per ogni rete a cui ci si voglia connettere.
ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=0 eapol_version=1 ap_scan=1 fast_reauth=1
Il passo successivo prevede di includere nel file di configurazione la necessaria sezione relativa alla rete ("network"). Il blocco di configurazione "network" sarà diverso per ciascun sistema di sicurezza usato per la rete wireless.
Autenticazione a Sistema aperto (Open System WEP)
network={ ssid="tuo_ssid_qui" key_mgmt=NONE group=WEP40 WEP104 # Passphrase keys must be in double-quotes. Hex and ASCII are ok unquoted wep_key0=FFFFFFFFFF # wep_key1="passphrase" # wep_key2=CCCCC # wep_key3="unaltra_passphrase" priority=5 #Be sure to set the wep_keyX you want to try first using this wep_tx_keyidx=0 auth_alg=OPEN }
Se usi una rete wpa con sistema di autenticazione sicura psk, copia semplicemente il blocco di configurazione qui sotto e modifica i parametri ssid e psk.
network={ ssid="tuo_essid_qui" psk="tua_password_qui" key_mgmt=WPA-PSK priority=5 proto=WPA }
WPA-EAP
network={ ssid="tuo_essid_qui" identity="tuo_username_qui" psk="tua_password_qui" # wpa_supplicant debug output will tell you what to put here subject_match="/C=US/ST=Utah/L=Provo/O=Novell, Inc./CN=foo.novell.com" proto=WPA key_mgmt=WPA-EAP group=CCMP TKIP eap=PEAP phase2="auth=MSCHAPV2" ca_path="/etc/ssl/certs" }
Avviare la connessione
Per avviare, usando wpa_supplicant, la connessione precedentemente configurata, esegui i seguenti comandi:
> wpa_supplicant -Dwext -ieth0 -c/etc/tuo_file_config -dddt
-Dwext istruisce wpa_supplicant ad usare il driver wext per comunicare con il driver di basso di livello, la maggior parte dei driver recenti dovrebbe funzionare bene con queste impostazioni (al massimo aggiungi i driver basati su su mac80211).
-ieth0 indica quale interfaccia si deve usare per la connessione wireless
-c/etc/tuo_file_config semplicemente indica a wpa_supplicant quale configurazione usare
-dddt abilita l'output di debug col massimo livello di dettaglio
Dopo alcuni secondi wpa_supplicant, molto probabilmente, produrrà qualcosa di simile al seguente listato:
1213018160.349324: State: GROUP_HANDSHAKE -> COMPLETED 1213018160.349334: CTRL-EVENT-CONNECTED - Connection to XX:XX:XX:XX:XX:XX completed (auth) [id=0 id_str=] 1213018160.349341: wpa_driver_wext_set_operstate: operstate 0->1 (UP) 1213018160.349348: WEXT: Operstate: linkmode=-1, operstate=6 1213018160.349880: EAPOL: External notification - portValid=1 1213018160.349899: EAPOL: External notification - EAP success=1 1213018160.349905: EAPOL: SUPP_PAE entering state AUTHENTICATING 1213018160.349911: EAPOL: SUPP_BE entering state SUCCESS 1213018160.349917: EAP: EAP entering state DISABLED 1213018160.349924: EAPOL: SUPP_PAE entering state AUTHENTICATED 1213018160.349930: EAPOL: SUPP_BE entering state IDLE 1213018160.349954: RTM_NEWLINK: operstate=1 ifi_flags=0x11043 ([UP][RUNNING][LOWER_UP]) 1213018160.349965: RTM_NEWLINK, IFLA_IFNAME: Interface 'wlan0' added 1213018161.356786: RSN: processing PMKSA candidate list 1213018161.356821: RSN: not in suitable state for new pre-authentication 1213018161.852768: EAPOL: startWhen --> 0
La connessione wireless è configurata, puoi verificarlo usando iwconfig in una nuova console, come descritto sopra.
wpa_gui
Per rendere le cose in qualche modo più semplici wpa_supplicant ha due applicazioni che lo accompagnano: wpa_cli e wpa_gui. Mentre wpa_cli fa parte del pacchetto wpa_supplicant, avrai invece bisogno di installare a parte wpa_gui:
# zypper in wpa_supplicant-gui
Affinché wpa_gui sia in grado di collaborare con wpa_supplicant, è necessario modificare il file /etc/wpa_supplicant/wpa_supplicant.conf con gedit o con il proprio editor di testo preferito.
# gedit /etc/wpa_supplicant/wpa_supplicant.conf
E' sufficiente aggiungere "update_config=1" dopo le linee già presenti e salvare il file. Vedi /usr/share/doc/packages/wpa_supplicant/wpa_supplicant.conf per la guida di riferimento alla configurazione di wpa_supplicant.
Ora possiamo avviare wpa_supplicant col comando
# wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf -B
seguito da
# wpa_gui
Si aprirà allora la finestra di dialogo di wpa_gui, premiamo "scan" e ci verrà presentata una finestra che elenca tutti i punti di accesso (Access Points) rilevati. Facendo doppio clic su ciascuna delle voci presenti apre ancora un altro dialogo che ci permette di inserire la frase chiave (passphrase in inglese) e premiamo Aggiungi (Add), la rete è aggiunta a wpa_gui e la connessione creata. Quanto detto funziona per reti aperte o cifrate con WEP e WPA. Inoltre wpa_gui scrive i proprio parametri di configurazione su wpa_supplicant.conf, quindi se sei interessato a come si presentano, dai:
# cat /etc/wpa_supplicant/wpa_supplicant.conf
Nota: wpa_gui non funzionerà con la copia in memoria di wpa_supplicant avviata da NetworkManager, dato che userà D-Bus per scambiare i messaggi. Funziona invece perfettamente con l'istanza di wpa_supplicant avviata da ifup e non è nemmeno necessario un file di configurazione.
Ottenere un indirizzo IP
DHCP
Se la tua rete usa dhcp per l'assegnazione degli indirizzi IP hai dapprima bisogno di ricercare le istanze di dhcpcd o dhclient in esecuzione e, se ce ne sono, fermarle.
# killall -TERM dhcpcd dhclient
Ora puoi usare dhcpcd wlan0 (o dhcpd eth1, a seconda del nome del dispositivo) oppure dhclient wlan0 (o eth1, come prima) per ottenere un indirizzo IP:
# dhcpcd wlan0
Se dhccpcd risponde alla linea di comando, allora all'interfaccia dovrebbe essere stato assegnato un indirizzo IP. Questo si può verificare con il comando ip:
> ip addr 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 50 link/ether XX:XX:XX:39:49:b4 brd ff:ff:ff:ff:ff:ff inet 192.168.0.173/24 brd 196.168.0.255 scope global eth0 inet6 fe80::212:f0ff:fe39:49b4/64 scope link valid_lft forever preferred_lft forever
La parte importante è 192.168.0.173.
Impostazione manuale dell'indirizzo IP
Devi soltanto impostare l'indirizzo IP voluto usando iproute2
> ip addr add 192.168.0.145/24 dev eth0
Verificare che la connessione sia in funzione
Il modo migliore per verificare se la connessione sia attiva e funzionante è inviare un messaggio di ping ad un sito Internet
> ping google.com PING google.com (64.233.167.99) 56(84) bytes of data. 64 bytes from py-in-f99.google.com (64.233.167.99): icmp_seq=1 ttl=242 time=156 ms 64 bytes from py-in-f99.google.com (64.233.167.99): icmp_seq=2 ttl=242 time=151 ms 64 bytes from py-in-f99.google.com (64.233.167.99): icmp_seq=3 ttl=242 time=151 ms ^C --- google.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2008ms rtt min/avg/max/mdev = 151.011/152.976/156.665/2.648 ms
Se l'output assomiglia a quello qui sopra la connessione è in funzione!
Qualora tu non abbia ottenuto questa risposta, potresti controllare se almeno il punto di accesso (AP) sia raggiungibile. Nell'esempio seguente l'AP è 192.168.0.1:
ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=1.75 ms 64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=2.14 ms 64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=1.75 ms 64 bytes from 192.168.0.1: icmp_seq=4 ttl=64 time=1.84 ms ^C --- 192.168.0.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3012ms rtt min/avg/max/mdev = 1.754/1.874/2.145/0.160 ms
Se con ping riesci a raggiungere l'AP, ma non un indirizzo Internet qualunque, allora c'è qualcosa che non va nella Risoluzione dei nomi. Questo può essere dovuto all'avere due interfacce di rete (NICs) attivate (es. cablata e wireless), laddove ciascuna delle due ha il demone dhcpcd in esecuzione.
Disattiva allora entrambe le interfacce (NIC) e poi riattiva quella wireless e ricomincia daccapo.
# ifdown eth0 # ifdown wlan0 # ifup wlan0
TODO: Explain what to do now..
Catturare i pacchetti, ovvero la modalità monitoraggio
Software necessario
Puoi usare kismet per catturare i pacchetti da un'interfaccia wireless. Dopo di ché Wireshark è in grado di leggere il file della cattura, prodotto da kismet, e di visualizzare i pacchetti catturati in modo agevole per l'utente.
Abilitare la modalità monitoraggio
Se si dispone di una seconda scheda wireless che può essere usata per sorvegliare il traffico wireless, i seguenti comandi danno inizio alla cattura dei pacchetti in transito:
> ip link set wlan0 down > iwconfig wlan0 mode monitor > ip link set wlan0 up > iwconfig wlan0 channel X > wireshark -i wlan0 -k
Questo aprirà wireshark ed inizierà a catturare tutti i frame ricevuti da wlan0 sul canale X.
Domande frequenti (FAQ)
Q: La mia connessione si interrompe ogni pochi minuti
A: Alcuni punti d'accesso (access point) hanno la tendenza a far cadere le connessioni se il client è inattivo per un certo periodo di tempo. Talvolta il comportamento si può cambiare dall'interfaccia di configurazione dei punti d'accesso.
Collegamenti alle pagine di Novell e openSUSE
- Forum Wireless su forums.opensuse.org
Collegamenti a pagine esterne
- http://wireless.kernel.org/en/users/Reporting_bugs
- Specific tips to KDE's Network Management tools
- Network Manager Debugging in Gnome
Autori
Helmut Schaa <hschaa@suse.de>