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.

Warning

Эти шаги изменяют сетевую конфигурацию на сервере, к которому вы, скорее всего, подключаетесь по 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

Info

Адреса намеренно используют префикс /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

Warning

Адреса, добавленные этим скриптом, не являются частью конфигурации 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