Искать в Базе знаний

Адреса и сети. DHCP

Как боксу назначается адрес

Когда бокс создаётся, ему нужно выдать сетевые параметры: IP-адрес, маску сети, шлюз, адреса DNS-серверов. Есть два способа это сделать:
  • Автоматический, по DHCP — адрес выдает DHCP-сервер, сама ОС адрес не хранит и каждый раз запрашивает его заново.
  • Статический, вручную — адрес один раз прописывается в конфигурации интерфейса и не меняется, пока его явно не изменят.
На практике саму запись в конфигурационные файлы ОС выполняет автоматика в формате DHCP. От пользователя требуется другое — разобраться, какой тип адресации ему нужен и включить/проверить интерфейс. Об этом и пойдет речь ниже.

DHCP

DHCP (Dynamic Host Configuration Protocol) — протокол, по которому устройство при загрузке автоматически получает от сервера все нужные для работы в сети параметры: IP-адрес, маску подсети, адрес шлюза, адреса DNS-серверов.
Как это происходит:
  • Каждому боксу при создании выделяется свой IPv4-адрес и подсеть IPv6 (/64) — они закреплены за боксом и не меняются, пока бокс не будет удалён.
  • DHCP здесь — не источник случайного адреса из общего пула, а просто механизм доставки: сервер каждый раз подтверждает боксу именно его, уже закреплённый за ним адрес.
  • Настройка на стороне бокса минимальна — ничего указывать не нужно, все параметры (адрес, маска, шлюз, DNS) приходят от DHCP-сервера автоматически. DHCP используется для боксов без явно заказанного статического адреса (то есть для основного адреса, выданного при создании) и для приватных сетей.

Статический адрес

Статический адрес нужен, когда к серверу обращаются по конкретному IP снаружи: веб-сервер, почтовый сервер и т.п. — адрес не должен «плавать».
Основной IPv4-адрес и подсеть IPv6 (/64) бокс получает автоматически при создании — их не нужно заказывать отдельно.
Дополнительные IPv4-адреса можно заказать в карточке бокса, в разделе «Сеть». Дополнительную подсеть IPv6 заказать нельзя — но и не нужно: адресов в выданной /64 более чем достаточно (2⁶⁴ адресов), дополнительные адреса можно просто взять из нее самостоятельно.
При создании бокса на нашей площадке сетевые интерфейсы уже настроены по DHCP и если вы не планируете менять или добавлять IP-адреса, их дополнительная настройка не нужна.

Дополнительный IPv4-адрес

Если вам нужен один или несколько дополнительных IPv4-адресов, то вы можете заказать их в карточке бокса — раздел «Сеть». После вам нужно будет:
  • Дождаться сообщения в тикете или письма от нашей Поддержки со всей необходимой информацией
  • Добавить дополнительный IP-адрес в сетевые интерфейсы бокса
Сделать это можно так:

Ubuntu / RHEL / Debian / Fedora / CentOS / AlmaLinux

Добавляем адрес в сетевой интерфейс:
ip addr add <дополнительный_адрес>/32 dev ens3
Проверяем:
ip a
Если в выводе вы видите:
inet <дополнительный_адрес>/32 scope global ens3
то все прошло успешно.
Дополнительно можно проверить связность с внешними сетями:
ping -I <дополнительный_адрес> 1.1.1.1 # или любой другой внешний адрес
Стоит учесть, что утилита ipне сохраняет дополнительный адрес после перезагрузки бокса.
Чтобы адрес сохранился и после перезагруки, нужно прописать его в сетевом интерфейсе:
vim /etc/netplan/50-cloud-init.yaml
network:
  version: 2
  ethernets:
    ens3:
      match:
        macaddress: "11:11:11:11:11:11"
      dhcp4: true
      dhcp6: true
      set-name: "ens3"
      # добавьте поле addresses c дополнительным адресом 
      addresses:
        - <дополнительный_адрес>/32
И после применяем изменения:
netplan apply

FreeBSD

Добавление дополнительного IP-адреса на FreeBSD несколько отличается от других unix-like дистрибутивов:
ifconfig vtnet0 inet <дополнительный_адрес>/32 alias
Для постоянной работы доп.адреса в FreeBSD нужно также добавить его в сетевой интерфейс.
Включаем DHCP и добавляем дополнительный адрес в сетевой интерфейс:
service dhcpcd start
echo 'ifconfig_vtnet0_alias0="inet <дополнительный_адрес>/32"' >> /etc/rc.conf
Применяем изменения:
service netif restart

Kali Linux

Устанавливаем NetworkManager:
sudo apt update
sudo apt install network-manager -y
Добавляем дополнительный адрес в интерфейс и активируем:
sudo nmcli connection modify "Wired connection 1" +ipv4.addresses <дополнительный_адрес>/32
nmcli connection up "Wired connection 1"
NetworkManager сохраняет адрес и после перезагрузки, поэтому дополнительная настройка не требуется.
На менее популярных дистрибутивах, таких как Arch Linux, Gentoo, Alpine Linux и др. добавление дополнительного адреса может отличаться.

Приватная сеть

Приватная сеть объединяет боксы в одной локации по приватным IP-адресам.
Настройка приватной сети:
  • Включите нужные боксы в приватную сеть, раздел «Сеть» ➝ «Приватная сеть»
  • После этого у бокса появляется дополнительный сетевой интерфейс — он виден в выводе команды ip a, но по умолчанию выключен.
  • Добавьте адреса из приватного диапазона в сетевые интерфейсы всех боксов в приватной сети. Адреса не должны совпадать
Приватные диапазоны:
  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16
Пример /etc/netplan/50-cloud-init.yaml:
network:
  version: 2
  ethernets:
    ens3:
      match:
        macaddress: "52:54:00:04:10:20"
      dhcp4: true
      dhcp6: true
      set-name: "ens3"
# Добавьте секцию ниже
    ens8:
      dhcp4: no
      addresses:
        - 10.47.183.92/24
После применяем изменения:
netplan apply
И проверяем:
ssh root@<приватный_адрес>
ping <приватный_адрес>
Если боксы в приватной сети пингуются между собой — вы все сделали правильно.

Диагностика типовых проблем

Если сети «нет вообще» или есть проблемы с доступом, полезно проверять по шагам — так сразу видно, на каком уровне обрыв:
  • Есть ли адрес на интерфейсе — ip a. Если адреса нет или интерфейс в состоянии DOWN — дальше проверять бессмысленно, проблема на уровне интерфейса.
  • Есть ли маршрут по умолчанию — ip route. Если строки default via ... нет — трафик наружу не пойдет, даже если адрес назначен верно.
  • Доступен ли шлюз — ping <адрес шлюза>. Если не пингуется — проблема на уровне сети/провайдера, а не самой ОС.
  • Есть ли выход в интернет по IP — ping 8.8.8.8. Если шлюз пингуется, а это — нет, проблема где-то за пределами бокса.
  • Работает ли DNS — ping ya.ru или nslookup ya.ru. Если по IP всё пингуется, а по имени — нет, дело в DNS-серверах (не прописаны, недоступны).
Так по цепочке локализуется, на каком именно уровне (интерфейс → маршрут → провайдер → DNS) находится проблема.

Потери пакетов и задержки

Если пинг проходит, но нестабильно (потери, скачки задержки), для локализации проблемы (у себя, у нас или дальше по маршруту) удобнее не ping, а:
traceroute <адрес>
Покажет, через какие узлы идёт трафик и на каком именно узле начинаются задержки или потери.
mtr <адрес>
По сути тот же traceroute, но в реальном времени и с накоплением статистики по каждому узлу (% потерь, средняя/максимальная задержка) — удобнее для диагностики нестабильной связи, чем разовый traceroute.