Настройка сети в 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.