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

  • Автор:

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

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.

Еще одной полезной возможностью является выдача клиентам персональных значений DHCP опций, для этого добавьте в объект резервирования встроенный объект "option-data", например, выдадим зарезервированному клиенту собственные DNS-сервера:

{
"hw-address": "11:22:33:44:55:66",
"ip-address": "192.168.72.111",
"option-data": [
{
"name": "domain-name-servers",
"data": "77.88.8.7, 77.88.8.3"
}
]
}

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

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

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

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

systemctl restart kea-dhcp4-server

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал



Loading Comments