Протокол DHCP позволяет хосту автоматически получить IP-адрес, из специального пула адресов. Что бы это работало, администратор сети должен зарезервировать диапазоны адресов для раздачи клиентам в каждой подсети путем правки конфигурационного файла dhcpd.conf(5).
При старте dhcpd читает файл dhcpd.conf и сохраняет списки доступных аресов для каждой подсети в памяти. Когда клиент запрашивает адрес, используя используя протокол DHCP, сервер выдает ему свободный адрес. Обычно адрес предоставляется на ограниченный срок - назначается администратором, по умолчанию на сутки. Когда срок использования адреса подходит к концу, клиент предпринимает попытку продлить срок и при удачном исходе продолжает использовать выделенный ему адрес. В случае если срок истек, клиенту не разрешается использовать ранее полученный адрес.
Для сохранения информации о выданных адресах, на случай перезагрузки системы или рестарта dhcpd, список уже занятых адресов хранится в файле dhcpd.leases(5). Перед тем как выдать адрес хосту, dhcpd записывает его в этот файл и принудительно сбрасывает буфера на диск, что бы гарантировать сохранность информации даже с случае неожиданного краха системы. При старте, после чтения файла конфигурации, dhcpd читает dhcpd.leases что бы выяснить какие адреса свободны, а какие заняты клиентами.
Новые записи добавляются в конец файла, для предотвращения разрастания, время от времени dhcpd создает новый файл dhcpd.leases состоящий только из актуальных записей, а старый удаляет.
Протокол BOOTP так же поддерживается сервером. Но в связи с тем что он мало кому теперь нужен, я не перевожу части связанные с BOOTP. Желающие могут обратиться к оригинальной документации.
После того как в конфигурацию были внесены изменения, dhcpd должен быть перезапущен. Для этого можно послать процессу сигнал SIGTERM (сигнал 15), идентификатор процесса содержится в файле /var/run/dhcpd.pid, а затем запустить dhcpd еще раз.
Имена сетевых интерфейсов на которых dhcpd должен ожидать запросы клиентов могут быть указаны в командной строке. Это может понадобиться в системах где dhcpd не сможет определить non-broadcast интерфейсы, но не других системах не требуется. Если имен интерфейсов не указаны, dhcpd определяет все "поднятые" интерфейсы, по возможности исключает non-broadcast, и ожидает широковещательных запросов на всех оставшихся.
Если dhcpd должен слушать на порту отличном от стандартного (port 67), нужно использовать параметр -p new_port , где new_port - udp порт на котором должен слушать dhcpd. Обычно это используется в отладочных целях. Если указан параметр -p, датаграммы которые должны пройти через relay-агентов, посылаются на порт указанный в -p, так что если есть желание использовать не стандартные порты, то придется также переконфигурировать relay-агентов на использование соответствующих портов.
Что бы заставить dhcpd выполняться передним планом, а не фоновым процессом, используется параметр -f Это используется когда например нужно запустить dhcpd под отладчиком или when running it out of inittab on System V systems.
Что бы направить всю отладочную информацию на устройство стандартной ошибки, укажите параметр -d. Это можно использовать при отладке или в тех случаях, когда необходимо сохранять информацию о работе dhcpd, но syslog по каким-то причинам не может быть использован. Обычно, dhcpd ведет логи используя стандартное средство - syslog, со значением log facility = LOG_DAEMON.
Dhcpd можно выполнить с альтернативным файлом конфигурации, с помощью параметра -cf , или альтернативным файлом dhcpd.leasas, используя опцию -lf. В виду того, что очень важно использовать всегда одну и туже базу данных занятых адресов в рабочем(производственном) режиме работы, то опция -lf должна использоваться только только в тестовых целях и в тестовом окружении.
В случае когда dhcpd запускается из системных стартовых скриптов, может быть полезным параметр -q, который подавляет вывод сообщений о копирайте.
subnet 239.252.197.0 netmask 255.255.255.0 { range 239.252.197.10 239.252.197.250; }
Несколько диапазонов можно указать следующим образом:
subnet 239.252.197.0 netmask 255.255.255.0 { range 239.252.197.10 239.252.197.107; range 239.252.197.113 239.252.197.250; }
Если в подсети не используется динамическое назначение адресов, то параметр range можно опустить, но секция subnet должна присутствовать.
Существует возможность задать два значения срока: значение по умолчанию - для клиентов не требующих адрес на конкретно указанный срок и максимальное значение. В файле конфигурации это выглядит так:
subnet 239.252.197.0 netmask 255.255.255.0 { range 239.252.197.10 239.252.197.107; default-lease-time 600; max-lease-time 7200; }
В данном случае в описании подсети задается значение срока по умолчанию равное 600 секундам (10 минут), и максимальное значение срока - 7200 секунд (2 часа). Другими часто используемыми значениями являются 86400 (один день), 604800 (одна неделя) и 2592000 (30 дней).
host haagen { hardware ethernet 08:00:2b:4c:59:23; fixed-address 239.252.197.9; filename "/tftpboot/haagen.boot"; }
Параметры задаются в файле конфигурации и могут быть как глобальными, так и относиться только к одной подсети или даже только к одному хосту. Более подробно о всех возможных параметрах можно прочитать в руководстве по dhcpd.conf(5) и dhcpd-options(5)