Полное руководство по выделенным серверам

Настройка сети с помощью 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 — это также ускорит загрузку, поскольку убирает ожидание ответа.