DHCP сервер под FreeBSD

DHCP (англ. Dynamic Host Configuration Protocol — протокол динамической настройки узла) — сетевой протокол, позволяющий компьютерам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети TCP/IP. Данный протокол работает по модели «клиент-сервер». Для автоматической конфигурации компьютер-клиент на этапе конфигурации сетевого устройства обращается к так называемому серверу DHCP, и получает от него нужные параметры. Сетевой администратор может задать диапазон адресов, распределяемых сервером среди компьютеров. Это позволяет избежать ручной настройки компьютеров сети и уменьшает количество ошибок. Протокол DHCP используется в большинстве сетей TCP/IP.

Сервер DHCP устанавливаем из портов, которые предварительно следует обновить.

cd /usr/ports/net/isc-dhcp41-server
make config install clean

При установке DHCP-сервера будут созданы пользователь dhcpd, группа dhcpd и пример файла конфигурации /usr/local/etc/dhcpd.conf.sample.

Для автоматического запуска DHCP сервера  в файл /etc/rc.conf добавляем

dhcpd_enable="YES"
dhcpd_flags="-q -4"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_ifaces="rl0"
dhcpd_withumask="022"
dhcpd_chuser_enable="YES"
dhcpd_withuser="dhcpd"
dhcpd_withgroup="dhcpd"
dhcpd_chroot_enable="YES"
dhcpd_devfs_enable="YES"
dhcpd_rootdir="/var/db/dhcpd"

Данные строки запрещают вывод диагностических сообщений на консоль и отключают протокол IPv6, задают имя файла конфигурации, привязывают DHCP-сервер к интерфейсу rl0 (rl0 нужно заменить на имя используемого интерфейса, а при прослушивании нескольких интерфейсов придется перечислить их имена, используя пробел в качестве разделителя), устанавливают маску создаваемых файлов 022 (запрещают запись всем, кроме владельца), а также обеспечивают запуск в chroot-окружении с корневой папкой /var/db/dhcpd от имени пользователя dhcpd и группы dhcpd.

По умолчанию конфигурация DHCP-сервера хранится в файле /usr/local/etc/dhcpd.conf. Приводим его к следующему виду

option domain-name "mycompany.local";
option domain-name-servers 192.168.1.2, 192.168.1.3;
option routers 192.168.1.1;
authoritative;
log-facility local7;
subnet 192.168.0.0 netmask 255.255.255.0 {range 192.168.1.100 192.168.1.200;}
host server2 {hardware ethernet 00:0c:6e:59:2f:a2; fixed-address 192.168.1.2;}
host server3 {hardware ethernet b8:70:f4:68:d7:b6; fixed-address 192.168.1.3;}

В данном файле заданы следующие значения параметров: option domain-name…, option domain-name-servers… и option routers… — имя DNS-домена, список IP-адресов и/или DNS-имен DNS-серверов и список IP-адресов и/или DNS-имен шлюзов (учтите, что перечисленные параметры относятся ко всем обслуживаемым подсетям, но их можно переопределить в секциях subnet для индивидуальной настройки отдельных подсетей); authoritative — признак авторитетности DHCP-сервера (авторитетный DHCP-сервер может инициировать прекращение существующих договоров аренды и запускать повторную процедуру получения IP-адресов); log-facility… — раздел системного журнала, в который будут перенаправляться сообщения DHCP-сервера; subnet… — обслуживаемая подсеть с диапазоном динамически выделяемых IP-адресов range…; host… — узлы с MAС-адресами сетевых карт hardware ethernet, которым необходимо выдавать предопределенные IP-адреса fixed-address (в случае корректно настроенного резольвинга в качестве fixed-address можно использовать не только IP-адреса узлов, но и их DNS-имена).

На этом настройка DHCP-сервера заканчивается.

Переименовываем стартовый скрипт:

cd /usr/local/etc/rc.d
mv isc-dhcpd.sh.samle isc-dhcpd.sh

Можно запустить сервер командой /usr/local/etc/rc.d/isc-dhcpd start, а затем запросить его состояние командой /usr/local/etc/rc.d/isc-dhcpd status. Если последняя команда выдаст сообщение «dhcpd is running as pid …», все нормально, если же – «dhcpd is not running«, придется найти и устранить ошибки в файлах конфигурации.

Для включения вывода сообщений DHCP-сервера на консоль следует изменить определение переменной

dhcpd_flags в файле /etc/rc.conf
dhcpg_flags="-4"

и перезапустить DHCP-сервер командой

/usr/local/etc/rc.d/isc-dhcpd restart

Такой способ наблюдения за состоянием сервера очень прост, но неудобен в связи с большим количеством информации выводимой на консоль.

Гораздо удобнее обеспечить запись сообщений DHCP-сервера в отдельный лог с помощью штатного демона syslogd. При этом нужно учесть, что из-за работы в chroot-окружении DHCP-сервер не может взаимодействовать с syslogd, сконфигурированным по умолчанию, т.к. сокет последнего находится за пределами chroot-окружения первого. Для исправления данного обстоятельства необходимо заставить syslogd слушать еще один сокет, имеющий имя /var/run/log относительно корневой папки chroot-окружения DHCP-сервера. Для автоматического создания такого сокета в процессе запуска syslogd, следует добавить соответствующий ключ -l к определению переменной syslogd_flags в файле /etc/rc.conf

syslogd_flags="... -l /var/db/dhcpd/var/run/log"

Для того, чтобы syslogd записывал сообщения DHCP-сервера в лог /var/log/dhcpd.log, нужно добавить в файл /etc/syslog.conf строку

local7.* /var/log/dhcpd.log

Для вступления изменений в силу необходимо создать пустой лог командой

touch /var/log/dhcpd.log

а затем перезапустить syslogd командой

/etc/rc.d/syslogd restart

Начиная с этого момента, все сообщения DHCP-сервера будут записываться в лог /var/log/dhcpd.log.

Для того, чтобы с течением времени лог DHCP-сервер не разрастался до бесконечности, следует включить его ротацию с помощью штатной утилиты newsyslog. Например, для ежесуточного усечения лога /var/log/dhcpd.log с сохранением семи предыдущих копий, сжатых архиватором bzip, нужно добавить в файл /etc/newsyslog.conf строку:

/var/log/dhcpd.log 644 7 * @T00 JC