Есть у меня в сети такой механизм, как загрузка ОС по 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; } }
Зашло замечательно! Все работает. Всем хватает адресов.