В AlmaLinux и Rocky Linux сетевыми интерфейсами обычно управляет NetworkManager, а основной инструмент администратора для работы из консоли — nmcli. На VDS это особенно удобно: можно менять IPv4, добавлять IPv6, прописывать DNS, управлять маршрутами и сразу видеть состояние профиля без ручного редактирования нескольких конфигурационных файлов.
Но у сетевых настроек есть неприятная особенность: одна неверная команда — и SSH-сессия пропадает. Поэтому в этой инструкции я покажу не только рабочие команды для AlmaLinux и Rocky Linux, но и безопасный порядок действий с проверками и rollback. Подход подойдет для типового VDS с одним основным сетевым интерфейсом, статическим IPv4 и, при необходимости, дополнительным IPv6-адресом или префиксом.
Перед изменениями держите под рукой доступ к консоли VDS из панели управления. Даже хорошо подготовленный rollback не заменяет out-of-band-доступ, если ошибка случилась в маршруте, gateway или firewall.
Что нужно знать перед настройкой
AlmaLinux и Rocky Linux относятся к RHEL-based семейству, поэтому команды для них в контексте nmcli практически одинаковые. Различия чаще связаны не с дистрибутивом, а с версией NetworkManager, способом выдачи адресов у провайдера и тем, как был подготовлен исходный образ сервера.
В старых инструкциях для CentOS часто встречается ручное редактирование файлов ifcfg-*. В современных AlmaLinux и Rocky Linux это уже не лучший первый выбор: NetworkManager умеет сам сохранять параметры профиля, применять их без перезагрузки и показывать текущее состояние. Кроме того, nmcli проще автоматизировать в Ansible, cloud-init и обычных shell-скриптах.
Перед настройкой соберите параметры сети. Для IPv4 обычно нужны адрес с префиксом, шлюз и DNS-серверы. Например: 203.0.113.10/24, gateway 203.0.113.1, DNS 8.8.8.8 и 1.1.1.1. Для IPv6 нужны адрес с префиксом, gateway и DNS, например 2001:db8:100::10/64 и gateway 2001:db8:100::1. В реальной инфраструктуре используйте только адреса, выданные провайдером.
Отдельно уточните модель IPv6. На VDS она может быть разной: один статический адрес, routed-префикс, SLAAC, DHCPv6 или комбинация. Если провайдер выдает IPv6 через Router Advertisement, насильная ручная настройка gateway иногда ломает автоконфигурацию. Если выдан конкретный gateway — его нужно прописать явно.
Смотрим текущую сетевую конфигурацию
Начинаем с диагностики. Нужно понять имя интерфейса, имя активного профиля NetworkManager, текущие IP-адреса, маршруты и DNS. Не полагайтесь на старые названия вроде eth0: в VDS интерфейс может называться ens3, ens18, enp1s0 или иначе.
nmcli device status
nmcli connection show
nmcli connection show --active
ip addr show
ip route show
ip -6 route show
resolvectl statusЕсли resolvectl недоступен или systemd-resolved не используется, проверьте DNS так:
cat /etc/resolv.conf
nmcli device showВ выводе nmcli connection show найдите активное подключение. Обычно оно помечено в колонке DEVICE. В дальнейших примерах я буду использовать имя профиля System ens3 и интерфейс ens3. У вас они почти наверняка будут другими, поэтому замените значения на свои.
nmcli connection show 'System ens3'Полезно сразу сохранить текущую конфигурацию в текстовые файлы. Это не полноценный rollback, но при аварии вы быстро увидите, что было до изменений.
mkdir -p /root/network-backup
nmcli connection show 'System ens3' > /root/network-backup/System-ens3-before.txt
ip addr show > /root/network-backup/ip-addr-before.txt
ip route show > /root/network-backup/ip-route-before.txt
ip -6 route show > /root/network-backup/ip-6-route-before.txt
cat /etc/resolv.conf > /root/network-backup/resolv-conf-before.txt
Делаем безопасный rollback перед изменениями
Самый простой способ не потерять сервер — запланировать автоматический откат через несколько минут, применить новую конфигурацию и отменить откат только после проверки. Для этого можно создать временный скрипт, который вернет профиль в DHCP или в заранее известное рабочее состояние.
Если VDS сейчас работает по DHCP для IPv4, а вы экспериментируете со статикой, rollback может вернуть метод auto:
cat > /root/network-rollback.sh <<'EOF'
#!/bin/sh
nmcli connection modify 'System ens3' ipv4.method auto ipv4.addresses '' ipv4.gateway '' ipv4.dns ''
nmcli connection modify 'System ens3' ipv6.method auto ipv6.addresses '' ipv6.gateway '' ipv6.dns ''
nmcli connection up 'System ens3'
EOF
chmod 700 /root/network-rollback.sh
systemd-run --unit network-rollback --on-active=5m /root/network-rollback.shЕсли текущая рабочая конфигурация уже статическая, rollback должен возвращать именно ее. Например, до изменений сервер имел IPv4 203.0.113.10/24 и gateway 203.0.113.1:
cat > /root/network-rollback.sh <<'EOF'
#!/bin/sh
nmcli connection modify 'System ens3' ipv4.method manual ipv4.addresses 203.0.113.10/24 ipv4.gateway 203.0.113.1 ipv4.dns '8.8.8.8 1.1.1.1'
nmcli connection modify 'System ens3' ipv6.method disabled
nmcli connection up 'System ens3'
EOF
chmod 700 /root/network-rollback.sh
systemd-run --unit network-rollback --on-active=5m /root/network-rollback.shПосле успешной проверки новую конфигурацию нужно отменить запланированный откат:
systemctl cancel network-rollback.service
systemctl status network-rollback.serviceЕсли команда systemctl cancel сообщает, что юнит не найден, проверьте transient-юниты и таймеры. В большинстве случаев это означает, что rollback уже выполнился или был создан с другим именем.
systemctl list-timers --all
systemctl list-units 'network-rollback*'Не ставьте слишком короткий интервал rollback. Две минуты иногда не хватает: NetworkManager применяет профиль, SSH переподключается, DNS обновляется, а вы еще не успели проверить IPv6 и маршруты. Пять-семь минут обычно комфортнее.
Настраиваем статический IPv4 через nmcli
Теперь перейдем к базовому сценарию: на VDS нужно задать статический IPv4. Еще раз: замените адрес, gateway, DNS и имя профиля на свои. Документационные адреса из примера нельзя использовать на реальном сервере.
nmcli connection modify 'System ens3' ipv4.method manual
nmcli connection modify 'System ens3' ipv4.addresses 203.0.113.10/24
nmcli connection modify 'System ens3' ipv4.gateway 203.0.113.1
nmcli connection modify 'System ens3' ipv4.dns '8.8.8.8 1.1.1.1'
nmcli connection modify 'System ens3' ipv4.ignore-auto-dns yesПараметр ipv4.ignore-auto-dns полезен, если профиль раньше получал DNS по DHCP, а теперь вы хотите использовать только вручную указанные серверы. Если этого не сделать, в некоторых конфигурациях автоматические DNS могут смешиваться с ручными, и диагностика станет менее предсказуемой.
Применяем профиль. На удаленном сервере лучше запускать команду внутри tmux или screen, чтобы сессия не оборвалась из-за временного переподключения.
nmcli connection up 'System ens3'Проверяем адрес и маршрут по умолчанию:
ip addr show dev ens3
ip route show default
nmcli device show ens3Затем проверяем доступность gateway и внешней сети. Для первичной проверки используйте IP-адрес, а не доменное имя: так вы отделите проблему маршрутизации от проблемы DNS.
ping -c 3 203.0.113.1
ping -c 3 1.1.1.1
getent hosts example.comЕсли ping до gateway проходит, а до внешнего IP нет, проблема может быть в маршруте провайдера, cloud firewall, некорректной маске или политике маршрутизации. Если внешний IP пингуется, но домены не резолвятся, смотрите DNS: /etc/resolv.conf, nmcli device show, resolvectl status.
Добавляем IPv6: ручной адрес, DNS и gateway
IPv6 на VDS удобно включать через тот же профиль NetworkManager. В ручном варианте задаем ipv6.method со значением manual, адрес, gateway и DNS. Если провайдер выдает IPv6 gateway link-local адресом вида fe80::1, его часто нужно указывать с интерфейсом или корректно задавать через NetworkManager. В типовом примере ниже используется глобальный gateway.
nmcli connection modify 'System ens3' ipv6.method manual
nmcli connection modify 'System ens3' ipv6.addresses 2001:db8:100::10/64
nmcli connection modify 'System ens3' ipv6.gateway 2001:db8:100::1
nmcli connection modify 'System ens3' ipv6.dns '2001:4860:4860::8888 2606:4700:4700::1111'
nmcli connection modify 'System ens3' ipv6.ignore-auto-dns yes
nmcli connection up 'System ens3'Проверяем IPv6-адреса и маршруты:
ip -6 addr show dev ens3
ip -6 route show
ping -6 -c 3 2001:db8:100::1
ping -6 -c 3 2606:4700:4700::1111
getent ahosts example.comЕсли IPv6-адрес появился, но нет default route, проверьте ipv6.gateway и вывод nmcli connection show 'System ens3'. Если default route есть, но внешние IPv6-адреса недоступны, проверьте firewall и доступность IPv6 у провайдера.
Для IPv6 особенно важно не блокировать служебный ICMPv6: без него ломаются Neighbor Discovery и Path MTU Discovery, а симптомы выглядят как случайные таймауты HTTPS, зависающие обновления пакетов и нестабильные соединения.
Если IPv6 должен приходить автоматически
Некоторые VDS получают IPv6 через SLAAC или DHCPv6. Тогда не нужно прописывать адрес вручную. Достаточно включить автоматический метод и, при необходимости, оставить ручные DNS.
nmcli connection modify 'System ens3' ipv6.method auto
nmcli connection modify 'System ens3' ipv6.ignore-auto-dns no
nmcli connection up 'System ens3'Если вы хотите получать адрес автоматически, но DNS задавать вручную:
nmcli connection modify 'System ens3' ipv6.method auto
nmcli connection modify 'System ens3' ipv6.dns '2001:4860:4860::8888 2606:4700:4700::1111'
nmcli connection modify 'System ens3' ipv6.ignore-auto-dns yes
nmcli connection up 'System ens3'Проверьте, что в системе появился глобальный IPv6-адрес, а не только link-local fe80::. Наличие одного лишь fe80:: не означает, что сервер доступен по IPv6 из интернета.
DNS в NetworkManager: как не запутаться
DNS в AlmaLinux и Rocky Linux может выглядеть по-разному в зависимости от образа. Где-то /etc/resolv.conf напрямую формируется NetworkManager, где-то участвует systemd-resolved, где-то файл указывает на локальный stub-резолвер. Поэтому лучше смотреть сразу несколько источников.
nmcli connection show 'System ens3' | grep dns
nmcli device show ens3 | grep DNS
cat /etc/resolv.conf
resolvectl statusДля замены DNS в профиле используйте ipv4.dns и ipv6.dns. Несколько серверов передаются в одной строке через пробел. Если DNS должен быть только ручным, включайте ignore-auto-dns для нужного семейства IP.
nmcli connection modify 'System ens3' ipv4.dns '8.8.8.8 1.1.1.1'
nmcli connection modify 'System ens3' ipv4.ignore-auto-dns yes
nmcli connection modify 'System ens3' ipv6.dns '2001:4860:4860::8888 2606:4700:4700::1111'
nmcli connection modify 'System ens3' ipv6.ignore-auto-dns yes
nmcli connection up 'System ens3'Если после применения настройки /etc/resolv.conf не меняется, проверьте, не является ли он обычным файлом, созданным вручную, или ссылкой на другой менеджер DNS. Также посмотрите глобальные параметры NetworkManager.
ls -l /etc/resolv.conf
NetworkManager --print-configПри диагностике DNS не ограничивайтесь ping по доменному имени. Команда getent hosts показывает результат через системный NSS-стек, то есть ближе к тому, как домены будут резолвить приложения. Если установлен bind-utils, можно использовать dig.
dnf install -y bind-utils
getent hosts example.com
dig A example.com
dig AAAA example.com
Несколько IPv4 или IPv6 на одном интерфейсе
На VDS часто добавляют дополнительные IP-адреса: для отдельных сайтов, исходящей почты, тестовых стендов или миграций. В NetworkManager дополнительные адреса можно указать в том же профиле. Важно не затереть существующий основной адрес.
Чтобы добавить еще один IPv4 к уже настроенному профилю, используйте оператор добавления. Он сохраняет существующие значения и добавляет новое.
nmcli connection modify 'System ens3' +ipv4.addresses 203.0.113.20/24
nmcli connection up 'System ens3'
ip addr show dev ens3Аналогично для IPv6:
nmcli connection modify 'System ens3' +ipv6.addresses 2001:db8:100::20/64
nmcli connection up 'System ens3'
ip -6 addr show dev ens3Удаление выполняется оператором минус. Это удобно, когда нужно снять временный адрес после миграции.
nmcli connection modify 'System ens3' -ipv4.addresses 203.0.113.20/24
nmcli connection modify 'System ens3' -ipv6.addresses 2001:db8:100::20/64
nmcli connection up 'System ens3'Если у дополнительных IP отдельные маршруты или они должны использоваться как исходящие адреса для конкретных сервисов, одной добавки адреса может быть мало. Тогда подключаются policy routing, отдельные таблицы маршрутизации и настройки приложений. Но для большинства веб-сценариев — Nginx, Apache, почтовые демоны, API — достаточно назначить адрес на интерфейс и явно привязать сервис к нужному IP.
Маршруты: default gateway и статические route
Для обычного VDS нужен один маршрут по умолчанию для IPv4 и, при включенном IPv6, один маршрут по умолчанию для IPv6. Их задают параметры ipv4.gateway и ipv6.gateway. Но иногда нужны дополнительные статические маршруты: например, к приватной сети, VPN-сегменту или внутренней сети провайдера.
Добавим IPv4-маршрут к подсети 10.10.0.0/16 через gateway 203.0.113.254:
nmcli connection modify 'System ens3' +ipv4.routes '10.10.0.0/16 203.0.113.254'
nmcli connection up 'System ens3'
ip route showДля IPv6 синтаксис похож:
nmcli connection modify 'System ens3' +ipv6.routes '2001:db8:200::/48 2001:db8:100::fe'
nmcli connection up 'System ens3'
ip -6 route showЕсли маршрут не появляется, проверьте, доступен ли указанный next-hop в той же L2-сети, правильно ли задан префикс и не конфликтует ли route с уже существующим default route. Для сложных схем с несколькими провайдерами или несколькими адресами на разных шлюзах лучше заранее планировать policy routing, а не пытаться решить все через один профиль.
Как применить изменения без перезагрузки и не уронить SSH
NetworkManager позволяет применять изменения командой nmcli connection up. Это быстрее, чем перезагрузка сервера, но при смене адреса или gateway SSH-сессия все равно может оборваться. Нормальная практика — открыть две SSH-сессии, запустить rollback, применить изменения, затем проверить доступность снаружи.
Минимальный безопасный порядок такой:
- Открыть консоль VDS или вторую SSH-сессию.
- Сохранить текущую конфигурацию и подготовить rollback.
- Запланировать rollback через
systemd-run. - Изменить профиль через
nmcli connection modify. - Применить профиль командой
nmcli connection up. - Проверить IPv4, IPv6, DNS и доступ к сервисам.
- Отменить rollback только после успешных проверок.
Проверки лучше выполнять не только с самого сервера, но и с внешней машины. С сервера вы проверяете исходящую маршрутизацию, а снаружи — входящую доступность. Например, если Nginx слушает новый IPv6, локальная проверка может быть успешной, но внешний доступ будет заблокирован firewall.
ss -lntp
curl -4 -I http://example.com
curl -6 -I http://example.comЕсли на сервере нет curl, установите его:
dnf install -y curlТиповые ошибки и быстрая диагностика
Неверное имя профиля или интерфейса
Ошибка выглядит просто: команда выполняется не для того профиля, который реально активен. В результате вы меняете настройки, но сеть не меняется. Всегда сверяйте nmcli device status и nmcli connection show --active.
nmcli connection show --active
nmcli device statusАдрес есть, но default route отсутствует
Проверьте gateway и метод настройки. Для IPv4 должен быть ipv4.method со значением manual и заданный ipv4.gateway. Для IPv6 — ipv6.gateway или корректная автоконфигурация через RA.
nmcli connection show 'System ens3' | grep gateway
ip route show default
ip -6 route show defaultDNS не обновился
Смотрите, кто управляет /etc/resolv.conf, и не смешиваются ли DHCP-DNS с ручными. Если приложение продолжает видеть старые адреса, учитывайте кэш: systemd-resolved, локальный DNS-кэшер, кэш приложения или долгоживущие процессы.
ls -l /etc/resolv.conf
nmcli device show ens3 | grep DNS
resolvectl flush-cachesIPv6 работает нестабильно
Частая причина — заблокирован ICMPv6. Для IPv6 это не косметика, а базовая часть протокола. Neighbor Discovery, Router Advertisement и Path MTU Discovery завязаны на ICMPv6. Если firewall слишком агрессивный, сайты по IPv6 могут открываться частично, TLS-соединения зависать, а dnf периодически падать по timeout.
ping -6 -c 3 2606:4700:4700::1111
tracepath -6 2606:4700:4700::1111
ip -6 neigh showПосле изменения IP недоступен сайт, но SSH работает
Сетевой профиль может быть настроен правильно, а проблема находится выше: веб-сервер слушает только старый IP, DNS-запись домена еще не обновилась, firewall разрешает только IPv4 или сертификат не содержит нужное имя. Если вместе с сетевой миграцией меняете HTTPS-схему, пригодится материал про автоматизацию wildcard-сертификатов через DNS-01.
ss -lntp
getent ahosts example.com
curl -4 -I http://example.com
curl -6 -I http://example.comОткат изменений вручную
Если автоматический rollback не был подготовлен, но доступ к серверу еще есть, можно вернуть профиль в DHCP или отключить проблемное семейство IP вручную. Например, чтобы вернуть IPv4 в автоматический режим:
nmcli connection modify 'System ens3' ipv4.method auto
nmcli connection modify 'System ens3' ipv4.addresses ''
nmcli connection modify 'System ens3' ipv4.gateway ''
nmcli connection modify 'System ens3' ipv4.dns ''
nmcli connection up 'System ens3'Чтобы временно отключить IPv6, если именно он ломает исходящие подключения или мешает пакетному менеджеру:
nmcli connection modify 'System ens3' ipv6.method disabled
nmcli connection up 'System ens3'Если нужно удалить только gateway, но оставить адрес, очистите параметр ipv4.gateway или ipv6.gateway. Делайте это осторожно: без default route сервер потеряет доступ к внешним сетям по соответствующему протоколу.
nmcli connection modify 'System ens3' ipv4.gateway ''
nmcli connection modify 'System ens3' ipv6.gateway ''
nmcli connection up 'System ens3'После аварийного отката не забудьте проверить, что NetworkManager действительно поднял нужный профиль, а не создал новый временный. Иногда после ручных правок и cloud-init в системе появляются похожие подключения для одного интерфейса. Это усложняет диагностику.
nmcli connection show
nmcli connection show --activeЧто делать с cloud-init на VDS
Многие образы AlmaLinux и Rocky Linux для VDS используют cloud-init для первичной настройки сети. В нормальном сценарии cloud-init отработал один раз при создании сервера и дальше не мешает. Но в некоторых окружениях он может перезаписывать сетевые настройки при перезагрузке или пересоздании сетевых данных.
Проверьте статус cloud-init и наличие сетевых файлов, созданных им:
cloud-init status
ls -la /etc/NetworkManager/system-connections
ls -la /etc/sysconfig/network-scriptsНе отключайте cloud-init вслепую на рабочем сервере: через него могли быть настроены SSH-ключи, hostname, пользователи или диски. Если нужно запретить cloud-init управлять сетью, сначала изучите конфигурацию образа и проверьте поведение на тестовом VDS. Для production безопаснее документировать изменения и иметь консольный доступ на случай, если при следующей загрузке сеть будет пересобрана.
Мини-чеклист перед закрытием задачи
После настройки IPv4, IPv6 и DNS через nmcli пройдитесь по короткому чеклисту. Он занимает пару минут, но часто спасает от отложенных аварий после перезагрузки.
- Активен правильный профиль NetworkManager для нужного интерфейса.
- IPv4-адрес, префикс и gateway совпадают с данными провайдера.
- IPv6-адрес имеет глобальный префикс, а не только
fe80::. - Есть default route для включенных семейств IP.
- DNS отображается в
nmcli device showи реально резолвит домены. - SSH доступен из новой сессии после применения профиля.
- Веб-сервер, почта или другие сервисы слушают нужные IP.
- Firewall не блокирует нужные входящие порты и базовый ICMPv6.
- Rollback отменен только после успешных проверок.
- Конфигурация переживает перезагрузку.
Финальная проверка после reboot — хорошая привычка, если изменения делались в окне обслуживания. Но перезагружать production-сервер только ради проверки не всегда уместно. Минимум убедитесь, что параметры сохранены в профиле, а не применены только временно через ip addr add или ip route add.
nmcli connection show 'System ens3'
nmcli general status
nmcli networking connectivity checkИтоги
nmcli — самый практичный способ управлять сетью на AlmaLinux и Rocky Linux в консольном окружении VDS. Он позволяет аккуратно настроить статический IPv4, включить IPv6, задать DNS, добавить дополнительные IP и маршруты без ручной правки конфигов и без обязательной перезагрузки.
Главное правило — не относиться к сетевым изменениям как к обычной настройке пакета. Сначала фиксируем исходное состояние, затем готовим rollback, после этого меняем профиль и проверяем результат по слоям: адреса, маршруты, DNS, входящие сервисы. Такой порядок немного длиннее, зато сильно снижает риск остаться без SSH-доступа к серверу.
Если вы ведете несколько VDS, сохраните для себя шаблон команд с переменными: имя профиля, интерфейс, IPv4, IPv6, gateway и DNS. Так вы сможете быстро и одинаково настраивать новые серверы AlmaLinux и Rocky Linux, а при инциденте — понимать, какие именно параметры должны быть в рабочем состоянии.


