Блог "Дети ОИТа"
/поиск

Устранение конфликта сетевых менеджеров

> [!INFO] Применимость > **ALT Linux 10.4–11.x** · локальная работа через CLI/TTY > Цель: оставить **NetworkManager** единственным менеджером сети и управлять подключением через `nmcli`. > > `nmcli`

[!INFO] Применимость
ALT Linux 10.4–11.x · локальная работа через CLI/TTY
Цель: оставить NetworkManager единственным менеджером сети и управлять подключением через nmcli.

nmcli не является отдельной службой. Это консольный клиент NetworkManager.

Оглавление

  • [[#Порядок действий|Порядок действий]]
  • [[#Обнаружить конфликт|Обнаружить конфликт]]
  • [[#Зафиксировать рабочую конфигурацию|Зафиксировать рабочую конфигурацию]]
  • [[#Определить источник настроек|Определить источник настроек]]
  • [[#Создать native-профиль NetworkManager|Создать native-профиль NetworkManager]]
  • [[#Переключить интерфейс на NetworkManager|Переключить интерфейс на NetworkManager]]
  • [[#Отключить второй менеджер|Отключить второй менеджер]]
  • [[#Убрать старые конфигурации интерфейса|Убрать старые конфигурации интерфейса]]
  • [[#Проверить результат|Проверить результат]]
  • [[#Откатить изменения|Откатить изменения]]
  • [[#Типовые проблемы|Типовые проблемы]]

Порядок действий

  1. Найти интерфейс и конфликтующие службы.
  2. Сохранить текущие адреса, маршруты, DNS и конфигурационные файлы.
  3. Создать неактивный native-профиль NetworkManager.
  4. Остановить второй менеджер.
  5. Активировать профиль через nmcli.
  6. Проверить связь.
  7. Только после успешной проверки отключить автозапуск второго менеджера.
  8. Проверить систему после перезагрузки.

Осторожно

Работа выполняется с локальной консоли. Во время переключения сеть кратковременно пропадёт.

Обнаружить конфликт

Проверить службы

systemctl is-active NetworkManager
systemctl is-active network
systemctl is-active systemd-networkd

systemctl is-enabled NetworkManager
systemctl is-enabled network
systemctl is-enabled systemd-networkd

На клиентском ПК после исправления ожидается:

NetworkManager:   active, enabled
network:          inactive, disabled
systemd-networkd: inactive, disabled

Проверить интерфейсы

nmcli -f DEVICE,TYPE,STATE,CONNECTION device status
ip -br link
ip -br -4 address
ip -4 route

Проверить, видит ли интерфейс systemd-networkd:

networkctl list

Проверить процессы DHCP

ps -ef | grep -E '[d]hclient|[d]hcpcd|[u]dhcpc'

Отдельный DHCP-клиент может менять адреса и маршруты независимо от NetworkManager.

Проверить журналы

journalctl -b \
  -u NetworkManager \
  -u network \
  -u systemd-networkd \
  --no-pager

Признаки конфликта:

  • адрес или маршрут появляется и затем исчезает;
  • один интерфейс получает несколько адресов;
  • меняется маршрут по умолчанию;
  • NetworkManager показывает интерфейс как unmanaged;
  • разные службы одновременно сообщают о настройке одного интерфейса.

Зафиксировать рабочую конфигурацию

Определить рабочий интерфейс:

ip -4 route show default
nmcli -f DEVICE,TYPE,STATE,CONNECTION device status

Подставить его имя:

IFACE="enp1s0"

Создать каталог резервной копии:

BACKUP="/root/network-backup-$(date +%Y%m%d-%H%M%S)"
sudo mkdir -p "$BACKUP"
sudo chmod 700 "$BACKUP"

Сохранить текущее состояние:

ip -d link show > "$BACKUP/ip-link.txt"
ip -4 address show > "$BACKUP/ip-address.txt"
ip -4 route show table all > "$BACKUP/ip-route.txt"
ip -4 rule show > "$BACKUP/ip-rule.txt"

nmcli general status > "$BACKUP/nm-general.txt" 2>&1
nmcli device show > "$BACKUP/nm-device.txt" 2>&1
nmcli connection show > "$BACKUP/nm-connections.txt" 2>&1

cp -a /etc/resolv.conf "$BACKUP/resolv.conf"

Скопировать конфигурации, если они существуют:

sudo cp -a /etc/NetworkManager "$BACKUP/" 2>/dev/null || true
sudo cp -a /etc/net "$BACKUP/" 2>/dev/null || true
sudo cp -a /etc/systemd/network "$BACKUP/systemd-network" 2>/dev/null || true

Сохранить параметры нужного интерфейса:

ip -4 address show dev "$IFACE"
ip -4 route show dev "$IFACE"
nmcli device show "$IFACE"

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

Интерфейс:
Режим IPv4: DHCP или статический
IPv4-адрес и префикс:
Шлюз:
DNS:
Дополнительные маршруты:

Определить источник настроек

NetworkManager native

Профили находятся в:

/etc/NetworkManager/system-connections/

Проверка:

sudo ls -la /etc/NetworkManager/system-connections/

Etcnet

Настройки интерфейса находятся в:

/etc/net/ifaces/<интерфейс>/

Проверка:

sudo find "/etc/net/ifaces/$IFACE" -maxdepth 1 -type f -print 2>/dev/null
systemctl status network --no-pager

systemd-networkd

Настройки находятся в:

/etc/systemd/network/

Проверка:

sudo grep -RInE \
  "Name=.*$IFACE|OriginalName=.*$IFACE|Interface=.*$IFACE" \
  /etc/systemd/network 2>/dev/null

systemctl status systemd-networkd --no-pager

Проверить режим NetworkManager

sudo NetworkManager --print-config

В ALT Linux возможны:

  • NetworkManager native — профили из /etc/NetworkManager/system-connections/;
  • NetworkManager с etcnet — NetworkManager читает /etc/net/ifaces/;
  • Etcnet — интерфейсом управляет network.service;
  • systemd-networkd — интерфейсом управляет systemd-networkd.service.

Примечание

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

Создать native-профиль NetworkManager

Создать новый профиль, не активируя его:

PROFILE="nm-native-$IFACE"

Вариант A. Текущая сеть работает через DHCP

sudo nmcli connection add \
  type ethernet \
  ifname "$IFACE" \
  con-name "$PROFILE" \
  connection.autoconnect no \
  ipv4.method auto

Разрешить получение шлюза, DNS и маршрутов:

sudo nmcli connection modify "$PROFILE" \
  ipv4.ignore-auto-dns no \
  ipv4.ignore-auto-routes no \
  ipv4.never-default no

Вариант B. Используется статическая конфигурация

Подставить сохранённые фактические значения:

ADDRESS="<IPv4-адрес/префикс>"
GATEWAY="<IPv4-шлюз>"
DNS="<DNS1> <DNS2>"

Создать профиль:

sudo nmcli connection add \
  type ethernet \
  ifname "$IFACE" \
  con-name "$PROFILE" \
  connection.autoconnect no \
  ipv4.method manual \
  ipv4.addresses "$ADDRESS" \
  ipv4.gateway "$GATEWAY" \
  ipv4.dns "$DNS"

Если шлюз отсутствует:

sudo nmcli connection modify "$PROFILE" \
  ipv4.gateway "" \
  ipv4.never-default yes

Добавить подтверждённые статические маршруты по одному:

sudo nmcli connection modify "$PROFILE" \
  +ipv4.routes "<сеть/префикс> <шлюз>"

Проверить профиль до переключения

nmcli -f \
connection.id,connection.interface-name,connection.autoconnect,\
ipv4.method,ipv4.addresses,ipv4.gateway,ipv4.dns,ipv4.routes \
connection show "$PROFILE"

Переключить интерфейс на NetworkManager

1. Убедиться, что NetworkManager запущен

sudo systemctl enable NetworkManager
sudo systemctl start NetworkManager

2. Остановить подтверждённо конфликтующий менеджер

Etcnet

sudo systemctl stop network

systemd-networkd

sudo systemctl stop systemd-networkd
sudo systemctl stop systemd-networkd-wait-online 2>/dev/null || true

Останавливать только найденную конфликтующую службу.

3. Передать интерфейс NetworkManager

sudo nmcli device set "$IFACE" managed yes

Проверить:

nmcli -f DEVICE,TYPE,STATE,CONNECTION device status

4. Активировать подготовленный профиль

sudo nmcli connection up "$PROFILE" ifname "$IFACE"

Если профиль активирован успешно:

sudo nmcli connection modify "$PROFILE" connection.autoconnect yes

Отключить второй менеджер

Выполнять только после успешной проверки сети.

Etcnet

sudo systemctl disable network

Проверить:

systemctl is-active network
systemctl is-enabled network

systemd-networkd

sudo systemctl disable systemd-networkd
sudo systemctl disable systemd-networkd-wait-online 2>/dev/null || true

Проверить:

systemctl is-active systemd-networkd
systemctl is-enabled systemd-networkd

Предупреждение

Не отключать:

  • NetworkManager-wait-online;
  • NetworkManager-dispatcher;
  • wpa_supplicant;
  • systemd-resolved;
  • dbus.

Они не являются вторым менеджером сетевых интерфейсов.

Не удалять пакеты etcnet или systemd-networkd без отдельной необходимости. Для устранения конфликта достаточно отключить службу и убрать конфигурацию проблемного интерфейса.

Убрать старые конфигурации интерфейса

Выполнять только после успешной работы native-профиля.

Архивировать конфигурацию etcnet

if [ -d "/etc/net/ifaces/$IFACE" ]; then
  sudo mv \
    "/etc/net/ifaces/$IFACE" \
    "/etc/net/ifaces/${IFACE}.disabled-$(date +%Y%m%d-%H%M%S)"
fi

Архивировать конфигурацию systemd-networkd

Сначала найти относящиеся к интерфейсу файлы:

sudo grep -RIlE \
  "Name=.*$IFACE|OriginalName=.*$IFACE|Interface=.*$IFACE" \
  /etc/systemd/network 2>/dev/null

Каждый подтверждённый файл переименовать:

sudo mv \
  "/etc/systemd/network/<файл>" \
  "/etc/systemd/network/<файл>.disabled"

Не перемещать неизвестные файлы, относящиеся к другим интерфейсам, VLAN, bridge или VPN.

Перезапустить NetworkManager:

sudo systemctl restart NetworkManager
sudo nmcli connection up "$PROFILE" ifname "$IFACE"

Проверить результат

Службы

systemctl is-active NetworkManager
systemctl is-active network
systemctl is-active systemd-networkd

systemctl is-enabled NetworkManager
systemctl is-enabled network
systemctl is-enabled systemd-networkd

Интерфейс и профиль

nmcli general status
nmcli -f DEVICE,TYPE,STATE,CONNECTION device status
nmcli connection show --active

Адреса и маршруты

ip -br -4 address
ip -4 route
ip -4 rule

Проверить, что:

  • на интерфейсе нет неожиданных дублирующих адресов;
  • присутствует только ожидаемый маршрут по умолчанию;
  • маршрут не исчезает через несколько секунд;
  • активен созданный native-профиль.

DNS и связь

cat /etc/resolv.conf
ping -c 3 <IP-адрес_шлюза>
getent hosts <имя_доменного_ресурса>

Журналы

journalctl -b \
  -u NetworkManager \
  -u network \
  -u systemd-networkd \
  --no-pager \
  | tail -n 100

Проверка после перезагрузки

sudo reboot

После загрузки:

systemctl is-active NetworkManager
systemctl is-active network
systemctl is-active systemd-networkd

nmcli connection show --active
ip -br -4 address
ip -4 route

Откатить изменения

Использовать локальную консоль.

1. Отключить новый профиль

sudo nmcli connection down "$PROFILE"
sudo nmcli connection modify "$PROFILE" connection.autoconnect no

2. Вернуть старые конфигурационные файлы

Etcnet

Найти архив:

sudo find /etc/net/ifaces \
  -maxdepth 1 \
  -type d \
  -name "${IFACE}.disabled-*"

Вернуть каталог:

sudo mv \
  "/etc/net/ifaces/${IFACE}.disabled-<дата>" \
  "/etc/net/ifaces/$IFACE"

systemd-networkd

sudo mv \
  "/etc/systemd/network/<файл>.disabled" \
  "/etc/systemd/network/<файл>"

3. Вернуть прежний менеджер

Etcnet

sudo systemctl enable --now network

systemd-networkd

sudo systemctl enable --now systemd-networkd

4. Проверить сеть

ip -br -4 address
ip -4 route
cat /etc/resolv.conf

Типовые проблемы

Симптом Проверка и действие
Интерфейс остаётся unmanaged Проверить NetworkManager --print-config, правила unmanaged-devices и NM_UNMANAGED
После остановки второго менеджера адрес пропал Активировать подготовленный профиль: nmcli con up "$PROFILE"
Появились два одинаковых адреса Проверить, что второй менеджер действительно остановлен
Маршрут по умолчанию меняется Проверить активные профили, DHCP-клиенты и метрики маршрутов
NetworkManager показывает System <интерфейс> Вероятно, используется профиль etcnet, а не native-профиль
Новый профиль не активируется Проверить интерфейс, carrier, адресный конфликт и журнал NetworkManager
После перезагрузки вернулся старый менеджер Проверить is-enabled, systemd-unit и доменные политики
Работает IP, но не DNS Проверить /etc/resolv.conf, DNS профиля и используемый DNS-компонент
Остановлен systemd-networkd, но конфликт остаётся Проверить отдельные DHCP-клиенты и скрипты запуска
NetworkManager и network.service активны, но интерфейсы разные Это не обязательно конфликт; проверять владельца конкретного интерфейса