Wie benutze ich wpa_supplicant?Welche Funktion-Modes hat wpa_supplicant?
Das Debian Paket "wpa_supplicant" stellt zwei verschiedene Funktionsmodi, die in der Hauptnetzwerkinfrastuktur - ifupdown- integriert sind, bereit.
Inhalt
- Spezifizierung des WPA_supplicant's Treiber Backends
- Die unterstüzten Treiber
- Allgemeine Empfehlungen
- Mode #1: Managed Mode
- Beispiele
- Wie funktioniert es?
- Die gemeinsamen Optionen
- Bemerkungen
- Mode #2: Roaming Mode
- wpa_supplicant.conf
- /etc/network/interfaces
- Fine Tuning des Roamingssetups
- Problemlösungen
- Versteckte ssids
1. Spezifizierung des WPA_supplicant's Treiber Backends
Der "wext" Treiber wird benutzt für die Interfaces die nicht explizit den "wpa-treiber" für den benötigten Typ setzen. Benutzer des Kernels mit Version 2.4 oder 2.6 bis version 2.6.14 müssen den Treiber-Typ explizit angeben.
Unterstützte | Treiber |
Treiber | Beschreibung |
hostap | Host AP (Intersil Prism2/2.5/3) |
madwifi | MADWIFI 802.11 support (Atheros, etc.) |
atmel | ATMEL AT76C5XXx (USB, PCMCIA) |
wext | Linux wireless extensions (generic) |
ndiswrapper | Linux ndiswrapper |
ipw | Intel ipw2100/2200 driver |
wired | wired Ethernet driver |
test | test Treiber |
Allgemeine Empfehlungen
Alle Intel Pro Wireless adapters (ipw2100, ipw2200 and ipw3945) benutzen ab Kernel-Version 2.6.14 das "wext" Backend.
Madwifi unterstützt die "wext" und "madwifi" Backends, aber "wext" ist bevorzugt.
Für Ndiswrapper wird ab version 1.16 der "ndiswrapper"-Treiber nicht mehr unterstützt. Deshalb muss der "wext" Treiber benutzt werden ("ndiswrapper"wenn wann man eine ältere Version von Ndiswrapper benutzt).
Der Treiber-Typ für den Adapter wird in der interfaces(5) Sektion in der Option 'wpa-driver' gesetzt, z.B:
iface eth0 inet dhcp
wpa-driver wext
. . . . . andere Optionen
2. Mode #1: Managed Mode
Mit diesem Mode kann eine Verbindung via "wpa_supplicant" zu einem bekannten Network hergestellt werden. Die Funtionsweise ist in allem ähnlich zu der Art wie das "wireless-tools" Paket arbeitet. Jedes Element, das benötigt wird um die Verbindung herzustellen wird angegeben mit vorangestellten "wpa-" Präfix und gefolgt von dem Wert das für dieses Element benutzt werden soll.
Beispiele
# Connect to access point of ssid 'homezone' with an encryption type of
# WPA-PSK/WPA2-PSK, using the the 'wext' driver backend of wpa_supplicant
# The psk is given as a hexadecimal string, without quotes. DHCP is used to
# obtain a network address.
iface wlan0 inet dhcp
wpa-driver wext
wpa-ssid homezone
wpa-psk 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
# Connect to access point of ssid 'HotSpot1' and bssid of '00:1a:2b:3c:4d:5e'
# with an encryption type of WPA-PSK/WPA2-PSK, using the the 'madwifi' driver
# backend of wpa_supplicant. The passphrase is given as a plaintext string,
# without quotes. A static network address assignment is used.
iface ath0 inet static
wpa-driver madwifi
wpa-ssid HotSpot1
wpa-bssid 00:1a:2b:3c:4d:5e
wpa-passphrase madhotspot
wpa-key-mgmt WPA-PSK
wpa-pairwise TKIP CCMP
wpa-group TKIP CCMP
wpa-proto WPA RSN
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
# User supplied wpa_supplicant.conf is used for eth1. All network information
# is contained within the user supplied wpa_supplicant.conf. No wpa-driver type
# is specified, so wext is used. DHCP is used to obtain a network address.
iface eth1 inet dhcp
wpa-conf /path/to/wpa_supplicant.conf
Wie funktioniert es?
Wie im vorigen Abschnitt gesagt, jedes wpa-supplicant spezifische Element erhält "wpa-" als Präfix. Jedes Element entspricht einer Eigenschaft von "wpa_supplicant" beschrieben in den Manpages wpa_supplicant.conf(5), wpa_supplicant(8) und wpa_cli(8). Der "supplicant" wird ohne vorherige Konfiguration gestartet und der "wpa_cli" erzeugt eine Netzwerkkonfiguration aus den Eingaben die von den Zeilen "wpa-*" geliefert wird.
Am Anfang, wpa_supplicant/wpa_cli setzt nicht die Eigenschaften des Devices (zB wie setzen des ESSID mit iwconfig), stattdessen benachrichtigt es das Device über Access Points die für die Herstellung der Verbindung geeignet sind. Nach dem Scannen der Empfangsarea, falls ein geeigneter Access Point (AP) für die Benutzung verfügbar ist, dann werden die Eigenschaften gesetzt und die Verbindung hergestellt.
Die gemeinsamen Optionen
Hier eine kurze Zusammenfassung der gemeinsamen 'wpa-' Optionen die in der /etc/network/interfaces stanza für ein Wireless Device benutzt werden können:
ACHTUNG: ALLE Werte sind CASE SeNsItVeElement | Beispiel Wert | Beschreibung |
wpa-ssid | plaintextstring | setzt des Netzwerk's ssid |
wpa-bssid | 00:1a:2b:3c:4d:5e | bssid des Access Points |
wpa-psk | 0123456789 | your preshared wpa key. Benutze wpa_passphrase(8) um der psk-Key aus einer Passphrase zu generieren |
wpa-passphrase | plaintextphrase | Text Phrase das zu einen Hexadezimal psk via wpa_passphrase konvertiert wird |
wpa-key-mgmt | NONE, WPA-PSK, WPA-EAP,IEEE8021X | Liste der akzeptierten Authentifizierung Management Protokolle |
wpa-group | CCMP, TKIP, WEP104,WEP40 | Liste der akzeptierten group ciphers für WPA |
wpa-pairwise | CCMP, TKIP, NONE | Liste der paarweise akzeptierten ciiphers für WPA |
wpa-auth-alg | OPEN, SHARED, LEAP | List der IEEE 802.11 erlaubten Authentifizierungsalgorithmen |
wpa-proto | WPA, RSN | Liste der akzeptierte Protokolle |
wpa-identity | myplaintextname | Benutzername durch den Administrator bestimmt (EAP Authentifizierung) |
wpa-password | myplaintextpassword | Dein Passwort (EAP Authentifizierung)
|
wpa-scan-ssid | 0 or 1 | Umschalten des SSID-scannen mit spezifischen Probe Request frames |
wpa-ap-scan | 0 or 1 or 2 | Einstellung des wpa-supplicant's Scannerlogik |
Bemerkungen
Fast alle 'wpa-' Optionen benötigen zumindest ein spezifizierten SSID. Die Optionen 'wpa-ap-scan' und 'wpa-preauthenticate' haben eine globalle Auswirkung auf alle Netzwerke.
Es reicht eine "wpa-" Option in der interfaces(5) Datei um damit der wpa_supplicant daemon zu aktivieren.
Das wpa-supplicant ifupdown Skript geht davon aus dass der Eingabe - Typ jeder Option korrekt ist. Zum Beispiel, geht es davon aus das einige Parameter Text sind und setzt jeden Wert in Quotes (") bevor dieser Wert weiter an wpa_cli weitergereicht wird. Das kann zur Mißverständnissen führen und die Zahl der Benutzerfehler erhöhen - einige Beispiel von fehlerhaftee Parameterdefinitionen:
# Invalid, wpa-ssid expects unquoted plaintext ssid's only
# If you need to use a hexadecimal ssid, please supply a
# wpa_supplicant.conf, and use the 'wpa-conf' option.
wpa-ssid "hostpot12345678"
# Valid, unquoted plaintext string
wpa-ssid hostpot12345678
# Invalid, wpa-psk expects hexadecimal strings only
wpa-psk plaintextpassword
# NOTE: wpa-psk will accept a plaintext string enclosed in quotation
# marks this is equivalent to the 'wpa-passphrase' option
wpa-psk "plaintextpassword"
# Invalid, wpa-passphrase accepts only plaintext strings, as it
# automattically quotes the input
wpa-passphrase "invalidinput"
# Valid, unquoted plaintext string
wpa-passphrase validinput
3. Mode #2: Roaming Mode
Wpa_supplicant stellt auch in der Form ein wpa_cli Aktionsskript -/sbin/wpa_action-, einen einfachen "roaming" Mechanismus. Wird dieses Skript aktiviert, dann übernimmt es die Kontrolle von ifupdown. in der manual Seite von wpa_action(8) werden diese technischen Details im Einzeln beschrieben.
Das roaming Interface wird durch den folgenden interfaces(5) Eintrag aktiviert:
iface eth1 inet manual
wpa-driver wext
wpa-roam /path/to/wpa_supplicant.conf
Es werden zwei Daemon-Prozesse gestartet: wpa_supplicant und wpa_cli. In der Konfiguration muss eine wpa_supplicant.conf Datei angegeben werden. Als Start kann man die Datei /usr/share/doc/wpasupplicant/examples/wpa_connect_open_ap.conf nehmen. Diese Datei muss editiert werden und Blöcke für alle bekannten/nötigen Netzwerke hinzugefügt werden.
Für mehr Infos sollte man
unbedingt die Manual Seite von wpa_supplicant.conf(5) gelesen werden.
Für jedes Netzwerk kann eine spezielle Option 'id_str' - einfacher text String- spezifiziert werden welche die Basis für Netzwerk profiling bietet. Wird keine "id_str" für ein Netzwerk angegeben, dann benutzt wpa_action die "default" logical Interface. Schauen wir ein kleines Beispiel aus wpa_action(8) an:
wpa_supplicant.conf
network={
ssid="foo"
# this id_str will notify /sbin/wpa_action to 'ifup uni'
id_str="uni"
key_mgmt=NONE
}
network={
ssid="bar"
# this id_str will notify /sbin/wpa_action to 'ifup home_static'
id_str="home_static"
psk=123456789...
}
network={
ssid=""
# no 'id_str' is given, /sbin/wpa_action will 'ifup default'
key_mgmt=NONE
}
/etc/network/interfaces
# the roaming interface MUST use the manual inet method
iface eth1 inet manual
wpa-driver wext
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
# no id_str
iface default inet dhcp
# id_str="uni"
iface uni inet dhcp
post-up /usr/sbin/foo --bar
# id_str="home_static"
iface home_static inet static
address 192.168.0.20
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
Fine Tuning des Roamingssetups
Falls mehrere AP vorhanden sind, kann man den bevorzugten mittels wpa_cli oder wpa_gui wählen, oder durch setzen der Priorität des Netzwerks ("priority" Option in der Datei wpa_supplicant.conf).
4. Problemlösungen
Für Debugzwecke wird empfohlen, `wpa_cli -i "interface"` in einem anderen terminal bzu starten, bevor das Interface gestartet wird. Das Kommando 'level 0' zeigt alle Debug-meldungen. Danach `ifup --verbose "interface"` zeigt die Debug Messages des Skripts wo wpa_supplicant gestart wird.
Versteckte ssids
Soll eine Verbindung zu einem versteckten Netzwerk hergestellt werden, dann sind die Option 'ap_scan=1' in der globalen Sektion und 'scan_ssid=1' in der Netzwerk-Sektion zu benutzen. Im Falle des "managed Modes" kann dies durch folgende Sektion gemacht werden:
iface eth1 inet dhcp
wpa-conf managed
wpa-ap-scan 1
wpa-scan-ssid 1
# .. additional options for your setup
Es kann lange dauern bis die Verbindung zu WEP hergestellt wird. Manchmal das Setzen des Parameters 'ap_scan=2' beschleunigt dies.
Thanks to Kelmo.
nach oben