DHCP-сервер является одним из ключевых элементов сети любого размера и представить без него даже небольшую сеть сегодня невозможно. Одним из наиболее популярных продуктов на платформе 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.
Последние комментарии