Коллизия DUID (DHCP Unique Identifier): сбои аренды в DHCPv6 и Kea
- Разные серверы или виртуальные машины поочередно вытесняют друг друга из таблицы DHCP-аренды.
- В логах сервера:
Client 00:01:00:... requested IP already leased to another host. - Сетевые интерфейсы на клонированных хостах периодически теряют IP-адрес или получают один и тот же IP на двоих.
- Сбои в работе облачных инстансов (cloud-init) при развертывании из единого шаблона (Golden Template).
1. Причина возникновения DUID Collision
В DHCPv6 (и современных реализациях DHCPv4 с Client-ID) идентификация клиента строится на основе DUID (DHCP Unique Identifier). При клонировании виртуальных машин без генерации нового Machine ID файл идентификатора копируется, что приводит к полной идентичности запросов для сервера.
2. Регенерация Machine-ID и DUID в Linux (systemd-networkd / NetworkManager)
На клонированном хосте выполните процедуру сброса:
# 1. Очистка системного ID
rm -f /etc/machine-id /var/lib/dbus/machine-id
systemd-machine-id-setup
# 2. Очистка сохраненных DUID в NetworkManager
rm -f /var/lib/NetworkManager/secret_key
rm -f /var/lib/NetworkManager/dhclient-*.lease
# 3. Перезапуск сетевого стека
systemctl restart systemd-networkd || systemctl restart NetworkManager3. Принудительное использование MAC-адреса вместо DUID в DHCPv4
Если требуется привязать выдачу адресов строго к MAC (Client-ID на основе MAC):
# Для NetworkManager (/etc/NetworkManager/conf.d/dhcp-client-id.conf)
[connection]
ipv4.dhcp-client-id=mac
# Для dhclient (/etc/dhcp/dhclient.conf)
send dhcp-client-identifier = hardware;4. Сброс DUID в ОС Windows Server
# Запуск Sysprep для генерации новых SID и DUID
C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /reboot Частые вопросы (FAQ)
Какие типы DUID существуют по спецификации RFC 8415?
DUID-LLT (Link-layer address plus time), DUID-EN (Enterprise number assigned by vendor), DUID-LL (Link-layer address only) и DUID-UUID (на основе UUID материнской платы/системы).
Почему смена MAC-адреса на виртуальной машине не решает проблему аренды DHCPv6?
DHCPv6 сервер игнорирует физический MAC-адрес заголовка Ethernet и сопоставляет аренду исключительно с полем DUID, находящимся в теле пакета DHCPv6.
Как посмотреть текущий DUID в Linux?
Выполните команду 'networkctl status' или прочитайте файл '/var/lib/NetworkManager/internal-*.lease' (в зависимости от используемого сетевого менеджера).
Как подготовить образ золотого шаблона (Gold Image), чтобы избежать дублирования?
Перед созданием шаблона удалите файл /etc/machine-id и создайте пустой файл touch /etc/machine-id, а также очистите директории аренды /var/lib/dhcp/ и /var/lib/NetworkManager/.