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

Jump to content

# NetworkManager (Русский)

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

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

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

NetworkManager — это программа для обнаружения и настройки систем для автоматического подключения к сетям. Функциональность NetworkManager может быть полезна как для беспроводных, так и проводных сетей. При подключении к беспроводным сетям NetworkManager отдаёт предпочтение ранее известным сетям и имеет возможность переключаться на наиболее стабильную сеть. Приложения, поддерживающие NetworkManager, могут переключаться из онлайн-режима в автономный. NetworkManager также предпочитает проводные соединения беспроводным, поддерживает модемные соединения и некоторые типы VPN. NetworkManager изначально был разработан компанией Red Hat, а в настоящее время поддерживается проектом GNOME.

Важно По умолчанию все секреты (например, пароли Wi-Fi) хранятся в открытом виде и доступны для чтения пользователю root в файловой системе и пользователям, имеющим доступ к настройкам (например, через nm-applet). Смотрите раздел #Шифрование паролей Wi-Fi.

## Установка

Установите пакет networkmanager, который содержит демон, консольный инструмент `nmcli` и интерфейс `nmtui` на основе curses.

### Включение NetworkManager

После установки запустите и включите службу `NetworkManager.service`. После запуска NetworkManager автоматически подключится ко всем «системным соединениям», которые уже были заранее настроены в системе. «Пользовательские соединения» настраиваются и подключаются через nmcli или апплет.

Примечание

- Каждый сетевой интерфейс должен управляться только одним DHCP-клиентом или сетевым менеджером, поэтому рекомендуется запускать в системе только один DHCP-клиент или сетевой менеджер. Вы можете посмотреть список запущенных служб командой `systemctl --type=service` и затем остановить или перенастроить конфликтующие.
- Если systemd-resolved не запущен, вы получите кучу ошибок в журнале. Подробнее смотрите #Unit dbus-org.freedesktop.resolve1.service not found.

### Дополнительные интерфейсы

- nm-connection-editor предоставляет графический интерфейс,
- network-manager-applet предоставляет апплет для трея (`nm-applet`).

### Поддержка мобильной сети

NetworkManager использует ModemManager для подключения к мобильным сетям.

Установите пакеты modemmanager и usb_modeswitch. Затем запустите и включите службу `ModemManager.service`.

Может понадобиться перезапустить `NetworkManager.service`, чтобы он обнаружил ModemManager. После перезапуска переподключите модем, и он должен обнаружиться.

При добавлении нового соединения (например через nm-connection-editor) выберите «Мобильное широкополосное подключение». После выбора оператора и тарифного плана остальные настройки (в частности APN) должны заполниться автоматически на основе информации из mobile-broadband-provider-info.

### Поддержка PPPoE / DSL

Установите пакет ppp и добавьте новое соединение через `nm-connection-editor`.

### Поддержка VPN

С версии 1.16 NetworkManager поддерживает WireGuard, нужен лишь модуль ядра `wireguard`. Подробности читайте в посте в блоге.

Поддержка других VPN осуществляется через систему плагинов. Доступны следующие пакеты:

- networkmanager-openconnect для OpenConnect
- networkmanager-openvpn для OpenVPN
- networkmanager-pptp для клиента PPTP
- networkmanager-strongswan для strongSwan
- networkmanager-vpnc
- networkmanager-fortisslvpnAUR
- networkmanager-iodine-gitAUR
- networkmanager-libreswanAUR
- networkmanager-l2tp
- networkmanager-sshAUR
- network-manager-sstp

Важно Есть много багов, связанных с поддержкой VPN. Проверяйте, что опции процессов проставлены графическим интерфейсом корректно, и перепроверяйте после каждого обновления.
Примечание

- Чтобы DNS полноценно работал при использовании VPN, вам может понадобиться настроить условное перенаправление.
- Некоторые плагины могут не иметь интерфейса для командной строки или вообще не работать без запущенного апплета для трея. Это обычно не проблема при использовании среды рабочего стола, но если вы её не используете, запускайте #nm-applet вручную при работе с VPN-соединениями, чтобы плагин мог отобразить все необходимые для соединения диалоговые окна, такие как запрос пароля. [1]

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

NetworkManager поставляется с командами nmcli(1) и nmtui(1).

### Примеры nmcli

Посмотреть список доступных сетей Wi-Fi:

    $ nmcli device wifi list

Подключиться к сети Wi-Fi:

    $ nmcli device wifi connect SSID_или_BSSID password пароль

Подключиться к скрытой сети Wi-Fi:

    $ nmcli device wifi connect SSID_или_BSSID password пароль hidden yes

Подключиться к Wi-Fi на интерфейсе `wlan1`:

    $ nmcli device wifi connect SSID_или_BSSID password пароль ifname wlan1 имя_профиля

Отключить сетевой интерфейс:

    $ nmcli device disconnect ifname eth0

Получить список соединений с их именами, UUID, типами и используемыми устройствами:

    $ nmcli connection show

Активировать соединение (то есть подключиться к сети с существующим профилем):

    $ nmcli connection up имя_или_uuid

Удалить соединение:

    $ nmcli connection delete имя_или_uuid

Посмотреть список сетевых устройств и их состояние:

    $ nmcli device

Отключить Wi-Fi:

    $ nmcli radio wifi off

### Изменение соединения

Полный список параметров можно посмотреть в nm-settings(5).

Сперва получите список соединений:

    $ nmcli connection

    NAME                    UUID                                  TYPE      DEVICE
    Проводное соединение 2  e7054040-a421-3bef-965d-bb7d60b7cecf  ethernet  enp5s0
    Проводное соединение 1  997f2782-f0fc-301d-bfba-15421a2735d8  ethernet  enp0s25
    MY-HOME-WIFI-5G         92a0f7b3-2eba-49ab-a899-24d83978f308  wifi       --

Имя, указанное в первом столбце, можно использовать в качестве идентификатора соединения. Здесь для примера используем `Проводное соединение 2`.

Есть три способа настройки соединения после его создания:

Интерактивный редактор nmcli
  `nmcli connection edit 'Проводное соединение 2'`.
  В редакторе есть хорошая встроенная документация на русском языке.

Интерфейс командной строки nmcli
  `nmcli connection modify 'Проводное соединение 2' параметр.свойство значение`. Для использования смотрите nmcli(1). Например, изменить метрику маршрута IPv4 на 200 можно с помощью команды `nmcli connection modify 'Проводное соединение 2' ipv4.route-metric 200`.

Для удаления настройки укажите пустое значение (""):

  `nmcli connection modify 'Проводное соединение 2' параметр.свойство ""`

Файл соединения
  В каталоге `/etc/NetworkManager/system-connections/` измените соответствующий файл `Проводное соединение 2.nmconnection`.
  Не забудьте перезагрузить настройки командой `nmcli connection reload`.

### nmtui

В состав NetworkManager входит программа с текстовым интерфейсом (TUI) для управления соединениями, настройки имени хоста и управления беспроводными картами. Запустить её можно командой `nmtui`.

## Фронтенды

Для интеграции со средой рабочего стола обычно используют апплет в трее. Он предоставляет не только лёгкий доступ к настройкам сети, но и агент для хранения паролей. Многие среды рабочего стола имеют свои собственные апплеты; если в вашей среде его нет, вы можете использовать #nm-applet.

### GNOME

В GNOME есть свой собственный инструмент, доступный в настройках сети.

### KDE Plasma

Установите пакет plasma-nm и добавьте виджет сети на панель задач.

### nm-applet

network-manager-applet — фронтенд на базе GTK 3, который работает в окружениях Xorg как значок в трее.

Для сохранения паролей установите и настройте приложение, реализующее Secret Service D-Bus API: например, GNOME Keyring, KDE Wallet или KeePassXC.

Имейте в виду, что после включения флажка Все пользователи могут подключаться к этой сети NetworkManager сохраняет пароль открытым текстом, хотя соответствующий файл доступен только для root (или других пользователей через `nm-applet`). Смотрите #Шифрование паролей Wi-Fi.

Для запуска `nm-applet` без панели задач можно использовать trayerAUR или stalonetray. Например, вы можете сделать такой скрипт:

    nmgui

    #!/bin/sh
    nm-applet    2>&1 > /dev/null &
    stalonetray  2>&1 > /dev/null
    killall nm-applet

После закрытия окна stalonetray он автоматически завершит `nm-applet`.

Апплет может уведомлять о событиях, таких как как подключение к сети Wi-Fi или отключение от неё. Чтобы эти уведомления отображались, убедитесь, что у вас установлен сервер уведомлений — смотрите статью Desktop notifications (Русский). Если вы используете апплет без сервера уведомлений, вы можете увидеть некоторые сообщения в stdout/stderr, и апплет может зависнуть. Смотрите [2].

Запустить `nm-applet` с отключенными уведомлениями можно так:

    $ nm-applet --no-agent

Совет `nm-applet` может быть запущен автоматически с помощью desktop-файла автозапуска. В этом случае для добавления опции `--no-agent` измените строку Exec в этом файле:

    Exec=nm-applet --no-agent

Важно При работе в i3 nm-applet, запущенный с опцией `--no-agent`, не позволит подключиться к защищённой сети Wi-Fi, так как не сможет запросить пароль. В журнале будет ошибка `no secrets: No agents were available for this request`.

#### Appindicator

С версии 1.18.0 в официальном пакете network-manager-applet появилась поддержка Appindicator. Для использования Appindicator добавьте соответствующий параметр:

    $ nm-applet --indicator

### networkmanager-dmenu

Ещё вариант — networkmanager-dmenu-gitAUR, небольшой скрипт для управления соединениями NetworkManager через dmenu или rofi вместо `nm-applet`. Он предоставляет все основные функции, такие как подключение к существующим Wi-Fi или проводным соединениям NetworkManager, подключение к новым Wi-Fi соединениям, запрос пароля по необходимости, подключение к существующим VPN соединениям, включение/выключение сети, запуск nm-connection-editor, подключение к Bluetooth-сетям.

### switchboard

switchboard из Pantheon предлагает способ настройки NetworkManager, не зависящий от среды рабочего стола, в сочетании с switchboard-plug-network и nm-connection-editor. Его можно запустить командой:

    $ io.elementary.settings

## Настройка

NetworkManager требует некоторых дополнительных шагов для правильной работы. Убедитесь, что вы настроили `/etc/hosts` как описано в разделе Настройка сети#Имя хоста.

Глобальный файл настроек — `/etc/NetworkManager/NetworkManager.conf`. Дополнительные файлы можно добавить в каталог `/etc/NetworkManager/conf.d/`. Обычно менять их не требуется.

После изменения файлов настроек нужно применить изменения:

    # nmcli general reload

### NetworkManager-wait-online

Включение `NetworkManager.service` автоматически включает `NetworkManager-wait-online.service` — oneshot-службу, которая ждёт окончания настройки сети. У неё есть `WantedBy=network-online.target`, так что она завершится только когда сам `network-online.target` будет включен или задействован каким-то другим юнитом. Смотрите также systemd (Русский)#Запуск сервисов после подключения к сети.

По умолчанию `NetworkManager-wait-online.service` ждёт не появления сети, а завершения загрузки NetworkManager (смотрите nm-online(1)). Если она завершится до реального появления сети, это может привести к проблемам запуска других служб, зависимых от сети. Для решения проблемы создайте drop-in файл для этого юнита, чтобы убрать параметр `-s` из строки `ExecStart`:

    [Service]
    ExecStart=
    ExecStart=/usr/bin/nm-online -q

Однако это может привести к другим проблемам.

Иногда служба по-прежнему не запускается при загрузке из-за слишком маленького таймаута. Отредактируйте службу, прописав для `NM_ONLINE_TIMEOUT` вместо `60` значение побольше.

### Настройка разрешений PolicyKit

По умолчанию пользователи в активных локальных сеансах могут редактировать большинство сетевых настроек без пароля. Проверьте тип сеанса как описано в разделе Устранение часто встречающихся неполадок#Разрешения сессии. В большинстве случаев всё должно работать из коробки.

Некоторые действия (например, изменение имени хоста системы) требуют пароля администратора. В этом случае вам нужно добавить себя в группу `wheel` и запустить агент аутентификации Polkit, который будет запрашивать пароль.

Для удалённых сеансов (например, headless VNC) у вас есть несколько вариантов получения привилегий, необходимых для работы с NetworkManager:

1. Добавить себя в группу `wheel`. Вам нужно будет вводить свой пароль при каждом действии. Имейте в виду, что эта группа также может предоставлять другие разрешения, такие как возможность использовать sudo без ввода пароля root.
2. Добавить себя в группу `network` и создать файл `/etc/polkit-1/rules.d/50-org.freedesktop.NetworkManager.rules` со следующим содержимым:

       polkit.addRule(function(action, subject) {
         if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 && subject.isInGroup("network")) {
           return polkit.Result.YES;
         }
       });

   Все пользователи в группе `network` смогут добавлять и удалять сети без пароля (что означает, что вам не понадобится запускать агент аутентификации Polkit, так что этот вариант работает в том числе через SSH).

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

NetworkManager поддерживает некоторые настройки прокси. Хотя их нельзя изменить напрямую через nmtui, nm-applet и nmcli поддерживают их. Смотрите настройки прокси в nm-settings-nmcli(5).

Кроме того, пользовательские команды прокси всегда можно запустить с помощью диспетчерских скриптов; смотрите раздел #Примеры диспетчерских скриптов.

Смотрите также Proxy settings.

### Проверка соединения

NetworkManager может попытаться связаться с веб-сервером после подключения к сети, чтобы определить, находится ли он, например, за captive portal. По умолчанию для проверки используется ping.archlinux.org (это CNAME-псевдоним для redirect.archlinux.org, прописан в файле `/usr/lib/NetworkManager/conf.d/20-connectivity.conf`). Если вы хотите прописать другой адрес, создайте файл `/etc/NetworkManager/conf.d/20-connectivity.conf`, смотрите NetworkManager.conf(5) § CONNECTIVITY SECTION. Пример использования серверов GNOME (использовать сам GNOME при этом необязательно):

    /etc/NetworkManager/conf.d/20-connectivity.conf

    [connectivity]
    uri=http://nmcheck.gnome.org/check_network_status.txt

Чтобы отключить проверку соединения NetworkManager, используйте следующую конфигурацию. Это может быть полезно при подключении к VPN, которая блокирует проверки соединения.

    /etc/NetworkManager/conf.d/20-connectivity.conf

    [connectivity]
    enabled=false

Примечание Хотя автоматические проверки соединения являются потенциальной проблемой конфиденциальности, стандартный URL в Arch Linux не логирует обращения к нему. [3] [4]

### Captive portal

При использовании сетей, в которых используется captive portal, среда рабочего стола может автоматически открыть окно с запросом учётных данных. Если ваша среда этого не делает, вы можете использовать capnet-assist (однако на данный момент в нём сломан диспетчерский скрипт). В качестве альтернативы можно создать свой диспетчерский скрипт:

    /etc/NetworkManager/dispatcher.d/90-open_captive_portal

    #!/bin/sh -e
    # Script to dispatch NetworkManager events
    #
    # Runs shows a login webpage on walled garden networks.
    # See NetworkManager(8) for further documentation of the dispatcher events.

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

    if [ -x "/usr/bin/logger" ]; then
        logger="/usr/bin/logger -s -t captive-portal"
    else
        logger=":"
    fi

    wait_for_process() {
        PNAME=$1
        while [ -z "$(/usr/bin/pgrep $PNAME)" ]; do
            sleep 3;
        done
    }

    #launch the browser, but on boot we need to wait that nm-applet starts
    start_browser() {
        local user="$1"
        local display="$2"

        export DISPLAY="$display"
        wait_for_process nm-applet

        export XAUTHORITY="/home/$user/.Xauthority"

        $logger "Running browser as '$user' with display '$display' to login in captive portal"
        sudo -u "$user" --preserve-env=DISPLAY,XAUTHORITY -H xdg-open http://capnet.elementary.io 2>&1 > /dev/null
    }

    # Run the right scripts
    case "$2" in
        connectivity-change)
        $logger -p user.debug "dispatcher script triggered on connectivity change: $CONNECTIVITY_STATE"
        if [ "$CONNECTIVITY_STATE" = "PORTAL" ]; then
            # Match last column of who's output with ' :[at least one digit] '
            who | awk '$NF ~ /\(:[0-9]+\)/ { print $1 " " substr($NF, 2, length($NF)-2) };' | \
            while read user display; do
                start_browser $user $display || $logger -p user.err "Failed for user: '$user' display: '$display'"
            done
        fi
        ;;
        *)
        # In a down phase
        exit 0
        ;;
    esac

Сделайте скрипт исполняемым. Он предполагает, что вы используете X, и просто открывает http-страницу. Это может сработать не для всех.

Перезапустите службу `NetworkManager.service` или перезагрузитесь для применения изменений. После этого скрипт должен открыть страницу входа, как только обнаружит captive portal.

Простым решением является captive-portal-sh — скрипт, который получает адрес captive portal и открывает его в браузере по умолчанию (только для Wayland).

Ещё одно решение — captive-browser-gitAUR, основанное на Google Chrome.

#### Поддержка iwd для поддержки captive portal на устаревшем оборудовании

Для некоторых более старых чипов Wi-Fi (например, Broadcom BCM4360) требуется фирменный драйвер `wl`, в котором отсутствует поддержка функции подтверждения связи по эллиптической кривой, используемой многими точками доступа на портале captive перед открытием страницы входа в систему. Переключив серверную часть Wi-Fi NetworkManager на `iwd` (см. #Использование iwd в качестве бэкенда Wi-Fi), которая реализует полный обмен ключами OWE в пользовательском пространстве через существующий драйвер, вы можете завершить согласование шифрования, получить разрешение на аренду DHCP и активировать состояние портала “PORTAL”. Как только это будет сделано, любой операторский скрипт или браузер-лаунчер надежно откроет страницу входа в систему на оборудовании, которое в противном случае никогда не смогло бы полностью подключиться.

### Клиент DHCP

По умолчанию NetworkManager использует свой внутренний DHCP-клиент. Внутренний плагин DHCPv4 основан на nettools n-dhcp4, в то время как плагин DHCPv6 основан на коде из systemd-networkd.

Для использования другого клиента DHCP установите какую-нибудь альтернативу:

- dhcpcd — dhcpcd
- dhclient — dhclient

Для выбора клиента DHCP пропишите опцию `main.dhcp=имя_клиента_dhcp` в каком-нибудь файле в каталоге `/etc/NetworkManager/conf.d/`, например:

    /etc/NetworkManager/conf.d/dhcp-client.conf

    [main]
    dhcp=dhcpcd

Примечание

Не включайте юниты, идущие в комплекте с пакетами dhclient и dhcpcd: они будут конфликтовать с NetworkManager. Смотрите примечание в разделе #Установка.

### Управление DNS

Управление DNS в NetworkManager описано на вики-странице проекта GNOME: Projects/NetworkManager/DNS.

#### Кэширование DNS и условное перенаправление

NetworkManager имеет плагин для включения кэширования DNS и условного перенаправления (conditional forwarding, ранее известный как "split DNS") с использованием dnsmasq или systemd-resolved. Преимущества этого в том, что запросы DNS будут кэшироваться, что сокращает время резолвинга, а DNS-запросы для хостов VPN будут направляться на соответствующие DNS-серверы VPN. Это особенно полезно, если вы подключены к нескольким VPN.

Примечание Если `/etc/resolv.conf` является символической ссылкой на `/run/systemd/resolve/stub-resolv.conf`, `/run/systemd/resolve/resolv.conf`, `/lib/systemd/resolv.conf` или `/usr/lib/systemd/resolv.conf`, NetworkManager автоматически использует systemd-resolved. Для использования dnsmasq сперва удалите эту ссылку и перезапустите NetworkManager.

##### dnsmasq

Установите dnsmasq и пропишите `main.dns=dnsmasq` в каком-нибудь файле в каталоге `/etc/NetworkManager/conf.d/`:

    /etc/NetworkManager/conf.d/dns.conf

    [main]
    dns=dnsmasq

Затем выполните `nmcli general reload` от имени root. NetworkManager автоматически запустит dnsmasq и добавит `127.0.0.1` в `/etc/resolv.conf`. Исходные DNS-серверы можно найти в файле `/run/NetworkManager/no-stub-resolv.conf`. Вы можете проверить, используется ли dnsmasq, дважды выполнив один и тот же DNS-запрос с помощью `drill example.com` и сравнив время запроса.

Примечание

- Вам не нужно запускать `dnsmasq.service` или изменять `/etc/dnsmasq.conf`. NetworkManager запустит dnsmasq без использования службы systemd и без чтения стандартных файлов настроек dnsmasq.
- Экземпляр dnsmasq, который запускается NetworkManager'ом, будет принимать запросы на `127.0.0.1:53`, вы не можете запустить другие программы (в том числе `dnsmasq.service`) на том же адресе и порту.

###### Пользовательская конфигурация dnsmasq

Свои настройки для dnsmasq можно добавить в каталог `/etc/NetworkManager/dnsmasq.d/`. Например, для изменения размера кэша DNS (который находится в оперативной памяти):

    /etc/NetworkManager/dnsmasq.d/cache.conf

    cache-size=1000

Проверить синтаксис можно такой командой:

    $ dnsmasq --test --conf-file=/dev/null --conf-dir=/etc/NetworkManager/dnsmasq.d

Смотрите список доступных опций в dnsmasq(8).

###### IPv6

Включение `dnsmasq` в NetworkManager может сломать IPv6-only DNS lookups (т. е. `drill -6 [hostname]`), которые без него работали бы. Чтобы решить эту проблему, создание следующего файла настроит dnsmasq на прослушивание IPv6 loopback:

    /etc/NetworkManager/dnsmasq.d/ipv6-listen.conf

    listen-address=::1

Кроме того, `dnsmasq` также не определяет приоритеты upstream DNS IPv6. К сожалению, NetworkManager этого не делает (Ubuntu Bug). Обходной путь — отключить IPv4 DNS в конфигурации NetworkManager, если таковой существует.

###### DNSSEC

Экземпляр dnsmasq, запущенный NetworkManager'ом, по умолчанию не будет проверять DNSSEC. Чтобы включить проверку DNSSEC и тем самым нарушить разрешение DNS для серверов имен, которые его не поддерживают, создайте следующий файл конфигурации:

    /etc/NetworkManager/dnsmasq.d/dnssec.conf

    conf-file=/usr/share/dnsmasq/trust-anchors.conf
    dnssec

##### systemd-resolved

NetworkManager может использовать systemd-resolved в качестве распознавателя DNS и кэша. Перед использованием убедитесь, что systemd-resolved правильно настроен и что служба `systemd-resolved.service` запущена.

NetworkManager автоматически будет использовать systemd-resolved, если файл `/etc/resolv.conf` является символической ссылкой на `/run/systemd/resolve/stub-resolv.conf`, `/run/systemd/resolve/resolv.conf` или `/usr/lib/systemd/resolv.conf`.

Вы можете включить его явно, добавив настройку `main.dns=systemd-resolved` в какой-нибудь файл в каталоге `/etc/NetworkManager/conf.d/`:

    /etc/NetworkManager/conf.d/dns.conf

    [main]
    dns=systemd-resolved

##### Распознаватель DNS с абонентом openresolv

Если openresolv позволяет подключить ваш локальный DNS-резолвер в качестве абонента, подключите его и настройте NetworkManager на использование openresolv.

Поскольку NetworkManager выглядит как один «интерфейс» для resolvconf, невозможно реализовать условное перенаправление между двумя соединениями NetworkManager. Смотрите NetworkManager issue 153.

Эта проблема может быть частично решена, если вы установите `private_interfaces="*"` в `/etc/resolvconf.conf`[5]. Любые запросы к доменам, которых нет в списке поисковых доменов, не будут перенаправлены. Они будут обработаны в соответствии с конфигурацией локального резолвера, например, перенаправлены на другой DNS-сервер или разрешены рекурсивно от корня DNS.

#### Пользовательские серверы DNS

##### Настройка глобальных серверов DNS

Чтобы задать DNS-серверы для всех соединений, укажите их в NetworkManager.conf(5), используя синтаксис `servers=ipадрес1,ipадрес2,ipадрес3` в разделе `[global-dns-domain-*]`. Например:

    /etc/NetworkManager/conf.d/dns-servers.conf

    [global-dns-domain-*]
    servers=::1,127.0.0.1

Примечание

- Если вы используете плагин dnsmasq или systemd-resolved или #Распознаватель DNS с абонентом openresolv, не указывайте loopback-адреса, это сломает DNS.
- Указанные серверы не отправляются на systemd-resolved, вместо них используются DNS-серверы соединения. Смотрите NetworkManager issue 1366 и systemd issue 33754.

##### Настройка серверов DNS для соединения

###### Настройка серверов DNS для соединения (GUI)

Настройка зависит от типа используемого графического интерфейса. Обычно для этого нужно открыть изменение соединения через апплет и выбрать метод Только автоматические адреса (DHCP), затем в поле Серверы DNS будет можно их ввести примерно в таком виде: `127.0.0.1, DNS-сервер-раз, ...`.

###### Настройка серверов DNS для соединения (nmcli / файл соединения)

Чтобы настроить серверы DNS для отдельного соединения, измените параметры `ipv4.dns` и `ipv6.dns` (и связанные с ними `dns-search` и `dns-options`) в настройках соединения.

Если `method` установлен на `auto` (при использовании DHCP/RA), также установите `ignore-auto-dns` на `yes`.

Чтобы использовать DNS over TLS (требуется systemd-resolved), укажите серверы DNS, используя синтаксис `dns=ip.адрес#имясервера;` и дополнительно установите параметр `connection.dns-over-tls` в значение `2`. Пример для Quad9:

    /etc/NetworkManager/system-connections/Example Wi-Fi.nmconnection

    ...
    [connection]
    ...
    dns-over-tls=2

    [ipv4]
    ...
    dns=9.9.9.9#dns.quad9.net;149.112.112.112#dns.quad9.net;
    ignore-auto-dns=true

    [ipv6]
    ...
    dns=2620:fe::fe#dns.quad9.net;2620:fe::9#dns.quad9.net;
    ignore-auto-dns=true

Примечание Пример использует Quad9; замените его на сервер DNS, которому вы доверяете. Смотрите раздел Разрешение доменных имён#Сторонние службы DNS.

#### /etc/resolv.conf

Управление файлом `/etc/resolv.conf` настраивается параметром `main.rc-manager`. Пакет networkmanager использует `symlink`, что отличается от значения по умолчанию `auto` в апстриме. Документация по этой настройке доступна в NetworkManager.conf(5).

Совет Использование openresolv позволяет NetworkManager сосуществовать с другими программами, поддерживающими resolvconf или, например, запускать локальное кэширование DNS и split-DNS резолвер, для которого openresolv имеет абонентов. Обратите внимание, что условное перенаправление ещё не полностью поддерживается при использовании NetworkManager с openresolv.

NetworkManager также предоставляет хуки через так называемые диспетчерские скрипты (dispatcher scripts), которые можно использовать для обновления `/etc/resolv.conf` после изменения состояния сети. Смотрите #Сетевые службы с диспетчером NetworkManager и NetworkManager(8) для более подробной информации.

Примечание

- Если NetworkManager настроен на использование dnsmasq или systemd-resolved, в файл `/etc/resolv.conf` будут записаны соответствующие loopback-адреса.
- Файл `resolv.conf`, который NetworkManager записывает или мог бы записать, находится в `/run/NetworkManager/resolv.conf`.
- Файл `resolv.conf` с назначенными серверами имен и поисковыми доменами находится в `/run/NetworkManager/no-stub-resolv.conf`.

##### Неуправляемый /etc/resolv.conf

Чтобы NetworkManager больше не трогал файл `/etc/resolv.conf`, пропишите опцию `main.dns=none` в файле настроек внутри `/etc/NetworkManager/conf.d/`:

    /etc/NetworkManager/conf.d/dns.conf

    [main]
    dns=none

Совет Также можно добавить `main.systemd-resolved=false`, чтобы NetworkManager не отправлял настройки DNS в systemd-resolved.
Примечание Вместо использования `main.dns=none` можно настроить NetworkManager на использование dnsmasq или systemd-resolved в качестве бэкенда DNS; смотрите раздел #Кэширование DNS и условное перенаправление.

После этого `/etc/resolv.conf` может оказаться сломанной символической ссылкой, которую нужно будет удалить. Затем просто создайте новый файл `/etc/resolv.conf`.

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

Примечание NetworkManager не поддерживает интерфейс resolvconf от systemd-resolved (resolvectl(1) § COMPATIBILITY WITH RESOLVCONF(8)), который предоставляется пакетом systemd-resolvconf.

- Не указывайте `main.rc-manager=resolvconf` при использовании systemd-resolved, вместо этого создайте символическую ссылку /etc/resolv.conf или настройте NetworkManager на явное использование systemd-resolved.
- Убедитесь, что пакет systemd-resolvconf не установлен, если systemd-resolved не используется. Пока `systemd-resolved.service` не запущен, это сломает все сетевые приложения (не только NetworkManager), которые используют resolvconf.

Чтобы настроить NetworkManager на использование openresolv, установите опцию `main.rc-manager=resolvconf` в файле настроек внутри `/etc/NetworkManager/conf.d/`:

    /etc/NetworkManager/conf.d/rc-manager.conf

    [main]
    rc-manager=resolvconf

### Межсетевой экран

Вы можете назначить зону firewalld на основе вашего текущего соединения. Например, ограничительный брандмауэр на работе и менее ограничительный дома.

Это также можно сделать с помощью диспетчера NetworkManager.

## Сетевые службы с диспетчером NetworkManager

Существует сетевые службы, которые желательно не запускать до тех пор, пока NetworkManager не настроит сеть. NetworkManager имеет возможность запускать службы при подключении к сети и останавливать их при отключении (например, при использовании NFS, SMB и NTPd).

Для активации этой возможности запустите и включите службу `NetworkManager-dispatcher.service`.

После включения службы можно добавлять скрипты в каталог `/etc/NetworkManager/dispatcher.d`.

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

    # chown root:root /etc/NetworkManager/dispatcher.d/10-скрипт.sh

Сделайте файл исполняемым.

Скрипты будут запускаться в алфавитном порядке во время подключения и в обратном алфавитном порядке во время отключения. Чтобы чётко определить, в каком порядке они будут запускаться, обычно используют цифровые символы перед именем скрипта (например, `10-portmap` или `30-netfs` (что гарантирует, что portmapper будет запущен до попытки монтирования NFS).

Скрипты будут принимать два аргумента:

- Имя интерфейса: например, `eth0`
- Действие: up, down, vpn-up, vpn-down, ... (полный список приведён в NetworkManager-dispatcher(8))

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

### Обход таймаута диспетчера

Если всё работает, то этот раздел вам не нужен. Однако существует общая проблема, связанная с запуском диспетчерских скриптов, которые выполняются долго. Изначально использовался внутренний тайм-аут, равный всего трём секундам. Если вызванный скрипт не успевал завершиться, диспетчер его убивал. Позже таймаут был увеличен примерно до 20 секунд (подробнее в баг-трекере). Если таймаут всё ещё создает проблемы, то можно обойтись без него, используя drop-in файл, чтобы служба `NetworkManager-dispatcher.service` оставалась активной после завершения работы:

    /etc/systemd/system/NetworkManager-dispatcher.service.d/remain_after_exit.conf

    [Service]
    RemainAfterExit=yes

Теперь запустите и включите изменённую службу `NetworkManager-dispatcher`.

Важно Добавление строки `RemainAfterExit` предотвратит закрытие диспетчера. К сожалению, диспетчер нужно закрыть, прежде чем он сможет снова запустить ваши скрипты. С этой строкой диспетчер не будет завершать работу по таймауту, но и не будет закрываться, что означает, что скрипты будут выполняться только один раз за загрузку. Поэтому не добавляйте эту строку, если таймаут не вызывает проблем.

### Примеры диспетчерских скриптов

#### Автоматическая установка часового пояса

Установите tzupdateAUR и создайте такой скрипт (не забудьте сделать его исполняемым):

    /etc/NetworkManager/dispatcher.d/update-timezone.sh

    #!/bin/bash
    # Автоматическая установка часового пояса после подключения к сети
    iface=$1
    action=$2

    if [[ $iface != lo && $action == up ]]; then
        tz=$(tzupdate -s 1 -p 2>/dev/null)
        if [[ -n $tz && -r /usr/share/zoneinfo/$tz ]]; then
    	timedatectl set-timezone $tz
        fi
    fi

Если нужно, обновите условие `$iface != lo` на сравнение с нужным вам сетевым интерфейсом.

#### Монтирование удалённого каталога с помощью sshfs

Поскольку скрипт выполняется в очень ограниченной среде, вам нужно экспортировать `SSH_AUTH_SOCK`, чтобы подключиться к SSH-агенту. Это можно сделать разными способами, подробности есть в этом сообщении. Пример ниже работает с GNOME Keyring и попросит вас ввести пароль, если он ещё не разблокирован. Если NetworkManager подключается автоматически при входе в систему, есть вероятность, что gnome-keyring ещё не будет запущен на момент запуска скрипта, и экспорт будет неудачным (поэтому здесь может пригодиться sleep). `UUID`, который нужно использовать, можно узнать с помощью команды `nmcli connection status` или `nmcli connection list`.

    #!/bin/sh
    USER='пользователь'
    REMOTE='пользователь@хост:/удалённый/путь'
    LOCAL='/локальный/путь'

    interface=$1 status=$2
    if [ "$CONNECTION_UUID" = "uuid" ]; then
      case $status in
        up)
          # sleep 10
          SSH_AUTH_SOCK=$(find /tmp -maxdepth 1 -type s -user "$USER" -name 'ssh')
          export SSH_AUTH_SOCK
          su "$USER" -c "sshfs $REMOTE $LOCAL"
          ;;
        down)
          fusermount -u "$LOCAL"
          ;;
      esac
    fi

#### Монтирование общих ресурсов SMB

Некоторые общие ресурсы SMB доступны только в определённых сетях или местах (например, дома). Можно использовать диспетчер для монтирования только тех ресурсов SMB, которые доступны в вашем текущем местоположении.

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

    /etc/NetworkManager/dispatcher.d/30-mount-smb.sh

    #!/bin/sh

    # Найдите UUID нужного соединения с помощью команды «nmcli connection show».
    # Поддерживаются все типы соединений NetworkManager: беспроводные, VPN, проводные...
    if [ "$2" = "up" ]; then
      if [ "$CONNECTION_UUID" = "uuid" ]; then
        mount /ваша/точка/монтирования &
        # можно добавить другие ресурсы по необходимости
      fi
    fi

Следующий скрипт размонтирует все общие ресурсы SMB перед программным отключением от определённой сети:

    /etc/NetworkManager/dispatcher.d/pre-down.d/30-umount-smb.sh

    #!/bin/sh

    if [ "$CONNECTION_UUID" = "uuid" ]; then
      umount -a -l -t cifs
    fi

Примечание Убедитесь, что этот скрипт находится именно в подкаталоге `pre-down.d`, как показано выше, иначе он будет размонтировать все общие ресурсы при любом изменении состояния соединения.

Следующий скрипт попытается размонтировать все общие ресурсы SMB после неожиданного отключения от определённой сети:

    /etc/NetworkManager/dispatcher.d/40-umount-smb.sh

    #!/bin/sh

    if [ "$CONNECTION_UUID" = "uuid" ]; then
      if [ "$2" = "down" ]; then
        umount -a -l -t cifs
      fi
    fi

Примечание

- С версии NetworkManager 0.9.8 события pre-down и down не выполняются при выключении или перезапуске, более подробную информацию смотрите в этом баг-репорте.
- Эти umount-скрипты всё ещё могут привести к зависанию приложений, обращающихся к примонтированным ресурсам.

Также можно использовать скрипт, подобный описанному в разделе NFS#Using a NetworkManager dispatcher:

    /etc/NetworkManager/dispatcher.d/30-smb.sh

    #!/bin/sh

    # Найдите UUID нужного соединения с помощью команды «nmcli con show».
    # Поддерживаются все типы соединений NetworkManager: беспроводные, VPN, проводные...
    WANTED_CON_UUID="ИЗМЕНИ-МЕНЯ-9c7eff15-010a-4b1c-a786-9b4efa218ba9"

    if [ "$CONNECTION_UUID" = "$WANTED_CON_UUID" ]; then

        # Параметр скрипта $1: имя сетевого интерфейса, не используется
        # Параметр скрипта $2: отправленное событие

        case "$2" in
            "up")
                mount -a -t cifs
                ;;
            "down"|"pre-down"|"vpn-pre-down")
                umount -l -a -t cifs >/dev/null
                ;;
        esac
    fi

Примечание Этот скрипт игнорирует точки монтирования с опцией `noauto`; удалите эту опцию или используйте `auto`, чтобы позволить диспетчеру управлять ими.

Создайте символическую ссылку в каталоге `/etc/NetworkManager/dispatcher.d/pre-down/`, чтобы скрипт стал перехватывать события `pre-down`:

    # ln -s ../30-smb.sh /etc/NetworkManager/dispatcher.d/pre-down.d/30-smb.sh

#### Монтирование общих ресурсов NFS

Смотрите NFS#Using a NetworkManager dispatcher.

#### Использование диспетчера для переключения беспроводной сети в зависимости от состояния проводного соединения

Идея заключается в том, чтобы включать Wi-Fi только при отключении сетевого кабеля (например, при отсоединении ноутбука от док-станции), и отключать Wi-Fi после того, как только сетевой кабель снова подключен.

Создайте следующий диспетчерский скрипт[6], заменив `ваш_Ethernet_интерфейс` на имя вашего проводного интерфейса.

Примечание Получить список интерфейсов можно с помощью nmcli (`nmcli d | grep ethernet`). Ethernet-интерфейсы начинаются с `en` или `eth`, например `enp0s5` или `eth0`.

Не забудьте сделать скрипт исполняемым. Вы можете убедиться, что он работает, перезапустив службу `NetworkManager.service`, выполнив `ip a` и проверив, что интерфейс Wi-Fi (например, `wlp3s0`) находится в `state DOWN`. Если вы столкнулись с неожиданным поведением, проверьте журнал службы `NetworkManager-dispatcher.service`.

    /etc/NetworkManager/dispatcher.d/99-wifi-auto-toggle

    #!/bin/sh

    LOG_PREFIX="WiFi Auto-Toggle"
    ETHERNET_INTERFACE="ваш_Ethernet_интерфейс"

    if [ "$1" = "$ETHERNET_INTERFACE" ]; then
        case "$2" in
            up)
                echo "$LOG_PREFIX ethernet up"
                nmcli radio wifi off
                ;;
            down)
                echo "$LOG_PREFIX ethernet down"
                nmcli radio wifi on
                ;;
        esac
    elif [ "$(nmcli -g GENERAL.STATE device show $ETHERNET_INTERFACE)" = "20 (unavailable)" ]; then
        echo "$LOG_PREFIX failsafe"
        nmcli radio wifi on
    fi

Примечание В скрипте присутствует дополнительная проверка (failsafe) для случая, когда проводной интерфейс был подключен, когда компьютер был ещё включен, а затем отключен в то время, когда компьютер был выключен. Без такой проверки могло бы получиться, что при включении компьютера Wi-Fi всё ещё был бы выключен, а при отключенном проводном интерфейсе у вас не было бы сети.

#### Использование диспетчера для подключения к VPN после появления сети

В этом примере мы хотим автоматически подключаться к определённому VPN-соединению после подключения к определённой сети Wi-Fi. Первое, что нужно сделать, это создать диспетчерский скрипт, который определяет, что делать после подключения к сети.

Примечание Так как этот скрипт использует `iwgetid`, для его работы нужно установить wireless_tools.

    /etc/NetworkManager/dispatcher.d/vpn-up

    #!/bin/sh
    VPN_NAME="имя VPN-соединения, определённое в NetworkManager"
    ESSID="ESSID сети Wi-Fi (не имя соединения)"

    interface=$1 status=$2
    case $status in
      up|vpn-down)
        if iwgetid | grep -qs ":\"$ESSID\""; then
          nmcli connection up id "$VPN_NAME"
        fi
        ;;
      down)
        if iwgetid | grep -qs ":\"$ESSID\""; then
          if nmcli connection show --active | grep "$VPN_NAME"; then
            nmcli connection down id "$VPN_NAME"
          fi
        fi
        ;;
    esac

Если вы хотите попытаться автоматически подключиться к VPN для всех сетей Wi-Fi, можете использовать следующее определение ESSID: `ESSID=$(iwgetid -r)`.

Попытка подключения этим скриптом может закончиться неудачей, поскольку служба `NetworkManager-dispatcher.service` будет жаловаться на 'no valid VPN secrets' из-за способа хранения VPN-секретов. К счастью, существуют варианты предоставить скрипту доступ к паролю VPN.

1: Один из них требует редактирования файла конфигурации VPN-соединения, чтобы заставить NetworkManager хранить секреты самостоятельно, а не в связке ключей, которая будет недоступна для root: откройте `/etc/NetworkManager/system-connections/имя-VPN-соединения.nmconnection` и измените флаги `password-flags` и `secret-flags` с `1` на `0`.

Если это не поможет, возможно, вам придётся создать `passwd-file` в безопасном месте с теми же правами и владельцем, что и у скрипта, со следующим содержимым:

    /путь/к/passwd-file

    vpn.secrets.password:ВАШ_ПАРОЛЬ

Измените скрипт, чтобы он получал пароль из файла:

    /etc/NetworkManager/dispatcher.d/vpn-up

    #!/bin/sh
    VPN_NAME="имя VPN-соединения, определённое в NetworkManager"
    ESSID="ESSID сети Wi-Fi (не имя соединения)"

    interface=$1 status=$2
    case $status in
      up|vpn-down)
        if iwgetid | grep -qs ":\"$ESSID\""; then
          nmcli connection up id "$VPN_NAME" passwd-file /путь/к/passwd-file
        fi
        ;;
      down)
        if iwgetid | grep -qs ":\"$ESSID\""; then
          if nmcli connection show --active | grep "$VPN_NAME"; then
            nmcli connection down id "$VPN_NAME"
          fi
        fi
        ;;
    esac

2: В качестве альтернативы измените `password-flags` и задайте пароль непосредственно в файле настроек, добавив раздел `vpn-secrets`:

    [vpn]
    ....
    password-flags=0

    [vpn-secrets]
    password=ваш_пароль

Примечание Теперь может потребоваться повторно открыть редактор соединений NetworkManager и заново сохранить пароли/секреты VPN.

#### Использование диспетчера для отключения IPv6 при подключении VPN

Многие коммерческие VPN-провайдеры поддерживают только IPv4. Это означает, что весь трафик IPv6 идёт в обход VPN, из-за чего VPN становится фактически бесполезным. Чтобы избежать этого, можно использовать диспетчер для отключения всего трафика IPv6 на время работы VPN-соединения.

    /etc/NetworkManager/dispatcher.d/10-vpn-ipv6

    #!/bin/sh

    case "$2" in
    	vpn-up)
    		echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
    		;;
    	vpn-down)
    		echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6
    		;;
    esac

В качестве альтернативы можно использовать диспетчер, чтобы временно установить IPv6-режим `link-local` на устройстве, используемом для VPN-соединения. Это позволит избежать спама в журнале NetworkManager об отключенном IPv6. Этот скрипт не будет работать, если IPv6 предоставляют несколько устройств или соединений, но может быть адаптирован для итерации по нескольким устройствам. Обратите внимание, что любое изменение соединения (с помощью nmcli(1) или через среду рабочего стола) приведёт к повторному применению всего соединения к устройству и повторному включению IPv6 (если он включен в настройках соединения).

    /etc/NetworkManager/dispatcher.d/10-vpn-ipv6

    #!/bin/sh

    case "$2" in
    	vpn-up)
    		nmcli device modify "${DEVICE_IFACE}" ipv6.method link-local
    		;;
    	vpn-down)
    		nmcli device reapply "${DEVICE_IFACE}"
    		;;
    esac

#### OpenNTPD

Смотрите OpenNTPD#Using NetworkManager dispatcher.

#### Динамическая установка серверов NTP, полученных через DHCP, с использованием systemd-timesyncd

При перемещении между различными сетями (например, локальная сеть компании, домашний Wi-Fi, иногда другие Wi-Fi) вы можете захотеть установить NTP-сервер(ы), которые использует timesyncd, на те, которые предоставляются местным DHCP-сервером. Однако сам NetworkManager не способен взаимодействовать с systemd-timesyncd для установки серверов NTP.

Это можно обойти с помощью диспетчера.

Создайте каталог `/etc/systemd/timesyncd.conf.d`, если его ещё нет, а затем в `/etc/NetworkManager/dispatcher.d` создайте такой скрипт:

    /etc/NetworkManager/dispatcher.d/10-update-timesyncd

    #!/bin/sh

    [ -z "$CONNECTION_UUID" ] && exit 0
    INTERFACE="$1"
    ACTION="$2"

    case $ACTION in
    up | dhcp4-change | dhcp6-change)
    	[ -n "$DHCP4_NTP_SERVERS" ] || exit 0
    	mkdir -p /etc/systemd/timesyncd.conf.d
    	cat <<-THE_END >"/etc/systemd/timesyncd.conf.d/${CONNECTION_UUID}.conf"
    		[Time]
    		NTP=$DHCP4_NTP_SERVERS
    	THE_END
    	systemctl restart systemd-timesyncd.service
    	;;
    down)
    	rm -f "/etc/systemd/timesyncd.conf.d/${CONNECTION_UUID}.conf"
    	systemctl restart systemd-timesyncd.service
    	;;
    esac

Каждый раз, когда NetworkManager устанавливает новое соединение (`ACTION=up`) или получает обновление для существующего (`ACTION=dhcp4-change` или `ACTION=dhcp6-change`) и предоставленные данные соединения содержат информацию о NTP-сервере (`DHCP4_NTP_SERVERS`), в каталог `/etc/systemd/timesyncd.conf.d` записывается файл настроек, специфичный для соединения, содержащий предоставленные NTP-серверы. Каждый раз, когда соединение отключается (`ACTION=down`), этот файл удаляется. После каждого изменения конфигурации systemd-timesyncd служба перезапускается, чтобы применить обновлённую конфигурацию. Файлы намеренно привязаны к конкретным соединениям, чтобы при параллельном управлении двумя или более соединениями NetworkManager различные имена NTP-серверов в конфигурации не перезаписывались, поскольку действия `up`, `dhcp4-change`, `dhcp6-change` и `down` могут происходить в произвольном порядке.

## Тестирование

Апплеты NetworkManager загружаются при входе в систему, поэтому большинству пользователей не потребуется дополнительная настройка. Если вы уже отключили предыдущие сетевые настройки и отсоединились от сети, вы можете проверить, будет ли работать NetworkManager. В первую очередь запустите службу `NetworkManager.service`.

Некоторые апплеты предоставляют файл `.desktop`, чтобы апплет NetworkManager можно было загрузить через меню приложений. Если это не так, вам нужно либо найти команду для запуска, либо перелогиниться, чтобы сработал автозапуск апплета. После запуска апплет, скорее всего, начнёт опрашивать сетевые соединения на предмет автоматической настройки с помощью DHCP-сервера.

Чтобы запустить апплет GNOME в несовместимых с xdg оконных менеджерах, таких как awesome:

    nm-applet --sm-disable &

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

## Советы и рекомендации

### Шифрование паролей Wi-Fi

По умолчанию NetworkManager хранит пароли открытым текстом в файлах соединений в каталоге `/etc/NetworkManager/system-connections/`. Чтобы вывести сохранённые пароли, выполните следующую команду:

    # grep -r '^psk=' /etc/NetworkManager/system-connections/

Пароли могут прочитать root и пользователи, имеющие доступ к настройкам (например, через nm-applet).

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

Для работы со связкой ключей должен быть доступен агент секретов. Это может быть:

- `nmcli` с опцией `--ask`;
- какой-нибудь графический интерфейс (смотрите раздел #Фронтенды).

Если агент недоступен, то аутентификация завершится с ошибкой `no secrets: No agents were available for this request.`

#### С помощью GNOME Keyring

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

Кроме того, NetworkManager должен быть настроен так, чтобы не хранить пароль для всех пользователей. Запустите `nm-connection-editor` (входит в состав пакета network-manager-applet), откройте редактирование нужного соединения, выберите вкладку Защита Wi-Fi, нажмите на значок справа в поле ввода пароля и выберите пункт Запомнить пароль только для этого пользователя.

#### С помощью KDE Wallet

Используя plasma-nm, нажмите на апплет сети, нажмите на значок Настроить сетевые соединения в правом верхнем углу, выберите нужное соединение, на вкладке Основные параметры снимите галочку Все пользователи могут подключаться к этой сети. При включенной галочке пароли будут храниться открытым текстом даже при запущенном демоне связки ключей.

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

### Раздача интернета через Wi-Fi

Вы можете предоставить общий доступ к вашему интернет-соединению (например, 3G или проводному) всего в несколько кликов мышью. Обратите внимание, что межсетевой экран может помешать раздаче интернета.

Вам понадобится карта Wi-Fi, поддерживающая режим точки доступа; смотрите раздел Программная точка доступа#Поддержка режима AP устройством Wi-Fi.

Установите пакет dnsmasq, чтобы иметь возможность предоставить общий доступ к соединению. Обратите внимание, что NetworkManager запускает свой собственный экземпляр dnsmasq, независимый от `dnsmasq.service`, в качестве DHCP-сервера. Смотрите предостережения в разделе #dnsmasq.

Создайте общее соединение:

- Откройте редактор сетевых соединений и создайте новую беспроводную сеть.
- Заполните все необходимые настройки (выберите WPA2 или новее для защиты Wi-Fi и используйте не менее 8 символов для пароля).
  - В настройке Режим выберите Точка доступа (Hotspot) или Одноранговый (Ad-hoc).

Соединение будет сохранено и останется до следующего раза, когда оно вам понадобится.

Примечание Android не поддерживает подключение к сетям Ad-hoc. Для обмена соединением с Android используйте режим инфраструктуры (то есть установите режим Wi-Fi на Точка доступа).

### Раздача интернета через Ethernet

Ситуация: ваше устройство подключено к Интернету через Wi-Fi, и вы хотите предоставить доступ к Интернету другим устройствам через Ethernet.

Требования:

- Установите пакеты dnsmasq и nm-connection-editor, чтобы иметь возможность предоставить общий доступ к соединению. Обратите внимание, что NetworkManager запускает свой собственный экземпляр dnsmasq, независимый от `dnsmasq.service`, в качестве DHCP-сервера. Смотрите предостережения в разделе #dnsmasq.
- Ваше устройство, подключенное к Интернету, и другие устройства соединены друг с другом через подходящий кабель Ethernet (обычно это означает перекрёстный кабель или коммутатор между ними).
- Общий доступ в интернет не заблокирован межсетевым экраном.

Шаги:

- Запустите `nm-connection-editor`.
- Добавьте новое Ethernet-соединение.
- Задайте какое-нибудь информативное имя, например «Раздача интернета».
- Перейдите на вкладку Параметры IPv4.
- Измените Метод на Общий с другими компьютерами.
- Сохраните.

Теперь в списке проводных соединений должна появиться «Раздача интернета».

### Проверка работоспособности сети внутри задачи cron или скрипта

Примечание nm-tool был удалён из NetworkManager. [7]

Некоторым задачам cron может понадобиться работающая сеть. Чтобы не выполнять их при отсутствии сети, добавьте проверку, запрашивающую статус сети у NetworkManager. Это может быть полезно для ноутбуков, которые не всегда подключены к сети.

    if [ $(nm-tool|grep State|cut -f2 -d' ') == "connected" ]; then
        # Добавьте сюда команды для выполнения при работающей сети
    else
        # Добавьте сюда команды для выполнения при отсутствующей сети
        # Этот блок и строка else опциональны
    fi

Пример использования — скрипт `cron.hourly`, который запускает fpupdate для обновления сигнатур вирусного сканера F-Prot. Другой способ, который может быть полезен, с небольшими изменениями — различать сети, используя различные части вывода nm-tool; например, поскольку активная беспроводная сеть обозначается звёздочкой, вы можете через grep получить строку с именем нужной сети, а через второй grep проверить наличие звёздочки.

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

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

1. Откройте редактирование сетевых соединений (например, через значок `nm-applet` в трее).
2. Выберите Wi-Fi соединение, к которому вы хотите автоматически подключаться, и откройте его редактирование.
3. На вкладке Основное поставьте галочки Подключаться автоматически и Все пользователи могут подключаться к этой сети.
4. На вкладке Защита Wi-Fi выберите пункт Запомнить пароль для всех пользователей (в nm-connection-editor он спрятан в небольшом значке справа от пароля).

Перелогиньтесь для завершения.

### OpenConnect с паролем в KWallet

Хотя вы можете ввести оба значения во время подключения, plasma-nm 0.9.3.2-1 и новее способны получить имя пользователя и пароль OpenConnect непосредственно из KWallet.

Откройте Управление бумажниками (KWalletManager) и найдите ваше VPN-соединение OpenConnect в разделе «Network Management|Maps». Нажмите Показать содержимое и введите свои учётные данные в ключе «VpnSecrets» в этой форме (замените пользователь и пароль соответствующим образом):

    form:main:username%SEP%пользователь%SEP%form:main:password%SEP%пароль

При следующем подключении имя пользователя и пароль должны появиться в диалоговом окне «VPN secrets».

### Игнорирование определённых устройств

Иногда бывает нужно, чтобы NetworkManager игнорировал определённые устройства и не пытался настроить для них адреса и маршруты. Чтобы игнорировать устройства по MAC-адресу или имени интерфейса, пропишите их в файле `/etc/NetworkManager/conf.d/unmanaged.conf`:

    [keyfile]
    unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth0

После редактирования файла выполните `nmcli general reload` от имени root. После это вы сможете вручную настроить указанные интерфейсы, и NetworkManager не будет изменять ваши настройки.

### Рандомизация MAC-адреса

Примечание Иногда бывает нужно отключить рандомизацию MAC-адреса для более стабильного соединения [8] или для работы в сетях, которые ограничивают доступ к сети по MAC-адресам.

Рандомизация MAC-адреса скрывает от сети ваш реальный MAC-адрес, что можно использовать для повышения конфиденциальности.

NetworkManager поддерживает два типа рандомизации: для сканирования и для соединений. Оба режима могут быть настроены в файле `/etc/NetworkManager/NetworkManager.conf` или путём создания отдельного файла настроек в `/etc/NetworkManager/conf.d/`, что предпочтительнее, поскольку NetworkManager может перезаписывать вышеупомянутый файл настроек.

Рандомизация при сканировании Wi-Fi включена по умолчанию, но её можно отключить добавлением следующих строк в `/etc/NetworkManager/NetworkManager.conf` или в отдельный файл настроек в `/etc/NetworkManager/conf.d`:

    /etc/NetworkManager/conf.d/wifi_rand_mac.conf

    [device]
    wifi.scan-rand-mac-address=no

Рандомизация MAC-адреса для соединений может быть установлена в разные режимы для беспроводных и проводных интерфейсов.

В плане рандомизации MAC наиболее важными режимами являются `stable` и `random`. Режим `stable` генерирует случайный MAC-адрес, когда вы подключаетесь к новой сети, и связывает их друг с другом навсегда. Это означает, что вы будете использовать один и тот же MAC-адрес при каждом подключении к этой сети. Режим `random` генерирует новый MAC-адрес каждый раз, когда вы подключаетесь к новой или ранее известной сети. Настроить рандомизацию можно добавлением настроек в `/etc/NetworkManager/conf.d`:

    /etc/NetworkManager/conf.d/wifi_rand_mac.conf

    [device-mac-randomization]
    # "yes" уже используется по умолчанию при сканировании
    wifi.scan-rand-mac-address=yes

    [connection-mac-randomization]
    # Генерирование нового случайного MAC при каждом подключении к проводному соединению
    ethernet.cloned-mac-address=random
    # Генерирование случайного MAC для каждого Wi-Fi при первом подключении и связывание их вместе
    wifi.cloned-mac-address=stable

Чтобы настроить рандомизацию MAC-адреса для конкретного соединения (например, если сети не нравятся случайные MAC-адреса), измените соединение, установив `802-11-wireless.cloned-mac-address` в один из режимов (например, `stable` или `random`).

Более подробная информация о режимах есть в блоге GNOME.

### Включение IPv6 Privacy Extensions

Смотрите IPv6 (Русский)#NetworkManager.

### Настройка уникального DUID для соединения

Уникальный идентификатор DHCPv6 (DHCPv6 Unique Identifier, DUID) — это значение, используемое клиентом DHCPv6 для идентификации себя на серверах DHCPv6. NetworkManager поддерживает 3 типа DUID:

- DUID-UUID (RFC 6355): генерируется из UUID.
- DUID-LL (RFC 3315): генерируется из адреса канального уровня (MAC-адреса).
- DUID-LLT (RFC 3315): генерируется из адреса канального уровня и метки времени.

Если используется встроенный DHCP-клиент NetworkManager (по умолчанию), он идентифицирует себя с помощью глобального и постоянного DUID-UUID, сгенерированного из machine-id (`/etc/machine-id`). Это означает, что во всех соединениях используется один и тот же UUID, что может оказаться проблемой конфиденциальности.

К счастью, NetworkManager позволяет настроить уникальные DUID для каждого соединения, получаемые из stable-id соединения и уникального ключа для каждого хоста. Вы можете включить эту функцию, добавив следующую конфигурацию в `/etc/NetworkManager/conf.d/`:

    /etc/NetworkManager/conf.d/duid.conf

    [connection]
    ipv6.dhcp-duid=stable-uuid

Также поддерживаются значения `stable-ll` и `stable-llt`. Дополнительная информация есть в описании `dhcp-duid` в nm-settings(5) § ipv6 setting.

### Работа с проводными соединениями

По умолчанию NetworkManager генерирует профиль соединения для каждого найденного Ethernet-адаптера. В момент создания соединения он не знает, будут ли доступны ещё какие-нибудь Ethernet-адаптеры, поэтому он называет первое проводное соединение «Проводное соединение 1». Вы можете избежать генерации этого соединения, настроив параметр `no-auto-default` (смотрите NetworkManager.conf(5)) или просто удалив его. Тогда NetworkManager запомнит, что генерировать соединение для этого интерфейса не нужно.

Вы также можете отредактировать соединение (и сохранить его на диске) или удалить его. NetworkManager не будет повторно генерировать соединение. Затем вы можете изменить имя на любое другое. Для этой задачи можно использовать что-то вроде nm-connection-editor.

### Использование iwd в качестве бэкенда Wi-Fi

Примечание

- Не включайте `iwd.service` и не настраивайте iwd вручную. NetworkManager сам всё запустит и настроит.
- Перед переходом на iwd ознакомьтесь со списком известных проблем.

Чтобы включить экспериментальный бэкенд iwd, сперва установите пакет iwd и создайте такой файл настроек:

    /etc/NetworkManager/conf.d/wifi_backend.conf

    [device]
    wifi.backend=iwd

Другой вариант — установить networkmanager-iwdAUR. Это модифицированный пакет, который собирает NetworkManager только с поддержкой iwd. Главное отличие в том, что это позволяет удалить вам wpa_supplicant.

Примечание Вам может понадобиться преобразовать существующие сетевые профили NetworkManager после перехода на iwd.

### Запуск в сетевом пространстве имён

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

    $ ip link set dev УСТРОЙСТВО down
    $ ip link set dev УСТРОЙСТВО netns ПРОСТРАНСТВО_ИМЁН
    $ ip netns exec ПРОСТРАНСТВО_ИМЁН NetworkManager
    ...
    $ ip netns exec ПРОСТРАНСТВО_ИМЁН killall NetworkManager

В противном случае NetworkManager впоследствии не сможет установить соединение с ошибкой `device is strictly unmanaged`.

### Автоматическое подключение к VPN

NetworkManager можно настроить на автоматическое подключение к VPN при подключении к интернету или для отдельной сети. Само VPN-соединение можно добавить через фронтенд NetworkManager в GNOME, но для автоматического подключения нужно использовать `nmcli`. В других фронтендах может не быть этого ограничения.

Сперва убедитесь, что VPN-соединение доступно всем пользователям. В GNOME для этого нужно установить флажок на вкладке `details`. На вкладке `Identity` в поле пароля нажмите на значок справа и выберите значение `Store the password for all users`.

Затем найдите UUID нужного VPN-соединения и добавьте его в `connection.secondaries` интернет-соединения:

    # UUID=$(nmcli --get-values connection.uuid connection show название-VPN-соединения)
    # nmcli connection modify название-интернет-соединения connection.secondaries "$UUID"

Теперь после перезапуска NetworkManager и переподключения к настроенному интернет-соединению вы должны автоматически подключиться к VPN.

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

### Не запрашивается пароль Wi-Fi

Если при попытке подключиться к защищённой сети Wi-Fi не отображается запрос на ввод пароля и соединение не устанавливается, это может быть связано с тем, что не установлена программа для управления паролями. Простым решением является установка gnome-keyring. Если вы хотите, чтобы пароли хранились в зашифрованном виде, настройте gnome-keyring-daemon, как описано в статье GNOME (Русский)/Keyring (Русский).

### Управление сетью отключено

Если после завершения работы NetworkManager файл pid (state) оказался не удалён, вы увидите сообщение `Network management disabled`. В этом случае удалите файл вручную:

    # rm /var/lib/NetworkManager/NetworkManager.state

### Проблемы с внутренним клиентом DHCP

Если у вас возникли проблемы с получением IP-адреса при использовании встроенного клиента DHCP, попробуйте использовать другой клиент; смотрите раздел #Клиент DHCP. Это обходное решение может решить проблемы в больших беспроводных сетях, таких как eduroam.

### Проблемы с DHCP при использовании dhclient

Если у вас возникли проблемы с получением IP-адреса через DHCP, попробуйте добавить в файл `/etc/dhclient.conf`:

     interface "eth0" {
       send dhcp-client-identifier 01:aa:bb:cc:dd:ee:ff;
     }

Где `aa:bb:cc:dd:ee:ff` — это MAC-адрес вашей сетевой карты. Узнать его можно с помощью команды `ip link show интерфейс` (пакет iproute2).

### 3G-модем не определяется

Смотрите Mobile broadband modem#NetworkManager.

### Выключение беспроводной сети на ноутбуках

Иногда NetworkManager не работает, когда вы отключаете свой Wi-Fi адаптер с помощью переключателя на ноутбуке и после этого пытаетесь включить его снова. Часто это проблема с rfkill. Чтобы проверить, сообщает ли драйвер о состоянии беспроводного адаптера в rfkill, используйте:

    $ watch -n1 rfkill list all

Если идентификатор остаётся заблокированным после включения адаптера, можно попробовать вручную разблокировать его с помощью (где X — номер идентификатора, указанный в выводе этой команды):

    # rfkill event unblock X

### Настройки статического IP-адреса сбрасываются на DHCP

Из-за бага при изменении стандартных подключений на статический IP-адрес `nm-applet` может неправильно сохранить настройки и сбросить их на автоматический DHCP.

Чтобы решить эту проблему, нужно отредактировать подключение по умолчанию (например, «Auto eth0») в `nm-applet`, изменить имя подключения (например, «Мой eth0»), снять флажок «Все пользователи могут подключаться к этой сети», изменить настройки статического IP-адреса по своему усмотрению и сохранить их.

Далее нужно сделать так, чтобы соединение по умолчанию не подключалось автоматически. Для этого запустите `nm-connection-editor` (от имени обычного пользователя, не от root). Отредактируйте подключение по умолчанию (например, «Auto eth0»), снимите флажок «Подключаться автоматически» и сохраните изменения.

### Не удаётся редактировать соединения от имени обычного пользователя

Смотрите раздел #Настройка разрешений PolicyKit.

### Забыть скрытую беспроводную сеть

Поскольку скрытые сети не отображаются в списке выбора беспроводной сети, их нельзя забыть (удалить) через графический интерфейс. Можно вручную удалить соответствующие файлы:

    # rm /etc/NetworkManager/system-connections/SSID.nmconnection

Это также работает с любыми другими соединениями.

### VPN не работает в GNOME

При настройке соединений OpenConnect или vpnc в NetworkManager при использовании GNOME иногда не появляется диалоговое окно, а в `/var/log/errors.log` появляется следующая ошибка:

    localhost NetworkManager[399]: <error> [1361719690.10506] [nm-vpn-connection.c:1405] get_secrets_cb(): Failed to request VPN secrets #3: (6) No agents were available for this request.

Это происходит из-за того, что апплет GNOME NetworkManager ожидает, что диалоговые скрипты будут находиться в `/usr/lib/gnome-shell`, в то время как пакеты NetworkManager помещают их в `/usr/lib/networkmanager`. В качестве «временного» исправления (эта ошибка существует уже некоторое время) сделайте следующие символические ссылки:

- Для OpenConnect: `ln -s /usr/lib/networkmanager/nm-openconnect-auth-dialog /usr/lib/gnome-shell/`
- Для VPNC (то есть Cisco VPN): `ln -s /usr/lib/networkmanager/nm-vpnc-auth-dialog /usr/lib/gnome-shell/`

Это может потребоваться и для других VPN-плагинов NetworkManager.

### Не удаётся подключиться к видимым европейским беспроводным сетям

Чипы беспроводной связи поставляются с регулятивным доменом по умолчанию. Если ваша точка доступа работает за пределами ограничений этого домена, вы не сможете подключиться к сети. Исправить это просто:

- установите пакет wireless-regdb;
- раскомментируйте строку с правильным кодом страны в файле `/etc/conf.d/wireless-regdom`;
- перезагрузитесь — обновлённые настройки прочитаются при следующей загрузке системы.

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

Проблема возникает, когда система (то есть NetworkManager, запущенный от имени root) пытается установить VPN-соединение, но пароль недоступен, поскольку находится в хранилище паролей конкретного пользователя.

Решением является хранение пароля от VPN в открытом виде, как описано в шаге 2 раздела #Использование диспетчера для подключения к VPN после появления сети.

Использовать диспетчер, как описано в шаге 1, не нужно, если вы включили опцию «Автоматически подключаться к VPN» в графическом интерфейсе `nm-applet`.

### Замедление загрузки системы из-за журнала systemd

Некоторые пользователи замечали, что большой размер `/var/log/journal` может повлиять на скорость загрузки системы при использовании NetworkManager; подробнее в разделе systemd (Русский)#Время загрузки системы увеличивается с течением времени.

### Постоянные отключения беспроводной сети, задержки и потеря пакетов

NetworkManager выполняет сканирование каждые 2 минуты.

Некоторые драйверы Wi-Fi имеют проблемы при сканировании при наличии установленного подключения. Среди симптомов — отключение/переподключение VPN и потеря пакетов, веб-страницы не загружаются, а затем начинают загружаться без проблем.

Запуск `journalctl -f` от имени root продемонстрирует, что это происходит: в журнале с регулярными интервалами будут появляться примерно такие сообщения:

    NetworkManager[410]: <info>  (wlp3s0): roamed from BSSID 00:14:48:11:20:CF (my-wifi-name) to (none) ((none))

Если роуминг беспроводных сетей не важен, периодическое сканирование можно отключить, заблокировав BSSID точки доступа в профиле подключения Wi-Fi.

### Не удаётся включить Wi-Fi на ноутбуке Lenovo

Существует проблема с модулем `ideapad_laptop` на некоторых моделях Lenovo, связанная с тем, что драйвер Wi-Fi неверно сообщает о наличии программной блокировки. Картой по-прежнему можно управлять с помощью `netctl`, но менеджеры вроде NetworkManager ломаются. Вы можете убедиться, что проблема заключается именно в этом, проверив вывод `rfkill list` после переключения аппаратного переключателя и убедившись, что программная блокировка сохраняется.

Выгрузка модуля `ideapad_laptop` может помочь (осторожно, это также может отключить клавиатуру и тачпад ноутбука).

### Отключение отправки имени хоста

NetworkManager по умолчанию отправляет имя хоста на DHCP-сервер.

Чтобы отключить глобальную отправку вашего имени хоста на DHCP-сервер, установите параметры `ipv4.dhcp-send-hostname=0` и `ipv6.dhcp-send-hostname=0` с помощью файла конфигурации в `/etc/NetworkManager/conf.d/`. Например.:

    /etc/NetworkManager/conf.d/dhcp-send-hostname.conf

    [connection]
    ipv4.dhcp-send-hostname=0
    ipv6.dhcp-send-hostname=0

Чтобы отключить отправку имени хоста на DHCP-сервер для конкретного соединения (или, в качестве альтернативы, включить его для подключения, если оно отключено глобально), добавьте следующее в файл соединения:

    /etc/NetworkManager/system-connections/your_connection_file.nmconnection

    ...
    [ipv4]
    dhcp-send-hostname=0
    ...
    [ipv6]
    dhcp-send-hostname=0
    ...

Примечание Эти параметры поддерживаются только в режиме по умолчанию внутренний DHCP-клиент. Чтобы исключить отправку имени хоста при использовании NetworkManager с dhcpcd, отредактируйте `/etc/dhcpcd.conf` и вставьте `anonymous` в качестве последней строки.

### nm-applet пропадает в i3

Если вы используете `xfce4-notifyd.service`, отредактируйте юнит, добавив следующее:

    /etc/systemd/user/xfce4-notifyd.service.d/display_env.conf

    [Service]
    Environment="DISPLAY=:0.0"

Затем выполните daemon-reload, перезагрузите службу `xfce4-notifyd.service` и перезайдите в i3.

### Unit dbus-org.freedesktop.resolve1.service not found

Если `systemd-resolved.service` не запущен, NetworkManager попытается запустить его через D-Bus, но не сможет:

    dbus-daemon[991]: [system] Activating via systemd: service name='org.freedesktop.resolve1' unit='dbus-org.freedesktop.resolve1.service' requested by ':1.23' (uid=0 pid=1012 comm="/usr/bin/NetworkManager --no-daemon ")
    dbus-daemon[991]: [system] Activation via systemd failed for unit 'dbus-org.freedesktop.resolve1.service': Unit dbus-org.freedesktop.resolve1.service not found.
    dbus-daemon[991]: [system] Activating via systemd: service name='org.freedesktop.resolve1' unit='dbus-org.freedesktop.resolve1.service' requested by ':1.23' (uid=0 pid=1012 comm="/usr/bin/NetworkManager --no-daemon ")

Это происходит потому, что NetworkManager будет пытаться отправить информацию о DNS в systemd-resolved независимо от настройки `main.dns=` в NetworkManager.conf(5).[9]

Это можно отключить в настройках:

    /etc/NetworkManager/conf.d/no-systemd-resolved.conf

    [main]
    systemd-resolved=false

Смотрите FS#62138.

### Secrets were required, but not provided

Если при попытке подключиться к сети вы получаете ошибку:

    $ nmcli device wifi connect SSID password пароль

    Error: Connection activation failed: (7) Secrets were required, but not provided

У этой ошибки может быть множество причин, и вам стоит почитать журнал службы (параметр `-u NetworkManager`). Например, если NetworkManager слишком долго устанавливал соединение, он будет считать, что пароль неверен:

    NetworkManager[1372]: <warn>  [1643991888.3808] device (wlan0): Activation: (wifi) association took too long
    NetworkManager[1372]: <info>  [1643991888.3809] device (wlan0): state change: config -> need-auth (reason 'none', sys-iface-state: 'managed')
    NetworkManager[1372]: <warn>  [1643991888.3838] device (wlan0): Activation: (wifi) asking for new secrets

Также можно попробовать удалить соединение и создать новое:

    $ nmcli connection delete SSID
    $ nmcli device wifi connect SSID password пароль

Ещё можно попробовать отключить рандомизацию MAC-адреса:

    /etc/NetworkManager/conf.d/wifi_rand_mac.conf

    [device]
    wifi.scan-rand-mac-address=no

### Подключение к сети WPA Enterprise с использованием iwd

Если вы попытаетесь подключиться к eduroam через NetworkManager с бэкендом iwd, вы получите следующую ошибку от NetworkManager:

    Подключение 'eduroam' недоступно на устройстве wlan0, поскольку профиль несовместим с устройством (для подключений стандарта 802.1x должны быть файлы провижинга IWD).

Это связано с тем, что NetworkManager не может настроить сеть WPA Enterprise. Поэтому вам нужно настроить её через файл настроек `/var/lib/iwd/essid.8021x`, как описано в разделе iwd (Русский)#WPA Enterprise.

### Failed to request VPN secrets

Если вы получаете ошибку:

    Failed to request VPN secrets #1: No agents were available for this request.

Это может происходить из-за пустого пароля или из-за ненастроенных разрешений PolicyKit.

### Соединения OpenVPN выдают ошибку «secrets: failed to request VPN secrets»

Если в настройках соединения не сохранён пароль, networkmanager-openvpn вынужден каким-то образом получить его от пользователя. Обычно это делается через графический интерфейс, для работы которого нужно установить опциональные зависимости libnma-gtk4 и/или libnma (GTK3). Если они не установлены, попытка подключения может привести к появлению такой ошибки:

    NetworkManager[642]: <warn>  [...] vpn[..."name_of_vpn_profile VPN"]: secrets: failed to request VPN secrets #3: No agents were available for this request.

### Ошибка «ca md too weak» в соединениях OpenVPN

После обновления openssl до версии 3 сертификаты, созданные с использованием устаревших криптографических алгоритмов, по умолчанию отклоняются. Попытка использовать networkmanager-openvpn с такой настройкой может привести к появлению следующих ошибок в журнале:

    nm-openvpn[14359]: OpenSSL: error:0A00018E:SSL routines::ca md too weak
    nm-openvpn[14359]: Cannot load certificate file /home/archie/.local/share/networkmanagement/certificates/my_issued_cert.crt
    nm-openvpn[14359]: Exiting due to fatal error

Самое правильное решение — попросить администратора сервера OpenVPN выпустить более безопасные сертификаты. Если это по каким-то причинам невозможно и требуется немедленное решение проблемы — OpenVPN требует `tls-cipher "DEFAULT:@SECLEVEL=0"`, который нужно включить через nmcli. Также нужно включить провайдер legacy в настройках OpenSSL.

Сперва узнайте имя проблемного VPN-соединения:

    $ nmcli connection show

Например, если имя vpn.example.com, выполните такую команду:

    $ nmcli connection modify vpn.example.com +vpn.data tls-cipher=DEFAULT:@SECLEVEL=0

Она обновит настройки в файле `/etc/NetworkManager/system-connections/vpn.example.com.nmconnection`.

Также нужно включить провайдер legacy в настройках OpenSSL, отредактировав `/etc/ssl/openssl.cnf` как описано в OpenSSL wiki.

В конце раздела `[provider_sect]` добавьте `legacy = legacy_sect`, а в разделе `[default_sect]` раскомментируйте `activate = 1`. Затем добавьте раздел `[legacy_sect]` со строкой `activate = 1`. После внесения изменений файл должен содержать примерно такие настройки (другие настройки из этого файла опущены для краткости):

    /etc/ssl/openssl.cnf

    openssl_conf = openssl_init

    [openssl_init]
    providers = provider_sect

    [provider_sect]
    default = default_sect
    legacy = legacy_sect

    [default_sect]
    activate = 1

    [legacy_sect]
    activate = 1

Перезапустите службу `NetworkManager.service` для применения изменений.

### Соединения WPA Enterprise не проходят аутентификацию с ошибкой OpenSSL «unsupported protocol»

После обновления openssl до версии 3 протоколы SSL 3, TLS 1.0, TLS 1.1 и DTLS 1.0 по умолчанию работают только на уровне безопасности 0. Попытка подключения к беспроводной сети, поддерживающей только более старые стандарты, приводит к появлению в журнале следующей ошибки:

    wpa_supplicant[3320]: SSL: SSL3 alert: write (local SSL3 detected an error):fatal:protocol version
    wpa_supplicant[3320]: OpenSSL: openssl_handshake - SSL_connect error:0A000102:SSL routines::unsupported protocol
    wpa_supplicant[3320]: wlp3s0: CTRL-EVENT-EAP-FAILURE EAP authentication failed

Самое правильное решение — попросить администратора сети добавить поддержку TLS 1.3 и по возможности прекратить использование устаревших протоколов TLS 1.0/1.1, DTLS 1.0 и SSL 1-3. Если это по каким-то причинам невозможно и требуется немедленное решение проблемы — есть несколько способов разрешить TLS 1.0 и/или 1.1 по умолчанию. Один из способов — откат данного изменения в OpenSSL ([10]). Поскольку это также снижает безопасность всех других программ, использующих уровень безопасности 1, этот способ не рекомендуется. Вместо этого можно напрямую установить уровень, используемый wpa_supplicant, как описано в BBS#286417. Чтобы изменить только затронутое соединение, в настройках соединения в разделе `[802-1x]` пропишите `phase1-auth-flags=32` или `phase1-auth-flags=64`. Это нельзя сделать через графический интерфейс, но можно сделать через nmcli.

Сперва узнайте имя проблемного беспроводного соединения:

    $ nmcli connection show

Например, если имя Example Wi-Fi и оно использует TLS 1.0, выполните такую команду:

    $ nmcli connection modify 'Example Wi-Fi' 802-1x.phase1-auth-flags 32

А для TLS 1.1 укажите 64:

    $ nmcli connection modify 'Example Wi-Fi' 802-1x.phase1-auth-flags 64

Примечание Число, которое вы вводите, относится к числу, которое получается при возведении 2 в степень n. Здесь n — это индекс бита в битовой маске с порядком справа налево. Переключение пятого бита включает TLS 1.0 [log(2) 32], а переключение шестого бита включает TLS 1.1 [log(2) 64].

Команда обновит настройки в файле `/etc/NetworkManager/system-connections/Example Wi-Fi.nmconnection`.

Перезапустите службу `NetworkManager.service` для применения изменений.

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

- NetworkManager for Administrators Part 1
- Wikipedia:ru:NetworkManager
- Официальный сайт NetworkManager

Categories:

- Network managers (Русский)
- Red Hat (Русский)
- DHCP (Русский)

NetworkManager (Русский)
Add topic