PXE занимает несколько IP адресов c одного MAC

Есть у меня в сети такой механизм, как загрузка ОС по 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;
		}
}

Зашло замечательно! Все работает. Всем хватает адресов.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Unlix © Все права защищены 2023

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!