Настройка сети в AlmaLinux и RHEL 9/10: nmtui и nmcli

Утилита system-config-network-tui, которой настраивали сеть в CentOS 5 и 6, давно удалена из дистрибутивов. В AlmaLinux, Rocky Linux и RHEL 9/10 сетью управляет NetworkManager, а для него есть два инструмента: текстовое меню nmtui и командная утилита nmcli. Первая похожа на старый system-config-network-tui, вторая удобна для скриптов и удалённой работы.

Самый частый сценарий — задать статический IP. В nmcli это две команды: nmcli connection modify с адресом, шлюзом и DNS и nmcli connection up для применения. Настройки сохраняются в файле профиля в каталоге /etc/NetworkManager/system-connections/ в формате keyfile. Старые файлы /etc/sysconfig/network-scripts/ifcfg-* в версии 9 ещё читаются, но в версии 10 их поддержку убрали.

Ниже — как установить и запустить nmtui, как то же самое сделать в nmcli, как устроен keyfile и как проверить результат. Примеры проверены по документации для AlmaLinux / Rocky Linux 9 и 10; в Debian и Ubuntu есть отличия, о них отдельный раздел.

Что случилось с system-config-network-tui

В CentOS 5 и 6 сеть настраивали скрипты network-scripts, а system-config-network-tui был текстовым редактором их файлов. Утилита написана на Python 2 и регулярно ломалась. Например, после обновления CentOS 5.7 она падала с ошибкой:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd1 in position 0: ordinal not in range(128)

Причина была в русской локали: программа не умела работать с не-ASCII-символами. Обходили так: LANG=C system-config-network-tui. Сегодня эта ошибка встречается только на очень старых системах, которые давно пора переносить.

Начиная с RHEL 7 основным способом настройки сети стал NetworkManager, в RHEL 9 пакет network-scripts удалён. Замены system-config-network-tui внутри RHEL-ветки — nmtui и nmcli. Если вам по-прежнему нужен «экран с полями», используйте nmtui.

Установка и запуск nmtui

В минимальной установке AlmaLinux и Rocky Linux nmtui может отсутствовать. Он находится в отдельном пакете:

sudo dnf install NetworkManager-tui
sudo nmtui

Откроется меню из нескольких пунктов:

  • Edit a connection — создать, изменить или удалить профиль подключения;
  • Activate a connection — включить или отключить профиль;
  • Set system hostname — задать имя хоста.

Сразу перейти к нужному разделу можно командами nmtui edit, nmtui edit ens18, nmtui connect и nmtui hostname. Управление — стрелки, Tab, Enter и пробел для флажков.

Если рамки меню рисуются непонятными символами, проблема в терминале или локали. Попробуйте запустить с LANG=C nmtui или подключиться клиентом SSH с кодировкой UTF-8.

Статический IP через nmtui

  1. Запустите sudo nmtui и выберите Edit a connection.
  2. Выберите профиль интерфейса, например ens18, и нажмите Enter.
  3. В разделе IPv4 CONFIGURATION смените Automatic на Manual и откройте раздел кнопкой Show.
  4. В поле Addresses укажите адрес с маской в формате CIDR: 192.0.2.10/24.
  5. В поле Gateway — шлюз: 192.0.2.1.
  6. В поле DNS servers — один или несколько DNS-серверов, в Search domains — домен поиска, если нужен.
  7. Проверьте, что отмечен флажок Automatically connect.
  8. Нажмите OK, затем вернитесь в меню.

Важно: сохранение в nmtui не применяет изменения к работающему интерфейсу. Зайдите в Activate a connection, отключите и снова включите профиль. Либо выполните sudo nmcli connection up ens18. Если вы подключены по SSH через этот же интерфейс и меняете его адрес, связь оборвётся — заранее подготовьте консоль.

Настройка сети через nmcli

nmcli удобнее на серверах: команды можно сохранить, повторить и выполнить скриптом. Все настройки описывают профили подключений (connection), которые привязаны к устройствам (device).

Посмотреть текущее состояние

nmcli general status
nmcli device status
nmcli connection show

Вывод nmcli device status примерно такой:

DEVICE  TYPE      STATE                   CONNECTION
ens18   ethernet  connected               ens18
lo      loopback  connected (externally)  lo

Подробности одного профиля: nmcli connection show ens18. Только IPv4-параметры: nmcli -f ipv4 connection show ens18.

Статический IP, шлюз и DNS

sudo nmcli connection modify ens18 \
  ipv4.method manual \
  ipv4.addresses 192.0.2.10/24 \
  ipv4.gateway 192.0.2.1 \
  ipv4.dns "192.0.2.53 192.0.2.54" \
  ipv4.dns-search example.com \
  connection.autoconnect yes

sudo nmcli connection up ens18

Порядок важен: если указать ipv4.method manual без адреса, nmcli вернёт ошибку. Поэтому все параметры передаются в одной команде.

На удалённом сервере выполняйте modify и up одной строкой через &&, чтобы применение не зависело от SSH-сессии. Если ошибка в адресе или шлюзе отрежет вас от сервера, поможет только консоль.

Дополнительный адрес, маршрут, DNS при DHCP

# добавить второй IP к существующим (знак +)
sudo nmcli connection modify ens18 +ipv4.addresses 192.0.2.11/24

# удалить адрес (знак -)
sudo nmcli connection modify ens18 -ipv4.addresses 192.0.2.11/24

# статический маршрут в другую сеть
sudo nmcli connection modify ens18 +ipv4.routes "198.51.100.0/24 192.0.2.254"

# адрес по DHCP, но DNS свои, а не от DHCP-сервера
sudo nmcli connection modify ens18 ipv4.method auto \
  ipv4.ignore-auto-dns yes ipv4.dns "192.0.2.53"

sudo nmcli connection up ens18

Новый профиль для второго интерфейса

sudo nmcli connection add type ethernet con-name lan ifname ens19 \
  ipv4.method manual ipv4.addresses 10.10.0.5/24

sudo nmcli connection up lan

Шлюз по умолчанию указывайте только в одном профиле. Если у второго интерфейса есть шлюз, но маршрут по умолчанию через него не нужен, добавьте ipv4.never-default yes.

Статический IPv6

IPv6 настраивается так же, только параметры начинаются с ipv6.. Провайдеры обычно выдают адрес из подсети /64 и шлюз, часто это link-local-адрес маршрутизатора:

sudo nmcli connection modify ens18 \
  ipv6.method manual \
  ipv6.addresses 2001:db8:10::10/64 \
  ipv6.gateway 2001:db8:10::1 \
  ipv6.dns "2001:db8:10::53"

sudo nmcli connection up ens18

Если провайдер раздаёт адреса через SLAAC, достаточно оставить ipv6.method auto. Значение ipv6.method disabled выключает IPv6 на этом интерфейсе.

VLAN поверх интерфейса

Тегированный VLAN создаётся отдельным профилем. Родительский интерфейс при этом может оставаться без адреса:

sudo nmcli connection add type vlan con-name vlan100 ifname ens18.100 \
  dev ens18 id 100 ipv4.method manual ipv4.addresses 10.100.0.5/24

sudo nmcli connection up vlan100

Проверить, что VLAN поднят и тег правильный: ip -d link show ens18.100, в выводе будет строка с vlan protocol 802.1Q id 100.

Имя хоста

sudo nmcli general hostname srv01.example.com
# или
sudo hostnamectl set-hostname srv01.example.com

DNS: почему не надо править /etc/resolv.conf

В AlmaLinux и Rocky Linux файл /etc/resolv.conf по умолчанию генерирует NetworkManager. Ручные правки пропадут при следующем переподключении. DNS задаётся в профиле через ipv4.dns и ipv4.dns-search, как показано выше.

Если DNS по какой-то причине должен управляться вручную, отключите управление в NetworkManager отдельным файлом:

# /etc/NetworkManager/conf.d/90-dns-none.conf
[main]
dns=none

После этого sudo systemctl reload NetworkManager, и /etc/resolv.conf можно редактировать сами. Без веской причины так делать не стоит.

Проверить, какие DNS использует интерфейс: nmcli device show ens18 | grep DNS и cat /etc/resolv.conf.

Формат keyfile вместо ifcfg

С версии 9 RHEL и её клоны сохраняют новые профили в формате keyfile — это INI-файл в каталоге /etc/NetworkManager/system-connections/ с расширением .nmconnection. Профиль из примера выше выглядит примерно так:

# /etc/NetworkManager/system-connections/ens18.nmconnection
[connection]
id=ens18
uuid=4c0b4c7e-xxxx-xxxx-xxxx-xxxxxxxxxxxx
type=ethernet
interface-name=ens18
autoconnect=true

[ethernet]

[ipv4]
method=manual
address1=192.0.2.10/24
gateway=192.0.2.1
dns=192.0.2.53;192.0.2.54;
dns-search=example.com;

[ipv6]
method=auto

Правила работы с файлами:

  • владелец root, права 600, иначе NetworkManager игнорирует файл;
  • после ручной правки выполните sudo nmcli connection reload, затем sudo nmcli connection up ens18;
  • проще и безопаснее менять профиль через nmcli или nmtui: они проверяют значения.

Соответствие старых параметров ifcfg

ifcfg (CentOS 6/7)nmclikeyfile
BOOTPROTO=none / staticipv4.method manual[ipv4] method=manual
BOOTPROTO=dhcpipv4.method auto[ipv4] method=auto
IPADDR= + PREFIX= / NETMASK=ipv4.addresses 192.0.2.10/24address1=192.0.2.10/24
GATEWAY=ipv4.gatewaygateway=
DNS1=, DNS2=ipv4.dnsdns=
ONBOOT=yesconnection.autoconnect yesautoconnect=true
HWADDR=ethernet.mac-address[ethernet] mac-address=
MACADDR=ethernet.cloned-mac-address[ethernet] cloned-mac-address=

Подробнее про разницу между HWADDR и MACADDR и про смену MAC — в статье Как сменить MAC-адрес сетевой карты в Linux.

Перевод ifcfg в keyfile перед обновлением до версии 10

Если система обновлялась с версии 8, профили могли остаться в /etc/sysconfig/network-scripts/. В версии 9 они работают, в версии 10 — нет. Проверьте, где лежат профили, и переведите их:

# колонка FILENAME покажет путь к файлу профиля
nmcli -f NAME,UUID,FILENAME connection show

# перевести все профили из ifcfg в keyfile
sudo nmcli connection migrate

После миграции убедитесь, что в /etc/NetworkManager/system-connections/ появились файлы .nmconnection, и перезагрузите сервер для проверки.

Безопасная смена сети на удалённом сервере

Ошибка в адресе или шлюзе на сервере в дата-центре означает поездку или звонок в поддержку. Несколько правил:

  • работайте при доступной консоли: IPMI, iDRAC, iLO или консоль гипервизора;
  • применяйте изменения одной строкой: nmcli connection modify ... && nmcli connection up ...;
  • для сложных изменений используйте nmstate: nmstatectl apply --no-commit --timeout 120 файл.yml применит конфигурацию и откатит её, если в течение таймаута вы не выполните nmstatectl commit. Пакет nmstate ставится через dnf;
  • сохраните текущую конфигурацию до правки: sudo cp -a /etc/NetworkManager/system-connections /root/nm-backup-$(date +%F).

Отключать NetworkManager и возвращаться к самописным скриптам не нужно: в RHEL 9 и 10 это неподдерживаемый путь.

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

# адреса всех интерфейсов кратко
ip -br addr

# маршруты, в том числе маршрут по умолчанию
ip route

# параметры от NetworkManager
nmcli -f IP4 device show ens18

# связь со шлюзом и внешним миром
ping -c 3 192.0.2.1
ping -c 3 1.1.1.1

# работает ли DNS
getent hosts linux-lab.ru

Вывод ip -br addr после настройки примерно такой:

lo      UNKNOWN  127.0.0.1/8 ::1/128
ens18   UP       192.0.2.10/24 fe80::xxxx:xxxx:xxxx:xxxx/64

Если IPv6 на сервере не нужен, его можно отключить в том же профиле параметром ipv6.method disabled. Все способы и их побочные эффекты описаны в статье Как отключить IPv6 в Linux.

Финальная проверка — перезагрузка. После неё интерфейс должен подняться с тем же адресом, шлюзом и DNS.

Таблица: симптом, причина, решение

СимптомПричинаРешение
nmtui: command not foundНе установлен пакетdnf install NetworkManager-tui
Изменения в nmtui сохранены, но адрес старыйПрофиль не переактивированnmcli connection up ens18 или Activate в nmtui
ipv4.addresses: this property cannot be empty for 'method=manual'method manual задан без адресаПередайте адрес в той же команде
DNS в /etc/resolv.conf сбрасываютсяФайл генерирует NetworkManagerЗадайте DNS через ipv4.dns
Ручная правка .nmconnection не применяетсяНе выполнен reload или неверные праваchmod 600, nmcli connection reload
После обновления до версии 10 сеть не подняласьПрофили остались в ifcfgСоздайте профиль из консоли, на будущее — nmcli connection migrate до обновления
Два маршрута по умолчаниюШлюз указан в двух профиляхУберите шлюз или задайте ipv4.never-default yes
Профиль есть, но устройство unmanagedУстройство исключено из управления NetworkManagerПроверьте /etc/NetworkManager/conf.d/, nmcli device set ens18 managed yes

Отличия в Debian и Ubuntu

СистемаЧто настраивает сеть по умолчаниюnmtui и nmcli
AlmaLinux / Rocky Linux 9NetworkManager, keyfile; ifcfg ещё читаетсяnmcli в базовой системе, nmtui — пакет NetworkManager-tui
AlmaLinux / Rocky Linux 10NetworkManager, только keyfileТак же
Debian 12 / 13 без графикиifupdown, /etc/network/interfacesВходят в пакет network-manager, по умолчанию не установлен
Debian 12 / 13 с графикойNetworkManagerУстановлены
Ubuntu 24.04 Servernetplan + systemd-networkdНе используются, настройка в /etc/netplan/
Ubuntu 24.04 Desktopnetplan + NetworkManagerРаботают, профили сохраняются в YAML netplan

В Debian NetworkManager не управляет интерфейсами, которые описаны в /etc/network/interfaces. Если вы ставите NetworkManager на сервер, уберите интерфейс из этого файла, иначе nmcli покажет его как unmanaged. На Ubuntu Server не смешивайте netplan и NetworkManager без необходимости: выберите один способ.

Если сервер — виртуальная машина в Proxmox VE, интерфейс обычно называется ens18, как в примерах. Про сам гипервизор — статья Установка Proxmox VE на свой сервер.

Частые вопросы

Можно ли установить system-config-network-tui в AlmaLinux 9?

Нет. Пакета нет в репозиториях AlmaLinux, Rocky Linux и RHEL начиная с версии 7, а сама утилита работала с удалёнными network-scripts. Её место занял nmtui: такой же текстовый интерфейс, но для NetworkManager.

Чем nmtui отличается от nmcli?

Обе утилиты меняют одни и те же профили NetworkManager. nmtui — меню для ручной работы, удобно, когда нужно один раз поправить адрес. nmcli — командная строка: её можно использовать в скриптах, Ansible и документации, команды легко повторить на другом сервере.

Нужно ли перезапускать NetworkManager после изменений?

Обычно нет. После nmcli connection modify достаточно nmcli connection up для этого профиля. После ручной правки файла — nmcli connection reload и затем up. Перезапуск службы целиком на удалённом сервере только увеличивает риск потерять связь.

Где теперь лежат настройки сети в RHEL 9?

Новые профили — в /etc/NetworkManager/system-connections/*.nmconnection. Старые, созданные до обновления, могут оставаться в /etc/sysconfig/network-scripts/ifcfg-*. Точный путь к файлу каждого профиля показывает nmcli -f NAME,FILENAME connection show.

Можно ли править ifcfg-файлы в AlmaLinux 9?

Можно, пока они есть и установлен плагин ifcfg-rh, но это устаревший путь. В версии 10 ifcfg не поддерживается. Лучше один раз выполнить nmcli connection migrate и дальше работать с keyfile через nmcli.

Что делать, если nmtui падает или показывает кракозябры?

Проверьте локаль и терминал: locale, переменную TERM, кодировку SSH-клиента. Быстрый обход, как и в старом system-config-network-tui, — запуск с LANG=C nmtui. Если не помогает, сделайте то же самое через nmcli.