SDB:Tenere traccia dei problemi del wireless

Icon-cleanup.png 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! :-)


Questa pagina vuol essere una guida su come tener traccia dei problemi relativi al wireless, visto che la configurazione di una connessione wireless coinvolge molti elementi, sia che si usi NetworkManager, oppure YaST.

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
}

WPA con chiavi condivise (PSK - "Pre-Shared Key")

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

Collegamenti a pagine esterne

Autori

Helmut Schaa <hschaa@suse.de>