Вопрос или проблема
Я хотел бы назначить некоторые предопределенные IP-адреса (или адреса из предопределенного пула) для виртуальных Ethernet-сетей, созданных для виртуальных машин, работающих под управлением systemd-nspawn.
Может кто-то подсказать, как это можно реализовать?
Что я пробовал до сих пор:
- конфигурация по умолчанию (на самом деле
/lib/systemd/network/80-container-ve.network
)
Каждая виртуальная машина получает адрес в случайно выбранной сети /28 (благодаря команде Address=0.0.0.0/28
). В общем, это работает, и сервисы внутри виртуальной машины видны внешней сети (не только узловому хосту), при условии, что вручную добавлена пользовательская строка маршрута для каждого хоста, обращающегося к этим сервисам. Однако эти адреса нельзя предсказать, и каждой созданной виртуальной машине необходима выделенная строка маршрута в маршрутизаторе или хостах, обращающихся к сервисам виртуальной машины. Довольно громоздкое и утомительное решение.
- Фиксированный адрес для каждого созданного ve-*.
Маршрутная таблица узлового хоста становится недействительной из-за дополнительных записей для каждого созданного VE-интерфейса. Если я вручную удаляю эти записи из маршрутной таблицы хоста, то сеть на узловом хосте восстанавливается. Снова решение выглядит неисправным.
- Добавление статических аренд через
[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
Ну что ж, похоже, что эти аренды игнорируются.
- Изменение
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. Итоговые шаги
- Проверьте конфигурационные файлы на наличие синтаксических и логических ошибок.
- Убедитесь, что DHCP-сервер активирован и правильно обрабатывает конфигурацию сети.
- Периодически проверяйте логи
systemctl status systemd-networkd
илиjournalctl -u systemd-networkd
, чтобы следить за изменениями и выявлять возможные проблемы.
Рекомендации
Рекомендуется всегда выполнять резервное копирование конфигурационных файлов перед внесением изменений. Также полезно тестировать изменения в изолированной среде, если это возможно, чтобы не воздействовать на рабочие сервисы.
Следуя этим рекомендациям и внимательно анализируя логи, вы сможете настроить статические аренды для виртуальных интерфейсов, созданных в systemd-nspawn
.