NetworkManager (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
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-fortisslvpn
AUR
networkmanager-iodine-git
AUR
networkmanager-libreswan
AUR
networkmanager-l2tp
networkmanager-ssh
AUR
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
без панели задач можно использовать
trayer
AUR
или
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-git
AUR
, небольшой скрипт для управления соединениями 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:
Добавить
себя в группу
wheel
. Вам нужно будет вводить свой пароль при каждом действии. Имейте в виду, что эта группа также может предоставлять другие разрешения, такие как возможность использовать
sudo
без ввода пароля root.
Добавить
себя в группу
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-git
AUR
, основанное на 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
предотвратит закрытие диспетчера. К сожалению, диспетчер
нужно
закрыть, прежде чем он сможет снова запустить ваши скрипты. С этой строкой диспетчер не будет завершать работу по таймауту, но и не будет закрываться, что означает, что скрипты будут выполняться только один раз за загрузку. Поэтому не добавляйте эту строку, если таймаут не вызывает проблем.
Примеры диспетчерских скриптов
Автоматическая установка часового пояса
Установите
tzupdate
AUR
и создайте такой скрипт (не забудьте сделать его
исполняемым
):
/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 не будет автоматически подключаться к сетям, требующим пароль, при загрузке системы. Это происходит потому, что по умолчанию он закрепляет такие соединения за тем пользователем, который их создал, подключаясь только после входа пользователя в систему. Чтобы изменить это, выполните следующие шаги:
Откройте редактирование сетевых соединений (например, через значок
nm-applet
в трее).
Выберите Wi-Fi соединение, к которому вы хотите автоматически подключаться, и откройте его редактирование.
На вкладке
Основное
поставьте галочки
Подключаться автоматически
и
Все пользователи могут подключаться к этой сети
.
На вкладке
Защита 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-iwd
AUR
. Это модифицированный пакет, который собирает
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