Как стать автором
Обновить

Автоматическое составление имени компьютера и выдача его по DHCP

Время на прочтение2 мин
Количество просмотров6.8K
Недавно возникла задача установки дистрибутива Linux на парк из 15 машин. Наиболее автоматизируемым методом такой установки является установка по сети. Как таковой этой задаче посвящено множество руководств, для нее имеются средства как специфичные для каждого дистрибутива (debian-installer, kickstart), так и универсальные (CloneZilla, System Installer). В данной статье я хочу написать о том, как при решении этой задачи добиться того, чтобы каждой машине было присвоено имя компьютера в формате pcNN, где NN — это числа по порядку от 01 до 99, в моем решении это будет последние два десятичных разряда из IP-адреса. Погуглив на эту тему я не нашел готового ответа, поэтому покопавшись в руководстве к DHCP серверу нашел решение и решил поделиться им с хабрасообществом.

На DHCP сервере я использую ISC DHCP Server (dhcpd). Для решения задачи я использовал встроенную в него возможность использовать т.н. expressions для задания любых параметров.

Обычно имя компьютера можно задать в таком формате:

option host-name "example";

И привязать его, например, к конкретной машине по MAC-адресу. Но прописывать руками хостнеймы для каждой машине мне было лень: а что если понадобится поставить не 15 машин, а 100? Поэтому мы будем выдавать имя компьютера на основе IP, выданного ему по DHCP. Строка конфигурации для этого выглядит следующим образом:

option host-name=concat("pc", suffix(binary-to-ascii(10,8, "", leased-address),2));

С помощью знака "=" мы показываем, что опция будет задана с помощью expression'a.
leased-address возвращает выданный IP-адрес в двоичном формате, с помощью функции binary-to-ascii мы преобразуем его в двоично-десятичный формат без разделителей (например, 19216801), разделитель можно задать с помощью третьего операнда. Наконец, мы берем только последние два символа от адреса (01) и выполняем конкатенацию со строкой «pc», получая адрес pc01. Уникальность IP гарантирует нам уникальность имени компьютера.

А это полный файл конфигурации:

ddns-update-style none;

default-lease-time 600;
max-lease-time 7200;

log-facility local7;

subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.101 192.168.0.199;
option domain-name-servers 192.168.0.1;
option host-name=concat("pc", suffix(binary-to-ascii(10,8, "", leased-address),2));
filename="pxelinux.0";
}


Как видно, я ограничил диапазон адресами 192.168.0.101-192.168.0.199, т.е. от pc01 до pc99.

Конечно, при таком алгоритме возникает проблема, связанная с тем, что одному и тому же компьютеру может быть присвоен разный IP, следовательно, и имя компьютера будет каждый раз разное. Но при использовании этой схемы для установки по сети, включение и установка системы, как правило, происходит единовременно, а выданное по DHCP имя прописывается в конфигурацию каждой машины (по крайне мере при установке с помощью debian-installer), поэтому проблема не так существенна. Если необходимо имя, жестко привязанное к конкретной машине, можно составлять его на основе MAC-адреса (например, его последнего байта), либо выдавать сами IP-адреса на основе MAC-адреса.
Теги:
Хабы:
+6
Комментарии6

Публикации

Истории

Работа

Ближайшие события