DHCP - это расширение протокола BOOTP, который был придуман для того, чтобы бездисковые станции UNIX могли загружаться по сети. Подсистема BOOTP предоставляет клиентам IP-адреса, сетевые маски, стандартные шлюзы, а так же информацию, касающуюся начальной загрузки через TFTP. Протокол DHCP не ограничивается этими параметрами, вводя понятие аренды. Хватит пока теории - на практике любому сетевику средних и больших сетей необходима управляемая сетевая структура которая, будет динамично управляться и обновляться при необходимости. Для этого мы и используем протокол DHCP.
Воспользуемся эталонным ПО в реализации DHCP - демон организации Internet Systems Consortium. Мы опишем конфигурацию обеспечивающую, динамическое распределение указанного диапазона IP-адресов, фиксирование IP-адресов за сетевым устройствами, а также передачу клиентам разнообразных параметров необходимых, для работы в сети TCP/IP. А так же реализуем дополнительные трюки, к примеру - запуск в нескольких подсетях, ограничивание неизвестных клиентов, и, живя в эпоху сетевых дикарей, мы будем повышать безопасность демона путем запуска в песочнице (изменение корневого каталога chroot) и работой от имени непривилегированного пользователя. Но и на старуху бывает порнуха - предохраняйтесь и обновляетесь. =)
Установка
Установка проста, но не забывайте сначала обновить систему портов. Найдем необходимый нам порт.
# cd /usr/ports/
# make search name=isc-dhcp41-server
Port: isc-dhcp41-server-4.1.e,2
Path: /usr/ports/net/isc-dhcp41-server
Info: The ISC Dynamic Host Configuration Protocol server
Maint: douglas@douglasthrift.net
B-deps:
R-deps:
WWW: http://www.isc.org/products/DHCP/
Начнем установку и не забудем, что мы параноики и включим поддержку песочницы.
# cd /usr/ports/net/isc-dhcp41-server
# make config
Options for isc-dhcp41-server 4.1.e,2
[X] DHCP_PARANOIA Enable support for chroot
[ ] DHCP_LDAP Experimental LDAP backend support
[ ] DHCP_LDAP_SSL Support LDAP connection over SSL/TLS
# make install clean
~~~
This port has installed the following files which may act as network
servers and may therefore pose a remote security risk to the system.
/usr/local/sbin/dhcpd
/usr/local/bin/omshell
This port has installed the following startup scripts which may cause
these network services to be started at boot time.
/usr/local/etc/rc.d/isc-dhcpd
/usr/local/etc/rc.d/isc-dhcpd6
If there are vulnerabilities in these programs there may be a security
risk to the system. FreeBSD makes no guarantee about the security of
ports included in the Ports Collection. Please type 'make deinstall'
to deinstall the port if this is a concern.
For more information, and contact details about the security
status of this software, see the following webpage:
http://www.isc.org/products/DHCP/
===> Cleaning for isc-dhcp41-server-4.1.e,2
Конфигурация
На данном этапе необходимо откорректировать и дополнить конфигурационный файл демона своими параметрами.
# cd /usr/local/etc/
# chmod u+w dhcpd.conf
# cat dhcpd.conf
Этот конфиг разрабатывался с учетом смешанной сети (Windows серверы и клиенты) и некоторые параметры netbios и ntp-servers можно закомментировать.
## Глобальные параметры ##
# указываем доменное имя
option domain-name "firma.local";
# имя DNS сервера
option domain-name-servers ns1.firma.local;
# IP DNS сервер (предыдущая строчка взаимозаменяемая)
#option domain-name-servers 192.168.0.1;
# по умолчанию на сколько секунд выдаётся IP-адрес
default-lease-time 600;
# максимальное время на сколько выдаётся IP-адрес
max-lease-time 1200;
# минимальное время на сколько выдаётся IP
#min-lease-time 1000;
# указываем, что не будем обновлять DNS-таблицу
ddns-update-style none;
# указываем, что наш сервер будет единственным авторитетным для наших сетей
authoritative;
# отправка логов DHCP в журнал (необходимо изменить syslog.conf)
log-facility local7;
## Параметры подсети ##
# задаем нашу подсеть и ее маску
subnet 192.168.0.0 netmask 255.255.255.0 {
# диапазон выдачи IP адресов (фиксированные IP адреса серверов
# должны лежат вне этого диапазона)
range 192.168.0.101 192.168.0.230;
# маска подсети
option subnet-mask 255.255.255.0;
# шлюз по умолчанию
option routers 192.168.0.3;
# определяем широковещательный адрес
option broadcast-address 192.168.0.255;
# указываем сервер времени (доп.)
option ntp-servers 192.168.0.1;
# сообщаем клиенту, должен ли тот реализовывать
# широковещательный принцип преобразования адресов
# или обращаться к серверу WINS (доп.)
option netbios-node-type 8;
# адрес сервера для работы с WINS (доп.)
option netbios-name-servers 192.168.0.1;
# параметры для работы с WINS (доп.)
option netbios-dd-server 192.168.0.1;
default-lease-time 6000;
max-lease-time 72000;
min-lease-time 72000;
}
Некоторые параметры глобальных и субсетей можно менять, заменять и дополнять в зависимости от необходимого результата.
А теперь приступим к формированию групп и привязки IP к MAC адресу сетевого устройства.
group {
host PC0054 {
hardware ethernet 00:26:5A:13:E7:5C;
fixed-address 192.168.0.54;
}
host PC0055 {
hardware ethernet 00:24:54:74:36:14;
fixed-address 192.168.0.55;
}
}
group {
host PC0060 {
hardware ethernet 00:17:31:67:E0:29;
fixed-address 192.168.0.60;
}
host PC0061 {
hardware ethernet 00:1C:C0:1B:D1:2B;
fixed-address 192.168.0.61;
}
}
Из этого вам уже понятно, что мы сформировали две группы (для удобства работы и можно добавлять больше групп или вообще без них работать)
host - имя сетевого устройства
hardware ethernet - его MAC адрес
fixed-address - привязанный за ним IP адрес
Запуск и работа в chroot
rc.conf
Для автоматического запуска при перезагрузке сервера внесем в /etc/rc.conf опции и укажем специфичные параметры, такие как: запуск в песочнице, нужный сетевой интерфейс, путь до конфигурационного файла, необходимого пользователя и тп.
Для перечитывания конфигурационного файла можно просто перезапустить демон
# /usr/local/etc/rc.d/isc-dhcpd restart
Сложные вопросы конфигурации
Работа в двух подсетях
Иногда случается, что в одном физическом сегменте сосуществуют несколько IP подсетей. Например, в организации существует требование использовать 8-битные маски подсетей, но сеть разрослась до размеров, превышающих 254 хоста, в этом случае необходимо использовать две подсети с 8-битными масками. В этом случае секции subnet, описывающие две эти подсети, могут быть заключены в секцию shared-network.
Добавляем после указанных глобальных параметров:
# Указываем, что будем использовать разные подсети с названием <strong>mynet</strong>.
В /etc/rc.conf не забудем внести нужные нам интерфейсы для прослушки - это нужно при использовании к примеру разных сетевых карт.
# cat /etc/rc.conf |grep dhcpd_ifaces
dhcpd_ifaces="em0 em1" # доп. сетевой интерфейс через пробел
Если у вас alias на сетевой карте - ничего менять не нужно.
Разрешить или запретить неизвестных клиентов
Иногда необходимо ограничивать работу неизвестных клиентов, о которых нет упоминания в dhcp.conf, или использовать разные конфигурации сетей в зависимости от клиента - это делается двумя параметрами.
В данном примере в подсети №1 мы запрещаем получать настройки неизвестным клиентам и разрешаем их работу в подсети №2.
IPv6
И так эта версия протокола накладывает свои ограничения на работу DHCP во-первых вы должны сконфигурировать свою сетевую карту на работу с IP6, во-вторых, создать отдельный конфигурационный файл dhcp6.conf, а в в-третьих, запустить отдельный демон для IP6. Небольшой FAQ.
Я пока пропущу данный раздел за ненадобностью мне.
Логи
Обязательно включим логгирование - без этого бывает очень тяжело разобраться в появившейся проблеме. Укажем демону syslogd, чтобы он записывал сообщения DHCP-сервера в лог /var/log/dhcpd.log. Необходимо добавить в /etc/syslog.conf строку:
О: У DHCP есть файл базы данных по арендуемым параметрам называемый dhcp.leases также демон периодически делает резервную копию этого файла dhcp.leases~. И при проблемах с основным файлом вы можете его заменить резервным.