Блог-шпаргалка

Картинка

kea-dhcp-server (часть 1)

Категория -> network
Обновлено: 2025-12-09

Kea-dhcp-server - это проект ребят из компании internet systems consortium, которые так же успешно пилят BIND, который мы будем настраивать в следующей части. Изначально их детище для выдачи IP-адресов имело название isc-dhcp-server, но парни посчитали, что код слишком сложен и внося какие-либо изменения в проект, можно что-то да наебнуть. В связи с чем, по состоянию на момент написания этой статьи, проект ещё много где используется, но уже в статусе EOL. Исходя из этого, было принято решение, положить болт на проект и замутить стартап, название которого красуется в заголовке этого поста.

Предлагаю закончить отступать лирически и приступить к практике.

Основные модули DHCP-сервера kea следующие:
kea-dhcp4 - раздача адресов ipv4
kea-dhcp6 - раздача адресов ipv6
kea-dhcp-ddns - динамическое обновление записей о выданных адресах на DNS-сервере
kea-admin - обслуживание БД сервера
kea-lfc - удаление избыточной информации из memfile БД
kea-ctrl-agent - api-интерфейс для управления сервером
perfdhcp - замер производительности сервера

Учитывая мою склонность к минимализму (к чему я Вас всех призываю), предлагаю не ставить всё до кучи. Нас, на данный момент, интересует пока что один модуль - kea-dhcp4. Установим его.

apt install kea-dhcp4-server

Вместе с установкой, по пути /etc/kea прилетает базовый конфиг kea-dhcp4.conf, сопровождающийся комментариями. Я обычно делаю его копию на всякий пожарный, а оригинал обнуляю.

cp /etc/kea/kea-dhcp4.conf /etc/kea/kea-dhcp4.conf.original
> /etc/kea/kea-dhcp4.conf

Синтаксис конфига в формате JSON. Набросаем минимум

{
  "Dhcp4": 
  {
    "valid-lifetime": 600,
    "renew-timer": 300,
    "rebind-timer": 540,

    "interfaces-config": {
      "interfaces": [ "enp3s0" ]
    },

    "control-socket": {
      "socket-type": "unix",
      "socket-name": "/run/kea/kea4-ctrl-socket"
    },

    "lease-database": {
      "type": "memfile",
      "lfc-interval": 1800
    },

    "subnet4": [
      {
        "id": 1,
        "subnet": "192.168.1.0/24",
        "pools": [
          {"pool": "192.168.1.2 - 192.168.1.254"}
        ],
        "option-data": [
          {
            "name": "routers",
            "data": "192.168.1.1"
          },
          {
            "name": "domain-name-servers",
            "data": "192.168.1.1"
          },
          {
            "name": "domain-name",
            "data": "example.com"
          },
          {
            "name": "domain-search",
            "data": "example.com"
          }
        ],

        "reservations": [
          {
            "hw-address": "3a:1b:7c:1d:9e:2f",
            "ip-address": "192.168.1.15"
          }
        ]
      }
    ]
  }
}

Разберём параметры
Первые три описывают время аренды адреса
valid-lifetime - время аренды (в секундах)
renew-timer - время, когда устройство начинает запрашивать продление аренды
rebind-timer - время, если по истечении которого, не удалось продлить аренду, устройство начинает запрашивать новый IP-адрес.

Рассчитывается по формуле
valid-lifetime = 100%
renew-timer = половина от 100%. То есть 50%
rebind-timer = 7/8 от 100%. Примерно 87% - 88%

В параметре interfaces-config указывается интерфейс, который будет принимать запросы от устройств. Если интерфейсов больше, то перечисление осуществляется через запятую

control-socket указывает тип и расположение сокета

lease-database оперделяет тип хранения БД выданных IP-адресов. В нашем случае это файл, который будет расположен по пути /var/lib/kea/dhcp4.leases, но можно использовать СУБД.

Затем определяем подсеть с её id. Если не указать идентификатор, то он будет присвоен автоматически.

Пул выдаваемых адресов

Далее определим опции - адрес шлюза, DNS-сервера, имя и поисковый домен

Ну и зарезервируем устройство

Проверим на валидность наш конфиг

kea-dhcp4 -t /etc/kea/kea-dhcp4.conf

Если всё заебись, то рестартуем сервис и радуемся выдаче IP-адресов

systemctl restart kea-dhcp4-server