Установка и настройка Kea DHCP-сервер в Debian / Ubuntu
Протокол DHCP используется для автоматического получения параметров сетевого интерфейса, таких как IP-адрес, маска подсети, шлюз, адреса DNS. В качестве DHCP-сервера будет использован Kea DHCP. В статье будет показана его настройка для выдачи IP-адресов из пула IPv4 и статических IP-адресов от MAC-адресов устройств.
Kea DHCP разработан некоммерческой организацией Internet Systems Consortium, которая ранее занималась разработкой ISC-DHCP, но с 2023 года прекратила его поддержку и сконцентрировалась на Kea DHCP.
Все действия выполняются от root пользователя или с его привилегиями через sudo.
su -
sudo -i
1. Установка Kea DHCP
В Debian и подобных ему дистрибутивах существует несколько доступных вариантов пакетов для установки.
Базовый мета пакет kea включает следующие пакеты:
- kea-admin — Утилита удаленного администрирования Kea DHCP
- kea-ctrl-agent — REST API для Kea DHCP
- kea-dhcp-ddns-server — Служба динамического DNS для DHCP
- kea-dhcp4-server — IPv4 DHCP-сервер
- kea-dhcp6-server — IPv6 DHCP-сервер
Если установить kea-dhcp4-server и kea-dhcp6-server, то эти серверы будут работать независимо друг от друга, каждый со своим файлом конфигурации и настройкой.
Для установки всех доступных сервисов используем пакет kea
apt install kea
Так как в статье будет рассмотрена настройка DHCP для сети с протоколом IPv4, то достаточно установить kea-dhcp4-server
Устанавливаем kea-dhcp4-server
apt install kea-dhcp4-server

Ожидаем завершения установки.
2. Настройка и конфигурация Kea DHCP (kea-dhcp4.conf)
Файл конфигурации kea-dhcp4.conf находится по адресу /etc/kea/kea-dhcp4.conf и он уже содержит пример настройки, список доступных параметров и опций.
Если в дальнейшем примеры конфигураций будут нужны, то можно переименовать файл kea-dhcp4.conf в kea-dhcp4.conf.example
mv /etc/kea/kea-dhcp4.conf /etc/kea/kea-dhcp4.conf.example
Открываем файл конфигурации kea-dhcp4.conf и редактируем его
nano /etc/kea/kea-dhcp4.conf
Файл конфигурации Kea DHCP-сервера использует синтаксис JSON.
Настройка и описание основных параметров файла конфигурации kea-dhcp4.conf для работы DHCP-сервера в сети IPv4:
// Конфигурация Kea DHCP-сервер IPv4 (kea-dhcp4.conf)
{ "Dhcp4": {
// Настройки интерфейса
"interfaces-config": {
// Интерфейс на котором будет работать DHCP-сервер
// Можно указать дополнительно IP-адрес, если на интерфейсе несколько адресов
"interfaces": [ "enp3s0" ],
// "interfaces": [ "enp3s0/192.168.0.1" ],
"dhcp-socket-type": "raw" // Если DHCP будет только ретранслировать, то логично указать udp
},
// Используйте базу данных Memfile lease в CSV-файле для хранения резервирования хостов
"lease-database": {
"type": "memfile",
"lfc-interval": 3600
},
// Kea позволяет хранить резервирования хостов в MariaDB/MySQL базе данных
// "hosts-database": { "type": "mysql", "name": "kea", "user": "kea", "password": "kea", "host": "localhost", "port": 3306 },
// Время в секундах, по прошествии которого клиент должен запросить продление аренды IP-адреса
"renew-timer": 43200, // Обычно указывается как 1/2 от значения valid-lifetime
// Время в секундах, через которое клиент, не сумевший продлить аренду через renew-timer,
// начинает пытаться связаться с любым доступным DHCP-сервером, отправляя широковещательный запрос
"rebind-timer": 75600, // Обычно указывается как 7/8 от значения valid-lifetime
// Время в секундах на которое IP-адрес резервируется за клиентом, по прошествии которого
// клиент должен запросить продление аренды, иначе IP-адрес может быть выдан другому устройству
"valid-lifetime": 86400, // 24 часа достаточно в домашней сети
// Глобальная настройка параметров, которые DHCP-сервер передает клиентам при выдаче IP-адреса
// Показал для примера, но далее я укажу в настройках сети адреса DNS-серверов
"option-data": [
{
"name": "domain-name-servers", // DNS-серверы, передаваемые клиенту
"data": "1.1.1.1, 1.0.0.1" // Публичные DNS-сервера CloudFlare
}
],
// Описание подсети и настройка выдачи IP-адресов, параметров
"subnet4": [
{
// Идентификатор подсети должен быть уникальным для каждой подсети.
"id": 1, // Пусть будет 1
// Локальная сеть и маска подсети в которой работает DHCP-сервер
"subnet": "192.168.0.0/24",
// Диапазоны пула выдаваемых IP-адресов DHCP-сервером
"pools": [
{ "pool": "192.168.0.20 - 192.168.0.80" }//, { "pool": "192.168.0.100 - 192.168.0.200" }
],
// Настройка параметров, которые DHCP-сервер передает клиентам при выдаче IP-адреса
"option-data": [
// IP-адрес шлюза который используется в локальной сети
{
"name": "routers",
"data": "192.168.0.1"
},
// IP-адрес DNS-сервера в локальной сети, если он используется
// Секцию можно не указывать, и тогда будет задействована глобальная секция, которая была настроена выше
{
"name": "domain-name-servers",
"data": "192.168.0.1"
}
],
// Выдача фиксированных IP-адресов в зависимости от MAC-адресов клиентов
// IP-адреса, которые будут присвоены, должны быть НЕ из пула динамических адресов
"reservations": [
{
"hw-address": "B4:0D:AC:AA:3F:56",
"ip-address": "192.168.0.3"
},
{
"hw-address": "EC:FD:52:0A:90:8D",
"ip-address": "192.168.0.4"
},
{
"hw-address": "EC:22:80:40:32:27",
"ip-address": "192.168.0.5"
}
]
}
],
// Настройка логирования
"loggers": [
{
"name": "kea-dhcp4",
"output-options": [
{
// Куда выводить (stdout, stderr, syslog, syslog:name) или записывать лог
// "output": "stdout" // Вывод в стандартный общий журнал
"output": "/var/log/kea/kea-dhcp4.log" // Записывать в лог-файл
}
],
"severity": "INFO" // Уровень лога: FATAL, ERROR, WARN, INFO, DEBUG
}
]
}}
Сохраняем файл и закрываем его.
3. Проверка синтаксиса конфигурационного файла
Проверяем корректность файла конфигурации kea-dhcp4.conf
kea-dhcp4 -t /etc/kea/kea-dhcp4.conf
Если выведена ошибка Syntax check failed with: Unable to open file /etc/kea/kea-dhcp4.conf, то выполняем команду проверки от пользователя _kea
sudo -u _kea kea-dhcp4 -t /etc/kea/kea-dhcp4.conf

Так выглядит корректный файл без ошибок. Если в файле будут ошибки в синтаксисе, то они будут показаны с описанием и указанием строки в которой находится ошибка.
4. Перезапуск Kea DHCP
Перезапускаем Kea DHCP-сервер
systemctl restart kea-dhcp4-server
Проверяем, что Kea запущен, добавлен в автозагрузку и ошибок нет
systemctl status kea-dhcp4-server

Если параметр Loaded в статусе disabled, значит kea-dhcp4-server.service нет в автозагрузке, тогда добавляем его в автозагрузку
systemctl enable kea-dhcp4-server
5. Проверка работы Kea DHCP
Подключаем устройство к локальной сети или переводим его настройки на автоматическое получение адреса и пробуем получить IP-адрес и настройки сетевого интерфейса. Проверяем, что все параметры были успешно переданы клиенту и соответствуют настройкам.
Проверяем лог-файл на наличие ошибок и предупреждений
nano /var/log/kea/kea-dhcp4.log
Проверяем системный вывод на наличие ошибок и предупреждений, если лог-файл не был настроен
journalctl -u kea-dhcp4-server
Убеждаемся в отсутствии ошибок. На этом настройка Kea DHCP-сервера завершена.