Иногда нужно чтобы сервер DHCP назначал разные адреса для разных устройств и выдавал различные параметры настройки устройств.Например, для телефонных аппаратов Cisco и для бездисковых тонких клиентов сервер должен назначать различные адреса и файлы загрузки.
Операторы обработки параметров описаны в
http://linux.die.net/man/5/dhcpd-eval
http://www.ipamworldwide.com/match-expressions.html
Например для указания различных файлов загрузки можно указать что-то типа
if (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = "1:e0:69:95")
{ filename "/newTBoxes/pxelinux.0"; }
else { filename "pxelinux.0"; }Или например для выдачи различных адресов и серверов TFTP для разных типов устройств
pool { range dynamic-bootp 192.168.1.150 192.168.1.199;
deny members of "phones";
allow members of "other";
next-server 192.168.1.251;
filename "tftpboot/pxelinux.0"; }
pool { range 192.168.1.120 192.168.1.129;
allow members of "phones";
deny members of "other";
next-server 192.168.1.250;
option tftp-server-name "http://192.168.1.250/phset.php?mac={mac}";
server-name "http://192.168.1.250";
filename "phset.php?mac={mac}";
Важно обратить внимание, что в примерах для одних типов устройств указано
deny members of "phones";
allow members of "other";
а для других
allow members of "phones";
deny members of "other";
Проверить какое значение получает сервер DHCP можно, если задать в /etc/dhcpd.conf, такие строки
Для этого можно воспользоваться операторами условий в файле /etc/dhcpd.conf.
Есть несколько возможностей определения типов устройств, которые обращаются к серверу, например для телефоных аппаратов Cisco могут быть параметры
option host-name
option vendor-class-identifier
в таком виде
substring(option host-name,0,3)="SEP"
substring(option vendor-class-identifier,0,5)="Cisco"
А если использовать MAC-адрес, то нужно использовать параметр
hardware
но его результат нужно преобразовать в текстовый вид с помощью binary-to-ascii в виде
binary-to-ascii(16,8,":",substring(hardware,0,4)) = "1:0:4:13"
binary-to-ascii (16, 8, ":", substring (hardware, 1, 3)) = "0:05:69"
Важно обратить внимание, что hardware возвращает в качестве первого элемента тип сетевого интерфейса, поэтому если нужно только MAC-адрес, то substring должен выбирать строку не с 0 позиции, а с 1, а количество позиций равно количеству пар байтов адреса. Если первый байт равен 00, то в результате будет один 0.
Есть несколько возможностей определения типов устройств, которые обращаются к серверу, например для телефоных аппаратов Cisco могут быть параметры
option host-name
option vendor-class-identifier
в таком виде
substring(option host-name,0,3)="SEP"
substring(option vendor-class-identifier,0,5)="Cisco"
А если использовать MAC-адрес, то нужно использовать параметр
hardware
но его результат нужно преобразовать в текстовый вид с помощью binary-to-ascii в виде
binary-to-ascii(16,8,":",substring(hardware,0,4)) = "1:0:4:13"
binary-to-ascii (16, 8, ":", substring (hardware, 1, 3)) = "0:05:69"
Важно обратить внимание, что hardware возвращает в качестве первого элемента тип сетевого интерфейса, поэтому если нужно только MAC-адрес, то substring должен выбирать строку не с 0 позиции, а с 1, а количество позиций равно количеству пар байтов адреса. Если первый байт равен 00, то в результате будет один 0.
Операторы обработки параметров описаны в
http://linux.die.net/man/5/dhcpd-eval
http://www.ipamworldwide.com/match-expressions.html
Например для указания различных файлов загрузки можно указать что-то типа
if (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = "1:e0:69:95")
{ filename "/newTBoxes/pxelinux.0"; }
else { filename "pxelinux.0"; }Или например для выдачи различных адресов и серверов TFTP для разных типов устройств
pool { range dynamic-bootp 192.168.1.150 192.168.1.199;
deny members of "phones";
allow members of "other";
next-server 192.168.1.251;
filename "tftpboot/pxelinux.0"; }
pool { range 192.168.1.120 192.168.1.129;
allow members of "phones";
deny members of "other";
next-server 192.168.1.250;
option tftp-server-name "http://192.168.1.250/phset.php?mac={mac}";
server-name "http://192.168.1.250";
filename "phset.php?mac={mac}";
Важно обратить внимание, что в примерах для одних типов устройств указано
deny members of "phones";
allow members of "other";
а для других
allow members of "phones";
deny members of "other";
Проверить какое значение получает сервер DHCP можно, если задать в /etc/dhcpd.conf, такие строки
log-facility local7;
log (debug, binary-to-ascii (16, 8, ":", substring (hardware, 1, 3)));
log(info, concat("Client ",binary-to-ascii(16, 8, ":", substring(hardware, 0, 4))));
Результат можно прочитать в /var/log/boot или в /var/log/messages.
Другие примеры можно найти в
http://honglus.blogspot.com/2012/03/control-isc-dhcp-to-allocate-ip-address.html
http://www.andresd.ru/news/19/
http://www.ossramblings.com/serving-dhcp-based-mac-prefixes
http://apetec.com/linux/CentOS-DHCP-Setup.htm
log (debug, binary-to-ascii (16, 8, ":", substring (hardware, 1, 3)));
log(info, concat("Client ",binary-to-ascii(16, 8, ":", substring(hardware, 0, 4))));
Результат можно прочитать в /var/log/boot или в /var/log/messages.
Другие примеры можно найти в
http://honglus.blogspot.com/2012/03/control-isc-dhcp-to-allocate-ip-address.html
http://www.andresd.ru/news/19/
http://www.ossramblings.com/serving-dhcp-based-mac-prefixes
http://apetec.com/linux/CentOS-DHCP-Setup.htm
Коментарі
Дописати коментар