- Работаем с Wi-Fi сетями из терминала в Linux. Просто и удобно!
- Linux WiFi из командной строки с wpa_supplicant
- Общие сведения о wpa_supplicant
- Установка
- Подключение без конфиг файла
- Подключение к Ad-Hoc сети
- Настройка для домашней сети
- Настройка 802.1X для офиса
- Привязка wpa_supplicant к сетевой карте
- Отладка
Работаем с Wi-Fi сетями из терминала в Linux. Просто и удобно!
Доброго времени суток всем юзерам! 🙂 Я думаю ни для кого не секрет, что при работе с ОС Linux, часто приходится работать в терминале. Терминал вещь очень хорошая если умело работать с ним и сегодня попробуем поработать с сетями Wi-Fi из под терминала 🙂
Итак, что нам нужно? Руки, голова, Wi-Fi-сети и конечно ваш любимый дистрибутив Linux 🙂
Для начала нам нужно определить, какие интерфейсы в компьютере работают с Wi-Fi сетями:
после чего вы увидите что то похожее на это:
Как мы видим по скриншоту выше, интерфейс называется wlan0.
Теперь давайте убедимся, что интерфейс wlan0 поднят и работает:
После того, как интерфейс поднят и работает, давайте просканируем сети Wi-Fi командой:
sudo iw dev wlan0 scan | less
должно выйти похожее на это:
Конечно названия сети (SSID) будет отличаться от той, что на скриншоте. Тут мы можем получить достаточную информацию о сетях Wi-Fi, такую как:
- Название (SSID);
- Тип безопасности (WEP, WPA/WPA2);
- Уровень сигнала и тд.
К примеру, если сеть не имеет пароля и соответственно открыта, то для подключения к ней используйте команду:
sudo iw dev wlan0 connect [SSID]
Если же сеть имеет тип безопасности WEP, то для подключения вводим команду (нужно знать пароль от сети):
sudo iw dev wlan0 connect [SSID] key 0:[Пароль от сети]
Для работы с зашифрованными сетями я рекомендую другой принцип работы, о нем ниже.
В данном случае нам понадобится утилита wpa_supplicant, она установлена не во всех дистрибутивах по-умолчанию. К примеру в openSUSE и Ubuntu она есть + есть к ней и GUI. GUI не установлен, ну и не надо 🙂
Устанавливаем эту утилиту, если ее у вас еще нету в системе и редактируем файл конфига wpa_supplicant:
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
Рекомендую добавлять это в конец файла, а также закоментируйте другие настройки в файле, которые вы не используете.
После того как файл отредактирован, сохраняем его и перезапускаем его командой в терминале:
sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
Теперь как вы подключены к желаемой сети, вам нужно получить IP-адрес, для этого выполняем команду:
Если вы все правильно сделали, то вы уже online + получили IP-адрес через DHCP, для проверки введите команду:
Будет что то похожее на:
Вот и все 🙂 Конечно, все тоже самое можно проделать и при помощи NetworkManager к примеру, но терминал есть терминал 🙂
Источник
Linux WiFi из командной строки с wpa_supplicant
В этой статье я расскажу, как можно настроить WiFi с помощью wpa_supplicant, без всяких Xorg/X11 утилит. Это необходимо для того, чтобы базовые службы ОС исправно работали с минимальным набором технических средств удаленного доступа. Программа будет исполняться как служба, настройки сделаны правкой конфиг файлов.
По-быстрому, установить соединение с открытой точкой доступа можно таким образом.
Если же надо всерьез и надолго, то прошу внутрь.
Общие сведения о wpa_supplicant
Что из себя представляет wpa_supplicant?
- Кросс-платформенная открытая реализация стандарта IEEE 802.11 для Linux, *BSD, Windows, Mac OS X и прочих систем.
- Полная поддержка WPA2, WPA и более старых протоколов безопасности беспроводной LAN сети.
- Приложение пользовательского пространства, выполняющее функции саппликанта и SME оператора, исполняющего MLME инструкции.
- WPA и полностью IEEE 802.11i/RSN/WPA2.
- WPA-PSK и WPA2-PSK (pre-shared key) («WPA-Personal»).
- WPA вместе с EAP (т.е., сервером аутентификации RADIUS) («WPA-Enterprise») управление ключами CCMP, TKIP, WEP (104/128 и 40/64 бит).
- Кэширование RSN, PMKSA: предварительную аутентификацию.
Как wpa_supplicant устанавливает связь с точкой доступа?
- Cетевой интерфейс должен исправно функционировать с установленным драйвером, прежде чем wpa_supplicant запустится.
- Wpa_supplicant запрашивает драйвер ядра сканировать доступные Basic Service Set (BSS).
- Wpa_supplicant производит выбор BSS в соответствии с настройками.
- Wpa_supplicant запрашивает драйвер ядра установить соединение с выбранной BSS.
- Для WPA-EAP: аутентификацию EAP производит встроенный IEEE 802.1X Supplicant, либо же внешний Xsupplicant с сервером аутентификации.
- Для WPA-EAP: получен мастер-ключ от IEEE 802.1X Supplicant.
- Для WPA-PSK wpa_supplicant использует пароль PSK в качестве мастер-ключа сессии.
- Wpa_supplicant производит с аутентификатором точки доступа 4-х этапное согласование [1] и групповое согласование ключей.
- Wpa_supplicant производит шифрование однонаправленных и широковещательных пакетов [2] , после чего начинается обычный обмен данными.
Главный и большой плюс wpa_supplicant — его юниксвейность, то есть соответствие принципу Unix Way, когда программа делает что-то одно, но делает это хорошо. В каком-то смысле wpa_supplicant также Gentoo Way. Она требует некоторого внимания и терпения вначале, но затем о ней можно напрочь забыть. После того как программа настроена и пущена в дело, она полностью выпадает из потока событий, превращаясь в пару строк из ps -ef . Она не сверкает и не мигает в системном трее, не оповещает о разведанных, подключенных и отключенных беспроводных сетях. Ее просто нет, пока вы сами ее не поищите.
Из минусов — сложность настройки и конфигурации. Много возни по сравнению с тырк-тырк-тырк в окне Network Manager , не говоря уже о WiFi подключении с любого Андроид устройства. Если вы собираетесь в поездку с Linux ноутбуком, то наверняка предпочтете более дружественный фронтенд настройки беспроводной сети, чтобы быстро подключаться к бесплатным точкам доступа WiFi в аэропорту, гостинице или в рабочей обстановке. Для домашнего же беспроводного интернета — самое то.
Установка
Если не выбирать графический фронтенд, то программа почти не тянет за собой никаких зависимостей. Для Gentoo Linux сгодится установка с выставленными флагами как показано.
- emerge -av wpa_supplicant #Gentoo
- aptitude install wpasupplicant #Debian
- yum install wpa_supplicant #Redhat
- pacman -S wpa_supplicant #Arch
Подключение без конфиг файла
Если вам нужно подключиться только один раз, то необходимости создавать файл конфигурации и вникать во все тонкости настройки, нет. Достаточно набрать несколько инструкций из командной строки.
Пример для открытой сети был показан в самом начале. Для закрытой WPA сети быстрое подключение выгладит так:
В начале надо запустить саму программу wpa_supplicant и сопутствующую wpa_cli .
Затем настройка из интерактивного интерфейса wpa_cli .
Для закрытой WPA2 сети:
В конце необходимо вручную запустить демон DHCP.
Подключение к Ad-Hoc сети
Никогда с такой не сталкивался, но готовым нужно быть ко всему. Подключение к открытой ad-hoc.
То же самое с помощью iw .
Настройка для домашней сети
Теперь самое интересное — настройка. Этот процесс задокументирован для Arch Wiki, Debian Wiki и Gentoo Wiki, но всех деталей там естественно нет.
Программа обычно ставится в директорию /etc/wpa_supplicant/ , и наша задача — правильно настроить конфигурационный файл wpa_supplicant.conf , и привязать его к автозапуску беспроводного сетевого интерфейса.
Начнем с wpa_supplicant.conf . Если вы подключаетесь из дома к WPA/WPA2, то скорее всего используете пароль для WiFi соединения, что соответствует режиму WPA-PSK («WPA-Personal») . Мы не будет рассматривать варианты с WEP шифрованием, так как оно ненамного лучше открытой сети.
Возьмем типовой конфиг из документации. Например такой.
Первая строка необходима, без ctrl_interface программа даже не запустится. GROUP=wheel нужно для того, чтобы запускать из под обычного пользователя в графическом интерфейсе wpa_gui, но это не наш путь. Поэтому меняем на рутовый GROUP=0 .
Каждой сети в файле настроек должен соответствовать блок network <> . Покопавшись в исходниках, обнаружил нашел годное писание переменной ap_scan в файле config.h , а в мануале и руководстве пользователя ее описание очень скудное.
ap_scan — AP scanning/selection
By default, wpa_supplicant requests driver to perform AP scanning and then uses the scan results to select a suitable AP. Another alternative is to allow the driver to take care of AP scanning and selection and use wpa_supplicant just to process EAPOL frames based on IEEE 802.11 association information from the driver.
1: wpa_supplicant initiates scanning and AP selection (default).
0: Driver takes care of scanning, AP selection, and IEEE 802.11 association parameters (e.g., WPA IE generation); this mode can also be used with non-WPA drivers when using IEEE 802.1X mode;
do not try to associate with APs (i.e., external program needs to control association). This mode must also be used when using wired Ethernet drivers.
2: like 0, but associate with APs using security policy and SSID (but not BSSID); this can be used, e.g., with ndiswrapper and NDIS drivers to enable operation with hidden SSIDs and optimized roaming;
in this mode, the network blocks in the configuration are tried one by one until the driver reports successful association; each network block should have explicit security policy (i.e., only one
option in the lists) for key_mgmt, pairwise, group, proto variables.
Note: ap_scan=2 should not be used with the nl80211 driver interface (the current Linux interface). ap_scan=1 is optimized work working with nl80211. For finding networks using hidden SSID, scan_ssid=1 in the network block can be used with nl80211.
- bssid — The Basic Service Set Identifier (BSSID), физический адрес точки доступа.
- key_mgmt — Протоколы аутентификации.
- pairwise — Для WPA2 укажите CCMP, а для WPA — TKIP.
- proto — WPA/WPA2.
- psk — Хэш пароля PreShared Key.
group: list of accepted group (broadcast/multicast) ciphers for WPA
CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key
WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key [IEEE 802.11]
If not set, this defaults to: CCMP TKIP WEP104 WEP40
pairwise: list of accepted pairwise (unicast) ciphers for WPA
CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
NONE = Use only Group Keys (deprecated, should not be included if APs support pairwise keys)
proto: list of accepted protocols
WPA = WPA/IEEE 802.11i/D3.0
RSN = WPA2/IEEE 802.11i (also WPA2 can be used as an alias for RSN)
If not set, this defaults to: WPA RSN
key_mgmt: list of accepted authenticated key management protocols
WPA-PSK = WPA pre-shared key (this requires ‘psk’ field)
WPA-EAP = WPA using EAP authentication (this can use an external program, e.g., Xsupplicant, for IEEE 802.1X EAP Authentication
IEEE8021X = IEEE 802.1X using EAP authentication and (optionally) dynamically generated WEP keys
NONE = WPA is not used; plaintext or static WEP could be used
If not set, this defaults to: WPA-PSK WPA-EAP
Создаем хэш пароля для psk :
Все готово, чтобы создать конфиг сети. Итоговый файл должен выглядеть как-то так.
Верные значения для bssid , group , proto и pairwise можно определить, сканируя беспроводную сеть.
Команда iwlist из набора Wireless Tools устарела, вместо нее сейчас iw .
Настройка 802.1X для офиса
Стандарт IEEE 802.1X определяет более строгую модель подключения к WiFi сети. Вместо psk пароля необходимо предъявить серверный сертификат.
- ca_cert — Абсолютный путь к CA-сертификату в формате PEM или DER, необходим для возможности подтверждения сертификата сервера.
- ca_path — Абсолютный путь к директории, где хранятся файлы CA-сертификатов (в формате PEM), которые вы хотите добавить в список доверенных.
- client_cert — Абсолютный путь к клиентскому сертификату в формате PEM или DER.
- eap — Разделенный пробелами список поддерживаемых методов EAP: MD5, MSCHAPV2, OTP, GTC, TLS, PEAP, или TTLS.
- identity — Идентификации EAP, например имя пользователя.
- password — Пароль EAP.
Так может выглядеть блок, настроенный для подключения к сети в режиме WPA-Enterprise с аутентификацией 802.1X PEAP, в котором требуется ввод данных учетной записи пользователя:
А это пример блока, настроенного для подключения к сети в режиме WPA-Enterprise с аутентификацией 802.1X EAP-TLS, в котором требуются серверный и клиентский сертификаты:
Привязка wpa_supplicant к сетевой карте
Для Gentoo Linux надо добавить 2 строки в /etc/conf.d/net .
Список поддерживаемых -D драйверов. Для современных чипов и версий ядра подойдет nl80211 . На старом железе может взлететь wext .
- nl80211 — New driver.
- wext — Linux wireless extensions (generic).
- wired — wpa_supplicant wired Ethernet driver.
- roboswitch — wpa_supplicant Broadcom switch driver.
- bsd — BSD 802.11 support (Atheros, etc.).
- ndis — Windows NDIS driver.
Сетевая карта wlan0 должна быть залинкована с lo0 .
Следует также добавить wpa_supplicant в автозапуск.
Пользователи Debian добавляют запись в файл /etc/network/interfaces .
Пользователи RedHat добавляют в /etc/sysconfig/wpa_supplicant
а в файл /etc/sysconfig/network-scripts/ifcfg-wlan0
Отладка
После того как wpa_supplicant успешно подключилась к точке доступа, в dmesg можно увидеть протокол установки соединения.
Если же вместо этого вы увидите ошибку:
то скорее всего, надо использовать драйвер wext вместо nl80211 . А с ошибкой:
наоборот, вместо wext надо подставить nl80211 .
В ситуации, когда вы не можете определить ошибку, запустите wpa_supllicant напрямую с ключем -dd .
Источник