Настройка DHCP сервера на Linux — типовая задача в компаниях, располагающих большими офисными пространствами. В статье будет рассмотрен пример настройки для Debian подобной Ubuntu.
В большинстве домашних и корпоративных сетей IP-адреса выдаются рабочим станциям DHCP-сервером являющимся частью аппаратного роутера.
При настройке DHCP-сервера роль выдачи адресов будет передана от роутера серверу, работающему на базе ОС Linux.
Более одного DHCP-сервера, в большинстве случаев, в сети быть не должно. Часто они могут работать совместно некорректно — это выражается в двойной выдаче устройствам IP-адресов.
Включая один DHCP-сервер (на ПК с ОС Linux в данном случае) нужно убедиться в том, что другой (на роутере) отключен.
Одно из главных преимуществ наличия DHCP-сервера в сети — возможнcd ость авторизовываться не по IP-адресу, а по имени узла, что широко используется в офисных и домашних сетях.
Настройка DHCP сервера в Ubuntu
Устанавливаем DHCP:
apt-get install dhcp3-server
Производим настройку — прежде всего, указываем параметры сети с которой будет работать сервер
mcedit /etc/dhcp3/dhcpd.conf
Конфигурационный файл очень полный и содержит примеры конфигурации.
Добавляем наши параметры непосредственно после закомментированного примера (для удобства, место добавления строк значения не имеет)
subnet 192.168.11.76 netmask 255.255.255.0 {
range 192.168.11.71 192.168.11.75;
option domain-name-servers 192.168.11.76;
option domain-name-servers "
example.com"
;
option routers 192.168.11.11;
option broadcast-address ;
default-lease-time 7200;
max-lease-time 7200;
}
range — дипазон из которого будут динамически выдаваться адреса. Два указанных адреса в диапазон также включаются.
option domain-name-servers, option domain-name-servers — здесь приводятся данные сервера DNS, сконфигурированного на данной машине при подготовке одной из предыдущих статей.
При использовании нескольких option domain-name-servers IP-адреса разделяются запятой.
Далее необходимо раскомментировать строку #authoritative;
Сделать это нужно после того как другой DHCP сервер (на роутере) выключен. После перезапуска службы DHCP сервер сможет отвергать запросы на повторное получение IP-адресов и предлагать свои если использовавшиеся ранее адреса для выдачи более недоступны.
/etc/init.d/dhcp3-server restart
Перезапуск службы в рабочей системе довольно безопасен поскольку уже выданные адреса выдут выданы вновь при истечении срока lease — информация о них записывается во временные файлы.
Проверяем выдался ли адрес на машине из локальной сети
В командной строке выполняем:
ip a |more
Видим, что ПК использует адрес за пределами диапазона, предусмотренного конфигурацией DHCP сервера — следовательно, он был выдан ранее роутером
Настройка совместной работы DHCP и DNS
Цель — обеспечить корректную работу DNS при выдаче машине нового адреса посредством DHCP (обычно для серверов используются статические IP адреса, однако необходимость в подобных настройках возникнуть может).
Как мы добьемся поставленной цели:
- Сгенерируем ключ, который позволит BIND принимать изменения
- Обновим конфигурационные файлы BIND и DHCPd чтобы пакеты могли взаимодействовать с ключом
- Убедимся в том, что BIND в состоянии писать информацию в собственные файлы
Трудность, которая появляется при подобной конфигурации — содержимое файлов DNS зон менять вручную становится невозможно.
BIND предоставляет возможность произвести подобную настройку посредством утилиты RNDC
Ключ — 'shared key' — доступен в файле /etc/bind/dndc.key, также мы можем создать свой ключ.
Предварительно смотрим помощь по утилите:
rndc-confgen
--
hel
Создаем ключ:
rndc-confgen -a -c dncp.key -k dhcp
Ключ создан, идем в конфигурацию пакета и добавляем строку с include:
mcedit /etc/bind/named.conf.local
include "
/etc/bind/dhcpd.key"
zone "
example.com"
{
type master;
file "
/var/cache/bind/example.com.zone"
;
allow-update { key "
dhcp"
; };
}
Строкой, в которой указан путь к example.com.zone мы сменили расположение конфига поскольку в /etc/bind пользователь BIND писать информацию не может, а динамическое обновление файлов это подразумевает.
На каталог /var/cache/bind программный пакет, по умолчанию, имеет права r/w.
Те же две строки следует скорректировать/добавить для зоны обратного преобразования.
Перемещаем конфигурационный файл:
mv /etc/bind/example.com.zone /var/cache/bind
mv 192.168.11.zone /var/cache/bind
chown bind dhcpd.key
Проверяем наличие прав на запись и меняем пользователя на bind
ls -la /var/cache/bind/
chown bind /var/cache/bind/*
/etc/init.d/bind restart
В случае трудностей проверяем /var/log/deamon.log
Сервис перезапустился, проверяем
host alias
Поскольку DHCP также работает от имени одноименного пользователя — потребуется дополнительно разрешить получать доступ к ключу.
chown bind.dhcpd dhcpd.key
chmod g+r dhcpd.key
Настройка утилиты AppArmor для корректной работы DHCP
AppArmor — программное средство защиты файлов от изменения и доступа на уровне операционной системы.
Сейчас ограничимся тем, что убедимся, что пакет настроен для динамического обновления DHCP.
Проверяем работает ли служба
systemctl status apparmor
Сервис на машине запущен.
Необходимо добавить в один из конфигурационных файлов строку с указанием на файл ключа:
mcedit /etc/apparmor.d/local/usr.sbin.dhcpd3
/etc/bind/dhcpd.key r,
Производим финальную настройку DHCP — редактируем строку с ddns-update-style и добавляем указание на файл ключа. Также добавляем поддержку ddns в настройки подсети.
cd /etc/dhcp3
mcedit dhcpd.conf
ddns-update-style interim;
include "
/etc/bind/dhcpd.key"
subnet 192.168.11.76 netmask 255.255.255.0 {
range 192.168.11.71 192.168.11.75;
option domain-name-servers 192.168.11.76;
option domain-name-servers "
example.com"
;
option routers 192.168.11.11;
option broadcast-address ;
default-lease-time 7200;
max-lease-time 7200;
ddns-domainname "
example.com."
;
zone example.com {
primary 192.168.11.76;
key "
dhcpd"
;
}
zone 11.168.192.in-addr.arpa. {
primary 192.168.11.76;
key "
dhcpd»"
;
}
}
/etc/init.d/apparmor restart
/etc/init.d/dhcp3-server restart
Чтобы проверить, что настроенная конфигурация работает корректно заставим другую машину (dncptest), находящуюся в сети, запросить и получить IP адрес — в это время на сервере будем отслеживать данные, которые записываются в логи
tail -n 0 -f /var/log/messages
Запрашиваем новый адрес с dncptest и не видим в логе никаких ошибок, что говорит о том. что конфигурация корректна.
Проверяем DNS
host dhcptest
Видим адрес из диапазона, предусмотренного range
Проверяем наличие временных файлов в которые пишутся данные об обновлении зон
cd /var/cache/bind
rndc freeze
cat example.com.zone |grep dhcptest
Видим соответствие имени машины и А записи DNS
rndc thaw
Команда удаляет временные файлы с расширением .jnl до нового динамического обновления
rndc freeze/thaw можно дополнять указанием конкретной зоны
Настройка DHCP сервера Linux на этом завершена. Читайте про конфигурацию DNS сервера на основе BIND9.