Если вы работали с 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, порт 0wlp2s0— Wireless PCIe, слот 2, порт 0ens18— 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
🚨 Аварийное восстановление
Если потеряли доступ к серверу:
- Через консоль в VMware/iDRAC/IPMI
- В облаке: используйте serial console или rescue mode
- Создайте скрипт для автоматического отката:
#!/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-адресов!