systemd-networkd статические аренды в DHCPServer для ve

Вопрос или проблема

Я хотел бы назначить некоторые предопределенные IP-адреса (или адреса из предопределенного пула) для виртуальных Ethernet-сетей, созданных для виртуальных машин, работающих под управлением systemd-nspawn.

Может кто-то подсказать, как это можно реализовать?

Что я пробовал до сих пор:

  1. конфигурация по умолчанию (на самом деле /lib/systemd/network/80-container-ve.network)

Каждая виртуальная машина получает адрес в случайно выбранной сети /28 (благодаря команде Address=0.0.0.0/28). В общем, это работает, и сервисы внутри виртуальной машины видны внешней сети (не только узловому хосту), при условии, что вручную добавлена пользовательская строка маршрута для каждого хоста, обращающегося к этим сервисам. Однако эти адреса нельзя предсказать, и каждой созданной виртуальной машине необходима выделенная строка маршрута в маршрутизаторе или хостах, обращающихся к сервисам виртуальной машины. Довольно громоздкое и утомительное решение.

  1. Фиксированный адрес для каждого созданного ve-*.

Маршрутная таблица узлового хоста становится недействительной из-за дополнительных записей для каждого созданного VE-интерфейса. Если я вручную удаляю эти записи из маршрутной таблицы хоста, то сеть на узловом хосте восстанавливается. Снова решение выглядит неисправным.

  1. Добавление статических аренд через [DHCPServerStaticLease]:
[Match]
Kind=veth
Name=ve-*

[Network]
# По умолчанию использовать префикс /28, давая до 13 адресов на контейнер.
Address=0.0.0.0/28        
LinkLocalAddressing=yes
DHCPServer=yes
IPMasquerade=both
LLDP=yes
EmitLLDP=customer-bridge
IPv6AcceptRA=no
IPv6SendRA=yes

[DHCPServerStaticLease]
# MAC-адрес внутреннего интерфейса ВМ (host0@if*)
MACAddress=be:5e:56:66:75:16
Address=192.168.223.226

Ну что ж, похоже, что эти аренды игнорируются.

  1. Изменение Address=0.0.0.0/28 на какой-то фиксированный диапазон

например, Address=192.168.223.224/28

в логах получено следующее:

Nov 05 16:52:27 gorgy systemd-networkd[257024]: ve-perft3: Конфигурирование с /etc/systemd/network/80-container-ve.network.
Nov 05 16:52:27 gorgy systemd-networkd[257024]: ve-perft3: Ссылка УВЕРХ
Nov 05 16:52:27 gorgy systemd-networkd[257024]: ve-perft3: Получен носитель
Nov 05 16:52:27 gorgy systemd-networkd[257024]: ve-perft3: Не удалось настроить пул адресов для экземпляра DHCPv4 сервера: Числовой результат вне диапазона
Nov 05 16:52:27 gorgy systemd-networkd[257024]: ve-perft3: Не удалось настроить DHCP сервер: Числовой результат вне диапазона
Nov 05 16:52:27 gorgy systemd-networkd[257024]: ve-perft3: Не удалось
Nov 05 16:52:27 gorgy systemd-networkd[257024]: ve-perft3: Пытаюсь перепроектировать интерфейс.
Nov 05 16:52:29 gorgy systemd-networkd[257024]: ve-perft3: Получен IPv6LL

Все равно без успеха.

Таким образом, вопрос в том, как сделать это правильно.

Ответ или решение

Чтобы настроить статические DHCP-аренды для виртуальных Ethernet-устройств, созданных с помощью systemd-nspawn, потребуется правильная конфигурация системы. В данной статье мы рассмотрим, как это осуществить на основе вашего запроса и существующих проблем.

1. Основная конфигурация

Сначала необходимо убедиться, что вы используете файл конфигурации, который управляет виртуальными сетевыми интерфейсами. Обычно такой файл может находиться в /etc/systemd/network/ или в /lib/systemd/network/. В вашем случае, файл конфигурации предположительно называется 80-container-ve.network.

Пример конфигурации может выглядеть следующим образом:

[Match]
Kind=veth
Name=ve-*

[Network]
Address=192.168.223.224/28
LinkLocalAddressing=yes
DHCPServer=yes
IPMasquerade=both
LLDP=yes
EmitLLDP=customer-bridge
IPv6AcceptRA=no
IPv6SendRA=yes

[DHCPServerStaticLease]
MACAddress=be:5e:56:66:75:16
Address=192.168.223.226

2. Использование статических арендуемых адресов

Включение статического распределения IP-адресов через секцию [DHCPServerStaticLease] позволяет назначить заранее определённые IP-адреса на основе MAC-адресов. Если арендованный адрес игнорируется, убедитесь в корректности MAC-адреса и диапазона IP, присвоенных DHCP серверу.

3. Устранение проблем с ошибками

Вы упомянули ошибки, такие как "Numerical result out of range", которые возникают при попытке задать диапазон IP-адресов. Это может указывать на то, что указанное значение не соответствует настройкам сети. В вашем случае:

  • Проверьте, что адреса находятся в допустимом диапазоне, и что маска сети корректна. В вашем случае, при указании Address=192.168.223.224/28, диапазон IP-адресов должен быть от 192.168.223.224 до 192.168.223.239.

  • Проверьте другие конфигурации. Убедитесь, что другие параметры, такие как IPMasquerade, не конфликтуют с поведением DHCP. Если IPMasquerade=both активен, это может вызывать дополнительные сложности.

4. Итоговые шаги

  1. Проверьте конфигурационные файлы на наличие синтаксических и логических ошибок.
  2. Убедитесь, что DHCP-сервер активирован и правильно обрабатывает конфигурацию сети.
  3. Периодически проверяйте логи systemctl status systemd-networkd или journalctl -u systemd-networkd, чтобы следить за изменениями и выявлять возможные проблемы.

Рекомендации

Рекомендуется всегда выполнять резервное копирование конфигурационных файлов перед внесением изменений. Также полезно тестировать изменения в изолированной среде, если это возможно, чтобы не воздействовать на рабочие сервисы.

Следуя этим рекомендациям и внимательно анализируя логи, вы сможете настроить статические аренды для виртуальных интерфейсов, созданных в systemd-nspawn.

Оцените материал
Добавить комментарий

Капча загружается...