Linux WiFi din linia de comandă cu wpa_supplicant

In acest articol voi discuta despre modul în care puteți configura WiFi prin wpa_supplicant. fără utilități Xorg / X11. Acest lucru este de a se asigura că serviciile de bază să fie difuzate lucrat în mod regulat cu un set minim de mijloace tehnice de acces de la distanță. Programul va rula ca un serviciu, setările terminat editarea fișierului de configurare.

Într-o rapid stabili o conexiune cu un punct de acces deschis poate astfel.

În cazul în care este necesar pentru termen lung, te rog înăuntru.

Informații generale despre wpa_supplicant

Care este wpa_supplicant i?


  • Cross-platform, implementarea open source a standardului IEEE 802.11 pentru Linux, * BSD, Windows, Mac OS X și alte sisteme.
  • Suport complet pentru WPA2, WPA și protocolul de securitate mai vechi LAN fără fir.
  • Aplicație spațiu utilizator, care acționează ca supplicant și operatorul pentru IMM-uri, executând instrucțiunile MLME.


  • WPA și standardului IEEE 802.11i / RSN / WPA2.
  • WPA-PSK și WPA2-PSK (pre-shared key) ( "WPA-Personal").
  • WPA cu EAP (adică RADIUS server de autentificare) ( "WPA-Enterprise") de gestionare a cheilor CCMP, TKIP, WEP (104/128 și 40/64 biți).
  • Caching RSN, PMKSA: pre-autentificare.

Linux WiFi din linia de comandă cu wpa_supplicant

Ca wpa_supplicant stabilește o conexiune cu un punct de acces?


  • Interfața de rețea ar trebui să funcționeze corect cu driverul instalat înainte de a începe wpa_supplicant.
  • Wpa_supplicant i șofer cereri de kernel pentru a scana disponibile Basic Service Set (BSS).
  • Wpa_supplicant i selectează BSS în conformitate cu setările.
  • Wpa_supplicant i solicită driverul de kernel pentru a stabili o conexiune cu BSS selectat.
  • Pentru WPA-EAP: autentificare EAP produce încorporat IEEE 802.1x Supplicant, sau altceva Xsupplicant server de autentificare extern.
  • Pentru WPA-EAP: a obținut o cheie master de la IEEE 802.1x supplicant.
  • Pentru WPA-PSK wpa_supplicant utilizează parola PSK ca cheia principală de sesiune.
  • Wpa_supplicant i produce puncte de acces autentificatorului cu 4 căi strângere de mână [1] și un acord-cheie de grup.
  • Wpa_supplicant criptează unicast și pachete multicast, [2]. apoi începe un schimb regulat de date.

Principalul și mare plus wpa_supplicant i - l yuniksveynost. și anume respectarea principiului Unix Way. atunci când programul face un singur lucru, dar o face bine. Într-un sens, ca wpa_supplicant Gentoo Way. Este nevoie de o anumită atenție și răbdare la început, dar mai târziu poate fi complet uitate. Odată ce programul este configurat și pus în această chestiune, cade complet în afara fluxului de evenimente, de cotitură în câteva rânduri de la -ef ps. Ea nu a sparkle și nu clipește în tava de sistem, nu sesizeaza explorat, conectate și rețele wireless deconectate. Ea pur și simplu nu este atât timp cât nu căutați.

Dintre minusuri - complexitatea de setare și configurare. probleme de mult în comparație cu Tyrke-Tyrke-Tyrke în fereastra Network Manager. să nu mai vorbim de conexiune Wi-Fi de pe orice dispozitiv Android. Dacă se întâmplă într-o călătorie cu un laptop Linux, probabil preferați o mai multe setări de front-end de rețea fără fir ușor de folosit pentru a conecta rapid la hotspot-uri Wi-Fi gratuit în aeroporturi, hoteluri sau la locul de muncă. Pentru acasă ca internetul wireless - cel mai mult ea.

Dacă nu alege un interfață grafică, programul aproape trage un nu dependențe. Pentru instalarea Gentoo Linux se va potrivi cu setul de pavilion așa cum este prezentat.


  • emerge #gentoo wpa_supplicant -av
  • aptitude install #debian wpasupplicant
  • yum install #Redhat wpa_supplicant
  • pacman -S wpa_supplicant #Arch

Conectarea fără un fișier de configurare

Dacă aveți nevoie să conectați o singură dată, necesitatea de a crea un fișier de configurare și du-te în toate complicațiile de setare, nr. Trebuie doar să tastați câteva instrucțiuni de la linia de comandă.

Exemplu pentru o rețea deschisă a fost prezentat la început. Pentru conectarea rapidă rețea WPA închis călcate, astfel:

La început, este necesar pentru a rula programul în sine și wpa_cli wpa_supplicant de însoțire.

Apoi, setarea de wpa_cli interfață interactivă.

WPA2 pentru o rețea închisă:

La final, trebuie să porniți manual daemon DHCP.

Același lucru cu IW.

Configurarea unei rețele de domiciliu

Acum, cel mai interesant - setare. Acest proces este documentat pentru Arch Wiki. Debian Wiki, și Gentoo Wiki. dar toate detaliile acolo, desigur, nu.

Programul este de obicei pus în directorul / etc / wpa_supplicant /. și sarcina noastră - pentru a configura corect wpa_supplicant.conf fișierul de configurare. și se leagă la o interfață de rețea fără fir Autorun.

Să începem cu wpa_supplicant.conf. Dacă vă conectați de la domiciliu la WPA / WPA2, probabil, utilizați o parolă pentru conexiune Wi-Fi care corespunde cu WPA-PSK ( „WPA-Personal“). Nu vom lua în considerare opțiunile cu WEP, deoarece nu este mult mai bine decât o rețea deschisă.

Ia-o configurație tipică a documentației. De exemplu, o astfel.

Este nevoie de prima linie. fără program de ctrl_interface nici nu va porni. GROUP = roată trebuie să fie rulat de un utilizator normal în interfața grafică wpa_gui, dar nu este modul nostru. Așa că am fost pe grupul rue = 0.

Fiecare fișier de configurare a rețelei trebuie să se potrivească cu unitatea de rețea <>. Scormonit în codul sursă, am găsit găsit util scris ap_scan variabilă în fișierul config.h. și ghidul de manualul de utilizare și descrierea este foarte slabă.

ap_scan - AP scanare / selecție

În mod implicit, cererile wpa_supplicant conducător auto pentru a efectua scanarea AP și apoi utilizează rezultatele de scanare pentru a selecta un AP adecvat. O altă alternativă este de a permite șoferului să aibă grijă de AP scanare și de selecție și de a folosi wpa_supplicant doar pentru a procesa cadre EAPOL bazate pe IEEE 802.11 informații de asociere de la conducătorul auto.

1: wpa_supplicant inițiază scanarea și selectarea AP (implicit).
0: Șoferul are grijă de scanare, selecție AP și IEEE 802.11 parametrii de asociere (de exemplu, generarea WPA IE); acest mod poate fi, de asemenea, utilizat cu drivere non-WPA atunci când se utilizează modul IEEE 802.1X;
nu încercați să se asocieze cu AP-uri (de exemplu, program extern trebuie să controleze asociere). Acest mod trebuie să fie, de asemenea, utilizat atunci când se utilizează drivere prin cablu Ethernet.

2: cum ar fi 0, dar asociat cu AP-uri utilizând politica de securitate și SSID (dar nu și BSSID); acest lucru poate fi utilizat, de exemplu, cu drivere ndiswrapper și NDIS pentru a permite operarea cu SSID-uri ascunse și de roaming optimizat;
în acest mod, blocurile de rețea în configurația sunt încercate una câte una, până când rapoartele driver de asociere cu succes; fiecare bloc de rețea ar trebui să aibă politica de securitate explicită (adică un singur
opțiune în listele) pentru variabilele key_mgmt, pe perechi, de grup, proto.

Notă: ap_scan = 2 nu ar trebui să fie utilizat cu interfața driverul nl80211 (interfața curentă Linux). ap_scan = 1 este optimizat de lucru de lucru cu nl80211. Pentru a găsi rețele folosind SSID ascuns, scan_ssid = 1 în blocul de rețea poate fi utilizat cu nl80211.

Ghid Setări

Grup: Lista de grup acceptat (difuzare / multicast) cifruri pentru WPA
CCMP = AES în modul Contor cu CBC-MAC [RFC 3610, IEEE 802.11i / D7.0]
TKIP = Temporal Key Integrity Protocol [IEEE 802.11i / D7.0]
WEP104 = WEP (Wired Equivalent Privacy) cu cheie de 104 de biți
WEP40 = WEP (Wired Equivalent Privacy) cu cheie de 40 de biți [IEEE 802.11]
Dacă nu este setat, implicit este: CCMP TKIP WEP104 WEP40

pairwise: lista de pairwise acceptate (unicast) cifruri pentru WPA
CCMP = AES în modul Contor cu CBC-MAC [RFC 3610, IEEE 802.11i / D7.0]
TKIP = Temporal Key Integrity Protocol [IEEE 802.11i / D7.0]
NONE = Utilizare numai pentru grupuri Chei (depreciate, ar trebui să nu fie incluse dacă AP-uri care utilizeaza chei de tip pereche)

Proto: lista de protocoale acceptate
WPA = WPA / IEEE 802.11i / D3.0
RSN = WPA2 / IEEE 802.11i (de asemenea WPA2 poate fi folosit ca un alias pentru RSN)
Dacă nu este setat, implicit este: WPA RSN

key_mgmt: lista de protocoale de gestionare a cheilor autentificate acceptate
WPA-PSK = cheia WPA pre-partajată (acest lucru necesită câmp 'psk')
WPA-EAP = WPA folosind autentificarea EAP (aceasta se poate utiliza un program extern, de exemplu Xsupplicant, pentru IEEE 802.1x EAP autentificare
IEEE8021X = IEEE 802.1X folosind autentificare EAP și (opțional) chei WEP generate dinamic
NONE = WPA nu este utilizat; plaintext sau WEP statică poate fi utilizată
Dacă nu este setată, implicit este: WPA-PSK WPA-EAP

Creați un hash parolă pentru psk:

Totul este pregătit pentru a crea o configurație de rețea. Fișierul rezultat ar trebui să arate ceva de genul asta.

Valorile valide pentru BSSID. de grup. proto pairwise și poate fi determinată prin scanarea rețelei fără fir.

comanda iwlist a unui set de instrumente Wireless, LLC, locul ei este acum IW.

Configurarea Oficiul 802.1X

Standardul IEEE 802.1x definește un model mai riguros la o rețea WiFi. În schimb li se cere să prezinte parola psk un certificat de server.


  • ca_cert - Calea absolută către CA-certificatul în format DER PEM sau, trebuie să fie în măsură să confirme certificatul de server.
  • ca_path - Calea absolută către directorul în care sunt stocate fișierele CA-certificate (în format PEM) pe care doriți să le adăugați la lista de încredere.
  • client_cert - Calea absolută a unui certificat client în format PEM sau DER.
  • eap - O listă de spațiu separat de metode acceptate EAP: MD5, MSCHAPv2, OTP, GTC, TLS, PEAP sau TTLS.
  • Identitatea - Identitatea EAP, cum ar fi numele de utilizator.
  • Parola - parola EAP.

Deci, ar putea arăta unitate care este configurat să se conecteze la rețea în autentificarea WPA-Enterprise Mod 802.1X PEAP, în cazul în care doriți să introduceți un cont de utilizator:

Și acesta este un exemplu al unității care este configurat să se conecteze la rețea în modul WPA-Enterprise autentificare 802.1X EAP-TLS, care necesită server și client certificate:

Wpa_supplicant i legarea la placa de rețea

Pentru Gentoo Linux trebuie să adăugați 2 linii în /etc/conf.d/net.

Sprijinit -D drivere. Pentru chips-uri moderne și versiuni de kernel nl80211 adecvate. Pe hardware mai vechi pot zbura wext.


  • nl80211 - driver nou.
  • Extensiile fără fir Linux (generic) - wext.
  • cu fir - wpa_supplicant prin cablu Ethernet de conducător auto.
  • roboswitch - wpa_supplicant șofer comutator Broadcom.
  • bsd - BSD suport 802.11 (Atheros, etc.).
  • NDIS - driver Windows NDIS.

Placa de retea wlan0 ar trebui să fie zalinkovana cu lo0.

Ar trebui, de asemenea, adăugate la pornire-ul wpa_supplicant.

utilizatorii Debian adăuga o intrare în fișierul / etc / network / interfaces.

Utilizatorii RedHat se adaugă la / etc / sysconfig / wpa_supplicant i

și în fișierul / etc / sysconfig / network-scripts / ifcfg-wlan0

După ce wpa_supplicant a fost conectat cu succes la punctul de acces, puteți vedea în protocolul de configurare apel dmesg.

Dacă în schimb, vedeți o eroare:

cel mai probabil, este necesar să se utilizeze un driver în loc wext nl80211. Și cu eroarea:

dimpotrivă, trebuie să înlocuiască nl80211 în loc wext.
Într-o situație în care nu se poate identifica eroarea, executați wpa_supllicant direct cu -dD cheie.

materiale utilizate

Puteți utiliza, de asemenea dhcpcd.service systemd-demon pentru toate interfețele și dhcpcd @ interfață .service pentru o anumită interfață.
Eu personal cum funcționează. Wi-Fi pe laptop conectați manual prin intermediul wpa_supplicant. Nu știu de ce sa întâmplat, se pare că mult timp în urmă, nu am însușit NetworkManager (pentru un motiv oarecare nu a funcționat), și a fost nevoie de rețea. Acesta este conectat prin intermediul wpa_supplicant. Și apoi am folosit, foarte convenabil și laptop-ul nu se va conecta fără știrea mea, în

/ Wpa sunt configs pentru punctele dorite.

Heh, am un EEE PC-701 în valoare de Ubuntu 10.04 (!) - nu există nici un systemd, dar oh bine, voi face prin intermediul bash-script.
Și, în general - în cazul în care puteți citi despre conceptul de systemd? Ei bine, astfel încât să nu se usuce limba de predare ...