wpa_supplicant
wpa_supplicant – это wifi-проситель для обработки сетевой аутентификации.
Установка
В качестве предварительного условия в ядре должна быть активирована поддержка беспроводных сетей, как описано в Wifi/IEEE_802.11/ru, а также необходимых драйверов беспроводных адаптеров.[1]
USE-флаги
USE flags for net-wireless/wpa_supplicant IEEE 802.1X/WPA supplicant for secure wireless transfers
ap
|
Add support for access point mode |
broadcom-sta
|
Flag to help users disable features not supported by broadcom-sta driver |
crda
|
Use net-wireless/crda for regulatory domain loading instead of in-kernel (4.15+) support |
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 |
fils
|
Add support for Fast Initial Link Setup (802.11ai) |
hs2-0
|
Add support for 802.11u and Passpoint for HotSpot 2.0 |
macsec
|
Add support for wired macsec |
mbo
|
Add support Multiband Operation |
mesh
|
Add support for mesh mode |
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
Настройка
Файлы
Настройка для беспроводного интерфейса
Для использования с единственным беспроводным интерфейсом требуется всего один конфигурационный файл.
/etc/wpa_supplicant/wpa_supplicant.conf
# Позволять пользователям из группы '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 #
bzless /usr/share/doc/${P}/wpa_supplicant.conf.bz2 > /etc/wpa_supplicant/wpa_supplicant.conf
Настройка проводного 802.1X
Проводные соединения также можно обрабатывать с помощью wpa_supplicant, что полезно для сетей 802.1X. Создайте отдельный конфигурационный файл, содержащий настройки проводной сети. Пример ниже использует сертификаты для аутентификации, проверьте примеры других методов в man-странице wpa_supplicant.conf.
/etc/wpa_supplicant/wpa_supplicant_wired.conf
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)
/etc/conf.d/wpa_supplicant
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
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:
/etc/conf.d/wpa_supplicant
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:
/etc/conf.d/wpa_supplicant
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, чтобы увидеть список доступных драйверов, которые были встроены во время компиляции.
/etc/conf.d/wpa_supplicant
Настройка драйвера для wextwpa_supplicant_args="-D wext"
Настройка со сценариями Gentoo net.*
Укажите сетевым сценариям использовать wpa_supplicant:
/etc/conf.d/net
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
Подробнее о том, как подключиться, можно найти в Arch Linux wiki.[3]
Использование wpa_passphrase
wpa_supplicant включает в себя инструмент для быстрой записи блока network из командной строки для сетей с предварительным ключом (также известных как WPA-PSK или сети с паролем): wpa_passphrase.
root #
wpa_passphrase <ssid> [passphrase]
SSID необходим. Если пропустить парольную фразу, её можно будет ввести, когда она будет запрошена.
Получившийся вывод может быть затем скопирован или направлен в /etc/wpa_supplicant/wpa_supplicant.conf.
Редактирование вручную
Конечно, конфигурационный файл /etc/wpa_supplicant/wpa_supplicant.conf может быть также отредактирован вручную. Однако, это может быть очень утомительно, если компьютер должен подключаться ко множеству различных точек доступа.
Примеры можно найти в man 5 wpa_supplicant.conf и /usr/share/doc/wpa_supplicant-2.4-r3/wpa_supplicant.conf.bz2.
WPA2 с wpa_supplicant
Подключение к любой точке доступа с YourSSID
/etc/wpa_supplicant/wpa_supplicant.conf
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 }
Используйте bssid для указания точки доступа, к которой следует подключиться, по её MAC-адресу в случае, если есть повторители. Не забывайте воспользоваться wpa_passphrase <ssid> [passphrase] для создания psk
/etc/wpa_supplicant/wpa_supplicant.conf
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 }
Автоматическое подключение к любой незащищённой сети
/etc/wpa_supplicant/wpa_supplicant.conf
network={ key_mgmt=NONE priority=-999 }
Устранение проблем
В случае если это не работает как ожидалось, попробуйте что-нибудь из перечисленного ниже и проанализируйте вывод.
Проверьте среди известных ошибок
Запустите 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 — an up-and-coming wireless daemon for Linux..
Внешние ресурсы
- HOWTO: Удалённая точка доступа с wpa_supplicant (Форумы Gentoo)
- Расширяемый Протокол Аутентификации (Википедия)
- Расширяемый Протокол Аутентификации (wiki.freeradius.org)
- Разработчики wpa_supplicant приняли исправление, разрешающее сопоставление интерфейсов
- https://www.kb.cert.org/vuls/id/CHEU-AQNN3Z