DHCPv4 client failed: No offer — Сбой получения IP в systemd-networkd
Архитектура ошибки и симптомы сбоя
Сообщение «systemd-networkd: DHCPv4 client failed: Lease expired / No offer / Connection timed out» регистрируется встроенным DHCP-клиентом systemd-networkd. Ошибка означает, что система отправила широковещательный запрос DHCPDISCOVER, но не получила ответного предложения DHCPOFFER от DHCP-сервера, либо аренда IP-адреса истекла (Lease Expired), а запрос на продление был проигнорирован. В результате интерфейс теряет IP-адрес и маршрут по умолчанию, вызывая полную потерю сетевой доступности.
Диагностическая таблица параметров сбоя
| Параметр | Значение | Инженерный смысл сбоя |
|---|---|---|
| DHCPDISCOVER | Broadcast UDP 67/68 | Широковещательный запрос поиска доступных DHCP-серверов в сегменте. |
| No Offer | Timeout / Filtered | DHCP-сервер перегружен, исчерпан пул адресов (Pool Exhausted) или порт коммутатора заблокирован STP. |
| DUIDType / ClientID | duid / mac | Формат идентификатора хоста для выдачи постоянного IP-адреса. |
Пошаговое дерево решений и сценарии траблшутинга
Сценарий 1: Проверка физического линка и прохождения DHCP трафика
# Проверка статуса сетевого кабеля (Carrier / Link Detected):
networkctl status eth0
# Захват исходящих и входящих DHCP пакетов утилитой tcpdump:
sudo tcpdump -i eth0 -n -vvv port 67 or port 68Сценарий 2: Переключение ClientID с DUID на MAC-адрес
Многие старые корпоративные DHCP-серверы (Cisco, Windows Server) не понимают формат DUID (по умолчанию в systemd) и требуют стандартный MAC-адрес:
# Отредактируйте /etc/systemd/network/10-eth0.network:
[Match]
Name=eth0
[Network]
DHCP=ipv4
[DHCPv4]
ClientIdentifier=mac
SendHostname=yes
UseDomains=yes
# Перезапустите сеть:
sudo systemctl restart systemd-networkdСценарий 3: Настройка статического IP-адреса в аварийной ситуации
Если DHCP-сервер недоступен, задайте статические параметры сети:
# Настройка статического IP в /etc/systemd/network/10-eth0.network:
[Match]
Name=eth0
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=1.1.1.1 8.8.8.8
# Примените конфигурацию:
sudo networkctl reloadСценарий 4: Устранение задержки Spanning Tree Protocol (STP) на коммутаторе
Если порт свитча тратит 30 секунд на инициализацию STP, включите на портах коммутатора режим PortFast / Edge Port, либо увеличьте таймаут в networkd:
[DHCPv4]
RouteMetric=100
MaxAttempts=infinityITSTM спроектирует отказоустойчивую сетевую инфраструктуру с резервированием DHCP-серверов (DHCP Snooping/Relay) и статическим IPAM.
Частые вопросы (FAQ)
Почему systemd-networkd по умолчанию отправляет DUID вместо MAC-адреса?
Стандарт RFC 4361 предписывает использование единого идентификатора DUID (DHCP Unique Identifier) для IPv4 и IPv6. Однако многие маршрутизаторы MikroTik и шлюзы не умеют привязывать статические лизы к DUID, требуя ClientIdentifier=mac.
Что означает опция SendHostname=yes?
Она указывает клиенту передавать свое сетевое имя (hostname) в Option 12 DHCP-пакета, позволяя локальному DNS-серверу автоматически зарегистрировать имя хоста.
Как принудительно запросить обновление аренды DHCP?
Выполните команду: sudo networkctl renew eth0.
Что делать, если IP-адрес выдается, но маршрут по умолчанию отсутствует?
Убедитесь, что в секции [DHCPv4] установлено UseGateway=yes и UseRoutes=yes.