wpa_supplicant
wpa_supplicant — это Wi-Fi-проситель для обработки аутентификации части управления сетью, дополнительно он также может поднимать сетевые интерфейсы.
Установка
В качестве предварительного условия в ядре должна быть активирована поддержка беспроводных сетей, как описано в IEEE 802.11, а также необходимых драйверов беспроводных адаптеров[1].
USE-флаги
USE flags for net-wireless/wpa_supplicant IEEE 802.1X/WPA supplicant for secure wireless transfers
+fils
|
Add support for Fast Initial Link Setup (802.11ai) |
+hs2-0
|
Add support for 802.11u and Passpoint for HotSpot 2.0 |
+mbo
|
Add support Multiband Operation |
+mesh
|
Add support for mesh mode |
ap
|
Add support for access point mode |
broadcom-sta
|
Flag to help users disable features not supported by broadcom-sta driver |
dbus
|
Enable dbus support for anything that needs it (gpsd, gnomemeeting, etc) |
eap-sim
|
Add support for EAP-SIM authentication algorithm |
eapol-test
|
Build and install eapol_test binary |
fasteap
|
Add support for FAST-EAP authentication algorithm |
macsec
|
Add support for wired macsec |
p2p
|
Add support for Wi-Fi Direct mode |
privsep
|
Enable wpa_priv privledge separation binary |
ps3
|
Add support for ps3 hypervisor driven gelic wifi |
qt5
|
Add support for the Qt 5 application and UI framework |
readline
|
Enable support for libreadline, a GNU line-editing library that almost everyone wants |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
smartcard
|
Add support for smartcards |
tdls
|
Add support for Tunneled Direct Link Setup (802.11z) |
tkip
|
Add support for WPA TKIP (deprecated due to security flaws in 2009) |
uncommon-eap-types
|
Add support for GPSK, SAKE, GPSK_SHA256, IKEV2 and EKE |
wep
|
Add support for Wired Equivalent Privacy (deprecated due to security flaws in 2004) |
wimax
|
Add support for Wimax EAP-PEER authentication algorithm |
wps
|
Add support for Wi-Fi Protected Setup |
Emerge
После просмотра USE-флагов установите net-wireless/wpa_supplicant, используя команду Portage emerge:
root #
emerge --ask net-wireless/wpa_supplicant
Direct connect
Quick Connect
To not store any clear text password in history, history is disabled. This should be used temporarily to test that it is possible to connect to the access point.
root #
set +o history
root #
wpa_supplicant -i wlp0s20f3 -c <(wpa_passphrase ssid password) &
root #
set -o history
Process output when connect direct: 'wpa_supplicant -iwlan0 -c /dev/fd/63
Connection for two interfaces
wpa_supplicant can control multiple interfaces (radios) either by running one process for each interface separately or by running just one process and list of options at command line. Each interface is separated with -N argument. Following command would start wpa_supplicant for two interfaces
user $
wpa_supplicant -c wpa1.conf -i wlan0 -D nl80211 -N -c wpa2.conf -i ath0 -D wext
Настройка
Файлы
Минимальная конфигурация
wpa_supplicant includes a tool to quickly write a network block from the command line for pre-shared key (WPA-PSK aka password) networks, wpa_passphrase.
root #
wpa_passphrase ssid password >> /etc/wpa_supplicant/wpa_supplicant.conf
When password is stored as hash instead of clear text it is required to add key_MGMT=WPA-EAP and eap=PEAP to the configuration file that is not generated by default
Setup for wireless interface
Для использования с единственным беспроводным интерфейсом требуется всего один конфигурационный файл.
# Позволять пользователям из группы 'wheel' контролировать wpa_supplicant
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
# Разрешить wpa_gui / wpa_cli запись в файл
update_config=1
Чтобы разрешить непривилегированным пользователям управлять соединением с использованием wpa_gui / wpa_cli, убедитесь, что пользователи добавлены в группу wheel.
Этот файл по умолчанию не существует; хорошо документированный шаблонный файл конфигурации может быть скопирован из /usr/share/doc/${P}/wpa_supplicant.conf.bz2, где значение переменной P – название и версия установленного в данный момент wpa_supplicant:
root #
bzcat /usr/share/doc/${P}/wpa_supplicant.conf.bz2 > /etc/wpa_supplicant/wpa_supplicant.conf
WPA2 с wpa_supplicant
Подключение к любой точке доступа с YourSSID
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
#ap_scan=0
#update_config=1
network={
ssid="YourSSID"
psk="your-secret-key"
scan_ssid=1
proto=RSN
key_mgmt=WPA-PSK
group=CCMP TKIP
pairwise=CCMP TKIP
priority=5
}
Configuration file with dynamic WEP keys
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
network={
ssid="1x-test"
scan_ssid=1
key_mgmt=IEEE8021X
eap=TLS
identity="user@example.com"
ca_cert="/etc/cert/ca.pem"
client_cert="/etc/cert/user.pem"
private_key="/etc/cert/user.prv"
private_key_passwd="password"
eapol_flags=3
}
Allows more or less all configuration modes
The configuration options are used based on what security policy is used in the selected SSID. This is mostly for testing and is not recommended for normal use
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
network={
ssid="example"
scan_ssid=1
key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk="very secret passphrase"
eap=TTLS PEAP TLS
identity="user@example.com"
password="foobar"
ca_cert="/etc/cert/ca.pem"
client_cert="/etc/cert/user.pem"
private_key="/etc/cert/user.prv"
private_key_passwd="password"
phase1="peaplabel=0"
ca_cert2="/etc/cert/ca2.pem"
client_cert2="/etc/cer/user.pem"
private_key2="/etc/cer/user.prv"
private_key2_passwd="password"
}
Настройка проводного 802.1X
Проводные соединения также можно обрабатывать с помощью wpa_supplicant, что полезно для сетей 802.1X. Создайте отдельный конфигурационный файл, содержащий настройки проводной сети. Пример ниже использует сертификаты для аутентификации, проверьте примеры других методов в man-странице wpa_supplicant.conf.
This can be used with wired or roboswitch interface (-Dwired or -Droboswitch on command line)
ctrl_interface=/var/run/wpa_supplicant
eapol_version=1
ap_scan=0
fast_reauth=1
network={
key_mgmt=IEEE8021X
eap=TLS
identity="COMPUTERAACT$@DOMAIN"
ca_cert="/etc/wpa_supplicant/ca.pem"
client_cert="/etc/wpa_supplicant/COMPUTERACCT.pem"
private_key="/etc/wpa_supplicant/COMPUTERAACT.key"
private_key_passwd="secret_password"
eapol_flags=0
}
Так как конфигурационный файл содержит конфиденциальную информацию, установите соответствующий режим.
root #
chmod 600 /etc/wpa_supplicant/wpa_supplicant_wired.conf
wpa_supplicant требует нескольких дополнительных параметров, чтобы применить вышеописанную конфигурацию к проводному интерфейсу (eth0) Учтите, что приведённые ниже аргументы wpa_supplicant подразумевают, что версия wpa_supplicant >=2.6-r2 (-M, CONFIG_MATCH_IFACE=y)
wpa_supplicant_args="-ieth0 -Dwired -c/etc/wpa_supplicant/wpa_supplicant_wired.conf -M -c/etc/wpa_supplicant/wpa_supplicant.conf"
Позвольте wpa_supplicant обрабатывать запуск/остановку интерфейсов удалением их из /etc/init.d и активацией службы wpa_supplicant
root #
/etc/init.d/net.eth0 stop
root #
/etc/init.d/net.wlan0 stop
root #
rm /etc/init.d/net.wlan0 /etc/init.d/net.eth0
root #
rc-update add wpa_supplicant
root #
/etc/init.d/wpa_supplicant start
Проверьте статус проводного интерфейса через wpa_cli
Connect directly to the wireless access point from the command line
root #
wpa_cli
wpa_cli v2.8 Copyright (c) 2004-2019, Jouni Malinen <j@w1.fi> and contributors This software may be distributed under the terms of the BSD license. See README for more details. Selected interface 'p2p-dev-wlan0' Interactive mode > interface eth0 Connected to interface 'eth0. > status bssid=00:00:00:00:00:00 freq=0 ssid= id=0 mode=station pairwise_cipher=NONE group_cipher=NONE key_mgmt=IEEE 802.1X (no WPA) wpa_state=COMPLETED ip_address=10.10.10.100 p2p_device_address=bb:bb:bb:bb:bb:bb address=aa:aa:aa:aa:aa:aa Supplicant PAE state=AUTHENTICATED suppPortStatus=Authorized EAP state=SUCCESS selectedMethod=13 (EAP-TLS) eap_tls_version=TLSv1 EAP TLS cipher=ECDHE-RSA-AES256-SHA ...
Настройка сетевого менеджера
Приложения, перечисленные в списке Network management, обычно не работают вместе. Убедитесь, что одновременно запущен только один из этих сервисов. Запуск более одного сервиса управления сетью приведёт к непредсказуемым результатам!
Убедитесь, что выбрали соответствующую установку.
Настройка с dhcpcd в качестве менеджера сетей
First follow the setup guide for dhcpcd.
Emerge wpa_supplicant (Version >=2.6-r2 is needed in order to get the CONFIG_MATCH_IFACE option added in April 2017):
root #
emerge --ask net-wireless/wpa_supplicant
Using OpenRC
Complete its conf.d file with the -M
option for the wireless network interface:
wpa_supplicant_args="-B -M -c /etc/wpa_supplicant/wpa_supplicant.conf"
In case authentication for the wired interface is needed, this configuration file should look like:
wpa_supplicant_args="-ieth0 -Dwired -c/etc/wpa_supplicant/wpa_supplicant_wired.conf -B -M -c/etc/wpa_supplicant/wpa_supplicant.conf"
With the configuration done, run it as a service:
root #
rc-update add wpa_supplicant default
root #
rc-service wpa_supplicant start
Using Systemd
Systemd allows a simpler per-device setup without needing to create the above conf.d files. As explained under wpa_supplicant item in the Native services section, a service symlink such as wpa_supplicant@wlan0.service
looks for a separate configuration file to manage the device wlan0
in this case.
To configure a specific device this way, first copy or rename the /etc/wpa_supplicant/wpa_supplicant.conf file as /etc/wpa_supplicant/wpa_supplicant-DEVNAME.conf where DEVNAME
should be the name of the device, such as wlan0
.
Then, navigate to /etc/systemd/system/multi-user.target.wants and create the symlink:
root #
ln -s /lib/systemd/system/wpa_supplicant@.service wpa_supplicant@DEVNAME.service
where DEVNAME
is same device name as in the conf file above.
Note the @ signs on both arguments in the symlink step.
Test the system:
root #
systemctl daemon-reload
root #
systemctl start wpa_supplicant@DEVNAME
root #
systemctl status wpa_supplicant@DEVNAME
В случае если необходим устаревающий драйвер WEXT, изменение драйвера может помочь решить проблемы, когда адаптер подключается и тут же отключается по причине 3. Выполните wpa_supplicant -h, чтобы увидеть список доступных драйверов, которые были встроены во время компиляции.
wpa_supplicant_args="-D wext"
Настройка со сценариями Gentoo net.*
Укажите сетевым сценариям использовать wpa_supplicant:
modules_wlan0="wpa_supplicant"
config_wlan0="dhcp"
Хорошая идея после этой настройки изменить права доступа, чтобы быть уверенным в том, что WiFi пароли не могут быть просмотрены в открытом виде всеми, кто использует компьютер:[2]
root #
chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf
Setup for NetworkManager
NetworkManager configured with wpa_supplicant as WiFi backend is able to use D-Bus to start wpa_supplicant when needed. Therefore it is recommended to keep the wpa_supplicant service itself stopped at boot time.
Использование
Использование wpa_gui
Самый простой способ использовать wpa_supplicant — через его графический интерфейс wpa_gui. Чтобы включить его, соберите wpa_supplicant с USE-флагом qt5
.
Использование wpa_cli
Wpa_supplicant также имеет интерфейс командной строки. Ввод wpa_cli запускает его в интерактивном режиме с дополнением по tab. Ввод help
в командной строке отобразит список всех доступных команд (нажмите "развернуть", чтобы увидеть ниже вывод команды wpa_cli):
user $
wpa_cli
wpa_cli v2.5 Copyright (c) 2004-2015, Jouni Malinen <j@w1.fi> and contributors This software may be distributed under the terms of the BSD license. See README for more details. Selected interface 'wlan0' Interactive mode > scan OK > scan_results bssid / frequency / signal level / flags / ssid 01:23:45:67:89:ab 2437 0 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS] hotel-free-wifi > add_network 0 > set_network 0 ssid "hotel-free-wifi" OK > set_network 0 psk "password" OK > enable_network 0 OK <3>CTRL-EVENT-SCAN-RESULTS <3>WPS-AP-AVAILABLE <3>Trying to associate with 01:23:45:67:89:ab (SSID='hotel-free-wifi' freq=2437 MHz) <3>Associated with 01:23:45:67:89:ab <3>WPA: Key negotiation completed with 01:23:45:67:89:ab [PTK=CCMP GTK=TKIP] <3>CTRL-EVENT-CONNECTED - Connection to 01:23:45:67:89:ab completed [id=0 id_str=] > save_config OK > quit
For switching to another Wi-Fi:
user $
wpa_cli
wpa_cli v2.5 Copyright (c) 2004-2015, Jouni Malinen <j@w1.fi> and contributors This software may be distributed under the terms of the BSD license. See README for more details. > list_networks network id / ssid / bssid / flags 0 TAMO any 1 ORBI705 any 2 ORBI any 3 Tangerine any 4 271 any 5 POCO X3 Pro any 6 Orbi Guest any 7 hackerspace any 8 HUAWEI-25 a-2 any 9 A1-13 any > select_network 1
Подробнее о том, как подключиться, можно найти в Arch Linux wiki.[3]
Редактирование вручную
Конечно, конфигурационный файл /etc/wpa_supplicant/wpa_supplicant.conf может быть также отредактирован вручную. Однако, это может быть очень утомительно, если компьютер должен подключаться ко множеству различных точек доступа.
Примеры можно найти в wpa_supplicant.conf(5) и /usr/share/doc/wpa_supplicant-2.4-r3/wpa_supplicant.conf.bz2.
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
ap_scan=1
network={
bssid=00:50:17:31:1a:11
ssid="YourSSID"
psk="your-secret-key"
scan_ssid=1
proto=RSN
key_mgmt=WPA-PSK
group=CCMP TKIP
pairwise=CCMP TKIP
priority=5
}
Автоматическое подключение к любой незащищённой сети
network={
key_mgmt=NONE
priority=-999
}
Устранение проблем
В случае если это не работает как ожидалось, попробуйте что-нибудь из перечисленного ниже и проанализируйте вывод.
Проверьте среди известных ошибок
Check USE Flags
Two use flags are disabled by default for older wifi protocols due to known security flas: tkip and wep. Enable those use flags for older wifi routers and re-install wpa_supplicant.
rfkill: WLAN soft blocked
If rfkill is blocking the interface, first find the interface number with:
user $
rfkill list
0: ideapad_wlan: Wireless LAN Soft blocked: yes Hard blocked: no 1: ideapad_bluetooth: Bluetooth Soft blocked: yes Hard blocked: no 2: hci0: Bluetooth Soft blocked: yes Hard blocked: no 3: phy0: Wireless LAN Soft blocked: yes Hard blocked: no
Then the interface can be unblocked with:
root #
rfkill unblock 3
Запустите wpa_supplicant в режиме отладки
Убедитесь, что остановлены все запущенные процессы wpa_supplicant:
root #
killall wpa_supplicant
Что-либо наподобие этого может быть использовано для отладки (нажмите "развернуть", чтобы посмотреть вывод ниже):
root #
wpa_supplicant -Dnl80211 -iwlan0 -C/var/run/wpa_supplicant/ -c/etc/wpa_supplicant/wpa_supplicant.conf -dd
wpa_supplicant v2.2 random: Trying to read entropy from /dev/random Successfully initialized wpa_supplicant Initializing interface 'wlp8s0' conf '/etc/wpa_supplicant/wpa_supplicant.conf' driver 'nl80211' ctrl_interface '/var/run/wpa_supplicant' bridge 'N/A' Configuration file '/etc/wpa_supplicant/wpa_supplicant.conf' -> '/etc/wpa_supplicant/wpa_supplicant.conf' Reading configuration file '/etc/wpa_supplicant/wpa_supplicant.conf' ctrl_interface='DIR=/var/run/wpa_supplicant GROUP=wheel' update_config=1 Line: 6 - start of a new network block
Включение журналирования
Включение журналирования для Gentoo сценариев net.*
modules_wlan0="wpa_supplicant"
wpa_supplicant_wlan0="-Dnl80211 -d -f /var/log/wpa_supplicant.log"
config_wlan0="dhcp"
Теперь из одного терминала запустите команду tail, чтобы отслеживать вывод, и перезапустите устройство net.wlan0 в другом терминале:
root #
tail -f /var/log/wpa_supplicant.log
root #
/etc/init.d/net.wlan0 restart
Ссылки
Смотрите также
- iwd — a wireless daemon intended to replace wpa_supplicant
Внешние ресурсы
- wpa_supplicant / hostapd Developers' documentation for wpa_supplicant and hostapd
- sample config for wpa_supplicant
- HOWTO: Remote access point with wpa_supplicant (Gentoo Forums)
- Extensible Authentication Protocol (Wikipedia)
- Extensible Authentication Protocol (wiki.freeradius.org)
- wpa_supplicant upstream just accepted patch to allow interface matching
- https://www.kb.cert.org/vuls/id/CHEU-AQNN3Z