WLAN einrichten

From Linuxwiki
Jump to navigation Jump to search

Auf Grund wochenlangen Ärgernisses mit WLAN, Linux (Kanotix), WPA und einem Sitecom-USB-Stick (die Mischung macht's!) entstand dieser Wiki-Artikel.

* Mittlerweile gibt es komfortable Tools wie den Network-Manager * , aber wer gerne selbst Hand anlegt, kann das hier tun.

Schritt 1: Der richtige Treiber

Hierfür googelt ihr nach dem Chipsatz eures WLAN-Sticks - in meinem Fall handelt es sich um "zydas". Anhand dieser Angabe sucht ihr nach einem passenden Treiber. Fündig wird man in meinem konkreten Fall unter:

http://sourceforge.net/projects/zd1211/

Schritt 2: Treiber installieren

Kernel >= 3.0

Im allgemeinen sind die benötigten Treiber vorhanden. Mit

# ip a

lässt sich einfach überprüfen, ob eine neue Netzwerkkarte (i.a. wlan0) dazugekommen ist. Falls nicht, mit den Schritten für die älteren Kernel weitermachen bzw. erstmal schauen, ob es den Treiber als fertiges Paket gibt.

Kernel >= 2.6.26

zd1211-firmware-1.4.tar.bz2 von der sourceforge-Seite runterladen, die Firmware auspacken, README lesen und Anweisungen befolgen, also alle zd1211*-files nach /lib/firmware/zd1211 kopieren. Anschließend entsprechendes Modul neu laden:

# rmmod zd1211rw
# modprobe zd1211rw

Mittels Kommando "lsmod" kann man nachkontrollieren, ob das Treibmodul (zd1211rw) geladen wurde. Im Notfall manuell (modprobe zd1211rw) nachholen (dafür muss man allerdings wissen, wie das gute Stück heisst, im Notfall hilft ein plumper Reboot :). Mittlerweile hat Sitecom ja auf Ralink umgestellt, habe leider keine Erfahrung damit.

Wer sich über einen komischen Interface-Namen "wmaster0" wundert:
Dieser ist Teil des mac80211 Frameworks und wird bis Kernel 2.6.32 benötigt. Im Standardkernel ist dieses Modul vorhanden und wird wie folgt angezeigt (natürlich in Abhängigkeit vom Chipsatz der WLAN-Karte):

mac80211 139776 1 zd1211rw

Das wmaster-Interface ist nur ein Hilfskonstrukt und sollte manuell NICHT angefasst werden. Konfiguriert wird nur das eigentliche Interface (z.B. wlan0). Weitere Informationen sind hier [1] nachzulesen.

Ältere Kernel (getestet am Beispiel 2.6.19.7)

Meistens kommt der Treiber als .tar.gz oder .tgz-Datei daher: Runterladen und Auspacken:

$ tar -xzvf zd1211-driver-r69.tar.gz

Ins entpackte Verzeichnis wechseln:

$ cd zd1211-driver-r69

und im README (sofern vorhanden) lesen, was zu tun ist. Meist läuft es auf Kompilieren und Installieren raus:

$ make
# make install

Die übrigen Schritte sind dann (fast) unabhängig vom Treiber.

Schritt 3: Netzwerkkartenbezeichner rausfinden und Interface aktivieren

# ifconfig -a

ausführen und schauen, was dazugekommen ist. Ein gängiger Interfacename ist wlan0 oder eth[nächste freie Nummer].

Dann wird das Interface aktiviert. Der Einfachheit halber benenne ich dieses im weiteren Verlauf mit "wlan0".

# ifconfig wlan0 up

Schritt 4: SSID und Verschlüsselung konfigurieren

Danach gilt es, die SSID herauszufinden:

# iwlist wlan0 scan

Falls ihr den SSID-Broadcast auf eurem WLAN-Router deaktiviert habt, müsst ihr die SSID später eben von Hand eintragen.

Anmerkung zu iwconfig/iwlist: Falls es diesen Befehl auf eurem System noch nicht gibt, müsst ihr euch die wlan-tools besorgen:
http://pcmcia-cs.sourceforge.net/ftp/contrib/wireless_tools.28.tar.gz
(Gibts mittlerweile für Debian auch als Paket (wireless-tools))
Was die Verschlüsselung angeht, werde ich zunächst auf WEP, danach auf WPA-PSK/TKIP und WPA2 eingehen.

WEP-Verschlüsselung

Falls ihr mehrere Access-Points gefunden habt, könnt ihr mit

# iwconfig wlan0 essid 'mein WLAN-Netz'

(dort kommt natürlich der String rein, den ihr mit "iwlist wlan0 scan" ermittelt habt) euer WLAN-Netz wählen.
Danach wird der WEP-Key konfiguriert:

# iwconfig wlan0 key <schluessel_als_hexzahl> oder <s:schluessel_als_ascii>

z.B. iwconfig wlan0 key 46463153715A394E6741634652

WPA-Verschlüsselung

Zunächst mal rausfinden, um was für eine Verschlüsselung es sich handelt oder sie bei völliger Ahnungslosigkeit experimentell ermitteln. Mögliche Algorithmen sind TKIP oder AES. In diesem Fall handelt es sich um WPA-PSK (preshared key) und TKIP.

Ich konfiguriere das ganze mit "wpa_supplicant". Mit iwpriv konnte ich nix anfangen. Zunächst das Paket "wpasupplicant" installieren, falls noch nicht vorhanden. Dann eine Passphrase erzeugen mit:

$ wpa_passphrase <ssid> <passphrase>

wobei ssid die oben ermittelte SSID ist und passphrase der WPA-Key des Access-Points. Ein möglicher Eintrag könnte also lauten:

$ wpa_passphrase 'FRITZ!Box Fon WLAN 7170' 0123456789101112

Danach eine Datei /etc/wpa_supplicant.conf erzeugen. Dort werden die ganzen Parameter eingetragen, die man vorher ermittelt hat (SSID, Verschlüsselung, Passphrase). Hier eine Beispieldatei:

ctrl_interface=/var/run/wpa_supplicant eapol_version=1 ap_scan=2
network={
ssid="FRITZ!Box Fon WLAN 7170"
scan_ssid=1
proto=WPA
key_mgmt=WPA-PSK
pairwise=TKIP
group=TKIP
psk=a97ee0751b63fc7493fc6bfd40c6662910cba5669e9a2ea727eb78d86832d19d
}

WPA2

Nachdem WEP und WPA1 unsicher resp. entschlüsselbar sind, empfiehlt es sich, am Router WPA2 zu aktivieren. Die wpa_supplicant.conf sieht in einem solchen Fall so aus:

ctrl_interface=/var/run/wpa_supplicant eapol_version=1 ap_scan=1
network={ ssid="FRITZ!Box Fon WLAN 7170"
scan_ssid=1
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
group=TKIP CCMP
psk=a97ee0751b63fc7493fc6bfd40c6662910cba5669e9a2ea727eb78d86832d19d
}

Die nächsten Schritte sind dann wieder für WPA und WPA2 gemeinsam: Nach Anpassung der Cofigdateiden wpa_supplicant-Befehl auf der Shell ausführen:

# wpa_supplicant -B -i wlan0 -D wext -c /etc/wpa_supplicant.conf -d

Ein möglicher Output sieht so aus:

Initializing interface 'wlan0' conf '/etc/wpa_supplicant.conf' driver 'wext'
ctrl_interface 'N/A' bridge 'N/A'
Configuration file '/etc/wpa_supplicant.conf' -> '/etc/wpa_supplicant.conf'
Reading configuration file '/etc/wpa_supplicant.conf'
ctrl_interface='/var/run/wpa_supplicant eapol_version=1 ap_scan=2'
Priority group 0
id=0 ssid='Fritz!Box xyz123'
Initializing interface (2) 'wlan0'
SIOCGIWRANGE: WE(compiled)=22 WE(source)=21 enc_capa=0xf
capabilities: key_mgmt 0xf enc 0xf flags 0x0
WEXT: Operstate: linkmode=1, operstate=5
Own MAC address: 00:0c:f6:16:7a:bb
wpa_driver_wext_set_wpa
wpa_driver_wext_set_key: alg=0 key_idx=0 set_tx=0 seq_len=0 key_len=0
wpa_driver_wext_set_key: alg=0 key_idx=1 set_tx=0 seq_len=0 key_len=0
wpa_driver_wext_set_key: alg=0 key_idx=2 set_tx=0 seq_len=0 key_len=0
wpa_driver_wext_set_key: alg=0 key_idx=3 set_tx=0 seq_len=0 key_len=0
wpa_driver_wext_set_countermeasures
wpa_driver_wext_set_drop_unencrypted
RSN: flushing PMKID list in the driver
Setting scan request: 0 sec 100000 usec
EAPOL: SUPP_PAE entering state DISCONNECTED
EAPOL: KEY_RX entering state NO_KEY_RECEIVE
EAPOL: SUPP_BE entering state INITIALIZE
EAP: EAP entering state DISABLED
Using existing control interface directory.
Added interface wlan0

Bei eventuellen Fehlern und vor jedem Neustart das wpa_supplicant PID file löschen und das Interface wieder hoch nehmen:

# rm /var/run/wpa_supplicant*/wlan0
# ifconfig wlan0 up

Schritt 5: IP-Adresse bekommen

Falls ihr auf dem WLAN-Router DHCP eingestellt habt, bekommt ihr so eine IP-Adresse:

# dhclient wlan0

Ansonsten müsst ihr sie per "ifconfig" von Hand zuweisen.

Anmerkung: Unter Lenny/2.6.26.2-686 klappt das mit dem dhclient nicht so recht. Stattdessen kommt die unerfreuliche Meldung:

wmaster0: unknown hardware address type 801

Eine Alternative stellt hier das Tool wicd dar. Zur Installation desselben in die sources.list folgenden Eintrag machen (für Lenny, ansonsten entsprechend anpassen):

deb http://www.backports.org/debian lenny-backports main contrib non-free

...gefolgt von den Install-Kommandos:

# aptitude update
# apt-get -t lenny-backports install wicd

Danach mit "wicd" den Daemon starten. Mit dem Aufruf "wicd-client" gelangt man in ein Auswahlmenü, in dem man seine SSID wählen und sich mittels "Return" oder "C"(onnect) verbinden kann.
Größter Bug dieser Software ist wohl, dass man sie nach jedem Kernelupdate neu installieren darf.

Schritt 6: Browser starten u. ev. Namensauflösung anpassen

Jetzt solltet ihr ins Internet kommen. Falls doch nicht, könnte es an der Namensauflösung liegen. Eine Kontrollmöglichkeit ist, als URL eine IP-Adresse einzugeben, beispielsweise http://216.34.181.60. Landet ihr nun auf der Sourceforge-Seite, wurde die Datei "/etc/resolv.conf" nicht richtig generiert. Datei öffnen und eintragen:

nameserver <IP des APs>

Die Access-Point-IP seht ihr z.B. nach einem erfolgreichen dhclient (Schritt 5). Danach Browser neu starten.

Problembehebung

Meine wlan-Karte wird in "ifconfig" nicht angezeigt.

Der zydas-Chipsatz des Sitecom-WLAN-Sticks scheint beim Booten von Debian nicht immer sauber in den Kernel geladen zu werden. Wenn trotz richtiger Konfiguration keine IP-Adresse vergeben wird (langer dhclient-Timeout), muss das zydas-Kernelmodul entfernt und anschließend neu geladen werden:

# rmmod zd1211rw
# modprobe zd1211rw
# ifconfig wlan0 up
# ... (Konfigurationsschritte für WEP oder WPA)
# dhclient wlan0

(oder alternativ halt wicd-client, je nachdem...)

Meine SSID wird nicht gefunden

Manche älteren wlan-Stick-Modelle können in den höheren Frequenzbändern nicht senden/empfangen. In dem Fall einen niedrigeren Kanal wählen. In der Fritzbox geht das z.B. über das Menu Einstellungen -> WLAN -> Funkkanal.