Есть у меня в сети такой механизм, как загрузка ОС по PXE. И есть у этой конструкции странная особенность: когда PXE получает у DHCP, он занимает один IP адрес, потом загружается образ ОС по TFTP и система получает снова IP адрес, но… только уже другой…
Таким образом, на один MAC адрес в сети уходим минимум 2 IP адреса! А если еще PXE не видит TFTP или необходимых файлов в нем, то может и 4 IP адреса занять 🙂 Пруф:

Я всегда думал, что DHCP умный сразу и понимает, что не надо давать больше 1 IP адреса на 1 MAC адрес…. Но тут какой-то другой подход или я чего-то не понимаю. По сути, DHCP сервер может, конечно, выдавать разные IP, если меняется vendor-class-identifier. Это еще логично. Можно даже сделать скрипт в конфиге DHCP, который будет по vendor-class-identifier выдавать разные параметры для устройства:
subnet 192.168.0.0 netmask 255.255.255.0 {
option domain-name "domain.com";
# VoIP
if ( substring (option vendor-class-identifier, 0, 28) = "Cisco Systems, Inc. IP Phone" or
substring (option vendor-class-identifier, 0, 28) = "Cisco systems, Inc. IP Phone" or
substring (option vendor-class-identifier, 0, 27) = "Cisco System, Inc. IP Phone" or
substring (option vendor-class-identifier, 0, 19) = "Cisco Systems, Inc." or
substring (option vendor-class-identifier, 0, 33) = "Cisco Systems Inc. Wireless Phone" or
substring (option vendor-class-identifier, 0, 6) = "ATA186" or
substring (option vendor-class-identifier, 0, 12) = "CISCO ATA190" ) {
option routers 192.168.0.254;
option domain-name-servers 192.168.0.100;
option tftp-server-name "192.168.0.101";
}
# PC PXE
elsif ( substring (option vendor-class-identifier, 0, 9) = "PXEClient" ) {
option routers 192.168.0.253;
next-server 192.168.0.10;
option domain-name-servers 192.168.0.100, 192.168.0.101;
filename "pxelinux/pxelinux.0";
option root-path "192.168.0.10:/pxe/";
}
# Other
else {
option routers 192.168.0.254;
option domain-name-servers 192.168.0.100, 192.168.0.101;
}
}
Но у меня проблема в другом. Ни с того, ни с сего DHCP выдал: no free leases 🙂 Я посмотрел сколько занято реально адресов в пуле:
# fping -g 10.0.1.0/24
И чтобы не приводить весь вывод, просто скажу, что ровно половина адресов пинговалась, а вторая половина — нет. Их-то и занял PXE… Не очень изящным, но быстрым решением послужила выдача для всех клиентов PXE адресов всего на 30 секунд, чтобы получить с TFTP образ системы. Конфиг выглядит так:
# USERS LAN
subnet 10.0.1.0 netmask 255.255.255.0 {
pool {
range 10.0.1.5 10.0.1.250;
}
option routers 10.0.1.254;
option ntp-servers 192.168.0.1;
next-server 192.168.0.2;
option tftp-server-name "tftp://192.168.0.2/";
filename "5.6/wtware.http";
option filename "5.6/wtware.http";
if ( substring (option vendor-class-identifier, 0, 9) = "PXEClient" ) {
default-lease-time 30;
max-lease-time 30;
}
}
Зашло замечательно! Все работает. Всем хватает адресов.
