notby.NET Logo

Установка и настройка 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
Установка Kea IPv4 DHCP-сервера через консольную команду “apt install kea-dhcp4-server” в операционной системе Debian

Ожидаем завершения установки.

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
Проверена корректность конфигурации файла kea-dhcp4.conf при помощи команды “sudo -u _kea kea-dhcp4 -t /etc/kea/kea-dhcp4.conf” в терминале Debian, ошибок в конфигурации Kea DHCP не найдено

Так выглядит корректный файл без ошибок. Если в файле будут ошибки в синтаксисе, то они будут показаны с описанием и указанием строки в которой находится ошибка.

4. Перезапуск Kea DHCP

Перезапускаем Kea DHCP-сервер

systemctl restart kea-dhcp4-server

Проверяем, что Kea запущен, добавлен в автозагрузку и ошибок нет

systemctl status kea-dhcp4-server
В терминале Debian выполнена команда “systemctl status kea-dhcp4-server.service”. Kea IPv4 DHCP daemon успешно работает и есть в автозагрузке

Если параметр 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-сервера завершена.