Настройка DHCP сервера на Linux


Настройка 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 адреса, однако необходимость в подобных настройках возникнуть может).


Как мы добьемся поставленной цели:

  1. Сгенерируем ключ, который позволит BIND принимать изменения
  2. Обновим конфигурационные файлы BIND и DHCPd чтобы пакеты могли взаимодействовать с ключом
  3. Убедимся в том, что 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

Настройка DHCP сервера на Linux


Сервис на машине запущен.


Необходимо добавить в один из конфигурационных файлов строку с указанием на файл ключа:

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.

Сказать спасибо