Jump to content
From ArchWiki

Ссылки по теме

- Настройка сети
- Настройка беспроводной сети
- wpa_supplicant

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

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

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

## Установка

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

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

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

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

### iwctl

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

    $ iwctl

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

Совет:

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

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

    [iwd]# help

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

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

    [iwd]# device list

Просканируйте сети:

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

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

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

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

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

Совет: Пользовательский интерфейс позволяет использовать автодополнение. Например, введите `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

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

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

- Вычислив на основе SSID и пароля утилитами wpa_passphrase (входит в wpa_supplicant) или wpa-pskAUR. Подробнее см. wpa_supplicant#Connecting with wpa_passphrase.

### 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`. То же самое касается пароля — если вы не хотите хранить его в файле в открытом виде, то просто удалите соответствующую опцию и подключайтесь вручную.

#### EAP-PEAP

Как и в случае EAP-PWD, создайте файл `essid.8021x`. Предварительно выясните, какой CA-сертификат использует на вашем предприятии. Для работы MSCHAPv2 необходимо также установить ppp (см. MS-CHAPv2). Ниже дан пример файла настроек с 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

Совет: Если вы собираетесь использовать 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
--- | ---
имя файла | один из `Config.ssids`
`EAP-Method` | `Config.eap_outer`
`EAP-Identity` | `Config.anonymous_identity`
`EAP-PEAP-CACert` | `Config.CA`
`EAP-PEAP-ServerDomainMask` | один из `Config.servers`
`EAP-PEAP-Phase2-Method` | `Config.eap_inner`
`EAP-PEAP-Phase2-Identity` | имя_пользователя@`Config.user_realm`

Примечание:

- Ваш провайдер может не требовать параметр `EAP-Identity`, в этом случае укажите для него значение `anonymous` или `anonymous@Config.user_realm`.
- Если ваш `EAP-PEAP-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, но по умолчанию она отключена. Для включения добавьте следующие строки в файл настроек:

    /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 интерфейс `iwd` позволяет любым (в том числе обычным, не-root) пользователям подключаться к демону `iwd` через консоль и изменять настройки.

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

    /etc/dbus-1/system.d/iwd-strict.conf

    <!-- prevent local users from changing iwd settings, but allow
         reading status information. overrides some part of
         /usr/share/dbus-1/system.d/iwd-dbus.conf. -->

    <!-- This configuration file specifies the required security policies
         for iNet Wireless Daemon to work. -->

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

      <policy at_console="true">
        <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>

Совет: Удалите строки <allow>, если необходимо запретить и чтение выходной информации тоже.

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

### Подробная отладка 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.

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

Низкая энтропия системы может вызвать проблемы с подключением, особенно после перезагрузки. Рекомендации по увеличению энтропии можно найти в статье 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

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

- Getting Started with iwd
- Network Configuration Settings
- More Examples for WPA Enterprise
- The IWD thread on the Arch Linux Forums
- 2017 Update on new WiFi daemon for Linux by Marcel Holtmann - YouTube
- The New Wi-Fi Experience for Linux - Marcel Holtmann, Intel - YouTube

Categories:

- Wireless networking (Русский)
- Network configuration (Русский)