Установка и базовая настройка DHCP-сервера Kea

Администрирование

 

DHCP-сервер является одним из ключевых элементов сети любого размера и представить без него даже небольшую сеть сегодня невозможно. Одним из наиболее популярных продуктов на платформе Linux был ISC DHCP, но в конце 2022 года разработчики заявили о прекращении его поддержки, а все силы и средства теперь направлены на развитие нового DHCP-сервера Kea. В данной статье мы познакомимся с новым продуктом и рассмотрим процесс его установки и базовой настройки для использования в небольших сетях.

Kea DHCP — новый и современный DHCP сервер, построенный по модульному принципу и рассчитанный на сети любого размера, от небольших, до самых крупных. Тем не менее он прост в установке и настройке, в качестве примера мы будем рассматривать одиночный сервер для обслуживания небольшой сети.

Для настройки мы будем использовать следующие параметры:

  • Область: 192.168.72.0/24
  • Пул: 192.168.72.100 — 192.168.72.199
  • Роутер: 192.168.72.1
  • DNS: 192.168.72.1
  • Домен: it-31.lab

Все действия будут выполняться нами в среде Ubuntu Server 22.04 LTS, но инструкция будет актуальна для всех современных редакций Debian и Ubuntu, а также любых иных дистрибутивов с поправкой на работу с пакетным менеджером. Все действия, если не указано иного, производятся от имени суперпользователя root или через sudo.

Для установки Kea выполните:

apt install kea

В результате будут установлены сразу четыре модуля, каждый из которых работает в качестве отдельной службы:

  • kea-dhcp4-server: IPv4 DHCP-сервер
  • kea-dhcp6-server: IPv6 DHCP-сервер.
  • kea-ctrl-agent: REST API сервис для управления Kea.
  • kea-dhcp-ddns-server: служба динамического обновления DNS на основе событий аренды DHCP.

Если вам не нужны все службы, то можете установить только отдельные модули, например, в нашем случае будет достаточно только IPv4 DHCP-сервера:

apt install kea-dhcp4-server

Либо вы можете отключить автозагрузку ненужных служб, допустим вам не нужен IPv6 сервер:

systemctl disable kea-dhcp6-server

Однозначных рекомендаций здесь давать не будем, каждый может поступить так, как считает более нужным.

Kea использует конфигурационные файлы в формате JSON, что может быть несколько непривычно, если вы раньше не работали с этим языком разметки. Для настройки IPv4 сервера используется файл /etc/kea/kea-dhcp4.conf который уже содержит пример конфигурации с многочисленными комментариями.

Если внимательно с ним ознакомиться, то сервер можно быстро настроить и без всякой документации, но сейчас нам от этого только неудобства, так как придется удалить или закомментировать большую часть файла. При удалении можно легко нарушить структуру JSON, а наличие многочисленных комментариев затрудняет читабельность конфигурации. Поэтому мы переименуем этот файл и создадим свою конфигурацию с нуля:

mv /etc/kea/kea-dhcp4.conf /etc/kea/kea-dhcp4.example
nano /etc/kea/kea-dhcp4.conf

В данном случае мы используем для редактирования редактор nano, если вы предпочитаете редактор mc, то замените в команде nano на mcedit.

Прежде всего внесем глобальные параметры:

{
 "Dhcp4": 
    {
      "valid-lifetime": 4000,
      "renew-timer": 1000,
      "rebind-timer": 2000,
      
      "interfaces-config": {
          "interfaces": [ "eth1" ]
       },

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

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

Перед тем, как давать пояснения кратко разберем структуру конфигурационного файла. Он состоит из JSON объектов, каждый из которых заключен в фигурные скобки. Каждый объект содержит параметры, либо вложенные JSON-объекты. Все параметры разделяются запятыми (а вложенный объект — тоже параметр), поэтому редактируя конфигурацию не забывайте о правильной расстановке запятых.

Кстати, у нас в конфиге выше допущена синтаксическая ошибка, после последнего параметра стоит запятая, но это сделано умышлено, так как мы будем добавлять ниже дополнительные параметры.

Конфигурация JSON открывается фигурной скобкой, корневым объектом в нем является «Dhcp4» внутри которого должны располагаться все остальные параметры и объекты.

Параметр «valid-lifetime» отвечает за время аренды в секундах, а следующие два представляют параметры T1 и T2, также в секундах. По истечении первого клиент начинает запрашивать продление аренды, а если этого не удалось сделать до момента времени T2, то клиент начинает процедуру получения нового адреса.

Указанные по умолчанию значения составляют: время аренды — 67 минут, T1 и T2 — 16 и 34 минуты. Это довольно мало и подходит в случаях если у вас много мобильных клиентов, которые не должны надолго занимать пул. Поэтому для стационарных сетей можно задать более широкие интервалы, чтобы снизить нагрузку на сервер.

Например, увеличим время аренды до суток, а T1 и T2 установим, как 1/2 и 7/8 этого интервала:

"valid-lifetime": 86400,
 "renew-timer": 43200,
 "rebind-timer": 75600,

Параметр «interfaces-config» перечисляет список интерфейсов, на которых будет работать DHCP сервер, списки в JSON заключаются в квадратные скобки и значения перечисляются через запятую. Если мы хотим принимать запросы на двух интерфейсах, то список будет выглядеть следующим образом:

"interfaces": [ "eth1", "eth2" ]

Объект «control-socket» указывает на расположение сокета, а «lease-database» определяет тип хранения базы данных аренды. Kea поддерживает различные способы, включая СУБД MySQL и PostgreSQL, но в небольших установках можно использовать базу данных в ОЗУ с сохранением аренды в файл (по умолчанию /var/lib/kea/dhcp4.leases), за это отвечает параметр «type»: «memfile».

Ниже объекта «lease-database»добавим новый объект «subnet4», который содержит список всех подсетей IPv4, каждая из которых представлена отдельным объектом.

"subnet4": [
 {
   "id": 72,
   "subnet": "192.168.72.0/24",
 }
 ]

Каждая сеть задается двумя параметрами: «id» — идентификатор, используется для установления соответствия записей в базе аренды с подсетями, если значение не указано — присваивается автоматически, но лучше указать данное значение явно, «subnet» — собственно подсеть в привычном формате записи.

И снова обратите внимание, после «subnet» у нас стоит запятая, так как мы продолжим добавлять параметры. Причем добавлять их нужно именно в объект списка, т.е. ниже строки «subnet».

Следующим параметром укажем пул адресов к выдаче:

"pools": [
   {"pool": "192.168.72.100 - 192.168.72.199"}
 ],

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

"pools": [
  {"pool": "192.168.72.100 - 192.168.72.199"},
  {"pool": "192.168.72.210 - 192.168.72.249"}
 ],

Затем перейдем к перечислению доступных DHCP-опций, список которых находится в еще одном объекте:

"option-data": [
   {
     "name": "routers",
     "data": "192.168.72.1"
   },
   {
     "name": "domain-name-servers",
     "data": "192.168.72.1"
   },
   {
     "name": "domain-name",
     "data": "it-31.lab"
   },
   {
     "name": "domain-search",
     "data": "it-31.lab"
   }
 ],

Опции можно задавать двумя способами: по имени или по коду, например:

{
   "code": 15,
   "data": "it-31.lab"
 },
 {
   "code": 119,
   "data": "it-31.lab"
 }

Если вы указываете опции в шестнадцатеричном или бинарном виде, то потребуется добавить еще один параметр «csv-format»: false:

{
  "code": 121,
  "csv-format": false,
  "data": "0x16c0a804c0a8ba5c"
 }

Данная опция приведена тут сугубо для примера и добавлять ее в готовый конфиг не нужно, в шестнадцатеричном виде записан дополнительный маршрут.

В нашем случае используются четыре DHCP-опции: адреса роутера и DNS-сервера, а также доменный суффикс для передачи клиентам. Полный список опций с именами и кодами вы можете взять в официальной документации:

List of standard DHCPv4 options configurable by an administrator

Сразу напомним, что DHCP-опции запрашивает именно клиент, а сервер только отдает значения опций (если они настроены). Если клиент не запрашивает опцию, то она к нему не применится, несмотря на то что она настроена на сервере. Например, Windows никогда не запрашивает опцию 42 NTP-сервер и пытаться передать на нее адрес сервера времени таким образом бесполезно.

Последним объектом, который мы добавим будет резервирование адресов:

"reservations": [
   {
     "hw-address": "1a:1b:1c:1d:1e:1f",
     "ip-address": "192.168.72.110"
   },
   {
     "hw-address": "11:22:33:44:55:66",
     "ip-address": "192.168.72.111"
   }
 ]

В особых пояснениях он не нуждается, это также список объектов, каждый из которых содержит два параметра: физический адрес и закрепленный за ним IP.

Теперь сохраним изменения и проверим конфигурацию командой:

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

Если все нормально, то вы получите несколько сообщений со статусом INFO, это нормально. В противном случае следует изучить и устранить ошибки, чаше всего они связаны с неправильной расстановкой запятых в конфигурационном файле.

После чего перезапустим службу, чтобы применить изменения:

systemctl restart kea-dhcp4-server

Настройка закончена, ваш сервер готов к работе.

interface31.ru

Материал распространяется по лицензии CC-BY-SA

Оцените статью
IT-Привет!
Добавить комментарий