Прописали статический адрес в netplan, и пропал SSH: пять строк YAML, в которых ошибаются чаще всего

Что было. На Ubuntu Server 20.04 пользователь задал статический адрес через netplan, чтобы адрес не менялся. После netplan apply подключиться по SSH не удалось; при этом с самой машины ping 8.8.8.8 работал, а имена сайтов не разрешались. В конфигурации были адрес /24, шлюз, публичные DNS и интерфейс eth0.

На что указали участники.

  1. Имя интерфейса. Современные Ubuntu называют сетевые карты enp0s3, ens18, enp3s0 и подобно, а не eth0. Настройка для несуществующего интерфейса молча не применяется к реальному, и машина остаётся с тем, что выдал DHCP или без адреса вообще. Проверка: ip -br link.
  2. Отступы YAML. Netplan строг к пробелам; ошибка отступа делает часть блока невидимой. sudo netplan --debug apply покажет, что именно прочитано.
  3. Шлюз и маска. Шлюз должен лежать в той же подсети, что адрес; иначе маршрута по умолчанию не будет, а «пинг по адресу работает» будет верно только внутри локальной сети.
  4. DNS через systemd-resolved. Если имена не разрешаются, а адреса пингуются, смотрите resolvectl status: в netplan серверы имён задаются в секции nameservers, и они должны попасть в конфигурацию именно того интерфейса, который поднялся.
  5. Сам SSH и брандмауэр. systemctl status ssh и sudo ufw status: смена адреса не меняет правила, но если правило было привязано к старому адресу, доступ пропадёт.

Альтернатива, которую предложили. Не трогать конфигурацию гостя, а закрепить адрес за MAC-адресом машины в настройках DHCP-сервера или панели. Так нет конфликтов адресов и нет риска остаться без доступа после опечатки.

Безопасный способ применить изменения. sudo netplan try применяет настройки на 120 секунд и откатывает их, если вы не подтвердите; при обрыве SSH конфигурация вернётся сама. И держите открытой консоль виртуальной машины из панели управления.

Статус. Подтверждения автора в обсуждении нет; советы участников совпадают с документацией.

Настройка сети описана в документации Ubuntu Server.