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