iwd (Русский)

From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи iwd. Дата последней синхронизации: 12 октября 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

iwd (iNet wireless daemon) — беспроводной демон для Linux, созданный компанией Intel. Разработчики постарались снизить число внешних библиотек-зависимостей и использовать по максимуму возможности ядра Linux.

iwd может работать как отдельно, так и в паре с сетевым менеджером вроде ConnMan, systemd-networkd или NetworkManager.

Примечание: Не следуйте инструкциям из этой статьи, если iwd используется через сетевой менеджер и в статье этого сетевого менеджера явно не указано иное.

Установка

Установите пакет iwd.

Использование

Пакет iwd содержит клиентскую программу iwctl, демон iwd и утилиту для мониторинга Wi-Fi сетей iwmon.

iwgtkAUR предоставляет графический интерфейс и значок в трее.

Запустите/включите службу iwd.service. Для управления службой можно использовать команду iwctl или графический интерфейс iwgtk.

Примечание: Взаимодействовать с iwd могут только суперпользователь и пользователи из групп netdev или wheel. Для использования iwctl или iwgtk добавьте себя в одну из этих групп.

iwctl

Запуск в интерактивном режиме:

$ iwctl

В интерактивном режиме приглашение командной строки имеет вид [iwd]#.

Совет:
  • В интерактивном режиме работает автодополнение команд и названий устройств по нажатию клавиши Tab.
  • Для выхода из интерактивного режима отправьте EOF комбинацией Ctrl+d.
  • Все команды можно использовать как аргументы командной строки в неинтерактивном режиме. Пример: iwctl device wlan0 show.

Вывести список доступных команд:

[iwd]# help

Подключение к сети

Если вы не знаете название своего беспроводного интерфейса, запросите список всех Wi-Fi устройств:

[iwd]# device list

Если устройство или соответствующий адаптер выключен, включите его:

[iwd]# device устройство set-property Powered on
[iwd]# adapter адаптер set-property Powered on

Затем запустите сканирование сети (команда ничего не выведет):

[iwd]# station устройство scan

После этого можно вывести список обнаруженных сетей:

[iwd]# station устройство get-networks

Наконец, подключитесь к сети:

[iwd]# station устройство connect SSID
Примечание: Для автоматической настройки IP и DNS через DHCP нужно вручную включить встроенный DHCP-клиент или настроить отдельный DHCP-клиент.
Совет: Пользовательский интерфейс позволяет использовать автодополнение. Например, введите station и нажмите Tab Tab — отобразится список доступных устройств; введите первую букву названия устройства и нажмите Tab для завершения. Аналогично, connect Tab Tab выведет список доступных сетей, а Tab при частично введённом названии завершит его.

Если для подключения к сети необходим пароль, то появится соответствующий запрос. В неинтерактивном режиме его можно передать в виде аргумента:

$ iwctl --passphrase пароль station устройство connect SSID
Примечание:
  • iwd автоматически сохраняет пароли в каталоге /var/lib/iwd и использует их для автоподключения в будущем. См. #Настройка сети.
  • Если SSID содержит пробелы, то его необходимо обернуть двойными кавычками.
  • iwd поддерживает только PSK-пароли, от 8 до 63 ASCII-символов. В противном случае вы увидите сообщение об ошибке: PMK generation failed. Ensure Crypto Engine is properly configured.

Подключение к сети через WPS/WSC

Если ваша сеть поддерживает подключение по нажатию клавиши (Википедия:Wi-Fi Protected Setup), убедитесь, что сетевое устройство тоже может использовать эту возможность.

[iwd]# wsc list

После этого, если ваше устройство было в списке, выполните

[iwd]# wsc устройство push-button

и нажмите кнопку на маршрутизаторе. В принципе кнопку можно нажать и до этого (но не ранее, чем за 2 минуты).

Если при таком способе подключения сеть требует подтверждения PIN, изучите вывод команды help на предмет подходящих опций для команды wsc.

Отключение от сети

Отключиться от сети:

[iwd]# station устройство disconnect

Информация об устройстве и соединении

Вывести подробности о Wi-Fi устройстве (например, MAC-адрес):

[iwd]# device устройство show

Вывести состояние подключения, в том числе сети, подключённой к устройству:

[iwd]# station устройство show

Ранее посещённые сети

Вывести список сетей, к которым вы подключались в прошлом:

[iwd]# known-networks list

«Забыть» известную сеть:

[iwd]# known-networks SSID forget

iwgtk

iwgtkAUR предоставляет графический интерфейс, через который также можно взаимодействовать с iwd.

Запуск iwgtk без аргументов откроет окно приложения, с помощью которого можно включать/выключать адаптеры и устройства, изменять режимы их работы, просматривать доступные сети, подключаться к ним и управлять известными сетями.

Значок в трее

Для запуска демона, отображающего значок iwgtk в трее, выполните команду:

$ iwgtk -i

Если значок не появился, то, скорее всего, трей не поддерживает StatusNotifierItem API — в этом случае попробуйте использовать слой совместимости, например snixembed-gitAUR

Реализации трея, которые поддерживают StatusNotifierItem и поэтому работают из коробки:

  • KDE Plasma
  • swaybar
  • xfce4-panel

Реализации, поддерживающие только XEmbed и потому требующие установки snixembed-gitAUR:

  • AwesomeWM
  • i3bar

Автозапуск

Распространённый вариант использования iwgtk — запуск демона, отображающего значок в трее, при входе в систему. Если используемая вами среда рабочего стола поддерживает XDG Autostart, это должно происходить автоматически благодаря файлу iwgtk-indicator.desktop, который устанавливается AUR-пакетом в /etc/xdg/autostart/.

В качестве альтернативы пакет AUR также предоставляет юнит systemd для запуска демона. Если среда рабочего стола поддерживает юнит graphical-session.target, то для автозапуска iwgtk через systemd включите пользовательский юнит iwgtk.service.

Настройка сети

По умолчанию iwd хранит настройки сети в каталоге /var/lib/iwd. Файл настроек именуется по схеме сеть.тип, где сеть — SSID сети, а, соответственно, .тип — её тип (.open, .psk или .8021x). В файле хранится зашифрованный PreSharedKey, а также (опционально) Passphrase открытым текстом. Файл можно создать вручную, не вызывая iwctl. Кроме того, в файле можно указывать и другие настройки, подробнее см. iwd.network(5).

Примечание: В строковых значениях, в том числе идентификаторах и паролях, некоторые символы могут быть экранированы обратным слешем. Ведущие пробелы, \n, \r и собственно обратные слеши экранировать обязательно. Смотрите iwd.network(5).

WPA-PSK

Пример минимального файла настроек для подключения к сети WPA-PSK или WPA2-PSK с SSID «spaceship» и паролем «test1234»:

/var/lib/iwd/spaceship.psk
[Security]
PreSharedKey=aafb192ce2da24d8c7805c956136f45dd612103f086034c402ed266355297295
Примечание: В качестве имени файла используется SSID сети, но только если последний состоит из цифр, букв и символов - _. При наличии иных символов имя файла имеет вид hex-строки, начинающейся с символа =, после которого идёт SSID, закодированный в шестнадцатеричном виде.

PreSharedKey можно вычислить одним из двух методов:

  • Указав пароль открытым текстом в файле настроек:
/var/lib/iwd/spaceship.psk
[Security]
Passphrase=test1234
Ключ будет добавлен в файл при первом подключении:
/var/lib/iwd/spaceship.psk
[Security]
Passphrase=test1234
PreSharedKey=aafb192ce2da24d8c7805c956136f45dd612103f086034c402ed266355297295

WPA Enterprise

EAP-PWD

Для подключения к производственным сетям с EAP-PWD защитой создайте файл essid.8021x в каталоге /var/lib/iwd со следующим содержимым:

/var/lib/iwd/essid.8021x
[Security]
EAP-Method=PWD
EAP-Identity=ваш_email_на_предприятии
EAP-Password=ваш_пароль

[Settings]
AutoConnect=true

Если автоподключение к точке доступа не требуется, измените значение последней опции на False. После этого подключаться к сети придётся вручную командой iwctl. То же самое касается пароля — если вы не хотите хранить его в файле в открытом виде, то просто удалите соответствующую опцию и подключайтесь вручную.

Примечание: Нет возможности изменить приоритеты различных SSID, поэтому в качестве обходного пути можно установить AutoConnect=false.

EAP-PEAP

Как и в случае EAP-PWD, создайте файл essid.8021x. Предварительно выясните, какой CA-сертификат используется в вашей организации. Ниже дан пример файла настроек с MSCHAPv2-аутентификацией:

/var/lib/iwd/essid.8021x
[Security]
EAP-Method=PEAP
EAP-Identity=anonymous@realm.edu
EAP-PEAP-CACert=/path/to/root.crt
EAP-PEAP-ServerDomainMask=radius.realm.edu
EAP-PEAP-Phase2-Method=MSCHAPV2
EAP-PEAP-Phase2-Identity=johndoe@realm.edu
EAP-PEAP-Phase2-Password=hunter2

[Settings]
AutoConnect=true

Пароли MsCHAPv2 также можно хранить в виде хэша. Правильный хэш md4 может быть вычислен такой командой:

$ iconv -t utf16le | openssl md4 -provider legacy

Завершите ввод пароля нажатием Ctrl+d (не нажимайте Enter). Полученный хэш поместите в параметр EAP-PEAP-Phase2-Password-Hash.

Совет: Если вы собираетесь использовать eduroam, изучите также раздел #eduroam.

TTLS-PAP

Как и в случае EAP-PWD, создайте файл essid.8021x. Предварительно выясните, какой CA-сертификат используется в вашей организации. Ниже дан пример файла настроек с PAP-аутентификацией:

/var/lib/iwd/essid.8021x
[Security]
EAP-Method=TTLS
EAP-Identity=anonymous@uni-test.de
EAP-TTLS-CACert=cert.pem
EAP-TTLS-ServerDomainMask=*.uni-test.de
EAP-TTLS-Phase2-Method=Tunneled-PAP
EAP-TTLS-Phase2-Identity=user
EAP-TTLS-Phase2-Password=password

[Settings]
AutoConnect=true

eduroam

eduroam предоставляет утилиту для настройки (configuration assistant tool, CAT), но она, к сожалению, не поддерживает iwd. Тем не менее, загружаемый установщик представляет собой обычный Python-скрипт. Из него нетрудно извлечь необходимые параметры настройки, включая сертификат и маску домена.

В таблице ниже приведены значения параметров iwd, которые используются в переменных установочного сценария CAT.

Опция iwd Переменная скрипта CAT
essid один из Config.ssids
EAP-Method Config.eap_outer
EAP-Identity Config.anonymous_identity
EAP-метод-CACert содержимое Config.CA или абсолютный путь к файлу .pem, содержащему Config.CA
EAP-метод-ServerDomainMask один из Config.servers
EAP-метод-Phase2-Method Config.eap_inner, если он не равен PAP, иначе Tunneled-PAP
EAP-метод-Phase2-Identity имя_пользователя@Config.user_realm

где метод — это содержимое EAP-Method, которое должно быть TTLS или PEAP. После извлечения всей необходимой информации и преобразования её в настройки iwd можно поместить её в файл с именем essid.8021x, как описано в разделах выше.

Примечание:
  • Ваш провайдер может не требовать параметр EAP-Identity, в этом случае укажите для него значение anonymous@Config.user_realm.
  • Если ваш EAP-метод-ServerDomainMask начинается с DNS:, используйте только часть после DNS:.

Прочие случаи

В репозитории разработчиков можно найти много дополнительных примеров.

Дополнительные настройки

Для хранения большинства настроек вполне подойдёт файл /etc/iwd/main.conf. См. iwd.config(5).

Отключение автоподключения к сети

Создайте/отредактируйте файл /var/lib/iwd/сеть.тип:

/var/lib/iwd/spaceship.psk (для примера)
[Settings]
AutoConnect=false

Отключение сканирования сетей

По умолчанию, если iwd ни к чему не подключён, он периодически выполняет сканирование для поиска доступных сетей. Чтобы это отключить (и сканировать вручную при необходимости), создайте/отредактируйте файл /etc/iwd/main.conf:

/etc/iwd/main.conf
[Scan]
DisablePeriodicScan=true

Включение встроенной настройки сети

С версии 0.19 iwd может выполнять привязку IP-адресов и настраивать маршруты с помощью встроенного DHCP-клиента или в соответствии со статической конфигурацией. Это неплохая альтернатива использованию отдельных DHCP-клиентов.

Чтобы активировать возможности iwd по настройке сети, добавьте следующие строки в /etc/iwd/main.conf:

/etc/iwd/main.conf
[General]
EnableNetworkConfiguration=true

Также можно задать параметр маршрутизации RoutePriorityOffset:

/etc/iwd/main.conf
[Network]
RoutePriorityOffset=300

Поддержка IPv6

С версии 1.10 iwd имеет поддержку IPv6, но в версиях до 2.0 она по умолчанию она отключена. С версии 2.0 она включена по умолчанию.

Для отключения добавьте следующие строки в файл настроек:

/etc/iwd/main.conf
[Network]
EnableIPv6=false

Для включения на версиях до 2.0:

/etc/iwd/main.conf
[Network]
EnableIPv6=true

Эта настройка должна быть включена, если вы желаете использовать DHCPv6 или статическую IPv6-конфигурацию. Её также можно задать для отдельной сети.

Статический IP-адрес в настройках сети

Добавьте следующие строки в файл /var/lib/iwd/сеть.тип:

/var/lib/iwd/spaceship.psk
[IPv4]
Address=192.168.1.10
Netmask=255.255.255.0
Gateway=192.168.1.1
Broadcast=192.168.1.255
DNS=192.168.1.1

Выбор DNS-менеджера

На данный момент iwd поддерживает два DNS-менеджера — systemd-resolved и resolvconf.

Настройки для systemd-resolved:

/etc/iwd/main.conf
[Network]
NameResolvingService=systemd

Для resolvconf:

/etc/iwd/main.conf
[Network]
NameResolvingService=resolvconf
Примечание: Если опция не задана, то по умолчанию используется systemd-resolved.

Разрешить всем пользователям считывать состояние

Если вы хотите разрешить любому пользователю читать информацию о состоянии, но не изменять настройки, создайте файл настроек D-Bus:

/etc/dbus-1/system.d/iwd-allow-read.conf
<!-- Allow any user to read iwd status information. Overrides some part
     of /usr/share/dbus-1/system.d/iwd-dbus.conf. -->

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>

  <policy context="default">
    <deny send_destination="net.connman.iwd"/>
    <allow send_destination="net.connman.iwd" send_interface="org.freedesktop.DBus.Properties" send_member="GetAll" />
    <allow send_destination="net.connman.iwd" send_interface="org.freedesktop.DBus.Properties" send_member="Get" />
    <allow send_destination="net.connman.iwd" send_interface="org.freedesktop.DBus.ObjectManager" send_member="GetManagedObjects" />
    <allow send_destination="net.connman.iwd" send_interface="net.connman.iwd.Device" send_member="RegisterSignalLevelAgent" />
    <allow send_destination="net.connman.iwd" send_interface="net.connman.iwd.Device" send_member="UnregisterSignalLevelAgent" />
  </policy>

</busconfig>

Решение проблем

Подробная отладка TLS

Это может пригодиться при решении проблем с MSCHAPv2 или TTLS. Задайте следующую переменную окружения с помощью drop-in файла:

/etc/systemd/system/iwd.service.d/tls-debug.conf
[Service]
Environment=IWD_TLS_DEBUG=TRUE

После этого проверьте логи iwd, выполнив journalctl -u iwd.service с правами root.

Перезапуск iwd.service после загрузки

Сообщалось, что на некоторых машинах для работы службы iwd.service необходимо перезапустить её после загрузки. Смотрите FS#63912 и тему на форуме. Вероятно, это происходит потому, что ядро Linux и службы загружаются слишком быстро и iwd запускается до того, как беспроводная сетевая карта успеет включиться. В качестве обходного пути создайте drop-in файл, добавляющий задержку перед запуском службы:

[Service]
ExecStartPre=/usr/bin/sleep 2

Затем выполните daemon-reload.

Проблемы с подключением после перезагрузки

Низкая энтропия системы может вызвать проблемы с подключением, особенно после перезагрузки. Рекомендации по увеличению энтропии можно найти в статье Random number generation.

udev не переименовывает беспроводное устройство

С версии 1.0 iwd отключает присвоение беспроводным интерфейсам предсказуемых имён. Для этого используется link-файл systemd, который запрещает udev присваивать беспроводным интерфейсам типовые имена wlp#s#:

/usr/lib/systemd/network/80-iwd.link
[Match]
Type=wlan

[Link]
NamePolicy=keep kernel

В результате после перезагрузки интерфейсы будут иметь имена wlan#. Это позволяет избежать ситуации гонок между iwd и udev при переименовании интерфейсов.

Если это привело к каким-то нежелательным последствиям, link-файл можно замаскировать с помощью символической ссылки:

# ln -s /dev/null /etc/systemd/network/80-iwd.link

Нет DHCP в режиме точки доступа

Когда iwd работает в режиме точки доступа, клиенты могут не получить IP-адрес по протоколу DHCP. Нужно разрешить настройку сети с помощью iwd на управляемых интерфейсах:

/etc/iwd/main.conf
[General]
EnableNetworkConfiguration=True

Создайте файл, если его ещё не существует.

WiFi постоянно отключается из-за сбоя iwd

Некоторые пользователи сталкиваются с обрывом связи WiFi и переподключениями, но через время подключиться всё-таки удаётся.

Пользователи сообщают о падениях ([1]) службы iwd.service.

Основная причина проблемы заключается в наличии нескольких конфликтующих служб, управляющих одними и теми же сетевыми подключениями. Для решения этой проблемы проверьте, не включены ли они одновременно.

Ошибка при загрузке закрытого ключа клиента

Для загрузки файлов ключей iwd использует модуль ядра pkcs8_key_parser. Он должен загружаться автоматически через systemd-modules-load.service(8) благодаря файлу /usr/lib/modules-load.d/pkcs8.conf, но если iwd был установлен только что, то модуль не будет загружен до перезагрузки системы.

Если при попытке подключения к сетям WPA Enterprise в журнале появляются сообщения типа Error loading client private key /путь/к/ключу, загрузите модуль вручную:

# modprobe pkcs8_key_parser

iwd постоянно переподключается к разным точкам доступа

iwd будет подключаться к другим известным точкам доступа, если соединение с текущей точкой доступа слишком плохое.

Это записывается в журнал: wlan0: deauthenticating from xx:xx:xx:xx:xx:xx by local choice (Reason: 3=DEAUTH_LEAVING)

Проверьте мощность сигнала:

iwctl station wlan0 show | grep RSSI

Вы можете изменить порог мощности, чтобы разрешить использование плохого соединения. По умолчанию RoamThreshold имеет значение -70, а RoamThreshold5G имеет значение -76.

/etc/iwd/main.conf
[General]
RoamThreshold=-75
RoamThreshold5G=-80

Смотрите также