EUR
european

EUR

usa

USD

Russian Ru
Ex. VAT Ex. VAT 0%

Как зарегистрировать большое количество IP-адресов в Debian/Ubuntu

Одному серверу часто нужно больше одного IP-адреса. В этом руководстве описаны два способа назначить несколько адресов IPv4 на один сетевой интерфейс в Debian и Ubuntu:

  • автоматически, с помощью shell-скрипта и службы systemd, рекомендуется для больших диапазонов;
  • напрямую в netplan, рекомендуется, когда адреса должны переживать не только перезагрузку, но и переконфигурацию сети.

Оба способа делают конфигурацию постоянной между перезагрузками. Прочитайте примечание в конце каждого способа, чтобы выбрать подходящий вашему случаю.

Когда нужно несколько IP-адресов

Ряд распространённых задач на одном сервере требует более одного публичного адреса:

  • Почтовые серверы, которые используют отдельные адреса и записи PTR, чтобы разделить репутацию отправки разных доменов.
  • Веб-серверы, которым нужны выделенные адреса для устаревших приложений, изоляции клиентов или определённых правил межсетевого экрана.
  • Прокси- и VPN-инфраструктура, где каждый экземпляр прокси или каждая VPN-точка привязаны к собственному публичному адресу.
  • Контейнеры или виртуальные машины, использующие маршрутизируемые IP-адреса.

Тарифы VPS от INTROSERV по умолчанию включают два адреса IPv4 и подсеть IPv6 /112. Дополнительные адреса IPv4 доступны во многих локациях. Проверьте доступность для вашего региона в конфигураторе заказа.

Перед началом

Вам потребуются доступ root и имя интерфейса, который будет нести дополнительные адреса. Современные версии Debian и Ubuntu больше не используют старое имя eth0, поэтому не считайте его данностью. Выведите интерфейсы вместе с их текущими адресами и определите тот, на котором уже есть ваш основной адрес:

ip -br addr show

В выводе показаны записи вроде ens3, enp1s0 или eth0 рядом с уже настроенными на них адресами. Интерфейс, на котором уже есть ваш основной IP, и нужно использовать в шагах ниже. В примерах используется ens3.

Предупреждение: Эти шаги меняют сетевую конфигурацию на сервере, к которому вы, скорее всего, подключаетесь по SSH. Ошибка может отрезать вам собственный доступ. По возможности держите запасной путь входа, например консоль провайдера или IP-KVM, и предпочитайте показанные ниже безопасные варианты применения.

Создание скрипта для адресов

Короткий скрипт добавляет диапазон адресов за один проход. Создайте его в /usr/local/sbin:

nano /usr/local/sbin/extra-ips.sh

Вставьте следующий скрипт. Замените имя интерфейса, префикс и диапазон на выделенный вам блок. Адреса ниже используют документационный диапазон из RFC 5737 и являются заполнителями:

#!/bin/bash set -euo pipefail # Interface that will carry the additional addresses. IFACE="ens3" # Common prefix and the first and last value of the host octet. # Replace these with the block assigned to you. PREFIX="203.0.113" FIRST=10 LAST=60 # Stop early with a clear message if the interface name is wrong. if ! ip link show "$IFACE" >/dev/null 2>&1; then echo "Interface $IFACE not found. Check the name with: ip -br addr show" >&2 exit 1 fi for HOST in $(seq "$FIRST" "$LAST"); do ip addr replace "${PREFIX}.${HOST}/32" dev "$IFACE" done

Инфо: Адреса добавляются с префиксом /32 намеренно. У основного интерфейса уже есть маршрут для его подсети, поэтому каждому дополнительному адресу нужен лишь локальный хостовый маршрут. Префикс /32 не даёт ядру добавлять дублирующий маршрут подсети и сохраняет таблицу маршрутизации чистой. Скрипт использует ip addr replace вместо ip addr add, чтобы его можно было безопасно запускать повторно, не получая ошибку для уже существующих адресов.

Сделайте скрипт исполняемым. Обратите внимание на полный путь, которого как раз не хватало в предыдущей версии руководства:

chmod +x /usr/local/sbin/extra-ips.sh

Сохранение адресов с помощью службы systemd

Запуск скрипта вручную добавляет адреса только до следующей перезагрузки. Чтобы применять их автоматически при загрузке, создайте службу systemd, которая запускает скрипт во время загрузки. Этот способ работает одинаково независимо от того, использует ли система netplan, systemd-networkd или старый стек ifupdown.

Создайте файл юнита:

nano /etc/systemd/system/extra-ips.service

Добавьте следующее:

[Unit] Description=Assign additional IP addresses After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/sbin/extra-ips.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target

Перезагрузите systemd и включите службу, чтобы она запустилась сейчас и при каждой загрузке:

systemctl daemon-reload systemctl enable --now extra-ips.service

Убедитесь, что служба запустилась корректно:

systemctl status --no-pager extra-ips.service

Предупреждение: Адреса, добавленные этим скриптом, не являются частью конфигурации netplan или systemd-networkd. Последующий netplan apply, networkctl reconfigure или любой перезапуск сети может их удалить. Они вернутся при следующей перезагрузке или сразу, если выполнить systemctl restart extra-ips.service. Если адреса должны сохраняться и при переконфигурации сети, используйте вместо этого способ с netplan, описанный ниже.

Альтернатива: определение адресов в netplan

В Ubuntu, где netplan используется по умолчанию, адреса можно объявить прямо в netplan. Тогда сетевой стек считает их управляемыми адресами, и они переживают переконфигурацию. Это подходит для небольшого фиксированного списка. Для большого диапазона служба systemd выше масштабируется лучше, поскольку netplan требует по одной строке на адрес.

Когда один и тот же интерфейс описан в нескольких файлах netplan, их настройки могут переопределять друг друга или объединяться неожиданным образом, что способно отбросить ваш основной адрес и отрезать доступ. Редактировать существующий файл конфигурации обычно безопаснее, чем создавать ещё один файл для того же интерфейса. Откройте файл, который уже настраивает ваш интерфейс, обычно это /etc/netplan/50-cloud-init.yaml или /etc/netplan/00-installer-config.yaml:

ls /etc/netplan/ nano /etc/netplan/50-cloud-init.yaml

Сохраните все существующие настройки интерфейса, такие как dhcp4, основной адрес, шлюз и серверы имён. Добавьте дополнительные адреса в список addresses на том же интерфейсе. В примере ниже для основного адреса сохранён DHCP и добавлены три дополнительных адреса:

network: version: 2 ethernets: ens3: dhcp4: true addresses: - 203.0.113.10/32 - 203.0.113.11/32 - 203.0.113.12/32

Современные версии netplan предупреждают, если файл доступен на чтение другим пользователям. Ограничьте права, чтобы убрать это предупреждение:

chmod 600 /etc/netplan/50-cloud-init.yaml

Проверьте изменение командой netplan try. Она применяет конфигурацию и автоматически откатывает её через 120 секунд, если вы не подтвердите, что защищает вас от потери удалённого доступа:

netplan try

Если соединение сохраняется и всё выглядит правильно, подтвердите по запросу, затем примените конфигурацию окончательно:

netplan apply

Проверка результата

Выведите адреса, привязанные к интерфейсу в данный момент, и убедитесь, что новые присутствуют:

ip -br addr show ens3

Дополнительные адреса теперь должны появиться в выводе и будут автоматически восстанавливаться после каждой перезагрузки.

Удаление адресов

Чтобы удалить один адрес, снимите его с интерфейса:

ip addr del 203.0.113.10/32 dev ens3

Если вы использовали скрипт и службу, остановите назначение всего диапазона при загрузке, отключив и удалив службу:

systemctl disable --now extra-ips.service rm /etc/systemd/system/extra-ips.service systemctl daemon-reload

Если вы использовали netplan, удалите дополнительные строки из списка addresses в файле netplan, затем выполните netplan apply.

Устранение неполадок

Если служба не запускается, проверьте её состояние и журналы:

systemctl status --no-pager extra-ips.service journalctl -u extra-ips.service

Убедитесь в следующем:

  • имя интерфейса в скрипте совпадает с реальным именем из ip -br addr show;
  • адреса принадлежат выделенному вам блоку;
  • скрипт является исполняемым.

Если вы по ошибке использовали префикс /24 вместо /32, таблица маршрутизации покажет симптом в виде нескольких дублирующих маршрутов подсети. Проверьте её командой:

ip route

Это руководство посвящено IPv4. Как и в случае с IPv4, дополнительные адреса IPv6 обычно добавляются как хостовые адреса с префиксом /128, той же командой ip addr replace, например ip addr replace 2001:db8::10/128 dev ens3.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA