Як зареєструвати велику кількість 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.

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