Применение сетевых настроек рвёт соединение и не возвращает его
Применение сетевых настроек перезапускает управление интерфейсами. Ошибка в описании означает потерю доступа к удалённой машине без возможности исправить. Это одна из немногих операций, где порядок действий важнее знания синтаксиса.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Ошибка в описании применяется без проверки
Опечатка в адресе, маске или имени интерфейса оставляет машину без сети. Откатить изменения некому.
-
Настройки применяются без страховки на удалённой машине
Даже верное описание может не сработать из-за особенностей сети. Без страховки машина остаётся недоступной до физического вмешательства.
-
Описание не совпадает с работающей службой управления сетью
Описание может собираться в настройки одной службы, а сетью управляет другая. Изменения применяются не туда.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Проверка описания без применения: покажет ошибки разбора.
sudo netplan generateПрименение с автоматическим откатом при потере соединения.
sudo netplan try --timeout 60Итоговое состояние интерфейсов после применения.
networkctl listРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Опечатка в адресе, маске или имени интерфейса оставляет машину без сети. Откатить изменения некому.
- Как проверить
-
Проверьте описание до применения.
sudo netplan generate 2>&1 | head sudo netplan try --timeout 60 2>&1 | head
- Как исправить
- Применяйте настройки в режиме с откатом по таймауту: при потере соединения прежние настройки вернутся сами. На удалённой машине это обязательная привычка.
- Почему происходит
- Даже верное описание может не сработать из-за особенностей сети. Без страховки машина остаётся недоступной до физического вмешательства.
- Как проверить
-
Посмотрите способ доступа к машине помимо сети.
systemctl is-active serial-getty@ttyS0 2>/dev/null; systemd-detect-virt
- Как исправить
- Держите второй путь доступа: консоль гипервизора, последовательный порт или запланированный откат заданием по таймеру. Правка сети без страховки — частая причина выезда на место.
- Почему происходит
- Описание может собираться в настройки одной службы, а сетью управляет другая. Изменения применяются не туда.
- Как проверить
-
Посмотрите, какая служба управляет сетью и что сгенерировано.
systemctl is-active systemd-networkd NetworkManager 2>/dev/null sudo ls /run/systemd/network/ 2>/dev/null | head
- Как исправить
- Приведите описание и работающую службу в соответствие. Смешение двух служб управления сетью даёт плавающие отказы, которые трудно воспроизвести.
Пример вывода
Ошибка в описании оставила интерфейс без адреса. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ sudo netplan apply
** (generate:5700): WARNING **: Permissions for /etc/netplan/50-cloud-init.yaml are too open
systemd-networkd[600]: eth0: DHCPv4 client: Failed to send DHCP request
# соединение разорвано, машина доступна только через консоль гипервизора
Связанные ошибки
- Интерфейс не настроен: systemd-networkd не применил описание Сеть не поднимается: файл описания не подхвачен, интерфейс под управлением другой службы, неверное совпадение по имени.
- Адрес не получен: нет ответа от сервера DHCP Интерфейс поднят, адреса нет: нет ответов от сервера, не та подсеть, фильтрация в сети.
- Цель не достигнута: служба ждёт target, который не наступает Служба не запускается, потому что не достигнута цель из After= или Requires=. Разбор целей multi-user, network-online, graphical.
- Address already in use при запуске службы Порт или адрес уже занят: bind() failed (98: Address already in use). Как найти владельца порта и что делать с остатками прежнего процесса.
- Automount: каталог монтируется не вовремя или отваливается Автомонтирование через .automount: как работает TimeoutIdleSec, почему ресурс отваливается и когда лучше обычный .mount.
- Broken pipe в журнале службы Запись в закрытый канал или соединение: клиент отключился, обработчик завершился, конвейер разорван.
- Cannot assign requested address при привязке Ошибка 99 при привязке: адрес не принадлежит машине или ещё не поднят. Разбор с network-online.target и ip_nonlocal_bind.
- Connection refused в журнале службы Соединение отклонено: служба не может подключиться к базе, кешу или другому сервису. Порядок запуска, адрес, брандмауэр.
Источники
- Документация netplan
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено на тестовой машине с доступом через консоль.