Новинка Виртуальный VDS сервер в Нидерландах от 490р
Выберите продукт

AlmaLinux и Rocky Linux: настройка IP, DNS, gateway и static routes через nmcli на VDS

Покажу, как безопасно менять сетевые параметры на AlmaLinux и Rocky Linux с NetworkManager: найти профиль, задать статический IP, DNS, gateway, добавить маршруты и проверить результат на VDS.
AlmaLinux и Rocky Linux: настройка IP, DNS, gateway и static routes через nmcli на VDS

В AlmaLinux и Rocky Linux сеть по умолчанию обычно управляется через NetworkManager, а основной рабочий инструмент администратора — nmcli. Если вы привыкли к ручному редактированию файлов в /etc/sysconfig/network-scripts/, на современных RHEL-based системах это уже не лучший путь: профили NetworkManager хранятся и применяются иначе, а ручная правка без перезагрузки профиля легко приводит к расхождению между файлом и фактическим состоянием интерфейса.

В этой инструкции разберём практичный сценарий для VDS: как посмотреть текущую конфигурацию, безопасно назначить статический IPv4, указать gateway, настроить DNS, добавить static routes, проверить маршрутизацию и не потерять SSH-доступ. Примеры ориентированы на AlmaLinux и Rocky Linux 8/9/10, но в большинстве случаев подойдут и для других RHEL-based дистрибутивов с NetworkManager.

Главное правило при сетевых изменениях на удалённом сервере: сначала подготовьте план отката, затем меняйте профиль, и только после проверки делайте конфигурацию окончательной.

Что важно понять перед настройкой сети через nmcli

nmcli управляет не «интерфейсом вообще», а профилем подключения NetworkManager. На VDS профиль может называться System eth0, Wired connection 1, ens3, cloud-init eth0 или как-то иначе. Физическое имя интерфейса и имя профиля — разные вещи. Интерфейс может быть eth0, ens3, enp1s0, а профиль при этом называется произвольно.

Именно поэтому не стоит копировать команды вслепую. Сначала определяем активный профиль, затем меняем его свойства. В противном случае можно отредактировать неиспользуемый профиль, перезапустить сеть и удивиться, почему настройки не применились.

Ещё один момент: в VDS-среде сетевые параметры часто выдаются через DHCP или cloud-init. Иногда провайдер передаёт адрес, шлюз и DNS автоматически, а иногда в панели управления отображается статическая конфигурация, которую нужно прописать вручную. Если на сервере уже работает cloud-init, он может перезаписать сеть при следующей перезагрузке. Ниже отдельно покажу, как это проверить.

Быстрая диагностика текущей конфигурации

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

nmcli general status
nmcli device status
nmcli connection show
nmcli connection show --active
ip -br addr
ip route
ip -6 route

Если нужно увидеть параметры конкретного устройства, например eth0, используйте:

nmcli device show eth0

В выводе обращайте внимание на поля IP4.ADDRESS, IP4.GATEWAY, IP4.DNS, IP6.ADDRESS, IP6.GATEWAY и GENERAL.CONNECTION. Последнее поле особенно полезно: оно показывает, какой профиль NetworkManager сейчас привязан к интерфейсу.

Удобный способ получить активные профили в компактном виде:

nmcli -f NAME,UUID,TYPE,DEVICE connection show --active

Допустим, вы видите такую картину: интерфейс eth0, активный профиль System eth0, адрес получен по DHCP. В дальнейших примерах будем использовать именно это имя профиля. У себя замените его на реальное значение из вывода команды.

Активный профиль NetworkManager и схема маршрутизации VDS

Подготовка к изменениям: как не потерять SSH

Менять IP и gateway по SSH рискованно: одна ошибка в маске, шлюзе или имени профиля — и сервер станет недоступен до ручного исправления через консоль VDS. Поэтому перед изменениями проверьте, что у вас есть запасной канал доступа: веб-консоль в панели управления, rescue-режим или хотя бы открытая текущая SSH-сессия в отдельном терминале.

Практичный подход: сначала не удаляйте старый профиль, а клонируйте его. Так можно подготовить новую конфигурацию и при необходимости вернуться к прежней.

nmcli connection clone 'System eth0' 'static-eth0'
nmcli connection show

Теперь профиль static-eth0 можно настраивать, не ломая сразу рабочее подключение. Когда всё готово, вы поднимете новый профиль на том же интерфейсе. Старый профиль останется как вариант отката.

Если на сервере установлен at, можно запланировать автоматический возврат старого профиля через несколько минут. Это простая страховка: если SSH пропал, задание выполнится и вернёт прежнюю сеть. Если всё прошло успешно, задание удалите.

sudo dnf install -y at
sudo systemctl enable --now atd
echo "nmcli connection up 'System eth0'" | at now + 5 minutes
atq

После успешной проверки новой конфигурации список заданий можно посмотреть через atq, а удалить ненужное задание через atrm с номером задачи.

atq
atrm 1

Если at использовать не хотите, держите открытой консоль VDS. Это не формальность: сетевые ошибки чаще всего исправляются за пару минут, если есть доступ к консоли, и превращаются в простой на часы, если такого доступа нет.

Виртуальный хостинг FastFox
Виртуальный хостинг для сайтов
Универсальное решение для создания и размещения сайтов любой сложности в Интернете от 95₽ / мес

Настройка статического IPv4, gateway и DNS

Предположим, провайдер выдал такие параметры: IPv4-адрес 203.0.113.10, маска /24, шлюз 203.0.113.1, DNS-серверы 1.1.1.1 и 8.8.8.8. Это документационные адреса для примера; в реальной настройке используйте данные из панели VDS или письма с параметрами сервера.

Команда ниже переводит профиль на ручную IPv4-настройку, задаёт адрес, gateway и DNS:

nmcli connection modify 'static-eth0' ipv4.method manual ipv4.addresses '203.0.113.10/24' ipv4.gateway '203.0.113.1' ipv4.dns '1.1.1.1 8.8.8.8' ipv4.ignore-auto-dns yes connection.autoconnect yes

Параметр ipv4.method со значением manual означает, что адрес не будет запрашиваться по DHCP. Параметр ipv4.addresses хранит адрес вместе с префиксом сети, ipv4.gateway задаёт маршрут по умолчанию, а ipv4.dns указывает DNS-резолверы. Опция ipv4.ignore-auto-dns полезна, если DHCP остаётся включённым для каких-то параметров, но DNS вы хотите контролировать сами.

Если нужно указать DNS search domain, например для внутренней инфраструктуры, добавьте ipv4.dns-search:

nmcli connection modify 'static-eth0' ipv4.dns-search 'example.internal'

Для серверов с несколькими интерфейсами полезно явно задать метрику маршрута. Чем меньше метрика, тем предпочтительнее маршрут.

nmcli connection modify 'static-eth0' ipv4.route-metric 100

После изменения профиля примените его. Если вы работаете по SSH, делайте это из сессии, где рядом открыта консоль VDS или настроен автоматический откат.

nmcli connection up 'static-eth0'

Проверьте адрес, маршруты и DNS:

ip -br addr show eth0
ip route
nmcli device show eth0
getent hosts example.com
ping -c 3 1.1.1.1
ping -c 3 example.com

Если пинг по IP работает, а по имени нет, проблема почти наверняка в DNS. Если не работает пинг по IP, проверьте gateway, маску, маршрут по умолчанию и правила firewall. На VDS ещё стоит проверить, не требуется ли в панели управления привязка дополнительного IP к серверу.

Как оставить DHCP, но переопределить DNS

Иногда на VDS лучше оставить получение IP и gateway по DHCP, но заменить DNS-серверы. Это нормальный сценарий, если провайдер выдаёт адрес автоматически, а вы хотите использовать свои резолверы или локальный кэширующий DNS.

nmcli connection modify 'System eth0' ipv4.method auto ipv4.ignore-auto-dns yes ipv4.dns '1.1.1.1 8.8.8.8'
nmcli connection up 'System eth0'

Проверьте, какие DNS-серверы видит NetworkManager:

nmcli device show eth0 | grep DNS
cat /etc/resolv.conf

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

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

Если VDS работает в dual-stack режиме, IPv6 настраивается в том же профиле. Сценарии бывают разные: SLAAC, DHCPv6 или статический адрес. Для статической настройки используйте ipv6.method со значением manual, адрес с префиксом и IPv6 gateway.

nmcli connection modify 'static-eth0' ipv6.method manual ipv6.addresses '2001:db8:100::10/64' ipv6.gateway '2001:db8:100::1' ipv6.dns '2606:4700:4700::1111 2001:4860:4860::8888' ipv6.ignore-auto-dns yes
nmcli connection up 'static-eth0'

Проверка IPv6:

ip -6 addr show dev eth0
ip -6 route
ping -6 -c 3 2001:4860:4860::8888

Если IPv6-адрес есть, но внешние узлы недоступны, проверьте маршрут по умолчанию и доступность gateway. На VDS также важны правила фильтрации ICMPv6: полностью блокировать ICMPv6 нельзя, иначе ломаются обнаружение соседей, PMTU и часть базовой IPv6-связности.

Static routes: добавляем постоянные маршруты

static routes нужны, когда часть сетей должна идти не через основной gateway, а через другой маршрутизатор. Типичные примеры: приватная сеть между серверами, VPN-интерфейс, отдельная подсеть для бэкапов, внутренняя сеть кластера или второй сетевой интерфейс VDS.

Разовый маршрут через команду ip route add исчезнет после перезагрузки. Чтобы маршрут был постоянным, добавляйте его в профиль NetworkManager.

Пример: сеть 198.51.100.0/24 должна быть доступна через шлюз 203.0.113.254, метрика 50:

nmcli connection modify 'static-eth0' +ipv4.routes '198.51.100.0/24 203.0.113.254 50'
nmcli connection up 'static-eth0'
ip route show

Символ + перед ipv4.routes добавляет маршрут к уже существующим. Если использовать ipv4.routes без плюса, вы замените весь список маршрутов в профиле. Для удаления конкретного маршрута используйте минус:

nmcli connection modify 'static-eth0' -ipv4.routes '198.51.100.0/24 203.0.113.254 50'
nmcli connection up 'static-eth0'

Для IPv6 синтаксис похож:

nmcli connection modify 'static-eth0' +ipv6.routes '2001:db8:200::/48 2001:db8:100::254 50'
nmcli connection up 'static-eth0'
ip -6 route show

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

nmcli connection modify 'private-net' ipv4.never-default yes ipv6.never-default yes

Схема постоянных маршрутов для VDS

Несколько IP-адресов на одном интерфейсе

На VDS часто подключают дополнительный IPv4 или IPv6: для отдельного сайта, почтового сервера, балансировщика или миграции без простоя. В NetworkManager дополнительные адреса можно добавить в тот же профиль.

nmcli connection modify 'static-eth0' +ipv4.addresses '203.0.113.11/24'
nmcli connection up 'static-eth0'
ip -br addr show eth0

Если нужно заменить весь список адресов, используйте ipv4.addresses без плюса и перечислите нужные адреса. Но будьте аккуратны: так легко убрать основной IP и потерять доступ.

nmcli connection modify 'static-eth0' ipv4.addresses '203.0.113.10/24,203.0.113.11/24'

После добавления дополнительного IP проверьте не только наличие адреса на интерфейсе, но и доступность снаружи. Если адрес не отвечает, причина может быть не в Linux, а в маршрутизации на стороне провайдера или в том, что дополнительный IP не назначен этой VDS в панели.

DNS: как понять, кто управляет resolv.conf

В AlmaLinux и Rocky Linux DNS-настройки чаще всего передаются в /etc/resolv.conf через NetworkManager. Но встречаются разные варианты: обычный файл, символьная ссылка на файл NetworkManager, systemd-resolved, локальный dnsmasq или unbound. Перед ручными правками полезно понять текущую схему.

ls -l /etc/resolv.conf
cat /etc/resolv.conf
nmcli general status
nmcli device show eth0 | grep DNS

Если /etc/resolv.conf генерируется автоматически, не редактируйте его как основной источник правды. Меняйте DNS через профиль nmcli. Так настройка переживёт перезапуск NetworkManager и reboot.

Для диагностики DNS удобно поставить пакет bind-utils, в котором есть dig и nslookup:

sudo dnf install -y bind-utils
dig example.com
dig example.com @1.1.1.1

Если запрос к конкретному DNS-серверу работает, а обычный dig example.com нет, значит проблема в системной конфигурации резолвера. Если не работает ни один запрос, проверьте маршрутизацию, firewall и доступность UDP/TCP 53 до выбранного DNS.

Cloud-init: почему настройки могут сбрасываться после перезагрузки

На многих VDS образ устанавливается с cloud-init. Это удобно для первого старта: cloud-init задаёт hostname, SSH-ключи, сеть и другие параметры. Но если он продолжает управлять сетью, ручные изменения NetworkManager могут быть перезаписаны после перезагрузки или пересоздания конфигурации. Если вы собираете собственные серверные образы, пригодится отдельный разбор про golden image с Packer и cloud-init.

Проверьте, установлен ли cloud-init и есть ли сетевые файлы, созданные им:

rpm -q cloud-init
ls -la /etc/cloud/cloud.cfg.d/
ls -la /etc/NetworkManager/system-connections/

Если вы видите профили с явным упоминанием cloud-init, действуйте осторожно. В некоторых инфраструктурах правильно менять сетевые параметры через панель провайдера или cloud-init metadata, а не вручную в гостевой ОС. В других случаях сеть можно закрепить на уровне NetworkManager и отключить управление сетью со стороны cloud-init, но делать это стоит только если вы понимаете, как именно устроен образ.

Типовой способ запретить cloud-init управлять сетью — создать конфигурационный файл. Перед этим убедитесь, что у вас есть консольный доступ, потому что ошибка в сетевых настройках после такого шага уже не исправится автоматической регенерацией.

printf 'network: {config: disabled}\n' | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

Обратите внимание: эта команда не настраивает сеть сама по себе. Она только говорит cloud-init не генерировать сетевую конфигурацию. Актуальные IP, DNS, gateway и static routes всё равно должны быть корректно прописаны в NetworkManager.

Где NetworkManager хранит профили

Современные версии AlmaLinux и Rocky Linux обычно хранят профили в формате keyfile в каталоге /etc/NetworkManager/system-connections/. Файлы имеют расширение .nmconnection и права, ограничивающие чтение. Смотреть их можно, но менять вручную чаще всего не нужно: nmcli сделает это безопаснее и сразу проверит синтаксис параметров.

sudo ls -la /etc/NetworkManager/system-connections/
sudo nmcli connection show 'static-eth0'

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

sudo nmcli connection reload
sudo nmcli connection up 'static-eth0'

Но для типовых задач — IP, DNS, gateway, static routes, метрики, autoconnect — лучше использовать nmcli connection modify. Так меньше риск ошибиться в формате и правах файла.

Проверка после изменения: минимальный чек-лист

После применения новой сети не ограничивайтесь тем, что SSH «вроде не отвалился». Проверьте весь путь: адрес на интерфейсе, маршруты, DNS, доступность внешних узлов и входящие подключения к вашим сервисам.

nmcli connection show --active
ip -br addr
ip route get 1.1.1.1
ip route
cat /etc/resolv.conf
getent hosts example.com
ss -tulpen

Команда ip route get особенно полезна: она показывает, через какой интерфейс и gateway ядро отправит пакет к конкретному адресу. Если у сервера несколько интерфейсов или есть static routes, эта команда быстро выявляет неправильную метрику или неожиданный маршрут.

Для проверки внешней доступности используйте независимый узел: домашний интернет, другой сервер, мониторинг или консоль из другой сети. Проверка с самого сервера не всегда показывает проблему с входящей маршрутизацией или фильтрацией у провайдера.

Частые ошибки и как их исправить

Изменили не тот профиль

Симптом: команды выполнены без ошибок, но после nmcli connection up адрес не изменился. Проверьте активное подключение и устройство:

nmcli -f NAME,DEVICE connection show --active
nmcli device status

Исправление простое: примените изменения к профилю, который реально активен на нужном интерфейсе, или явно поднимите нужный профиль.

Неверная маска сети

Симптом: IP назначен, но gateway недоступен. Частая причина — указали /32 вместо /24 или наоборот, не учли особую схему маршрутизации провайдера. Проверьте параметры в панели VDS. Иногда для адреса с /32 требуется отдельный маршрут до gateway, и это нужно уточнять в документации провайдера.

Есть IP-связность, но не работает DNS

Сначала отделите проблему маршрутизации от проблемы имён:

ping -c 3 1.1.1.1
getent hosts example.com
dig example.com
nmcli device show eth0 | grep DNS

Если IP пингуется, а имена не резолвятся, проверьте ipv4.dns, ipv4.ignore-auto-dns, содержимое /etc/resolv.conf и локальные DNS-сервисы, если они установлены.

После reboot сеть вернулась к старым настройкам

Проверьте cloud-init, autoconnect и наличие нескольких профилей для одного интерфейса:

nmcli connection show
nmcli -f NAME,AUTOCONNECT,DEVICE connection show
rpm -q cloud-init

Убедитесь, что нужный профиль имеет connection.autoconnect со значением yes, а старый профиль не перехватывает интерфейс при загрузке.

nmcli connection modify 'static-eth0' connection.autoconnect yes
nmcli connection modify 'System eth0' connection.autoconnect no

Пропал SSH после применения профиля

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

nmcli connection show
nmcli connection up 'System eth0'
ip route

Когда доступ восстановлен, не удаляйте ошибочный профиль сразу. Сравните настройки старого и нового профиля: так проще найти неверный gateway, маску или DNS.

Практический пример: перевод VDS с DHCP на статический IP

Соберём всё в один аккуратный сценарий. У нас есть VDS на Rocky Linux, активный интерфейс eth0, текущий профиль System eth0. Нужно перейти на статический IPv4, задать DNS и добавить маршрут к приватной сети.

nmcli -f NAME,DEVICE connection show --active
nmcli connection clone 'System eth0' 'static-eth0'
nmcli connection modify 'static-eth0' ipv4.method manual ipv4.addresses '203.0.113.10/24' ipv4.gateway '203.0.113.1' ipv4.dns '1.1.1.1 8.8.8.8' ipv4.ignore-auto-dns yes ipv4.route-metric 100 connection.autoconnect yes
nmcli connection modify 'static-eth0' +ipv4.routes '198.51.100.0/24 203.0.113.254 50'
echo "nmcli connection up 'System eth0'" | at now + 5 minutes
nmcli connection up 'static-eth0'
ip -br addr show eth0
ip route
getent hosts example.com

Если всё работает, отключаем автоподключение старого профиля и удаляем задание отката:

nmcli connection modify 'System eth0' connection.autoconnect no
atq
atrm 1

Финальная проверка после перезагрузки:

sudo reboot

После возвращения сервера проверьте активный профиль, адреса, DNS и маршруты. Именно reboot показывает, действительно ли конфигурация постоянная, не мешает ли cloud-init и не поднимается ли старый профиль.

Итоги

Для AlmaLinux и Rocky Linux настройка сети через nmcli — самый предсказуемый способ управлять IP, DNS, gateway и static routes на VDS. Работайте не с абстрактным интерфейсом, а с активным профилем NetworkManager; перед изменениями делайте клон профиля и готовьте откат; после применения проверяйте не только адрес, но и маршруты, DNS, внешнюю доступность и поведение после перезагрузки.

Если держать этот порядок, сетевые изменения перестают быть лотереей. Даже сложные сценарии — несколько IP, отдельные маршруты, dual-stack IPv4/IPv6, приватные сети — укладываются в понятную схему: найти профиль, изменить параметры, применить, проверить, закрепить.

Поделиться статьей

Вам будет интересно

AlmaLinux и Rocky Linux: настройка IPv4 и IPv6 через nmcli на VDS OpenAI Статья написана AI (GPT 5)

AlmaLinux и Rocky Linux: настройка IPv4 и IPv6 через nmcli на VDS

Разбираем, как на AlmaLinux и Rocky Linux управлять сетевыми профилями NetworkManager через nmcli: задать статический IPv4, добави ...
Postfix queue на VDS: deferred, mailq и безопасная разборка очереди OpenAI Статья написана AI (GPT 5)

Postfix queue на VDS: deferred, mailq и безопасная разборка очереди

Если письма застряли в очереди Postfix на VDS, не спешите удалять всё подряд. Разберём, как читать mailq, отличать deferred от act ...
OpenSSH CA на VDS: централизованный доступ по SSH-сертификатам OpenAI Статья написана AI (GPT 5)

OpenSSH CA на VDS: централизованный доступ по SSH-сертификатам

SSH-сертификаты OpenSSH помогают управлять доступом к Linux-серверам без копирования ключей по всем VDS. Разберём схему CA: подпис ...