Настройка DHCP на Ubuntu

Настройка DHCP сервера Linux — частая задача системного администрирования, особенно в компаниях, располагающих большими офисными пространствами. В статье будет рассмотрен пример настройки для Debian подобной Ubuntu.

В большинстве домашних и корпоративных сетей IP-адреса выдаются рабочим станциям DHCP-сервером являющимся частью аппаратного роутера.

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

При настройке DHCP-сервера роль выдачи адресов будет передана от роутера серверу, работающему на базе ОС Linux.

Более одного DHCP-сервера, в большинстве случаев, в сети быть не должно потому, что часто они могут работать совместно некорректно — это выражается в двойной выдаче устройствам IP-адресов.

 

Включая один DHCP-сервер (на ПК с ОС Linux в данном случае) нужно убедиться в том, что другой (на роутере) отключен.

 

Одно из главных преимуществ наличия DHCP-сервера в сети — возможнcd ость авторизовываться не по IP-адресу, а по имени узла, что широко используется в офисных и домашних сетях.

 

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

Устанавливаем 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 «server-gu.ru»;
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»server-gu.ru» {
type master;
file «/var/cache/bind/server-gu.ru.zone»;
allow-update { key «dhcp»; };
}

 

Строкой, в которой указан путь к server-gu.ru.zone мы сменили расположение конфига поскольку в /etc/bind пользователь BIND писать информацию не может, а динамическое обновление файлов это подразумевает.

На каталог /var/cache/bind программный пакет, по умолчанию, имеет права r/w.

 

Те же две строки следует скорректировать/добавить для зоны обратного преобразования.

Перемещаем конфигурационный файл:

mv /etc/bind/server-gu.ru.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.

 

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

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 «server-gu.ru»;
option routers 192.168.11.11;
option broadcast-address ;
default-lease-time 7200;
max-lease-time 7200;

ddns-domainname «server-gu.ru.»;
zone server-gu.ru. {
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 server-gu.ru.zone |grep dhcptest

 

Видим соответствие имени машины и А записи DNS

rndc thaw

Команда удаляет временные файлы с расширением .jnl до нового динамического обновления

rndc freeze/thaw можно дополнять указанием конкретной зоны

 

 

Настройка DHCP сервера Linux на этом завершена. Читайте про конфигурацию DNS сервера на основе BIND9.