Як зареєструвати велику кількість IP-адрес в Debian/Ubuntu | INTROSERV
EUR
european

EUR

usa

USD

Ukraine Ua
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