Настройка статического IP в Ubuntu 22.04-24.04 и Debian 12-13: Новый мир Netplan

Netplan конфигурация в Ubuntu и Debian

Если вы работали с Debian 10 или Ubuntu 18.04, пора забыть старый добрый /etc/network/interfaces. Свежие версии Debian 12 (Bookworm) и Debian 13 (Trixie), а также Ubuntu 22.04+ перешли на Netplan — единую систему конфигурации сети. Хорошая новость: теперь настройка в этих дистрибутивах практически идентична. Плохая новость: нужно учить YAML.

Давайте разберёмся, как настроить статический IP без головной боли и не потерять доступ к серверу.

⚠️ Критически важное правило

При удалённой настройке всегда используйте netplan try вместо netplan apply! У вас будет 120 секунд на проверку подключения. Если не подтвердить изменения — они автоматически откатятся.

Общий подход для Ubuntu 22.04+ и Debian 12+

Оба дистрибутива теперь используют Netplan по умолчанию. Различия минимальны и касаются в основном путей к конфигурационным файлам.

# 1. Первым делом — смотрим, что у нас есть
ip -c a
# или более подробно:
ip -br -c a show

# Пример вывода:
# lo               UNKNOWN        127.0.0.1/8 ::1/128
# enp3s0           UP             192.168.1.50/24 fe80::20c:29ff:fea4:b15/64
# wlp2s0           DOWN

# 2. Ищем конфигурационные файлы Netplan
ls -la /etc/netplan/

# В Ubuntu обычно: 00-installer-config.yaml
# В Debian обычно: 01-netcfg.yaml
# Но может быть иначе — смотрим, что есть

🔍 Имена интерфейсов в 2024 году

Забудьте про eth0, eth1! Современные системы используют предсказуемые имена:

  • enp3s0 — Ethernet PCIe, слот 3, порт 0
  • wlp2s0 — Wireless PCIe, слот 2, порт 0
  • ens18 — Ethernet на виртуальной машине

Используйте ip a, чтобы узнать точное имя.

Базовая конфигурация статического IP

Открываем или создаём конфигурационный файл:

# Редактируем существующий или создаём новый
sudo nano /etc/netplan/00-custom-config.yaml

Минимальная рабочая конфигурация:

network:
  version: 2
  ethernets:
    enp3s0:
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
      dhcp4: false
      dhcp6: false  # если не используете IPv6

Расширенная конфигурация с тонкой настройкой:

network:
  version: 2
  renderer: networkd  # для серверов без GUI
  ethernets:
    enp3s0:
      match:
        macaddress: 00:11:22:33:44:55  # привязка по MAC (опционально)
      set-name: enp3s0  # фиксируем имя интерфейса
      addresses:
        - 192.168.1.100/24
        - 2001:db8::100/64  # если нужен IPv6
      gateway4: 192.168.1.1  # альтернативный синтаксис
      gateway6: 2001:db8::1  # для IPv6
      nameservers:
        addresses: 
          - 8.8.8.8
          - 8.8.4.4
          - 2001:4860:4860::8888  # DNS IPv6
        search: [mydomain.local, corp.local]
      mtu: 1500  # настройка MTU
      optional: false  # если false - система будет ждать поднятия интерфейса
      dhcp4: false
      dhcp6: false
      # Статические маршруты
      routes:
        - to: 10.0.0.0/8
          via: 192.168.1.254
          metric: 100
        - to: 172.16.0.0/12
          via: 192.168.1.254
          metric: 200

Debian 12 (Bookworm) и 13 (Trixie): Особенности

В Debian могут быть нюансы с предустановленными конфигами:

# В Debian часто уже есть конфиг от установщика
# Проверяем:
cat /etc/netplan/01-netcfg.yaml

# Если файл уже существует, лучше отредактировать его,
# а не создавать новый, чтобы не было конфликтов

# В Debian иногда используется NetworkManager для десктопов
# Проверяем:
systemctl status NetworkManager

# Если он активен, в netplan нужно указать:
network:
  version: 2
  renderer: NetworkManager  # для десктоп-версии
  # ... остальная конфигурация

🎯 Debian на виртуальных машинах

В облачных провайдерах и VMware/VirtualBox Debian часто использует интерфейсы типа ens160, ens192. Особенность: в облаках шлюз часто находится на первом IP подсети (например, x.x.x.1).

addresses: [10.0.0.100/24]
gateway4: 10.0.0.1  # обычно первый IP в подсети

Ubuntu 22.04 LTS и 24.04: Особенности

Ubuntu Server по умолчанию использует networkd, а Desktop — NetworkManager.

# Проверяем, что используем
ps aux | grep -E "(NetworkManager|networkd)"

# В Ubuntu Server обычно:
network:
  version: 2
  renderer: networkd

# В Ubuntu Desktop:
network:
  version: 2
  renderer: NetworkManager

Конфигурация с двумя интерфейсами (сервер с двумя сетевыми картами):

network:
  version: 2
  ethernets:
    enp3s0:  # Основной интерфейс
      addresses: [192.168.1.100/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
      dhcp4: false
    enp4s0:  # Второй интерфейс (без шлюза!)
      addresses: [10.0.0.100/24]
      dhcp4: false
      # Маршруты для второй сети
      routes:
        - to: 10.0.1.0/24
          via: 10.0.0.1

Применяем настройки правильно

# 1. ВАЖНО: проверяем синтаксис YAML
sudo netplan generate

# 2. Пробная активация (таймаут 120 секунд)
sudo netplan try

# Видите это? → 
# Do you want to keep these settings?
# 
# Нажимать Enter ТОЛЬКО если:
# - ping 8.8.8.8 работает
# - ssh с другого хоста работает
# - nslookup google.com работает

# 3. Если уверены на 100% - применяем сразу
sudo netplan apply

# 4. Проверяем результат
ip -c a show enp3s0
ip -c route show
systemd-resolve --status | grep "DNS Servers"

# 5. Проверяем доступность
ping -c 3 8.8.8.8
dig google.com +short
curl -I https://google.com --connect-timeout 5

Типичные проблемы и решения

# Проблема 1: "Invalid YAML"
# Решение: проверьте отступы! В YAML важен каждый пробел
sudo netplan --debug generate

# Проблема 2: Интерфейс не поднимается
# Решение: смотрим логи
sudo journalctl -u systemd-networkd -f
# или для NetworkManager
sudo journalctl -u NetworkManager -f

# Проблема 3: DNS не работает
# Решение: проверяем resolv.conf
ls -la /etc/resolv.conf
cat /etc/resolv.conf
# Если это симлинк на systemd-resolve - это нормально

# Проблема 4: Слишком много конфигов
# Решение: оставляем один, остальные переименовываем
cd /etc/netplan
sudo mv 90-cloud-init.yaml 90-cloud-init.yaml.backup

# Проблема 5: Всё сломалось!
# Решение: экстренный откат
sudo netplan revert
# Или вручную:
sudo ip addr flush dev enp3s0
sudo dhclient enp3s0

🚨 Аварийное восстановление

Если потеряли доступ к серверу:

  1. Через консоль в VMware/iDRAC/IPMI
  2. В облаке: используйте serial console или rescue mode
  3. Создайте скрипт для автоматического отката:
#!/bin/bash
echo "network: {version: 2, ethernets: {enp3s0: {dhcp4: true}}}" > /etc/netplan/01-rescue.yaml
netplan apply

Автоматизация через Cloud-Init (для облаков)

В облачных инстансах настройка сети часто делается через cloud-init:

# Для AWS/Azure/GCP создайте user-data:
#cloud-config
network:
  version: 2
  ethernets:
    eth0:
      match:
        name: ens5  # AWS обычно использует ens5
      addresses:
        - 10.0.0.100/24
      gateway4: 10.0.0.1
      nameservers:
        addresses: [8.8.8.8]
      dhcp4: false

# Или через netplan прямо в cloud-init
bootcmd:
  - echo "network: {version: 2, ethernets: {ens5: {dhcp4: false, addresses: [10.0.0.100/24]}}}" > /etc/netplan/50-cloud-init.yaml

Шпаргалка: быстрые команды

# Создать минимальный конфиг одной командой
echo "network:
  version: 2
  ethernets:
    $(ip -br a | grep UP | awk '{print $1}' | head -1):
      addresses: [192.168.1.100/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
      dhcp4: false" | sudo tee /etc/netplan/01-static.yaml

# Показать текущую конфигурацию в YAML-формате
netplan get

# Экспорт всей конфигурации сети
netplan get all > backup-config.yaml

# Временное изменение IP (без сохранения)
sudo ip addr add 192.168.1.100/24 dev enp3s0
sudo ip route add default via 192.168.1.1

Итог: Netplan — это будущее настройки сети в Linux. Да, нужно привыкнуть к YAML, но зато конфигурации становятся более читаемыми, переносимыми и предсказуемыми. Главное правило: всегда тестируйте через netplan try при удалённой работе, и у вас никогда не будет ситуации «сервер пропал из сети».

📚 Дальнейшие шаги

После настройки статического IP:

  • Firewall: Настройте UFW или nftables: sudo ufw allow from 192.168.1.0/24
  • Мониторинг: Установите netdata или prometheus node_exporter
  • Резервирование: Настройте bonding для отказоустойчивости
  • IPv6: Если провайдер даёт IPv6, добавьте и его конфигурацию

Стабильных сетей и предсказуемых IP-адресов!

Оставьте комментарий