- Создал(а) Сергей Бутаков 09.09.25
Вы просматриваете старую версию данной страницы. Смотрите текущую версию.
Сравнить с текущим просмотр истории страницы
Версия 1 Следующий »
Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8).
Введение
Установка
Для установки набора программ Kea используется команда:
sudo apt install kea
Конфигурационные файлы
IPv4 DHCP-сервер:
- Настройки сервера хранятся в JSON-формате в файле
/etc/kea/kea-dhcp4.conf.// Как минимум необходимо настроить: // - имена сетевых интерфейсов, на которых работает DHCP-сервер; // - выдаваемые клиентам параметры (например, адреса DNS-серверов); // - подсеть, в рамках которой выдаются адреса клиентам. // // В файле приведено малое количество настроек. // Полное описание возможных настроек сервера дано в официальной документации // "Kea User's Guide", находящейся по адресу https://kea.readthedocs.io/. { "Dhcp4": { // Имена сетевых интерфейсов, на которых принимает запросы DHCP-сервер. "interfaces-config": { // Можно указать название сетевого интерфейса, например: "eth0". // Или конкретный IP-адрес сетевого интерфейса, например: "eth0/192.0.2.1". "interfaces": [ "ens3" ] // По умолчанию DHCP-сервер принимает сетевые пакеты в режиме "raw sockets". // Это гарантирует, что сервер получит запросы от всех клиентов, // включая тех, кто подключен напрямую к серверу и ещё не имеет IP-адреса. // Однако, если все клиентские запросы ретранслируются (проходят через коммутатор), // то лучше использовать UDP-соединение. // "dhcp-socket-type": "udp" }, // UNIX-сокет для управления DHCP-сервером. Используется программой kea-ctrl-agent: // для настройки сервера, для загрузки настроек из файла, // для получения статистики сервера, и т. д. "control-socket": { "socket-type": "unix", "socket-name": "/run/kea/kea4-ctrl-socket" }, // Использовать Memfile (текстовой файл на диске) для хранения // информации о выданных клиентам IP-адресах. // Также может использоваться база данных MySQL или PostgreSQL. // Подробнее см. раздел "Lease Storage" в официальной документации. "lease-database": { "type": "memfile", "lfc-interval": 3600 }, // Информация о забронированных за узлами IP-адресах может быть указана // как в файле настроек, так и храниться в базе данных. // Если сеть небольшая, то проще использовать файл настроек. // Для большой сети лучше использовать базу данных: // "hosts-database": { // "type": "mysql", // "name": "kea", // "user": "kea", // "password": "kea", // "host": "localhost", // "port": 3306 // }, // Подробнее см. раздел "Hosts storage" в официальной документации. // Настройка обработки адресов с истёкшим сроком аренды. // Между окончанием одного цикла обработки адресов с истёкшим сроком аренды // и началом следующего должно пройти 10 секунд. // Каждые 25 секунд запускается процедура по удалению адресов, // чей срок аренды истёк более 3600 секунд назад. // За один цикл обработки аннулируется аренда максимум 100 адресов. // Один цикл аннулирования адресов длится максимум 250 мс. // Если после 5 последовательных циклов обработки аренды // всё ещё будут адреса с истёкшим сроком аренды, // то в журнал работы сервера будет выдано предупреждающее сообщение. "expired-leases-processing": { "reclaim-timer-wait-time": 10, "flush-reclaimed-timer-wait-time": 25, "hold-reclaimed-time": 3600, "max-reclaim-leases": 100, "max-reclaim-time": 250, "unwarned-reclaim-cycles": 5 }, // Глобальные настройки таймеров для всех подсетей. // В настройках конкретной подсети можно переопределить значения таймеров. "renew-timer": 900, "rebind-timer": 1800, "valid-lifetime": 3600, // Глобальные параметры. Отправляются клиенту, когда он их запрашивает. // Значение параметров может быть переопределено на более низких уровнях. // Уровни (от самого верхнего до самого нижнего): // - глобальный (наиболее общие настройки, могут быть переопределены на других уровнях); // - класс клиента; // - подсеть; // - узел (настройки данного уровня переопределяют настройки всех остальных уровней) // // Необходимо настраивать только те параметры, которые действительно нужны. // // Полный перечень параметров описан в официальной документации. "option-data": [ // Для задания параметра обычно достаточно указать его название или код, // а также данные. // Полное описание параметра состоит из названия, кода, области, // csv-формата и данных. // По умолчанию область параметра = "dhcp4", csv-формат = "true". // // Например, чтобы задать DNS-серверы, необходимо указать: // { // "name": "domain-name-servers", // "code": 6, // "csv-format": "true", // "space": "dhcp4", // "data": "192.0.2.1, 192.0.2.2" // } // но это слишком длинное описание, проще сделать так: { "name": "domain-name-servers", "data": "192.0.2.1, 192.0.2.2" }, // Вместо названия параметра можно использовать его код. // // Например, для указания доменного имени используется // параметр с названием "domain-name", которому соответствует код 15. // Тогда для настройки параметра с использованием кода можно указать: { "code": 15, "data": "example.org" }, // Параметр с доменными именами, // относительно которых клиент должен пытаться разрешать имена. // // Например, для имени "foo" клиент попытается разрешить имя как // "foo.mydomain.example.com", а если это не получится, // то как "foo.example.com" { "name": "domain-search", "data": "mydomain.example.com, example.com" }, // Запятая в строковых данных должна экранироваться // двумя обратными слешами: // { // "name": "boot-file-name", // "data": "EST5EDT4\\,M3.2.0/02:00\\,M11.1.0/02:00" // }, // Целые числовые значения могут быть указаны как в десятичном формате, // так и в шестнадцатеричном. // Шестнадцатеричное число указывается либо как есть (например, abcd) // либо с префиксом "0x" (например, 0xabcd). { "name": "default-ip-ttl", "data": "0xf0" } // Внимание: DHCP-сервер самостоятельно задаёт некоторые параметры, // даже если они не заданы в настройках. // Например, сервер отправляет: // - IP Address lease type (code 51, на основе параметра valid-lifetime); // - Subnet mask (code 1, на основе настроек subnet), // - Renewal time (code 58, на основе параметра renew-timer), // - Rebind time (code 59, на основе параметра rebind-timer). ], // Здесь можно расположить другие глобальные параметры. // Входящие запросы клиентов можно распределить по классам. // Класс может представлять группу устройств, которые обладают // каким-то общим свойством, например, компьютеры с ОС Windows, // телефоны iphone, и т. д. // Исходя из класса можно разрешить или запретить клиентам // использовать определённую подсеть, добавлять для них определённые параметры // или изменять их значения. "client-classes": [ { // Название класса. Используется для ссылки на этот класс. "name": "voip", // Данное тестовое выражение вычисляется для каждого входящего пакета. // Результатом вычисления является Истина или Ложь. // Если результат Истина, то пакет включается в данный класс. "test": "substring(option[60].hex,0,6) == 'Aastra'", // Клиентам, входящих в класс можно назначить свои параметры. "next-server": "192.0.2.254", "server-hostname": "hal9000", "boot-file-name": "/dev/null" // Здесь можно задать свои параметры для класса. } ], // Kea поддерживает загрузку внешних библиотек, т. н. "hook". // Библиотеки могут извлекать информацию из пакетов, а также влиять на то, // как сервер обрабатывает эти пакеты. // Подробнее см. раздел "Hook Libraries" в официальной документации. // "hooks-libraries": [ // { // // Библиотека для аудита всех устройств, обслуженных DHCP-сервером, // // включая их идентификаторы (MAC-адреса), их расположение в сети, // // время их активности. // "library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_legal_log.so", // "parameters": { // "path": "/var/lib/kea", // "base-name": "kea-forensic4" // } // }, // { // // Вычисляемый идентификатор (flex-id). // // Значение параметра вычисляется как комбинация других параметров. // // Подробнее см. раздел "flex_id: Flexible Identifier for Host Reservations" // // из официальной документации. // "library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_flex_id.so", // "parameters": { // "identifier-expression": "relay4[2].hex" // } // } // ], // Простой пример описания IPv4-подсети. // Это список структур, обозначенный скобками [ ]. Каждая структура // обозначена скобками { }. Структура описывает единичную подсеть и может иметь несколько параметров. // Одним из таких параметров является "pools", который также является списком структур. "subnet4": [ { // Задание всей подсети в целом. // Обязательный параметр для каждой подсети. "subnet": "192.0.2.0/24", // Диапазоны адресов подсети, из которых DHCP-сервер выдаёт адреса // клиентам. // Если параметр не задан, то сервер будет выдавать адреса только // тем клиентам, чьи адреса забронированы в настройках сервера. "pools": [ { "pool": "192.0.2.1 - 192.0.2.200" } ], // Параметры подсети. // Как минимум для каждой подсети необходимо указать адрес маршрутизатора, // т. к. без него клиенты не смогут выйти в Интернет. "option-data": [ { "name": "routers", "data": "192.0.2.1" } ], // DHCP-сервер позволяет бронировать IP-адреса за клиентами. // Доступны разные способы идентификации клиентов: // - hw-address (аппаратный MAC-адрес клиента); // - duid (DUID, направленный клиентом); // - client-id (идентификатор клиента, направленный клиентом); // - circuit-id (идентификатор, добавляемый ретранслятором, который // пересылает сетевые пакеты от клиента к DHCP-серверу); // - flex-id (вычисляемый идентификатор). "reservations": [ // Бронирование по MAC-адресу клиента. { "hw-address": "1a:1b:1c:1d:1e:1f", "ip-address": "192.0.2.201" }, // Бронирование по идентификатору клиента. // Также клиент получит забронированное имя узла. Имя узла можно указать // при любом способе идентификации клиента. { "client-id": "01:11:22:33:44:55:66", "ip-address": "192.0.2.202", "hostname": "special-snowflake" }, // Бронирование по DUID клиента. // Также клиент получит список DNS-серверов. // Данная список DNS-серверов на уровне узла имеет преимущество по сравнению // с DNS-серверами, заданными на глобальном уровне, на уровне подсети или класса. { "duid": "01:02:03:04:05", "ip-address": "192.0.2.203", "option-data": [ { "name": "domain-name-servers", "data": "10.1.1.202, 10.1.1.203" } ] }, // Бронирование по circuit-id. // Пример также содержит параметры, специфичные для производителя // клиентского оборудования. // // При использовании бронирования полезно настроить параметры: // reservations-global, reservations-in-subnet, // reservations-out-of-pool (параметр для подсети), // host-reservation-identifiers (глобальный параметр). { "circuit-id": "'charter950'", "ip-address": "192.0.2.204", "option-data": [ { "name": "vivso-suboptions", "data": "4491" }, { "name": "tftp-servers", "space": "vendor-4491", "data": "10.1.1.202, 10.1.1.203" } ] }, // Бронирование для клиента, которому требуется указать определённые // DHCPv4-параметры: next-server, server-hostname, boot-file-name { "client-id": "01:0a:0b:0c:0d:0e:0f", "ip-address": "192.0.2.205", "next-server": "192.0.2.1", "server-hostname": "hal9000", "boot-file-name": "/dev/null" }, // Бронирование на основе вычисляемого идентификатора "flex-id". // Администратор может задать выражение, аналогичное тому, которое // используется при классификации клиента, например, // "substring(relay[0].option[17],0,6)". Затем для входящего пакета // вычисляется значение выражения. Если вычисленное значение совпало // со значением параметра "flex-id", то осуществляется бронирование. // Значение параметра "flex-id" должно быть либо шестнадцатеричным числом // либо текстом, заключённым в одинарные кавычки. // // Примечание: для работы "flex-id" идентификатора требуется // библиотека "flex_id hook". { "flex-id": "'s0mEVaLue'", "ip-address": "192.0.2.206" } // Сюда можно ещё добавить настройки бронирования для клиентов. ] // Сюда можно добавить настройки других подсетей. } ], // Журналирование работы сервера. Сообщения о работе программ // направляются в журнал с помощью сущностей, называемых регистраторами (loggers). // Для разных событий используются разные регистраторы. // Подробнее см. раздел "Logging" в официальной документации. "loggers": [ { // Данная секция относится к kea-dhcp4 - основному регистратору DHCPv4-сервера. // Настроен вывод всех журнальных сообщений (уровня INFO или выше) в файл. "name": "kea-dhcp4", "output_options": [ { // Настройка, куда выводить сообщения: // - stdout (печать в стандартный вывод программы STDOUT); // - stderr (печать в стандартный вывод для ошибок программы STDERR); // - syslog (отправка сообщений в программу журналирования (syslog)); // - syslog:name (отправка сообщений в программу журналирования с использованием указанного имени); // - любое другое значение параметра рассматривается как название файла для вывода. "output": "syslog", // Шаблон для сокращения сообщения. Подходит для использования со службой systemd. "pattern": "%-5p %m\n", // Настройка, определяющая надо ли, чтобы каждое отправленное сообщение // фактически записывалось на диск, а не накапливалось в буфере файла. // "flush": false, // Максимальный размер файла в байтах, перед его ротацией. // "maxsize": 1048576, // Максимальное количество ротаций файла. // "maxver": 8 } ], // Уровень сообщений, отправляемых в журнал. // Поддерживаются значения: FATAL, ERROR, WARN, INFO, DEBUG. "severity": "INFO", // Этот параметр используется, если указан уровень DEBUG. 0 означает минимальную // подробность сообщений, 99 - максимальную. // Внимание: сервер может генерировать огромное количество сообщений. "debuglevel": 0 } ] } } - После изменения настроек необходимо перезапустить сервер:sudo systemctl restart kea-dhcp4-server
- Нет меток