netplan apply, systemctl restart networking, nmcli, ip link - какая команда нужна, зависит не от дистрибутива, а от того, какой рендерер управляет сетью. Разбираем, как это определить, и как безопасно перезапустить сеть на удалённом сервере.

Сеть на сервере отвалилась: сайт не открывается, apt update висит, SSH то ли есть, то ли нет. Первое желание - перезагрузить машину, но это грубо и не всегда помогает. Как перезапустить сеть в Ubuntu и Debian, зависит не от дистрибутива, а от того, какой механизм ей управляет - и их несколько. Разберём, как за пару команд понять, что у вас работает, чем перезапускать каждый вариант, как чинить DNS отдельно от самой сети и как не заблокировать себе доступ, когда всё это делается по SSH.

Коротко. Сначала определите рендерер: grep -R "renderer:" /etc/netplan/ и systemctl status systemd-networkd NetworkManager. Рендерер systemd-networkd (типичный Ubuntu Server): на удалённой машине - sudo netplan try (сам откатится за 120 секунд при потере связи) или точечно sudo networkctl reconfigure eth0. Рендерер NetworkManager (десктопы, многие Debian): sudo nmcli device reapply eth0 или sudo systemctl restart NetworkManager. ifupdown (минимальный Debian): sudo ifdown eth0 && sudo ifup eth0 одной строкой - не systemctl restart networking, он рвёт SSH. Если ничего не слушается: sudo ip link set eth0 down && sleep 2 && sudo ip link set eth0 up. «Пинг по IP идёт, по имени нет» - это DNS, лечится отдельно.

Шаг 1. Как понять, чем перезапускать сеть в Ubuntu и Debian

Настройкой сети занимается не одна программа, а связка. И netplan в ней - не тот, кто поднимает интерфейсы: это генератор конфигурации. Вы описываете сеть в YAML, netplan переводит это в настройки для рендерера (renderer - «отрисовщик»), и рендерер уже реально управляет сетью. Рендерер бывает двух видов: systemd-networkd или NetworkManager. Именно от него зависит команда перезапуска, поэтому разведку ведём в таком порядке.

Сначала - есть ли netplan и какой у него рендерер:

ls -l /etc/netplan/
grep -R "renderer:" /etc/netplan/ 2>/dev/null
netplan get renderer 2>/dev/null

  • Есть файлы .yaml и строка renderer: networkd - сетью управляет systemd-networkd.
  • Строка renderer: NetworkManager - управляет NetworkManager.
  • Строки renderer: нет - действует значение по умолчанию: на серверных установках это networkd, на десктопных - NetworkManager. netplan get renderer вернёт null, тогда смотрите по запущенной службе (следующая команда).

Проверьте, какая сетевая служба действительно активна:

systemctl --no-pager status systemd-networkd NetworkManager

active (running), как правило, ровно у одной из двух. Если это NetworkManager - учтите, что networkctl вам почти не пригодится: он показывает картину только для networkd. Работайте через nmcli.

Если каталог /etc/netplan/ пуст или отсутствует, ищем дальше:

ls /etc/systemd/network/*.network 2>/dev/null
cat /etc/network/interfaces
ls /etc/network/interfaces.d/

  • Есть файлы *.network в /etc/systemd/network/, а netplan нет - это чистый systemd-networkd (встречается на облачных образах Debian). Список интерфейсов - networkctl list.
  • В /etc/network/interfaces есть строки iface eth0 inet static или iface eth0 inet dhcp (не только lo - петлевой интерфейс) - это ifupdown, настройка через один текстовый файл. Так выглядит минимальная или серверная установка Debian 12 и 13.

Универсальная проверка состояния, одинаковая для всех стеков:

ip -br addr
ip -br link

ip -br addr печатает по каждому интерфейсу его адреса и статус (UP / DOWN). На это вы смотрите после любого перезапуска, чтобы понять, вернулась сеть или нет.

Что нашли в системе

Стек и чем перезапускать

/etc/netplan/*.yaml, renderer: networkd либо renderer не указан на сервере

netplan + systemd-networkd: netplan try / netplan apply, точечно networkctl reconfigure

/etc/netplan/*.yaml, renderer: NetworkManager

netplan + NetworkManager: nmcli device reapply, systemctl restart NetworkManager

/etc/systemd/network/*.network, netplan нет

чистый systemd-networkd: networkctl reconfigure, systemctl restart systemd-networkd

/etc/network/interfaces со строками iface

ifupdown: ifdown eth0 && ifup eth0 (одной строкой)

Файл 50-cloud-init.yaml в /etc/netplan/

netplan, конфигурацию пишет cloud-init: netplan apply сейчас; про ребут - врезка ниже

Облачные образы и cloud-init. На облачных образах сеть при первой загрузке настраивает cloud-init - он кладёт файл /etc/netplan/50-cloud-init.yaml. Правки этого файла руками cloud-init может перезаписать при следующем прогоне: после смены метаданных, пересоздания или иногда при обычной перезагрузке. Чтобы правки жили, есть два пути. Первый - положить свой файл в /etc/netplan/ с именем, которое сортируется позже, например 99-custom.yaml: netplan применяет файлы по порядку, и последний перекрывает совпадающие ключи. Второй - совсем убрать сеть из-под cloud-init: echo 'network: {config: disabled}' | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg. Важно: netplan apply применит изменения сразу, а поведение после перезагрузки зависит от того, вмешается ли cloud-init.

Рендерер systemd-networkd: Ubuntu Server и чистый networkd

Этот раздел - для стека netplan с рендерером networkd и для чистого systemd-networkd без netplan. systemd-networkd - штатная сетевая служба на серверных установках Ubuntu. Её рабочие файлы лежат в /etc/systemd/network/*.network (под netplan их генерирует netplan из вашего YAML).

Если сеть настроена через netplan, «перезапуск» - это заново применить YAML. На машине, до которой вы дотягиваетесь только по сети, основной вариант - netplan try. Он применяет конфигурацию и запускает таймер. Успеете подтвердить в терминале - изменения останутся. Потеряете связь и не нажмёте Enter - через 120 секунд netplan вернёт прежнюю рабочую конфигурацию.

sudo netplan try

  • нужен интерактивный терминал; в скрипте команда бесполезна;
  • --timeout 180 меняет окно отката (в секундах);
  • надёжнее всего работает с рендерером systemd-networkd; с NetworkManager поведение может отличаться - держите запасную сессию SSH или консоль в панели открытыми.

Что вы увидите: строку Do you want to keep these settings? и обратный отсчёт Changes will revert in 120 seconds. Нажали Enter вовремя - Configuration accepted.

Когда вы у консоли или изменение уже проверено - применяйте сразу, без страховки:

sudo netplan apply

Что вы увидите: обычно ничего - команда молча возвращает приглашение. Ошибка в YAML печатается явно: Error in network definition ... с номером строки.

Проверить, что YAML вообще разбирается, не трогая работающую сеть:

sudo netplan generate

Дальше - команды самого networkd. Сначала обзор состояния:

networkctl status

По каждому интерфейсу видно его состояние (routable - есть маршрут, degraded - поднят, но без адреса, no-carrier - нет линка), адрес, шлюз и DNS.

Мягкий вариант - перечитать изменённые файлы, не трогая интерфейсы, которые не менялись:

sudo networkctl reload

Точечный вариант - заново применить настройки к одному интерфейсу: сбросить адреса и маршруты, выставить снова, перезапросить DHCP. Имя возьмите из networkctl status (часто eth0, ens3, enp1s0):

sudo networkctl reconfigure eth0

Грубый вариант - снести и собрать заново всё, чем управляет networkd:

sudo systemctl restart systemd-networkd

Статические адреса возвращаются почти мгновенно, аренды DHCP запрашиваются заново. На удалённой машине предпочтительнее reconfigure для нужного интерфейса - меньше риска потерять доступ.

Что вы увидите: после reconfigure команда networkctl status eth0 за несколько секунд должна показать State: routable и вернувшийся адрес.

Рендерер NetworkManager: десктопы и многие Debian

NetworkManager ведёт сеть на десктопных Ubuntu и на Debian, установленном с графическим окружением; иногда он же выбран рендерером в netplan. Каждую конфигурацию он называет соединением (connection) - это именованный профиль: сеть Wi-Fi, проводное подключение. Сначала список:

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

Запомните имя нужного соединения из первой команды - в примерах ниже подставляйте его вместо "Wired connection 1".

Применить изменения профиля к устройству без полного разрыва - самый щадящий способ:

sudo nmcli device reapply eth0

  • нужен NetworkManager 1.14 или новее (в Debian 12/13 и во всех актуальных Ubuntu он есть; версия - nmcli --version);
  • часть изменений всё равно требует кратковременного разрыва линка - тогда используйте down/up ниже.

Перезапустить одно соединение (кавычки обязательны, если в имени есть пробелы):

sudo nmcli connection down "Wired connection 1" && sudo nmcli connection up "Wired connection 1"

Полный сброс: выключить и включить всю сетевую часть NetworkManager. Всё пересогласуется, включая DHCP:

sudo nmcli networking off && sudo nmcli networking on

Перезапуск самой службы - соединения с автоподключением поднимутся сами:

sudo systemctl restart NetworkManager

Что вы увидите: nmcli device status показывает устройство как connected, а nmcli -g IP4.ADDRESS device show eth0 печатает адрес.

ifupdown: старые и минимальные Debian

Старые версии Debian и любая минимальная или серверная установка Debian 12/13 держат настройку сети в одном текстовом файле - /etc/network/interfaces (плюс вставки в /etc/network/interfaces.d/). Читает его инструмент ifupdown.

Первый порыв - sudo systemctl restart networking - на удалённом сервере опасен. Фактически он делает ifdown -a, а затем ifup -a для всех интерфейсов, кроме lo. Активную сессию SSH это рвёт, даже если ваш интерфейс помечен auto. На удалёнке так не делают.

Правильно - поднять один интерфейс по имени, и сразу одной строкой, чтобы обрыв SSH не оставил его в положении «выключен»:

sudo ifdown eth0 && sudo ifup eth0

Почему ifdown зависает или ругается. Две частые причины: он пытается отдать аренду DHCP, а линка уже нет - и висит на таймауте; либо файл состояния /run/network/ifstate разошёлся с реальностью, и ifdown пишет interface eth0 not configured и ничего не делает. Лечится флагом, который игнорирует файл состояния:

sudo ifdown --force eth0 && sudo ifup eth0

Если и это висит - спускайтесь на уровень интерфейса (следующий раздел).

Что вы увидите: ip -br addr show eth0 печатает строку вида eth0 UP 192.0.2.10/24, когда интерфейс вернулся.

Уровень интерфейса: когда менеджер не слушается

Если ни один менеджер не помогает, линк можно передёрнуть напрямую. Это работает одинаково во всех дистрибутивах, потому что команда обращается к ядру, а не к системе конфигурации. Никакие конфиги не перечитываются - вы просто выключаете и включаете интерфейс.

sudo ip link set eth0 down && sleep 2 && sudo ip link set eth0 up

Это сетевой аналог «выдернуть и воткнуть кабель». Статическая настройка, выставленная менеджером, обычно переживает передёргивание; адрес по DHCP может потребовать обновления. По SSH выполняйте только одной строкой (или через systemd-run / at): если пустить down отдельной командой, «up» уже не выполнится - сессия к тому моменту мертва.

Имя интерфейса, если не помните: ip -br link.

Обновить адрес по DHCP вручную. Правильный способ зависит от стека:

  • systemd-networkd: sudo networkctl reconfigure eth0 заново запускает DHCP;
  • NetworkManager: sudo nmcli device reapply eth0 или down/up соединения;
  • старый способ через dhclient: sudo dhclient -r eth0 - отдать аренду, затем sudo dhclient eth0 - запросить заново. На Ubuntu 24.04 dhclient обычно отсутствует - DHCP там ведёт systemd-networkd. На Debian 12/13 - по ситуации: проверьте command -v dhclient, при необходимости поставьте sudo apt install isc-dhcp-client.

Что вы увидите: ip -br addr show eth0 показывает адрес, а ip route - строку default via ... (маршрут по умолчанию).

DNS не резолвится после перезапуска

Бывает так: линк поднят, ping 1.1.1.1 идёт, а ping google.com отвечает Temporary failure in name resolution. Это не сеть, это DNS. Дальше зависит от того, работает ли служба systemd-resolved:

systemctl is-active --quiet systemd-resolved && echo "resolved активен" || echo "resolved выключен"

Если systemd-resolved активен (типично для Ubuntu), разрешением имён занимается он:

resolvectl status

Показывает DNS-серверы по каждому интерфейсу и глобальные настройки. Пустое или неверное Current DNS Server - вот и причина.

sudo resolvectl flush-caches

Чистит локальный кэш DNS - устаревшие или испорченные записи. Конфигурацию не трогает.

sudo systemctl restart systemd-resolved

Перезапускает резолвер; он заново перечитывает DNS-серверы, выданные по DHCP или заданные в netplan.

Если systemd-resolved выключен (частый случай на Debian), команды resolvectl работать не будут. Разрешение имён идёт напрямую по файлу /etc/resolv.conf:

cat /etc/resolv.conf

Проверьте, что там есть строки nameserver. Этот файл переписывает NetworkManager или ifupdown из аренды DHCP, поэтому руками правьте его только если уверены, что он не перегенерируется (иначе правка пропадёт при следующем перезапуске сети).

Как не потерять доступ, когда перезапускаешь по SSH

Перезапуск сети на машине, до которой вы дотягиваетесь только по SSH - классический способ заблокировать себе доступ. Перезапуск рвёт вашу сессию; если новая конфигурация неверна, поднять её обратно уже нечем, и вы заперты снаружи, пока не доберётесь до консоли. Как подстраховаться.

1. Держите вторую сессию SSH открытой. Просто залогиньтесь вторым окном и не трогайте его. Если первая сессия умрёт, вторая может прожить ещё несколько минут - установленные TCP-соединения переживают короткий сбой. Дешёвая страховка.

2. На стеке с netplan применяйте через sudo netplan try. Он сам откатится через 120 секунд, если вы не подтвердите. По оборванному каналу подтвердить нельзя - восстановление произойдёт автоматически.

3. Запускайте команду отдельно от сессии SSH и берите точечную, а не полный перезапуск службы. Отложенный разовый юнит systemd с переконфигурацией одного интерфейса:

sudo systemd-run --on-active=1 --timer-property=AccuracySec=100ms networkctl reconfigure eth0

Для рендерера NetworkManager - то же с nmcli:

sudo systemd-run --on-active=1 nmcli device reapply eth0

  • команда выполнится через секунду в своём отдельном пространстве, а не как дочерний процесс вашей оболочки;
  • даже если SSH оборвётся сразу, она всё равно отработает;
  • полный systemctl restart systemd-networkd или restart NetworkManager оставьте на случай, когда точечная переконфигурация не помогла - и тоже запускайте отложенно.

Тот же приём через at (нужен sudo apt install at):

echo 'networkctl reconfigure eth0' | sudo at now + 1 minute

Или обернуть в tmux, чтобы у процесса был «дом» при отключении:

tmux new -d -s net 'sudo ifdown eth0 && sudo ifup eth0'

4. Знайте запасной путь заранее. У WeaselCloud в панели управления есть консоль сервера - доступ к экрану и клавиатуре машины, который не идёт через её сеть. С ней можно поправить сломанную конфигурацию, даже когда сеть лежит полностью. Откройте этот пункт один раз спокойно, чтобы не искать его в панике.

Чего не делать: не выполнять sudo ip link set eth0 down или sudo ifdown eth0 отдельной командой по SSH в расчёте потом поднять интерфейс - «поднять» уже не выполнится. Соединяйте обе части в одну строку или запускайте отложенно.

Симптом - команда - почему

  • Правили YAML в /etc/netplan, применяете на удалёнке. Команда - sudo netplan try. Стек - renderer=networkd; применяет и сам откатывает через 120 с при потере связи.
  • netplan проверен, вы у консоли. Команда - sudo netplan apply. Стек - netplan с любым renderer; применяет сразу, без страховки.
  • Один интерфейс завис, адрес пропал. Команда - sudo networkctl reconfigure eth0. Стек - renderer=networkd или чистый networkd; заново поднимает адрес и DHCP на одном интерфейсе.
  • Сеть легла целиком. Команда - sudo systemctl restart systemd-networkd. Стек - renderer=networkd или чистый networkd; пересобирает всё, чем управляет networkd.
  • Отвалилось одно соединение. Команда - sudo nmcli connection down "имя" && sudo nmcli connection up "имя" (имя - из nmcli -t -f NAME,DEVICE connection show). Стек - renderer=NetworkManager; перезапуск одного профиля.
  • Нужен полный сброс NetworkManager. Команда - sudo nmcli networking off && sudo nmcli networking on. Стек - renderer=NetworkManager; всё пересогласуется, включая DHCP.
  • Правили /etc/network/interfaces. Команда - sudo ifdown eth0 && sudo ifup eth0 одной строкой. Стек - ifupdown; systemctl restart networking здесь равен ifdown -a + ifup -a и рвёт SSH даже на интерфейсе с auto.
  • ifdown пишет not configured или висит. Команда - sudo ifdown --force eth0 && sudo ifup eth0. Стек - ifupdown; флаг игнорирует рассинхрон файла состояния.
  • Менеджер не слушается, нужно дёрнуть линк. Команда - sudo ip link set eth0 down && sleep 2 && sudo ip link set eth0 up. Стек - любой; идёт напрямую к ядру. По SSH только одной строкой или через systemd-run/at, иначе «up» не выполнится.
  • Пинг по IP идёт, по имени - нет, systemd-resolved активен. Команда - sudo resolvectl flush-caches, затем resolvectl status. Стек - любой; проблема в DNS-кэше, не в сети.
  • То же, но systemd-resolved выключен. Смотрите /etc/resolv.conf. Стек - частый случай на Debian; резолвинг идёт по этому файлу, его пишет NetworkManager или ifupdown.
  • Перезапуск по SSH, боязно за доступ. Команда - sudo systemd-run --on-active=1 --timer-property=AccuracySec=100ms networkctl reconfigure eth0. Стек - renderer=networkd; команда живёт отдельно от сессии, работает точечно, а не полным restart.

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

Как перезапустить сеть в Ubuntu без перезагрузки?

Перезагрузка почти никогда не нужна. Определите рендерер (grep -R "renderer:" /etc/netplan/, systemctl status systemd-networkd NetworkManager) и перезапустите точечно: sudo networkctl reconfigure eth0 для systemd-networkd, sudo nmcli device reapply eth0 для NetworkManager, sudo ifdown eth0 && sudo ifup eth0 для ifupdown. В крайнем случае дёрните интерфейс: sudo ip link set eth0 down && sleep 2 && sudo ip link set eth0 up.

Что делать, если после перезапуска сети по SSH пропал доступ?

Существующая сессия уже не вернётся - нужен другой путь на сервер. Откройте консоль сервера в панели управления WeaselCloud (это доступ к экрану машины в обход сети) и проверьте конфигурацию: ip -br addr, ip route, sudo netplan try. Если это разовый сбой без правок конфигурации, помогает перезагрузка сервера из панели. На будущее: держите вторую сессию открытой и применяйте изменения через sudo netplan try, который откатится сам.

Почему netplan apply не применяет настройки?

netplan apply завершается молча, даже если рендерер не подхватил настройки. Проверьте синтаксис: sudo netplan generate покажет ошибки в YAML. Посмотрите, какой рендерер указан (renderer: networkd или NetworkManager) и запущен ли он: systemctl status systemd-networkd. Затем sudo netplan --debug apply покажет, что именно происходит. Частая причина - неверный отступ в YAML, имя интерфейса, которого нет в системе (сверьте с ip -br link), или файл от cloud-init, который перекрывает ваш.

Как перезапустить NetworkManager в Debian?

Если Debian установлен с рабочим столом, сеть ведёт NetworkManager. Перезапуск службы - sudo systemctl restart NetworkManager; соединения с автоподключением поднимутся сами. Мягче, без разрыва службы: sudo nmcli device reapply eth0 или sudo nmcli connection down "Wired connection 1" && sudo nmcli connection up "Wired connection 1" (имя - из nmcli -t -f NAME,DEVICE connection show). На минимальном Debian NetworkManager обычно не стоит - там ifupdown.

Как сбросить сетевые настройки в Linux к исходным?

«Заводского» состояния как такового нет - есть конфигурация, которую положил провайдер или установщик. На стеке с netplan это файлы в /etc/netplan/: сохраните текущий, верните тот, что был при создании сервера, и выполните sudo netplan apply. На облачном образе исходный файл - 50-cloud-init.yaml. На ifupdown - то же с /etc/network/interfaces. Если правок было много и вернуться некуда, самый чистый путь - переустановка ОС из панели WeaselCloud.

Чем перезапустить сеть в Ubuntu 24.04 - отличается ли от 22.04?

Команды те же: netplan try, netplan apply, networkctl reconfigure, systemctl restart systemd-networkd. Разница в мелочах: в 24.04 из образа убрали dhclient (DHCP ведёт systemd-networkd), а на десктопе netplan с версии 23.10 использует рендерер NetworkManager. На сервере обеих версий рендерер один - systemd-networkd - и перезапускается одинаково.

Проверено на

Команды актуальны для Ubuntu 22.04 (systemd 249) и 24.04 (systemd 255), Debian 12 (systemd 252, NetworkManager 1.42) и Debian 13 (systemd 255+, NetworkManager 1.46+). На более старых системах отдельные подкоманды networkctl и nmcli могут отсутствовать - тогда используйте перезапуск службы целиком или уровень интерфейса.

Коротко

  • Смотрите не на дистрибутив, а на рендерер: grep -R "renderer:" /etc/netplan/ и какая служба активна - systemd-networkd или NetworkManager.
  • Рендерер networkd: sudo netplan try на удалёнке (сам откат за 120 с), точечно sudo networkctl reconfigure eth0.
  • Рендерер NetworkManager: sudo nmcli device reapply eth0, полный сброс - nmcli networking off/on.
  • ifupdown: sudo ifdown eth0 && sudo ifup eth0 одной строкой; systemctl restart networking на удалёнке рвёт SSH.
  • Не помогло - интерфейс: sudo ip link set eth0 down && sleep 2 && sudo ip link set eth0 up.
  • «Пинг по IP есть, по имени нет» - DNS: сперва systemctl is-active systemd-resolved, дальше либо resolvectl flush-caches, либо /etc/resolv.conf.
  • По SSH: вторая сессия открыта, точечная команда через systemd-run, и знайте, где консоль сервера в панели WeaselCloud.

Что дальше