iwd (Русский) - ArchWiki

# iwd (Русский)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

- Настройка сети
- Настройка беспроводной сети
- 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 (Русский)