Kea — это DHCP-сервер, который ISC развивает как замену старому isc-dhcp-server. Классический dhcpd официально снят с поддержки в конце 2022 года, поэтому в 2026-м разворачивать его на новой сети нет смысла: исправления безопасности больше не выходят. Kea хранит настройки в JSON, умеет складывать аренды в MySQL или PostgreSQL, поддерживает DHCPv4 и DHCPv6 отдельными процессами и даёт управление через сокет. Ниже — рабочий сценарий для домашней или небольшой офисной сети на Linux Mint или Ubuntu.

Чем Kea отличается от ISC DHCP

Старый dhcpd читал /etc/dhcp/dhcpd.conf с собственным синтаксисом, а Kea использует JSON. Привычки придётся поменять: комментарии не поддерживаются, зато ошибка ловится валидатором до запуска службы, а конфиг удобно хранить в git и генерировать шаблоном. Остальные отличия важнее:

  • DHCPv4 и DHCPv6 — разные демоны, kea-dhcp4 и kea-dhcp6, у каждого свой файл и свой юнит systemd.
  • Аренды по умолчанию лежат в CSV-файле memfile; для нескольких серверов или большой нагрузки подключается СУБД.
  • Хуки расширяют поведение: lease_cmds, ha, ddns, radius. Без нужного хука часть команд управления арендами недоступна.
  • Управляющий сокет позволяет смотреть состояние и менять настройки без перезапуска.

Совместимости с dhcpd.conf нет, поэтому миграция — это перенос смысла, а не копирование файла.

Установка

В репозиториях Ubuntu 24.04 и Linux Mint 22 пакет называется kea-dhcp4-server. Вместе с ним полезно поставить утилиты администрирования, агент управления и socat для ручных запросов к сокету.

sudo apt update
sudo apt install kea-dhcp4-server kea-admin kea-ctrl-agent socat
kea-dhcp4 -v
systemctl status kea-dhcp4-server --no-pager

После установки служба уже запущена с пустым примером конфигурации и никому не отвечает, пока вы не опишете подсети. Проверьте, что порт 67 свободен: старый isc-dhcp-server нужно остановить и отключить, иначе два демона будут конфликтовать.

sudo systemctl disable --now isc-dhcp-server
sudo ss -lunp | grep ':67 '

Минимальный конфиг для одной подсети

Файл /etc/kea/kea-dhcp4.conf — обычный JSON. Ниже основа для сети 192.168.10.0/24 со шлюзом и DNS на роутере.

{
  "Dhcp4": {
    "interfaces-config": {
      "interfaces": [ "eth0" ]
    },
    "control-socket": {
      "socket-type": "unix",
      "socket-name": "/run/kea4-ctrl-socket"
    },
    "lease-database": {
      "type": "memfile",
      "persist": true,
      "name": "/var/lib/kea/kea-leases4.csv",
      "lfc-interval": 3600
    },
    "valid-lifetime": 3600,
    "renew-timer": 900,
    "rebind-timer": 1800,
    "subnet4": [
      {
        "id": 1,
        "subnet": "192.168.10.0/24",
        "pools": [ { "pool": "192.168.10.100 - 192.168.10.200" } ],
        "option-data": [
          { "name": "routers", "data": "192.168.10.1" },
          { "name": "domain-name-servers", "data": "192.168.10.1" },
          { "name": "domain-name", "data": "home.lan" }
        ]
      }
    ],
    "loggers": [
      {
        "name": "kea-dhcp4",
        "output_options": [ { "output": "/var/log/kea-dhcp4.log" } ],
        "severity": "INFO",
        "debuglevel": 0
      }
    ]
  }
}

Запоминать весь файл не нужно, достаточно трёх уровней: глобальные параметры Dhcp4, затем subnet4, затем reservations внутри подсети. Сроки задаются в секундах; 3600 — разумный компромисс для квартиры, а в офисе с потоком гостей ставьте меньше, чтобы пул быстрее освобождался. Если интерфейс без IPv4-адреса, добавьте в interfaces-config пару "dhcp-socket-type": "raw": обычный UDP-сокет на таком интерфейсе не поднимется.

Отдельный случай — несколько VLAN и DHCP relay. Сервер получает запросы через агент ретрансляции, и для каждой подсети описывается свой subnet4. Интерфейс при этом не обязан иметь адрес в обслуживаемой сети: Kea выбирает подсеть по полю giaddr в пакете, а не по адресу сокета.

Резервирование адресов

Постоянный адрес принтеру или NAS выдаётся блоком reservations. Привязка идёт по MAC, а hostname помогает только в логах и на выбор адреса не влияет.

"reservations": [
  {
    "hw-address": "3c:52:82:1a:2b:3c",
    "ip-address": "192.168.10.20",
    "hostname": "printer"
  },
  {
    "hw-address": "00:11:32:aa:bb:cc",
    "ip-address": "192.168.10.21",
    "hostname": "nas"
  }
]

Резервы не обязаны входить в пул, но удобнее держать их вне динамического диапазона. Если устройств с известным MAC много, список стоит генерировать скриптом из инвентаря, а не править руками: одна опечатка в адресе ломает выдачу конкретному клиенту.

Аренды в MySQL

Memfile переживает перезапуск и подходит для сотен клиентов. Для нескольких экземпляров Kea или десятков тысяч аренд нужна СУБД: CSV не рассчитан на параллельную запись с разных хостов.

"lease-database": {
  "type": "mysql",
  "host": "127.0.0.1",
  "user": "kea",
  "password": "CHANGE_ME",
  "name": "kea"
}

Схему создаёт kea-admin db-init mysql -u kea -p -n kea. Пароль в конфиге — повод выставить права 0640 и владельца root:kea, а не хранить файл в общедоступном каталоге. Резервный сервер с хуком ha потребует отдельной настройки синхронизации, но это уже задача для сети с требованием непрерывности.

Проверка конфигурации и запуск

Перед перезапуском всегда прогоняйте валидатор: он укажет поле и место, где опечатка.

sudo kea-dhcp4 -t /etc/kea/kea-dhcp4.conf
sudo systemctl restart kea-dhcp4-server
journalctl -u kea-dhcp4-server -n 30 --no-pager
sudo ss -lunp | grep kea-dhcp4

Фраза «Configuration seems sane» означает, что синтаксис верный, но не гарантирует выдачу адресов: проверьте интерфейс, зону файрвола и отсутствие второго DHCP в сегменте. Лог должен лежать на отдельном разделе или ротироваться через logrotate, иначе через месяц он займёт весь корень.

Диагностика

DHCP работает поверх UDP, поэтому смотреть надо 67-й и 68-й порты. Запустите tcpdump на сервере и подключите тестового клиента.

sudo tcpdump -ni eth0 -vv port 67 or port 68
echo '{"command":"config-get"}' | sudo socat - UNIX-CONNECT:/run/kea4-ctrl-socket
sudo tail -f /var/log/kea-dhcp4.log

Если в дампе видны DISCOVER, но нет OFFER, смотрите лог Kea и занятость пула. Если OFFER уходит, а клиент не берёт адрес, ищите конфликт адресов и настройки файрвола на клиенте. Ошибка соединения с сокетом означает, что он не создан: проверьте путь и права, а также что служба перезапустилась без ошибок.

Чек-лист перед вводом в эксплуатацию

  • Старый DHCP-сервер остановлен и убран из автозапуска.
  • Пул не пересекается со статическими адресами и резервами.
  • Для каждой подсети заданы шлюз, DNS и домен.
  • Логи пишутся в отдельный файл и ротируются.
  • Управляющий сокет доступен только root, ctrl-agent слушает localhost.
  • Резервная копия конфига и CSV-аренд снимается по расписанию.
  • На коммутаторе включён DHCP snooping, если он поддерживается.

Итог

Kea — не «ещё один DHCP», а современный демон с предсказуемой конфигурацией и нормальным API. Для домашней сети хватит memfile и одного subnet4; для офиса добавьте СУБД, второй сервер с хуком ha и мониторинг аренд. Главное — не тащить в новую установку старый dhcpd.conf и проверять каждый JSON через kea-dhcp4 -t перед перезапуском.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте