...
| Command |
|---|
sudo apt install kea |
Конфигурационные файлы
IPv4 DHCP-сервер:
- Настройки сервера хранятся в JSON-формате в файле
/etc/kea/kea-dhcp4.conf.Раскрыть title Содержимое файла с настройками... Блок кода // Как минимум необходимо настроить: // - имена сетевых интерфейсов, на которых работает 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 } ] } } - После изменения настроек необходимо перезапустить сервер:
Command sudo systemctl restart kea-dhcp4-server
IPv6 DHCP-сервер:
- Настройки сервера хранятся в JSON-формате в файле
/etc/kea/kea-dhcp6.conf.Раскрыть title Содержимое файла с настройками... Блок кода // Как минимум необходимо настроить: // - имена сетевых интерфейсов, на которых работает DHCP-сервер; // - выдаваемые клиентам параметры (например, адреса DNS-серверов); // - подсеть, в рамках которой выдаются адреса клиентам. // // В файле приведено малое количество настроек. // Полное описание возможных настроек сервера дано в официальной документации // "Kea User's Guide", находящейся по адресу https://kea.readthedocs.io/. { "Dhcp6": { // Имена сетевых интерфейсов, на которых принимает запросы DHCP-сервер. "interfaces-config": { // Обычно достаточно указать название сетевого интерфейса, например: "eth0". // IPv6 DHCP-сервер работает с мультикастными сетевыми пакетами. // Чтобы сервер также обрабатывал и юникаст-пакеты, необходимо // указать конкретный IP-адрес, например: "eth0/2001:db8::1". // (DHCPv6 - это протокол, основанный на мультикастной передаче данных). "interfaces": [ "ens3" ] }, // UNIX-сокет для управления DHCP-сервером. Используется программой kea-ctrl-agent: // для настройки сервера, для загрузки настроек из файла, // для получения статистики сервера, и т. д. "control-socket": { "socket-type": "unix", "socket-name": "/run/kea/kea6-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 }, // Глобальные настройки таймеров // Клиент должен продлять аренду адреса каждые 1000 секунд. // Если сервер не ответил на запрос о продлении аренды в течение 2000 секунд, // то клиент должен запустить процедуру REBIND (экстренное обновление аренды, позволяющее // переключиться на другой сервер). // Предпочтительный срок аренды адреса 3000 секунд. // Допустимый срок аренды адреса 4000 секунд. "renew-timer": 1000, "rebind-timer": 2000, "preferred-lifetime": 3000, "valid-lifetime": 4000, // Глобальные параметры. Отправляются клиенту, когда он их запрашивает. // Значение параметров может быть переопределено на более низких уровнях. // Уровни (от самого верхнего до самого нижнего): // - глобальный (наиболее общие настройки, могут быть переопределены на других уровнях); // - класс клиента; // - подсеть; // - узел (настройки данного уровня переопределяют настройки всех остальных уровней) // // Необходимо настраивать только те параметры, которые действительно нужны. // // Полный перечень параметров описан в официальной документации. "option-data": [ // Для задания параметра обычно достаточно указать его название или код, // а также данные. // Полное описание параметра состоит из названия, кода, области, // csv-формата и данных. // По умолчанию область параметра = "dhcp6", csv-формат = "true". // // Например, чтобы задать DNS-серверы, необходимо указать: // { // "name": "dns-servers", // "code": 23, // "csv-format": "true", // "space": "dhcp6", // "data": "2001:db8:2::45, 2001:db8:2::100" // } // но это слишком длинное описание, проще сделать так: { "name": "dns-servers", "data": "2001:db8:2::45, 2001:db8:2::100" }, // Вместо названия параметра можно использовать его код. // // Например, DHCPv6 может дополнительно использовать юникаст-пакеты, // если указан соответствующий параметр. // Параметру "unicast" соответствует код 12. Поэтому к параметру можно обратиться либо // по его названию: "unicast" либо по коду: 12. // При использовании параметра также необходимо указать адрес, // на котором сервер будет принимать пакеты. { "code": 12, "data": "2001:db8::1" }, // Запятая в строковых данных должна экранироваться // двумя обратными слешами: { "name": "new-posix-timezone", "data": "EST5EDT4\\,M3.2.0/02:00\\,M11.1.0/02:00" }, // Целые числовые значения могут быть указаны как в десятичном формате, // так и в шестнадцатеричном. // Шестнадцатеричное число указывается либо как есть (например, abcd) // либо с префиксом "0x" (например, 0xabcd). { "name": "preference", "data": "0xf0" }, // Значением некоторых параметров является кортеж, // который должен быть заключён в кавычки. Отдельные данные в кортеже разделяются запятыми. { "name": "bootfile-param", "data": "root=/dev/sda2, quiet, splash" } ], // 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-forensic6" // } // }, // { // // Вычисляемый идентификатор (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": "relay6[0].option[37].hex" // } // } // ], // Простой пример описания IPv6-подсети. // Это список структур, обозначенный скобками [ ]. Каждая структура // обозначена скобками { }. Структура описывает единичную подсеть и может иметь несколько параметров. // Одним из таких параметров является "pools", который также является списком структур. "subnet6": [ { // Задание всей подсети в целом. // Обязательный параметр для каждой подсети. "subnet": "2001:db8:1::/64", // Диапазоны адресов подсети, из которых DHCP-сервер выдаёт адреса клиентам. // Если параметр не задан, то сервер будет выдавать адреса только // тем клиентам, чьи адреса забронированы в настройках сервера. "pools": [ { "pool": "2001:db8:1::/80" } ], // Сервер поддерживает делегирование префиксов (PD). Этот механизм делегирует // целый префикс адресов вместо единичного адреса. // Необходимо задать префикс, а также размер делегируемых префиксов, на которые он будет разбит. // Например, исходный префикс 2001:db8:1::/56 разбивается на делегируемые префиксы /64. // Это даст 256 (2^(64-56)) делегируемых префиксов. "pd-pools": [ { "prefix": "2001:db8:8::", "prefix-len": 56, "delegated-len": 64 // Сервер также поддерживает исключаемые префиксы. // Необходимо убедиться, что исключаемый префикс соответствует пулу адресов. // "excluded-prefix": "2001:db8:8:0:80::", // "excluded-prefix-len": 72 } ], "option-data": [ // Параметры подсети. // Здесь можно переопределить глобальные параметры. { "name": "dns-servers", "data": "2001:db8:2::dead:beef, 2001:db8:2::cafe:babe" } ], // Для каждой подсети можно настроить бронирование адресов. "reservations": [ // Бронирование по DUID клиента. { "duid": "01:02:03:04:05:0A:0B:0C:0D:0E", "ip-addresses": [ "2001:db8:1::100" ] }, // Бронирование по MAC-адресу клиента. // Также настроены два дополнительных параметра, которые имеют преимущество // по сравнению с этими же параметрами, заданными // на глобальном уровне, на уровне подсети или класса. { "hw-address": "00:01:02:03:04:05", "ip-addresses": [ "2001:db8:1::101" ], "option-data": [ { "name": "dns-servers", "data": "3000:1::234" }, { "name": "nis-servers", "data": "3000:1::234" }], // Клиенту будет автоматически назначен класс "client-classes": [ "special_snowflake", "office" ] }, // Более сложная настройка бронирования. // Клиент с заданным DUID получит адрес, префикс и имя узла. // Бронируется адрес, который не входит в пул динамически бронируемых адресов. // Также клиент получит параметры, касающиеся поставщика клиентского оборудования. { "duid": "01:02:03:04:05:06:07:08:09:0A", "ip-addresses": [ "2001:db8:1:0:cafe::1" ], "prefixes": [ "2001:db8:2:abcd::/64" ], "hostname": "foo.example.com", "option-data": [ { "name": "vendor-opts", "data": "4491" }, { "name": "tftp-servers", "space": "vendor-4491", "data": "3000:1::234" } ] }, // Бронирование на основе вычисляемого идентификатора "flex-id". // Администратор может задать выражение, аналогичное тому, которое // используется при классификации клиента, например, // "substring(relay[0].option[17],0,6)". Затем для входящего пакета // вычисляется значение выражения. Если вычисленное значение совпало // со значением параметра "flex-id", то осуществляется бронирование. // Значение параметра "flex-id" должно быть либо шестнадцатеричным числом // либо текстом, заключённым в одинарные кавычки. // // Примечание: для работы "flex-id" идентификатора требуется // библиотека "flex_id hook". { "flex-id": "'somevalue'", "ip-addresses": [ "2001:db8:1:0:cafe::2" ] } ] } // Сюда можно добавить настройки других подсетей. // { // "subnet": "2001:db8:2::/64", // "pools": [ { "pool": "2001:db8:2::/80" } ] // }, // { // "subnet": "2001:db8:3::/64", // "pools": [ { "pool": "2001:db8:3::/80" } ] // }, // { // "subnet": "2001:db8:4::/64", // "pools": [ { "pool": "2001:db8:4::/80" } ] // } ], // Здесь можно определить классы клиентов. См. для примера раздел "client-classes" // в описании настроек IPv4 DHCP-сервера. // DDNS настройка взаимодействия с DDNS-сервером. // Журналирование работы сервера. Сообщения о работе программ // направляются в журнал с помощью сущностей, называемых регистраторами (loggers). // Для разных событий используются разные регистраторы. // Подробнее см. раздел "Logging" в официальной документации. "loggers": [ { // Данная секция относится к kea-dhcp6, т. е. к IPv6 DHCP-серверу. "name": "kea-dhcp6", "output_options": [ { // Настройка, куда выводить сообщения: // - stdout (печать в стандартный вывод программы STDOUT); // - stderr (печать в стандартный вывод ошибок программы STDERR); // - syslog (отправка сообщений в программу журналирования (syslog)); // - syslog:name (отправка сообщений в программу журналирования с использованием указанного имени); // - любое другое значение параметра рассматривается как название файла для вывода. "output": "stdout", // Шаблон для сокращения сообщения. Подходит для использования со службой systemd. "pattern": "%-5p %m\n", // Настройка, определяющая надо ли, чтобы каждое отправленное сообщение // фактически записывалось на диск, а не накапливалось в буфере файла. // "flush": false, // Максимальный размер файла в байтах, перед его ротацией. // "maxsize": 1048576, // Максимальное количество ротаций файла. // "maxver": 8 } ], // Уровень сообщений, отправляемых в журнал. // Поддерживаются значения: FATAL, ERROR, WARN, INFO, DEBUG. "severity": "INFO", // Этот параметр используется, если указан уровень DEBUG. 0 означает минимальную // подробность сообщений, 99 - максимальную. // Внимание: сервер может генерировать огромное количество сообщений. "debuglevel": 0 } ] } } - После изменения настроек необходимо перезапустить сервер:
Command sudo systemctl restart kea-dhcp6-server
Создание отказоустойчивого DHCP-кластера
Архитектура кластера
Отказоустойчивый DHCP-кластер состоит из двух узлов: ведущего dhcp-1 и подчинённого dhcp-2.
На каждом узле запущены: DHCP-сервер kea-dhcp4 и управляющий агент kea-ctrl-agent.
DHCP-клиент общается с DHCP-серверами с помощью широковещательных запросов.
В нормальном режиме: ведущий узел принимает запросы и выдаёт адреса клиентам, а подчинённый узел только получает информацию о выданных адресах.
При отказе ведущего узла: подчинённый узел принимает запросы и выдаёт адреса клиентам. Отказом считается потеря связи между узлами.
При восстановлении работы ведущего узла: вначале ведущий узел получает информацию о выданных адресах от подчинённого узла, затем кластер возвращается в нормальный режим работы.
Рисунок 1. Архитектура двухузлового DHCP-кластера
Кластер и его узлы:
...
Настройка strongSwan-клиента
Предполагается, что по статье настроен: Единый доступ к ключевым носителям разных производителей.
Предварительная настройка
Задать имена узлов и настроить разрешение имён в соответствии со статьёй "Настройка разрешения имен и статических IP-адресов".
При тестовом создании кластера можно настроить разрешение имён с помощью файла /etc/hosts:
- На каждом узле – добавить в файл
/etc/hostsстроки:Блок кода 10.192.6.108 dhcp-1 10.192.6.109 dhcp-2 - На первом узле – установить имя узла:
Command sudo hostnamectl hostname dhcp-1 - На втором узле – установить имя узла:
Command sudo hostnamectl hostname dhcp-2
Настройка кластера
На ведущем узле dhcp-1:
- Создать файл
/etc/kea/kea-ctrl-agent.confс настройками управляющего агента.Раскрыть title Содержимое файла с настройками... Блок кода { "Control-agent": { // IP-адрес и порт, на которых управляющий агент принимает HTTP-запросы "http-host": "10.192.6.108", "http-port": 8000, "control-sockets": { // Сокет для связи с локальным DHCPv4-сервером // ДОЛЖЕН СОВПАДАТЬ С СОКЕТОМ, КОТОРЫЙ ИСПОЛЬЗУЕТ DHCPv4-СЕРВЕР "dhcp4": { "comment": "socket to DHCP4 server", "socket-type": "unix", "socket-name": "/run/kea/kea4-ctrl-socket" } }, // Настройки журналирования "loggers": [ { "name": "kea-ctrl-agent", "output_options": [ { "output": "syslog" } ], "severity": "INFO" } ] } } - Создать файл
/etc/kea/kea-dhcp4.confс настройками DHCP-сервера.
В файле за работу кластера отвечает раздел "hooks-libraries". На обоих узлах этот раздел отличается только значением параметра "this-server-name".Раскрыть title Содержимое файла с настройками... Блок кода { "Dhcp4": { "interfaces-config": { "interfaces": [ "ens3" ] }, "control-socket": { "socket-type": "unix", "socket-name": "/run/kea/kea4-ctrl-socket" }, "lease-database": { "type": "memfile" }, "valid-lifetime": 43200, "renew-timer": 21600, "rebind-timer": 32400, "expired-leases-processing": { "reclaim-timer-wait-time": 3600, "max-reclaim-leases": 0, "max-reclaim-time": 0 }, "hooks-libraries": [ // Библиотека для обмена информацией между DHCP-серверами // о выданных адресах { "library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_lease_cmds.so" }, // Библиотека для работы отказоустойчивого кластера { "library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_ha.so", "parameters": { // На каждом узле должны быть одинаковые настройки, // за исключением параметра "this-server-name" "high-availability": [ { // Уникальное имя сервера ТЕКУЩЕГО УЗЛА. "this-server-name": "dhcp-1", "mode": "hot-standby", "heartbeat-delay": 10000, "max-response-delay": 60000, "max-ack-delay": 5000, "max-unacked-clients": 0, "sync-timeout": 60000, "peers": [ // Настройки ВЕДУЩЕГО узла кластера { "name": "dhcp-1", "url": "http://10.192.6.108:8000/", "role": "primary" }, // Настройки ПОДЧИНЁННОГО узла кластера { "name": "dhcp-2", "url": "http://10.192.6.109:8000/", "role": "standby" } ] } ] } } ], "subnet4": [ { "subnet": "10.192.6.0/24", "interface": "ens3", "pools": [ { "pool": "10.192.6.105-10.192.6.115" } ] } ], "loggers": [ { "name": "kea-dhcp4", "output_options": [ { "output": "syslog" } ], "severity": "INFO" } ] } } - Перезапустить DHCP-сервер и управляющего агента для применения настроек:
Command sudo systemctl restart kea-dhcp4-server
Command sudo systemctl restart kea-ctrl-agent
На подчинённом узле dhcp-2:
...
| Раскрыть | ||
|---|---|---|
| ||
|
...
| Раскрыть | ||
|---|---|---|
| ||
|
...
| Command |
|---|
sudo systemctl restart kea-dhcp4-server |
...