Рано или поздно любой системный администратор осознает необходимость перевода вверенных ему компьютеров и сетевых устройств на автоматическое получение параметров протокола TCP/IP с помощью DHCP (Dynamic Host Configuration Protocol). С учетом того, что большинство современных операционных систем имеет в своем составе включенные по умолчанию DHCP-клиенты, не нуждающиеся в дополнительной настройке, процедура внедрения DHCP сводится к установке и настройке DHCP-сервера.
Постановка задачи
Данная статья описывает простую, но достаточную для обслуживания небольших локальных сетей конфигурацию самого популярного DHCP-сервера для операционных систем семейства Linux / Unix от Internet Systems Consortium (далее — DHCP-сервера). Предложенная конфигурация обеспечивает динамическое распределение заданного диапазона IP-адресов, выделение фиксированных IP-адресов нескольким компьютерам (серверам), а также передачу клиентам всех параметров, необходимых для работы в сети TCP/IP. Для повышения безопасности DHCP-сервер запускается в chroot(8) от имени непривилегированных пользователя / группы, а для повышения удобства диагностики и мониторинга он интегрирован со штатными средствами управления логами syslogd(8) и newsyslog(8).
Исходные данные
Имеется сервер с FreeBSD, подключенный к локальной сети с IP-адресом 192.168.0.0/24
через интерфейс bge1
с IP-адресом 192.168.0.1
. На него будет установлен DHCP-сервер. Имеется несколько десятков компьютеров и сетевых устройств, которым следует выдавать IP-адреса из диапазона 192.168.0.101
— 192.168.0.200
, а также два сервера, которым нужно выдавать фиксированные IP-адреса 192.168.0.2
и 192.168.0.3
. Кроме того, всем DHCP-клиентам необходимо сообщать имя DNS-домена company.local
, IP-адреса DNS-серверов 192.168.0.2
и 192.168.0.3
, а также IP-адрес шлюза по умолчанию 192.168.0.1
. DHCP-сервер будет устанавливаться из портов, поэтому я рекомендую обновить их.
Установка и настройка DHCP-сервера
Для обеспечения работоспособности DHCP-сервера требуется поддержка устройств bpf(4) ядром FreeBSD. Стандартное ядро GENERIC
поддерживает устройства bpf
, а при использовании самосборного ядра придется убедиться в наличии строки device bpf
в файле его конфигурации, и, если таковая отсутствует, добавить ее, пересобрать ядро и перезагрузить систему.
Для установки DHCP-сервера из портов следует выполнить команды:
1 2 |
|
В окне конфигурации нужно отметить единственную опцию [X] DHCP_PARANOIA Enable support for chroot
. Обратите внимание, что при установке DHCP-сервера будут созданы пользователь dhcpd
, группа dhcpd
и заготовка файла конфигурации /usr/local/etc/dhcpd.conf.sample
.
По умолчанию конфигурация DHCP-сервера хранится в файле /usr/local/etc/dhcpd.conf
. Я предпочитаю создавать этот файл без использования вышеупомянутой заготовки, содержащей слишком много лишнего. В рассматриваемом случае файл конфигурации должен иметь такой вид:
1 2 3 4 5 6 7 8 |
|
В данном файле заданы следующие значения параметров: 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-сервера, имеется в dhcpd.conf(5)
, а список всех опций DHCP (параметров TCP/IP-сети, которые можно сообщить клиентам) — в dhcp-options(5)
.
Для того, чтобы DHCP-сервер автоматически запускался при запуске операционной системы, следует добавить в файл /etc/rc.conf
строки:
1 2 3 4 5 6 7 8 9 10 11 |
|
Данные строки запрещают вывод диагностических сообщений на консоль и отключают протокол IPv6, задают имя файла конфигурации, привязывают DHCP-сервер к интерфейсу bge1
(bge1
нужно заменить на имя используемого интерфейса, а при прослушивании нескольких интерфейсов придется перечислить их имена, используя пробел в качестве разделителя), устанавливают маску создаваемых файлов 022
(запрещают запись всем, кроме владельца), а также обеспечивают запуск в chroot-окружении с корневой папкой /var/db/dhcpd
от имени пользователя dhcpd
и группы dhcpd
.
На этом настройка DHCP-сервера заканчивается. Можно запустить сервер командой /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-сервера
Для включения вывода сообщений DHCP-сервера на консоль следует изменить определение переменной dhcpd_flags
в файле /etc/rc.conf
:
1 |
|
и перезапустить DHCP-сервер командой /usr/local/etc/rc.d/isc-dhcpd restart
.
Признаком корректного запуска DHCP-сервера может служить примерно такое сообщение:
|
Выделение динамических IP-адресов DHCP-клиентам сопровождается примерно такими сообщениями:
|
а выделение предопределенных IP-адресов по заданным MAC-адресам сетевых карт — примерно такими:
|
Рассмотренный способ наблюдения за состоянием DHCP-сервера прост и понятен (особенно при наличии под рукой документа RFC-2131), но очень неудобен в связи с необходимостью смотреть на консоль, на которую выдается огромное количество «лишней» информации.
Гораздо удобнее обеспечить запись сообщений DHCP-сервера в отдельный лог с помощью штатного демона syslogd. При этом нужно учесть, что из-за работы в chroot-окружении DHCP-сервер не может взаимодействовать с syslogd, сконфигурированным по умолчанию, т.к. сокет последнего находится за пределами chroot-окружения первого. Для исправления данного обстоятельства необходимо заставить syslogd слушать еще один сокет, имеющий имя /var/run/log
относительно корневой папки chroot-окружения DHCP-сервера. Для автоматического создания такого сокета в процессе запуска syslogd, следует добавить соответствующий ключ -l
к определению переменной syslogd_flags
в файле /etc/rc.conf
:
1 |
|
Для того, чтобы syslogd записывал сообщения DHCP-сервера в лог /var/log/dhcpd.log
, нужно добавить в файл /etc/syslog.conf
строку:
1 |
|
Для вступления изменений в силу необходимо создать пустой лог командой touch /var/log/dhcpd.log
, а затем перезапустить syslogd командой /etc/rc.d/syslogd restart
. Начиная с этого момента, все сообщения DHCP-сервера будут записываться в лог /var/log/dhcpd.log
.
Для того, чтобы с течением времени лог DHCP-сервер не разрастался до бесконечности, следует включить его ротацию с помощью штатной утилиты newsyslog. Например, для ежесуточного усечения лога /var/log/dhcpd.log
с сохранением семи предыдущих копий, сжатых архиватором bzip2(1), нужно добавить в файл /etc/newsyslog.conf
строку:
1 |
|
Заключение
Я надеюсь, что не забыл ничего важного, и приведенной информации хватит для корректной настройки и последующей отладки DHCP-сервера от ISC на компьютере с операционной системой FreeBSD.
Источник : sergeysl.ru/freebsd-isc-dhcp-server/
option domain-name «xxx.by»;
option domain-name-servers 192.168.0.4;
option subnet-mask 255.255.255.0;
ddns-update-style ad-hoc;
default-lease-time 3888000;
max-lease-time 3888000;
min-lease-time 3888000;
authoritative;
log-facility local7;
shared-network «dhcp» {
subnet 192.168.0.0 netmask 255.255.255.0 {
interface myk0;
range 192.168.0.5 192.168.0.254;
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.0.4, 213.184.225.37;
option netbios-name-servers 192.168.0.1;
option netbios-node-type 8;
option broadcast-address 192.168.0.255;
}
subnet 192.168.1.0 netmask 255.255.255.0 {
interface em0;
range 192.168.1.5 192.168.1.254;
option routers 192.168.1.2;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.0.4, 213.184.225.37;
option netbios-name-servers 192.168.0.1;
option netbios-node-type 8;
option broadcast-address 192.168.1.255;
}
}