Настройка сети с помощью Netplan
В этой статье разбираются основные подходы к настройке Netplan — инструмента для настройки сети, который применяется в Ubuntu и многих её производных дистрибутивах. Мы рассмотрим базовую рекомендуемую конфигурацию, добавление дополнительных IP-адресов и их использование в виртуализированном окружении.
Есть несколько вариантов на выбор:
- Назначить несколько IP-адресов напрямую на ХОСТ без использования виртуализации
- Использовать мостовое соединение (уровень 2), чтобы выдавать IP-адреса виртуальным машинам
- Использовать маршрутизацию (уровень 3), чтобы выдавать IP-адреса виртуальным машинам
- Объединить маршрутизацию и мостовое соединение в гибридной схеме с двумя и более сетевыми мостами
Условные обозначения, используемые в статье
2001:db8:1234:: # Заглушка для публичной сети IPv6 сервера
10.0.0.168 # Заглушка для основного IPv4-адреса
10.0.10.135 # Заглушка для дополнительного одиночного IPv4-адреса
10.10.10.128/29 # Заглушка для дополнительной подсети IPv4
AA:BB:CC:DD:EE:FF # Заглушка для MAC-адреса физического интерфейса и основного IPv4
00:50:56:00:11:22 # Заглушка для виртуального MAC-адреса дополнительного одиночного IP
Конфигурация по умолчанию после чистой установки Ubuntu 24
nano /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
enp7s0:
addresses:
- 10.0.0.1 # Main IPv4 for the HOST
- 2001:db8:1234::1 # Main IPv6/64 subnet for the HOST
routes:
- on-link: true
to: 0.0.0.0/0
via: 10.0.0.129 # Gateway IPv4 of the main IPv4 address
- to: default
via: fe80::1 # Default IPv6 gateway
nameservers:
addresses:
- 185.12.64.2 # Nameservers from installimage process
- 2a01:4ff:ff00::add:1 # Nameservers from installimage process
- 185.12.64.1 # Nameservers from installimage process
- 2a01:4ff:ff00::add:2 # Nameservers from installimage process
Настройка дополнительных одиночных IPv4-адресов и подсетей IPv4 (без виртуализации)
Что должно быть готово заранее:
- На сервере один физический внешний интерфейс —
enp7s0с MAC-адресомAA:BB:CC:DD:EE:FF - На сервере уже настроен основной IPv4-адрес (на
enp7s0) - На сервере есть один дополнительный одиночный IPv4-адрес (его виртуальный MAC отключён через панель управления хостинг-провайдера)
- На сервере есть одна дополнительная подсеть IPv4
- На сервер выделен блок IPv6 /64 для ХОСТА
Чего мы хотим добиться:
Сервер должен быть доступен по:
- Основному IPv4-адресу
- Дополнительному одиночному IPv4-адресу
- Всем используемым адресам подсети IPv4 (включая сетевой адрес)
- IPv6::2/64
- IPv6::3/64
Как это реализуется:
Все IP-адреса и маршруты настраиваются непосредственно на основном интерфейсе.
Настройка Netplan на ХОСТЕ
nano /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
enp7s0:
addresses:
- 10.0.0.168/32 # Main IPv4 for the HOST
- 10.0.10.135/32 # The single IPv4 Address for the GUEST
- 10.10.10.128/32 # Net-IP of the IPv4 Subnet (Net IP can be used in this case)
- 10.10.10.129/32 # IP of the IPv4 Subnet
- 10.10.10.130/32 # IP of the IPv4 Subnet
- 10.10.10.131/32 # IP of the IPv4 Subnet
- 10.10.10.132/32 # IP of the IPv4 Subnet
- 10.10.10.133/32 # IP of the IPv4 Subnet
- 10.10.10.134/32 # Last usable IP of the IPv4 Subnet (.135 is reserved for broadcast)
- 2001:db8:1234::2/128 # Main IPv6/64 subnet for the HOST
- 2001:db8:1234::3/128 # Main IPv6/64 subnet for the HOST
routes:
- on-link: true
to: 0.0.0.0/0
via: 10.0.0.129 # Gateway IPv4 of the main IPv4 address
- to: default
via: fe80::1 # Default IPv6 gateway
nameservers:
addresses:
- 185.12.64.2 # Nameservers from installimage process
- 2a01:4ff:ff00::add:1 # Nameservers from installimage process
- 185.12.64.1 # Nameservers from installimage process
- 2a01:4ff:ff00::add:2 # Nameservers from installimage process
Почему это работает:
Ядро не маршрутизирует трафик для локальных дополнительных IP-адресов, даже если для них прописаны маршруты — трафик на любой дополнительный IP никогда не идёт через основной IPv4, поэтому вы не увидите для него лишнего хопа. При этом такая схема не приводит к срабатыванию защиты от злоупотреблений (abuse). Как и для любого IP, используемый MAC-адрес остаётся разрешённым MAC-адресом основного IPv4.
Сеть провайдера корректно доставит трафик на ваши дополнительные IP-адреса, а сервер корректно отправит обратный трафик.
Заметка про шифрование диска (Full Disk Encryption)
Если ваши диски зашифрованы и разблокируются через dropbear, вы можете по-прежнему использовать DHCP внутри initramfs. Этого можно избежать, статически задав сетевые параметры через параметр ядра IP. Указать его можно либо через загрузчик, либо через конфигурацию initramfs. Рекомендуем прописать этот параметр в /etc/initramfs-tools/initramfs.conf:
[...]
#
# DEVICE: ...
#
# Specify a specific network interface, like eth0
# Overridden by optional ip= or BOOTIF= bootarg
#
#DEVICE=
IP=10.0.0.168::10.0.0.129:255.255.255.255::enp7s0:none:185.12.64.1:185.12.64.2:213.239.239.164
[...]
Полное описание синтаксиса параметра IP можно найти здесь: https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt
Чтобы сгенерированная конфигурация не «утекла» в уже загруженную систему, рекомендуется очищать её после выхода dropbear. Добавьте строку в конфигурацию dropbear-initramfs:
echo -e "rm /run/net-*.conf\nrm /run/netplan/*.yaml" >> /etc/dropbear-initramfs/config
(этот подход описан в Launchpad Bug #1813394)
После этого нужно пересобрать initramfs: update-initramfs -u — это также ускорит загрузку, поскольку убирает ожидание ответа.