Введение
В современных сетевых инфраструктурах DHCP-серверы играют ключевую роль в автоматической конфигурации IP-адресов для клиентских устройств. Одним из наиболее гибких и масштабируемых решений является Kea — DHCP-сервер с открытым исходным кодом, разрабатываемый проектом ISC (Internet Systems Consortium). Однако управление Kea через конфигурационные файлы может быть неудобным, особенно в крупных развертываниях. Для упрощения администрирования ISC предоставляет Stork — веб-интерфейс мониторинга и управления Kea.
В данной статье мы рассмотрим пошаговую настройку Kea DHCP-сервера и его интеграцию с Stork на примере операционной системы debian 13
Установка Kea DHCP-сервера
curl -1sLf 'https://dl.cloudsmith.io/public/isc/kea-3-0/cfg/setup/bash.deb.sh' | sudo -E bash
apt update
apt install isc-kea
Настройка Kea DHCPv4
Создадим базовую конфигурацию для DHCPv4 в файле /etc/kea/kea-dhcp4.conf:
{
"Dhcp4": {
"authoritative": true,
"interfaces-config": {
"interfaces": ["enp7s0"],
"re-detect": false
},
"control-socket": {
"socket-type": "unix",
"socket-name": "/var/run/kea/kea4-ctrl-socket"
},
"lease-database": {
"type": "memfile",
"lfc-interval": 3600
},
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"flush-reclaimed-timer-wait-time": 25,
"hold-reclaimed-time": 3600,
"max-reclaim-leases": 100,
"max-reclaim-time": 250,
"unwarned-reclaim-cycles": 5
},
"renew-timer": 900,
"rebind-timer": 1800,
"valid-lifetime": 3600,
"option-data": [
{
"name": "domain-name-servers",
"data": "8.8.4.4,8.8.8.8"
},
{
"name": "default-ip-ttl",
"data": "0xf0"
}
],
"subnet4": [
{
"id": 1,
"subnet": "172.16.0.0/24",
"pools": [
{
"pool": "172.16.0.20-172.16.0.200"
}
],
"option-data": [
{
"name": "routers",
"data": "172.16.0.1"
}
],
"reservations": [
{
"hw-address": "1a:1b:1c:1d:1e:1f",
"ip-address": "172.16.0.10"
}
]
}
],
"hooks-libraries": [
{
"library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_lease_cmds.so"
},
{
"library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_host_cmds.so"
},
{
"library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_subnet_cmds.so"
},
{
"library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_stat_cmds.so"
},
{
"library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_perfmon.so"
}
],
"loggers": [
{
"name": "kea-dhcp4",
"output_options": [
{
"output": "/var/log/kea/kea-dhcp4.log"
}
],
"severity": "INFO",
"debuglevel": 0
}
]
}
}
Если появляются ошибки при запуске что нет прав на файлы в каталоге /var/run/kea/ по пробуйте настроить apparmor прописываем в файле /etc/apparmor.d/usr.sbin.kea-dhcp4 на каталог
# Allow Kea DHCP4 to access its runtime directory
/var/run/kea/ r,
/var/run/kea/** rwk,
Перезагрузите профиль AppArmor
systemctl reload apparmor
Запустим и включим службу:
sudo systemctl enable --now isc-kea-dhcp4
Настройка kea-ctrl-agent
{
"Control-agent": {
"http-host": "127.0.0.1",
"http-port": 8080,
"control-sockets": {
"dhcp4": {
"socket-type": "unix",
"socket-name": "/var/run/kea/kea4-ctrl-socket"
},
"dhcp6": {
"socket-type": "unix",
"socket-name": "/var/run/kea/kea6-ctrl-socket"
}
},
"loggers": [
{
"name": "kea-ctrl-agent",
"output_options": [
{
"output": "/var/log/kea/kea-ctrl-agent.log"
}
],
"severity": "INFO",
"debuglevel": 0
}
]
}
}
Запускаем службу
systemctl ebable --now isc-kea-ctrl-agent.service
Установка и настройка Stork
Stork состоит из двух компонентов:
- Stork Agent — устанавливается на хост с Kea.
- Stork Server — централизованный веб-сервер управления.
добавим репозиторий
curl -1sLf 'https://dl.cloudsmith.io/public/isc/stork/cfg/setup/bash.deb.sh' | sudo bash
Установка Stork Agent на хост Kea
apt update
apt install -y isc-stork-agent
Настроим агент (/etc/stork/agent.env):
STORK_AGENT_HOST=127.0.0.1
STORK_AGENT_PORT=8082
STORK_AGENT_SERVER_URL=http://127.0.0.1:8081
STORK_AGENT_SKIP_TLS_CERT_VERIFICATION=true
KEA_CONTROL_AGENT_URL=http://127.0.0.1:8080
Запустим агент:
systemctl enable --now isc-stork-agent.service
Установка Stork Server (на отдельном или том же хосте)
apt install -y isc-stork-server
Устанавливаем Postgressql
apt install postgresql postgresql-contrib
Запустим и включим службу:
systemctl enable --now postgresql
Создаем базу
sudo -u postgres psql
-- Создаём пользователя stork с паролем
CREATE USER stork WITH PASSWORD 'pass';
-- Создаём базу данных stork, владельцем назначаем пользователя stork
CREATE DATABASE stork OWNER stork;
-- Даём все права на базу
GRANT ALL PRIVILEGES ON DATABASE stork TO stork;
-- Выйти из psql
\q
Настраиваем Stork Server для работы с Postgressql
Добавляем в конец файла /etc/stork/server.env
STORK_DATABASE_HOST=127.0.0.1
STORK_DATABASE_PORT=5432
STORK_DATABASE_NAME=stork
STORK_DATABASE_USER_NAME=stork
STORK_DATABASE_PASSWORD=pass
STORK_DATABASE_SSLMODE=disable
STORK_REST_PORT=8081
STORK_REST_HOST=0.0.0.0
Запустим сервер:
systemctl enable --now isc-stork-server
При необходимости надо произвести настройку apparmor или отключить службу
Веб-интерфейс доступен по адресу: http://<IP_сервера>:8081
Регистрация Kea в Stork
Произведите регистрацию клиента
stork-agent -s /bin/sh -c 'stork-agent register --server-url http://127.0.0.1:8081'
- Откройте веб-интерфейс Stork в браузере.
- Создайте учётную запись администратора при первом запуске. (ddefault login admin default password admin)
- Перейдите в раздел Machines → Register New Machine.
- Нажмите Register.
Stork автоматически обнаружит запущенные экземпляры Kea (dhcp4, dhcp6, ctrl-agent) и начнёт собирать метрики.
Мониторинг и управление через Stork
После успешной регистрации вы сможете:
- Просматривать статистику использования пулов адресов.
- Отслеживать активность клиентов.
- Просматривать логи и состояние служб.
- Управлять конфигурацией
Заключение
Интеграция Kea с Stork значительно упрощает эксплуатацию DHCP-инфраструктуры, особенно в распределённых или динамически изменяющихся сетях. Stork предоставляет удобный веб-интерфейс для мониторинга, диагностики и (в перспективе) полного управления конфигурацией Kea.
Для продакшн-сред настоятельно рекомендуется:
- Настроить резервное копирование конфигураций.
- Настроить резервного копирования Postgressql
- Ограничить доступ к веб-интерфейсу через firewall или reverse proxy (например, Nginx с аутентификацией).