Вопрос или проблема
Связано с этим вопросом
Как сделать так, чтобы systemd-networkd
учитывал настройку [DHCPv4]
FallbackLeaseLifetimeSec=forever
? (Или, скорее всего, что я делаю не так, что это мешает?)
Когда он получает ответ без DHCP аренды, он записывает:
enp0s1: DHCPv4 клиент: полученная аренда не содержит адреса, адреса сервера или срока аренды, игнорируется
Предыстория
У нас есть потенциальный клиент с требованием, чтобы наше устройство могло работать в среде BOOTP (т.е. без DHCP). В частности, мы не должны требовать наличия DHCP Опции 51 (Время аренды) и должны рассматривать ответы как постоянные IP назначения.
Мы используем systemd-networkd
для всего остального, поэтому в идеале мы хотели бы использовать его встроенный DHCP клиент и для этого. Основная проблема в том, что systemd-networkd
отклоняет BOOTP ответы, не содержащие DHCP Опцию 51 (Время аренды IP адреса
). Похоже, что вся цель FallbackLeaseLifetimeSec=forever заключается в обходе этого ограничения. Однако, вне зависимости от того, устанавливаем ли мы это или нет, мы получаем одно и то же сообщение журнала (выше), и systemd не настраивает интерфейс.
Детали/что я пробовал
networkctl --version
сообщаетsystemd 252
. Документация говорит, что эта опция была добавлена в 246.- Мы запускаем Debian 12 (Bookworm) в качестве тестового клиента с ядром 6.1.0.
- Мы запускаем пакет Debian
bootpd
на отдельном устройстве с тем же Debian и Linux- Возможно, неуместно, но сервер использует
/etc/network/interfaces
иifup/ifdown
для настройки сети.
- Возможно, неуместно, но сервер использует
- Я захватил ответы с помощью
tcpdump
и проверил следующее:- Они содержат
yiaddr
, то естьВаш (клиентский) IP адрес
- Они содержат
siaddr
, то естьIP адрес сервера
- Они также содержат опцию 54 (Идентификатор DHCP сервера)
- Они содержат
- Я захватил ответы от обычного DHCP сервера и сравнил. Единственные существенные различия, которые я вижу, это:
- Ожидаемое
Время аренды IP адреса
присутствует - Опции идут в другом порядке (53,54,51,1,3,6,42,255 против 1,3,53,54,6,12,255)
- Ожидаемое
- Наш файл конфигурации сети находится в
/etc/systemd/network/20-enp0s1.network
- У нас нет других файлов конфигурации сети, кроме
/etc/systemd/networkd.conf
, который не был изменен и фактически пуст (содержит только комментарии и несколько пустых секций) - Я проверил, что наш файл конфигурации, и опция
FallbackLeaseLifetimeSec
в частности, парсятся следующим образом:- Я установил значение опции на
garbage
и перезапустил systemd-networkd. journalctl
сообщаетНедопустимое значение LeaseLifetime=, игнорируется: garbage
.- Когда я вернул его обратно на
forever
,journalctl
не упоминает об этом- Я нашел сообщение об ошибке в исходном коде, и ясно, что он не сообщает об этом, если находит допустимое значение.
- Я установил значение опции на
- Вот
20-enp0s1.network
:
[Match]
Name=enp0s1
[Network]
DHCP=ipv4
[DHCPv4]
FallbackLeaseLifetimeSec=forever
ClientIdentifier=mac
# Дополнение, потому что `bootpd` отвергает пакеты, которые считает слишком короткими
SendOption=254:string:"UUUUUUUUUUUUUUUUUUUUUUUUUUU"
Ответ или решение
Настройка systemd-networkd для поддержки опции FallbackLeaseLifetimeSec в DHCPv4
Введение
Вопрос, поднятый в описании, касается конфигурации systemd-networkd для работы в средах, где возможно получение IP-адресов без наличия опции DHCP Lease Time (DHCP Option 51). Это, в частности, актуально для серверов BOOTP, которые могут не отправлять время аренды, необходимое для корректной работы большинства DHCP-клиентов. В данной статье мы подробно рассмотрим, как заставить systemd-networkd учитывать параметр FallbackLeaseLifetimeSec, что позволит корректно обрабатывать такие ответы.
Входные параметры
Ваша текущая конфигурация находится в файле /etc/systemd/network/20-enp0s1.network
, где задан параметр:
[DHCPv4]
FallbackLeaseLifetimeSec=forever
И вы описали, что лог systemd-networkd сообщает об игнорировании пакетов, содержащих информацию о потере аренды.
Проблема
systemd-networkd отказывается обрабатывать BOOTP ответы из-за отсутствия в них опции DHCP Lease Time. Это поведение ожидаемо, так как стандартные DHCP клиенты полагаются на наличие Lease Time для управления полученными адресами.
Решение
Для решения вашей проблемы, необходимо выполнить следующие шаги:
-
Убедитесь в правильности конфигурации:
Убедитесь, что файл конфигурации корректно перемещен и не содержит синтаксических ошибок. Ваша конфигурация20-enp0s1.network
выглядит хорошо, но всегда полезно проверить такие детали, как правильные отступы, использование[Match]
,[Network]
и[DHCPv4]
. -
Обновление systemd:
При использовании systemd 252, вы определенно обладаете функциональными возможностями, представленными в более ранних версиях. Однако убедитесь, что у вас последнее обновление системы и все компоненты systemd установлены и работают корректно.Выполните команду:
sudo apt update sudo apt upgrade
-
Проверка логической работы DHCP до BOOTP:
Важно параллельно с systemd-networkd использовать традиционные DHCP-серверы (например, isc-dhcp-server) для понимания формата ответа. Команда tcpdump поможет вам выявить все параметры, которые поступают в ответе от сервера. Как вы уже сделали, наличие необходимых параметров в ответах (таких какyiaddr
иsiaddr
) важно. Однако следите за правильным использованием всех опций, которые могли бы влиять на логику работы. -
Тестирование параметров FallbackLeaseLifetimeSec:
Попробуйте установитьFallbackLeaseLifetimeSec=3600
, чтобы увидеть, произойдут ли изменения в поведении системы. Возможно, выполнение этой настройки может повлиять на игнорирование механизма. -
Обратите внимание на системные журналы:
Используйтеjournalctl -f
для просмотра реальных логов процесса сети. Внимательно изучите вывод во время старта systemd-networkd, чтобы уловить возможные ошибки, о которых вы могли не знать. -
Настройка идентификатора клиента:
Важно убедиться, чтоClientIdentifier
указан корректно. Возможно, изменение его на более стандартный подход может позволить серверу корректно идентифицировать устройства. -
Обратите внимание на соответствие RFC:
Обратите внимание на то, соответствует ли ваш BOOTP сервер стандартам, описанным в RFC 951 и 2131. Некоторые реализации могут вести себя по-разному, и корректировка может привести к стабильной работе.
Заключение
Конфигурация systemd-networkd для работы в BOOTP-средах требует точной настройки и понимания различных параметров DHCP. Убедитесь, что вы следите за логами, используете актуальные доработанные версии программного обеспечения и делаете правильные настройки для вашего интерфейса. При соблюдении данных рекомендаций, вы сможете научить systemd-networkd игнорировать отсутствие Lease Time и корректно обрабатывать сообщения от BOOTP серверов.