wpa supplicant
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
wpa_supplicant 🇬🇧 ist ein Linuxprogramm, das, wie der Name schon sagt, die im WPA-Standard definierte Rolle des "supplicant" (engl. für Bittsteller) wahrnimmt.
Zur Authentifizierung existieren eine ganze Reihe von Protokollen, die wpa_supplicant auch beherrscht, wenn sie von der Hardware (auf der Client-Seite aber auch auf dem Access-Point) unterstützt werden. Der wpa_supplicant unterstützt WEP-, WPA-, WPA2-verschlüsselte und unverschlüsselte Netze. Die Vielzahl der möglichen Kombinationen macht die Konfiguration von wpa_supplicant etwas knifflig.
Hinweis:
Die in diesem Artikel beschriebene Vorgehensweise wird benötigt, sofern der NetworkManager keine Verbindung zu einem WLAN herstellen können oder für kabelgebundenes Netzwerk IEEE_802.1X Authentifizierung benötigt wird.
Sollte man allerdings ausschließlich das veraltete und unsichere WEP in einem WLAN verwenden, so gibt es keinen Grund, auf einem Client in einem solchen WLAN wpa_supplicant zu konfigurieren. iwconfig und wireless-*
-Einträge in /etc/network/interfaces reichen in diesem (zu vermeidenden) Fall aus (siehe dazu wireless-tools).
Ubuntu enthält in seinen Paketquellen auch das Paket iwd als Alternative für verschlüsselte WLAN-Verbindungen. Siehe: https://iwd.wiki.kernel.org/start 🇬🇧
Achtung!
Soll auf einem Linux-Rechner ein WLAN-Access-Point betrieben werden, so wird hostapd benötigt, nicht wpa_supplicant.
Installation¶
wpa_supplicant ist Bestandteil der Standardinstallation. Baut man auf eine Minimalinstallation auf, muss folgendes Pakete installiert [1] werden:
wpasupplicant
Hinweis:
Im gesamten Artikel wird als Beispiel-Schnittstelle wlan0
verwendet. Dies muss unbedingt durch die tatsächliche Schnittstelle ersetzt werden, die man selbst benutzt. Mehr dazu unter WLAN/Installation.
Wenn der Treiber über Ndiswrapper installiert wurde, muss die Schnittstelle evtl. auch noch in der Datei /etc/modprobe.d/ndiswrapper angepasst werden [2]. Dort steht automatisch wlan0
.
WLAN-Konfigurationen eintragen¶
Als erstes muss die Datei /etc/wpa_supplicant/wpa_supplicant.conf angelegt und bearbeitet werden. Hierzu benötigt man einen Editor mit Root-Rechten [2]. Es sollte auch darauf geachtet werden, dass der Datei entsprechende Zugriffsrechte gegeben werden (0600), noch bevor im späteren Verlauf irgendwelche Schlüssel in ihr abgelegt werden. In dieser Datei lauten die ersten Zeilen:
ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=benutzergruppe # Die Gruppe muss natürlich angepasst werden eapol_version=1 # 0: Der Treiber des Interfaces kümmert sich um das Scannen von Netzen und die AP-Auswahl. # Dieser Modus sollte benutzt werden, wenn man eine Verschlüsselung auf ein Kabelnetzwerk legt. # 1: wpa_supplicant kümmert sich um das Scannen von Netzen und die AP-Auswahl. # 2: Fast wie 0, es wird aber mit Hilfe von Sicherheitsrichtlinien und der SSID zu APs verbunden (BSSID wird nicht unterstützt) # # Normalerweise funktioniert entweder Modus 1 oder Modus 2. ap_scan=1
Danach werden die verschiedenen Netzwerkkonfigurationen eingetragen.
Hinweis:
Bei den folgenden Beispielkonfigurationen sind folgende Änderungen vorzunehmen:
Netzwerkname
muss durch die tatsächlich verwendete (E)SSID (ebenfalls in Anführungszeichen) ersetzt werden.pre-shared key
muss durch den tatsächlich verwendeten pre-shared key ersetzt werden.
Je nach Konfiguration von WPA/WPA2 können die Parameter variieren. Wenn man die Zeilen für proto
, key_mgmt
, pairwise
und group
nicht hinzufügt, werden Standardwerte gesetzt, die fast immer funktionieren.
Experten-Info:
Wer mehr über die verfügbaren Optionen lernen möchte, kann sich diese Beispielkonfiguration mit ausführlichen englischen Kommentaren ansehen: wpa_supplicant.conf.examples ⮷
Verschlüsselung¶
Um ein WPA2-verschlüsseltes Netzwerk einzutragen, wird folgender Text hinzugefügt:
network={ ssid="Netzwerkname" scan_ssid=1 proto=RSN key_mgmt=WPA-PSK pairwise=CCMP group=CCMP psk="meinschluessel" }
Je nach Konfiguration des Access-Points könnte es aber auch sein, dass noch eine gemischte Verschlüsselung mit veraltetem WPA1-TKIP verwendet wird
proto=RSN WPA ... pairwise=CCMP group=TKIP
oder reine WPA1-Verschlüsselung:
proto=WPA ... pairwise=TKIP group=TKIP
oder für alle möglichen Variationen
proto=RSN WPA ... pairwise=CCMP TKIP group=CCMP TKIP
Der Supplicant handelt dann mit dem Access-Point die Verbindung entsprechend aus.
Verschlüsselung nach WPA1-TKIP beruht auf der veralteten WEP-Verschlüselung, ist rel. unsicher und sollte nicht mehr verwendet werden!. Weitere Beschreibungen dazu in WLAN - WLAN-Sicherheit. Aktuell ist WPA2-Verschlüsselung die beste und sicherste Methode.
Wie man die genaue Konfiguration des Access-Points herausfinden kann, steht im Abschnitt Verschlüsselungskonfiguration des Access-Points ermitteln.
WEP-Verschlüsselung¶
Achtung!
Eine WEP-Verschlüsselung kann innerhalb weniger Minuten (abhängig vom Netzwerkverkehr) entschlüsselt werden und ist deshalb unsicher. Die WEP-Verschlüsselung sollte deshalb nicht eingesetzt werden.
network={ ssid="Netzwerkname" scan_ssid=1 key_mgmt=NONE wep_tx_keyidx=0 wep_key0="Netzwerkschlüssel" }
Erfolgt die Verschlüsselung als "WEP-shared", so sollte noch folgendes angefügt werden:
auth_alg=SHARED priority=2
Unverschlüsselte Netzwerke¶
Achtung!
Bei einem unverschlüsselten WLAN kann jeder den Datenstrom zwischen PC und Router mitschneiden. Ein unverschlüsseltes WLAN sollte deshalb nicht eingesetzt werden. Deshalb gibt es an dieser Stelle auch keine Beispielkonfiguration. Man beachte auch mögliche rechtliche Konsequenzen.
In bestimmten Situationen muss man sich mit unverschlüsselten Netzen verbinden (z.B. Universitätsfunknetze mit SSH-Authentifikation). Zur Verbindung mit einem unverschlüsselten Netz ist wpa_supplicant jedoch nicht nötig. Siehe wireless-tools.
802.1X Netzwerke¶
IEEE_802.1X Netzwerke werden in Firmen sowie Hochschulen eingesetzt. Durch die große Anzahl an Authentifizierungsarten kann hier nur beispielhaft eine Konfiguration eines unverschlüsselten Netzwerkes mit 802.1X Authentifizierung angeführt werden. Diese Konfiguration dürfte für alle Hochschulen, die am DFN-Roaming (Hochschulen die am DFN-Roaming teilnehmen 🇩🇪, Beschreibung des Dienstes 🇩🇪) teilnehmen, stimmen.
Für die Authentifizierung wird zusätzlich das Paket openssl (Standard von wpa_supplicant) oder gnutls benötigt.
Um sich mit Funknetzwerken mit 802.1X Authentifizierung anzumelden, bedarf es eines Eintrages folgender Art:
network={ ssid="Netzwerkname" key_mgmt=IEEE8021X eap=TTLS #Verschlüsselung während der Authentifizierung anonymous_identity="anonymous" #Äussere Identität identity="Benutzer@Authentifizierungs-Server" #Innere Identität password="Passwort" #Passwort phase2="auth=PAP" #ca_cert="PFAD_ZUM_STAMMZERTIZIKAT/ZERTIFIKAT" #optionale Angabe des zu verwendenden Stammzertifikats }
Es ist ebenfalls möglich einen externen Supplikanten für 802.1X Netzwerke zu verwenden, z.B. xsupplicant 🇬🇧. In diesem Fall ist die Option -e
in dem Aufruf von wpasupplicant zu verwenden. Siehe hierzu: Hilfe zu wpa_supplicant, zu erreichen mit:
man wpa_supplicant
Beispiel Fachhochschule Südwestfalen (NRW)¶
network={ ssid="802.1X" key_mgmt=IEEE8021X eap=TTLS anonymous_identity="anonymous" identity="Benutzername@urmel.fh-swf.de" password="swordfish" ca_cert="/etc/wpa_supplicant/wlanCA.dvz.fh-swf.de.pem" phase2="auth=PAP" }
Das Stammzertifikat (wlanCA.dvz.fh-swf.de.pem) sowie das standortabhängige Zertifikat (Meschede: meswlangate.dvz.fh-swf.de.pem
, Soest: sowlangate.dvz.fh-swf.de.pem
) liegen im Ordner /etc/wpa_supplicant. In dieser Beispielkonfiguration wurden die benutzerspezifischen Daten durch die Worte Benutzername
und swordfish
ersetzt. Die Dateiendungen können je nach Quelle der Zertifikate variieren (z.B. wenn diese aus MS Windows exportiert wurden).
Verschlüsselungskonfiguration des Access-Points ermitteln¶
Der Befehl
sudo iwlist scanning # oder sudo iwlist scan # oder gefiltert und übersichtlicher mit den wesentlichen Informationen sudo iwlist wlan0 scan | egrep -i 'cell|chan|essid|wpa|cipher|qual' # der Network-Manager zeigt das ebenfalls bei manueller Abfrage nmcli dev wifi list
Bei Geräten die durch das mac80211-Subsystem unterstützt werden, zeigt iw alle Details:
sudo iw dev [WLAN-Interface] scan
zeigt alle WLAN-Netze in Reichweite, inklusive ihrer Verschlüsselungskonfiguration, an. Für diese Aktion sind Root-Rechte [4] notwendig.
Die Konfiguration der WLAN-Verschlüsselung wird in folgender Form ausgegeben:
IE: IEEE 802.11i/WPA2 Version 1 Group Cipher : TKIP Pairwise Ciphers (2) : CCMP TKIP Authentication Suites (1) : PSK
In diesem Fall wird WPA2 benutzt (proto=RSN), wie die erste Zeile verrät. Die Angabe bei "Group Cipher" muss der Option "group=" in der wpa_supplicant.conf entsprechen. Die Angabe bei "Pairwise Ciphers" zeigt einem, welche Verschlüsselungsalgorithmen der Access-Point anbietet. In diesem Fall CCMP oder TKIP. Die Option, die man benutzen will, muss man entsprechend bei "pairwise=" angeben. Die letzte Zeile gibt an, welches Authentifizierungsverfahren eingesetzt wird: in diesem Fall ein vorher verteilter Schlüssel (key_mgmt=WPA-PSK). Zusammengefasst handelt es sich hierbei um ein WLAN, das WPA2 mit "Pre Shared Key" (PSK) verwendet und bei dem die Clients sich bei dem Verschlüsselungsalgorithmus zwischen CCMP (AES) und TKIP (RC4) entscheiden können.
Für WPA mit nur CCMP sieht die Ausgabe folgendermaßen aus:
IE: WPA Version 1 Group Cipher : CCMP Pairwise Ciphers (1) : CCMP Authentication Suites (1) : PSK
Wenn ein Access-Point sowohl WPA als auch WPA2 anbietet, können auch zwei solche Abschnitte in der Ausgabe für ein WLAN erscheinen. Die Angaben in der Datei wpa_supplicant.conf
entscheiden dann darüber, ob der Client für die Verbindung mit dem Access-Point WPA oder WPA2 benutzt.
Wichtig ist, darauf zu achten, welche "Ciphers" angeboten werden, und die wpa_supplicant.conf entsprechend zu bearbeiten. Werden bei "Pairwise Ciphers" CCMP und TKIP angezeigt, so kann. je nachdem was man in der wpa_supplicant.conf bei "pairwise" angibt, TKIP oder CCMP für die Verschlüsselung zwischen Client und Access-Point genutzt werden. Wenn bei "Pairwise Ciphers" CCMP und TKIP angeboten werden, ist der "Group Cipher" immer TKIP, damit es abwärtskompatibel bleibt. Wenn ausschließlich CCMP benutzt wird, ist auch der "Group Cipher" CCMP.
wpa_supplicant testen und manuell starten¶
Hinweis:
Sollte zuvor schon einmal eine WLAN-Verbindung über WEP eingerichtet gewesen sein, so muss diese deaktiviert werden. Es kann sonst zu Problemen beim Verbindungstest kommen. Unter GNOME findet man die Option dafür am einfachsten unter "System → Systemverwaltung/Administration → Netzwerk".
Hinweis:
Im Folgenden wird die Option -D wext
verwendet. Diese ist ggf. auf den richtigen Treiber einzustellen!
Bevor nun der wpa_supplicant fest eingebunden wird, sollte er getestet werden. Dies kann über die Debugging-Funktion geschehen, indem man Folgendes in ein Terminal [3] eingibt:
sudo wpa_supplicant -i wlan0 -D wext -c /etc/wpa_supplicant/wpa_supplicant.conf -d
Dabei ist -i
der Name des Wireless Interface, -D
der Name des Treibers (siehe auch Tabelle unten), -c
Pfad zur Konfigurationsdatei und -d
Debug Modus. Falls nun Fehler auftreten sollten, werden diese aufgelistet; um noch weitere Informationen zu erhalten, kann auch -dd
als Debug Modus verwendet werden.
Um nun zu überprüfen, ob eine Verbindung ordnungsgemäß aufgebaut wurde, sollte in einem neuen Terminal der Befehl
iwconfig
eingegeben werden. Die Verbindung war erfolgreich, wenngleich nach dem Interface nicht mehr "unassociated", sondern die Art des Drahtlosnetzwerkes steht, z.B. "IEEE 802.11g."
Um die Verbindung nun zu benutzen, ohne sie fest in das System einzubinden, muss der WPA-Supplicant im Daemon-Modus gestartet werden (-B
Daemon (Background) Modus):
sudo wpa_supplicant -i wlan0 -D wext -c /etc/wpa_supplicant/wpa_supplicant.conf -B
Als letztes ist noch der DHCP-Client für das Wireless Interface zu starten (damit man eine IP-Adresse bekommt):
sudo dhclient wlan0
Der DHCP-Client sollte dann eine IP-Adresse liefern, und die Verbindung ist somit hergestellt.
wpa_supplicant aktivieren¶
Um den wpa_supplicant zu aktivieren, fehlt noch ein entsprechender Verweis in der Datei /etc/network/interfaces. Diese wird mit einem Editor mit Root-Rechten geöffnet [2] und folgende Zeile zum entsprechenden Interface hinzugefügt:
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
Alternativ kann folgender Eintrag angefügt werden:
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
Die vollständige Datei kann so aussehen:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
Mehr Informationen zur /etc/network/interfaces gibt es in einem gesonderten Artikel.
Treiber¶
Falls wpa_supplicant nicht läuft, muss noch ein Treiber gewählt werden. Dies geschieht in der /etc/network/interfaces (siehe Artikel interfaces) mit der wpa-driver
-Option, welche vor der Zeile mit wpa-conf
stehen sollte.
Bei der Wahl des richtigen Treibers können die Artikel Karten und Chipsatztabelle hilfreich sein.
Eine vollständige Kofiguration kann z.B. wie folgt aussehen:
auto wlan0 iface wlan0 inet dhcp wpa-driver wext wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
Wird kein Treiber angegeben, wird automatisch der generische wext-Treiber genutzt. Dieser funktioniert bei vielen Karten sehr gut (und ist auch empfohlen). Bei neueren Versionen von ndiswrapper (> 1.16) und ipw muss der wext-Treiber verwendet werden.
Verbindung aufbauen¶
Danach muss das entsprechende Interface (hier wlan0 - durch das tatsächliche Interface ersetzen) neu gestartet werden. Dies kann durch einen Neustart des Rechners geschehen oder durch Eingabe folgender Befehle in einem Terminal [3]:
sudo ifdown wlan0 sudo ifup wlan0
Verbindung automatisch aufbauen¶
Normalerweise sollte die Anweisung auto wlan0
in der Datei /etc/network/interfaces bereits dafür sorgen, dass die Verbindung beim Systemstart automatisch hergestellt wird. Zumindest mit manchen Geräten scheint dies aber nicht zu funktionieren. In diesem Fall kann mit folgenden Schritten möglicherweise nachgeholfen werden:
In der Datei /etc/rc.local als root [2] über die Zeile exit =0
entsprechend dem Interface (hier wlan0 - durch das tatsächliche Interface ersetzen)
ifdown wlan0 ifup wlan0
einfügen und abspeichern.
Roaming¶
Eine automatische Umschaltung zwischen bekannten Netzwerken ist ebenfalls möglich. Zusätzliche Pakete müssen nicht installiert werden. wpasupplicant führt bei entsprechender Konfiguration die Skripte wpa_action und wpa_cli im Verzeichnis /sbin aus, und verbindet sich automatisch mit dem in Reichweite befindlichen Netzwerk. Gemischte Konfigurationen mit statischer IP-Adresse und automatischer Zuordnung über DHCP (engl. Dynamic Host Configuration Protocol) sind ebenfalls möglich.
Damit wpa_supplicant die Mehrfachkonfiguration erkennt und die Umgebung nach bekannten Netzwerken absucht, sind besondere Einstellungen in der Datei /etc/network/interfaces vorzunehmen. Der Name des Netzwerks ist frei wählbar, deutsche Umlaute und Sonderzeichen sollten aber vermieden werden.
Statische IP-Adressen sind den tatsächlichen Gegebenheiten anzupassen. Hier eine Beispielkonfiguration für Netzwerke mit statischer IP-Adresse, automatischer Zuordnung über DHCP, WPA- und WPA2 Verschlüsselung und offene Netzwerke:
auto lo iface lo inet loopback iface eth1 inet dhcp iface eth2 inet dhcp iface ath0 inet dhcp # Schnittstelle prüfen pre-up ifconfig wlan0 up pre-up ifconfig wlan0 down # Mehrfachkonfiguration aktivieren iface wlan0 inet manual # Roaming aktivieren wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf # erstes bekanntes WLAN Name:zuhause mit DHCP iface zuhause inet dhcp # zweites bekanntes WLAN Name:uni mit statischer IP-Adresse iface uni inet static address 192.168.0.20 netmask 255.255.255.0 network 192.168.0.255 gateway 192.168.0.1 # verbindet sich mit allen unverschlüsselten Netzwerken über DHCP iface offen inet dhcp # Optional - Schnittstelle automatisch aktivieren auto wlan0
Wird die Zeile auto wlan0
weggelassen kann das WLAN zunächst mit Networkmanager verwendet werden. Zum aktivieren/deaktivieren werden dann folgende Befehle verwendet:
sudo ifup wlan0 # aktiviert die WLAN-Schnittstelle sudo ifdown wlan0 # deaktiviert die WLAN-Schnittstelle
Für jedes zu nutzende Funknetzwerk ist ein eigener Eintrag mit den Angaben von SSID, Verschlüsselungsart und Netzwerkschlüssel zu erstellen. Der Eintrag id_str="Name" muß mit den Einstellungen in der Datei interfaces übereinstimmen.
Entsprechende Konfiguration der /etc/wpa_supplicant/wpa_supplicant.conf:
ctrl_interface=/var/run/wpa_supplicant eapol_version=1 ap_scan=1 # erstes bekanntes WLAN Name:zuhause mit WPA2-Verschlüsselung network={ ssid="WLAN-ID 1" id_str="zuhause" scan_ssid=1 proto=RSN key_mgmt=WPA-PSK pairwise=CCMP group=TKIP CCMP psk="WPA2 Netzwerkschlüssel" } # zweites bekanntes WLAN Name:uni mit WPA-Verschlüsselung network={ ssid="WLAN-ID 2" id_str="uni" scan_ssid=1 proto=WPA key_mgmt=WPA-PSK pairwise=TKIP group=TKIP psk="WPA Netzwerkschlüssel" } # unverschlüsselte Netzwerke network={ ssid="" id_str="offen" scan_ssid=1 key_mgmt=NONE }
Werden Einträge angepasst, um Fehler zu beheben oder um ein neues Netzwerk einzufügen, kann der Vorgang im laufenden Betrieb mit folgenden Befehlen[3] unterbrochen und mit den geänderten Werten neu gestartet werden:
sudo wpa_action wlan0 stop sudo wpa_action wlan0 reload sudo ifup wlan0
Experten-Info:
Unter /usr/share/doc/wpasupplicant/README.modes findet man Informationen, wie die Einstellungen für die /etc/wpa_supplicant/wpa_supplicant.conf auch direkt in der /etc/network/interfaces eingetragen werden können.
Links¶
Projektseite 🇬🇧
WLAN Übersichtsartikel