Прежде чем запускать любую из команд ниже — один нюанс который съедает час времени у тех кто работает удалённо.
Если вы на SSH-сессии: перезапуск всего сетевого стека обрывает соединение. Чтобы успеть переподключиться до применения изменений — завернуть команду в задержку:
echo "sudo systemctl restart networking" | at now + 1 minute
Даёт минуту чтобы закрыть сессию, переподключиться и убедиться что всё поднялось. Если at не установлен:
sudo apt install at
Альтернатива — перезапускать не весь стек, а только конкретный интерфейс. Тот который не используется для текущего SSH. Об этом ниже.
Определить что управляет сетью
На разных Ubuntu разные инструменты. Сначала понять с чем имеем дело:
systemctl is-active NetworkManager
systemctl is-active networking
Если первая команда вернула active — сеть под NetworkManager (типично для десктопа и Ubuntu 20.04+). Если вторая — под networking (типично для серверов и старых конфигов).
Проверить есть ли Netplan-конфиги:
ls /etc/netplan/
Если файлы есть — система использует Netplan как прослойку над NetworkManager или systemd-networkd.
Netplan: применить конфиг без полного перезапуска
Актуально для Ubuntu 18.04 и новее. Конфиги хранятся в /etc/netplan/*.yaml. После изменений применить:
sudo netplan apply
Применяет только дельту — трогает интерфейсы которые изменились, остальные не перезапускает. Для SSH это безопаснее чем systemctl restart.
Режим с автооткатом — применяет конфиг на 120 секунд, затем откатывает если не подтвердить:
sudo netplan try
Нажать Enter для подтверждения. Если ничего не нажать — через две минуты вернётся старый конфиг. Страховка от ошибки в YAML которая заблокирует доступ к серверу.
NetworkManager: десктоп и серверы с GUI
Полный перезапуск демона:
sudo systemctl restart NetworkManager
Мягкий вариант через nmcli — пересоздаёт соединения без перезапуска демона:
sudo nmcli networking off && sudo nmcli networking on
Перезапустить конкретное соединение по имени — не трогая остальные:
nmcli connection show
sudo nmcli connection down "Wired connection 1" && sudo nmcli connection up "Wired connection 1"
Имя соединения берётся из вывода nmcli connection show.
networking.service: серверный вариант
На серверах без GUI сеть часто управляется через /etc/network/interfaces и службу networking:
sudo systemctl restart networking
Остановить и запустить раздельно — если restart не сработал:
sudo systemctl stop networking && sudo systemctl start networking
Статус после перезапуска:
systemctl status networking
Строка active (running) — всё поднялось. failed — смотреть логи:
journalctl -u networking -n 50
ip link: перезапуск одного интерфейса
Самый безопасный способ при работе через SSH — трогать только тот интерфейс который не используется для текущего соединения.
Посмотреть все интерфейсы:
ip link show
Опустить и поднять нужный:
sudo ip link set eth1 down && sudo ip link set eth1 up
Если после подъёма IP не появился:
sudo dhclient eth1
Назначить статический IP вручную:
sudo ip addr add 192.168.1.100/24 dev eth1
sudo ip route add default via 192.168.1.1
Диагностика после перезапуска
Адреса интерфейсов:
ip addr show
Таблица маршрутизации:
ip route
DNS-серверы:
systemd-resolve --status | grep "DNS Servers"
Пинг шлюза — проверить что маршрут есть:
ping -c 4 $(ip route | grep default | awk '{print $3}')
Логи NetworkManager за последние 10 минут:
journalctl -u NetworkManager --since "10 minutes ago"
Шпаргалка
| Ситуация | Команда |
|---|---|
| Десктоп Ubuntu, NetworkManager | sudo systemctl restart NetworkManager |
| Мягкий сброс через nmcli | sudo nmcli networking off && sudo nmcli networking on |
| Сервер, конфиг в /etc/netplan/ | sudo netplan apply |
| Netplan с автооткатом | sudo netplan try |
| Сервер, конфиг в /etc/network/interfaces | sudo systemctl restart networking |
| Один интерфейс (безопасно через SSH) | sudo ip link set eth1 down && sudo ip link set eth1 up |
| Запросить IP через DHCP | sudo dhclient eth1 |
| Задержка перед перезапуском | echo "sudo systemctl restart networking" | at now + 1 minute |