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

Настройка сети в Debian / Ubuntu

Содержание

Основной IP-адрес

IPv4

Основной IP выделенного сервера обычно находится в подсети /26 или /27. Чтобы предотвратить случайное использование IP-адреса другого сервера, инфраструктура блокирует все Ethernet-кадры, не адресованные шлюзу. Для связи с сервером в той же подсети требуется настройка сети «точка-точка» (point-to-point). Предустановленные образы системы уже включают эту конфигурацию, обеспечивая маршрутизацию всего трафика через шлюз.

Это достигается путём создания соединения «точка-точка» между основным IP и шлюзом. Основному IP назначается маска сети 255.255.255.255 (/32), из-за чего сервер считает себя изолированным и не может отправлять пакеты напрямую. Чтобы достичь других серверов и Интернета, наряду с маршрутом по умолчанию необходимо добавить явный хост-маршрут (host route) к шлюзу.

/etc/network/interfaces

Когда сеть управляется через /etc/network/interfaces, просто добавьте директиву pointopoint <IP шлюза> в блок конфигурации интерфейса.

## /etc/network/interfaces — dedicated server example
# Loopback-Adapter
auto lo
iface lo inet loopback
#
# LAN interface
auto eth0
iface eth0 inet static
  # Main IP address of the server
  address 192.168.0.250
  # Netmask 255.255.255.255 (/32) independent from the
  # real subnet size (e.g. /27)
  netmask 255.255.255.255
  # explicit host route to the gateway
  gateway 192.168.0.1
  pointopoint 192.168.0.1

netplan

С netplan тот же результат достигается с помощью ключевого слова on-link:

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses:
      - 192.168.0.250/32
      routes:
      - to: 0.0.0.0/0
        via: 192.168.0.1
        on-link: true

IPv6

Наряду с основным адресом IPv4 каждый сервер получает подсеть IPv6 /64. Эта подсеть маршрутизируется на link-local IPv6-адрес, производный от MAC-адреса сервера. В отличие от IPv4, для IPv6 настройка «точка-точка» не требуется.

Шлюз всегда: fe80::1

## /etc/network/interfaces — dedicated server example
# Loopback-Adapter
auto lo
iface lo inet loopback
#
# IPv6 LAN
auto eth0
iface eth0 inet6 static
  # One IPv6 address out of the /64 subnet
  address 2001:db8:1234::1
  netmask 64
  gateway fe80::1

IPv4 + IPv6

Ожидается, что IPv4 и IPv6 в обозримом будущем будут работать параллельно. Чтобы включить двойной стек (dual-stack), объедините оба блока конфигурации и удалите все дублирующиеся записи.

/etc/network/interfaces

## /etc/network/interfaces — dedicated server example
# Loopback-Adapter
auto lo
iface lo inet loopback
#
# LAN interface
auto eth0
iface eth0 inet static
  # Main IP address of the server
  address 192.168.0.250
  # Netmask 255.255.255.255 (/32) independent from the
  # real subnet size (e.g. /27)
  netmask 255.255.255.255
  # explicit host route to the gateway
  gateway 192.168.0.1
  pointopoint 192.168.0.1
#
iface eth0 inet6 static
  # one IPv6 address from assigned subnet
  address 2001:db8:1234::1
  netmask 64
  gateway fe80::1

netplan

Конфигурация netplan для Ubuntu 22.04 и новее или netplan 1.03+:

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses:
      - 192.168.0.250/32
      - 2001:db8:1234::1/64
      routes:
      - to: default
        via: 192.168.0.1
        on-link: true
      - to: default
        via: fe80::1

Конфигурация для Ubuntu 21.04 и более ранних версий:

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses:
      - 192.168.0.250/32
      - 2001:db8:1234::1/64
      routes:
      - to: 0.0.0.0/0
        via: 192.168.0.1
        on-link: true
      gateway6: fe80::1

Дополнительные IP-адреса (Хост)

Для выделенных серверов можно заказать до 6 дополнительных одиночных IP-адресов. Сетевая настройка в обоих сценариях схожа.

Чтобы использовать дополнительные адреса непосредственно на сервере (без виртуализации), требуется пакет iproute2 и утилита ip. Настройка через алиас-интерфейсы (например, eth0:1, eth0:2 и т. д.) устарела и больше не должна использоваться. Чтобы добавить адрес, выполните:

ip addr add 10.4.2.1/32 dev eth0

Команда ip addr отображает текущие активные IP-адреса. Поскольку сервер занимает всю подсеть, рекомендуется добавлять адреса с префиксом /32 (маска сети 255.255.255.255).

/etc/network/interfaces

В файле /etc/network/interfaces вставьте под соответствующим интерфейсом (например, eth0) следующие две строки:

up ip addr add 10.4.2.1/32 dev eth0
down ip addr del 10.4.2.1/32 dev eth0

Директивы up и down каждая принимают одну строку shell-кода и могут повторяться для нескольких адресов. Недостаток в том, что имя интерфейса и адрес нужно указывать дважды. При большом количестве IP файл конфигурации становится громоздким и подверженным ошибкам. Любое изменение данных требует обновления всех связанных записей.

netplan

С netplan просто добавьте дополнительные IP-адреса как записи /32 в раздел addresses.

Дополнительные IP-адреса (Виртуализация)

В виртуализированной среде дополнительные IP-адреса назначаются гостевым системам. Чтобы сделать их доступными из Интернета, на хосте необходимо настроить пересылку пакетов. Для одиночных дополнительных IP существует два подхода: маршрутизируемый (routed) и мостовой (bridged).

Маршрутизируемый (brouter)

В этой конфигурации пакеты маршрутизируются. Необходимо создать дополнительный мост с почти такой же конфигурацией (без шлюза), как у eth0.

Хост (Host):

auto eth0
iface eth0 inet static
   address (Main IP)
   netmask 255.255.255.255
   pointopoint (Gateway IP)
   gateway (Gateway IP)
#
iface eth0 inet6 static
  address 2001:db8:1234::1
  netmask 128
  gateway fe80::1
#
auto virbr1
iface virbr1 inet static
   address (Main IP)
   netmask 255.255.255.255
   bridge_ports none
   bridge_stp off
   bridge_fd 0
   pre-up brctl addbr virbr1
   up ip route add (Additional IP)/32 dev virbr1
   down ip route del (Additional IP)/32 dev virbr1
 #
 iface virbr1 inet6 static
   address 2a01:4f8:XX:YY::1
   netmask 64

Для каждого дополнительного IP-адреса необходимо создать соответствующий хост-маршрут. Для IPv4 конфигурация eth0 остаётся прежней. Для IPv6 префикс нужно уменьшить с /64 до /128.

Гость (Guest):

auto eth0
iface eth0 inet static
   address (Additional IP)
   netmask 255.255.255.255
   pointopoint (Main IP)
   gateway (Main IP)
#
iface eth0 inet6 static
  address 2a01:4f8:XX:YY::4
  netmask 64
  gateway 2a01:4f8:XX:YY::1

Мостовой (Bridged)

При мостовой настройке пакеты пересылаются напрямую. Гостевая система выглядит как самостоятельная машина в сети. Поскольку MAC-адреса гостя становятся видимыми извне, для каждого одиночного IP необходимо запросить виртуальный MAC-адрес. Адрес можно сгенерировать автоматически в панели управления, перейдя к серверу и щёлкнув по значку рядом с дополнительным IP. Затем назначьте виртуальный MAC-адрес сетевому адаптеру гостя. Мост получает ту же конфигурацию, что и eth0.

# remove or disable configuration for eth0
#auto eth0
#iface eth0 inet static
#
auto  br0
iface br0 inet static
 address (Main IP)
 netmask (like eth0, e.g: 255.255.255.254)
 gateway (same as that for the main IP)
 bridge_hw eth0 (required as of Debian 11 'bulleye')
 bridge_ports eth0
 bridge_stp off
 bridge_fd 1
 bridge_hello 2
 bridge_maxage 12

Конфигурация eth0 удаляется полностью.

Примечания о полном шифровании диска

Этот раздел применим к системам, которые опираются на initramfs-tools и используют dropbear-initramfs для удалённой разблокировки полного шифрования диска.

Если DHCP всё ещё активен на этапе initramfs, это можно предотвратить, указав статическую сетевую конфигурацию через параметр ядра ip=. Этот параметр можно задать непосредственно в загрузчике или сохранить постоянно в конфигурации initramfs.

Рекомендуемый подход — задать его в файле /etc/initramfs-tools/initramfs.conf:

[...]
#
# DEVICE: ...
#
# Specify static network configuration for initramfs
# This maps to the kernel ip= parameter
#

#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 #1813394).

После этого необходимо пересобрать initramfs:

update-initramfs -u

Это также ускоряет время загрузки, устраняя ожидание ответов DHCP.