[Из песочницы] Отказоустойчивый DHCP сервер на базе Kea

image

Статья-инструкция по установке и базовой настройке отказоустойчивого сервера Kea DHCP


Kea DHCP — это open-source DHCP сервер, разрабатываемый Internet Systems Consortium (ISC) с поддержкой DHCPv4 и DHCPv6.

ISC — это те же ребята, которые разрабатывают наши любимые bind и dhcpd. Kea — разработана на базе BIND 10.

Kea позволяет запустить dhcp-сервер как для небольших систем, так и для больших телеком/корпоративных компаний. Из нововведений — использование API для управления сервисом, возможность хранения базы lease в СУБД и использование hooks для дополнительных функций.
На момент написания статьи (июнь 2019) — последняя стабильная версия 1.5.0.
Вдаваться в детальную работу протокола DHCP не буду, тогда статья будет раза в два-три больше. Есть хорошая статья на Хабре.

Протокол DHCP работает по протоколу UDP (порты 67–68), используется для динамического выделения ip-адресов. Использует четыре шага для получения/выдачи ip-адресов — discover-offer-request-acknowledge (DORA). Также DHCP использует понятие lease — аренда адреса, срок аренды адреса устройством — lease-time.

image

Почему Kea


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

Этот продукт будет использоваться нашим телеком-оператором, который планирует выдавать около 2 млн. адресов, с 2000 запросами в секунду. Он был выбран из-за скорости работы и возможности создания кластера из двух серверов.

Поддерживаемые ОС


• CentOS Linux — 7.1804 (aka 7.5)
• Fedora — 28, 29
• Ubuntu — 16.04, 18.04
• Debian GNU/Linux — 7, 8, 9
• FreeBSD — 11.0
• macOS — 10.13, 10.14

Планов запуска Kea для Windows нет.

Хранение базы lease


Kea DHCP — поддерживает хранение базы выданных адресов в локальном CSV-файле (memfile) или в одной из трёх СУБД — MySQL, PostgreSQL и Cassandra.

Отличия — в скорости работы и возможностях хранения. Memfile — в 10 раз быстрее, но хранение базы в СУБД позволяет хранить дополнительные поля и опции DHCP. Сравнение скорости работы:

image

Очень большой анализ использования различных баз данных и локального хранения тут.

В нашем проекте решили начать с базы в memfile, так как количество запросов в секунду будет больше 2000.

Установка


В качестве примера Kea будет разворачиваться на базе CentOS 7(minimal edition):

[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)


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

  1. Библиотеки Boost C++ (http://www.boost.org/). # run-time среда с++ для запуска самого Kea
  2. Криптобиблиотеку Botan (вер. 1.9) или OpenSSL (вер. 1.0.1). Советую openssl, так как botan не будет поддерживаться с версии Kea 1.6.0
  3. log4cplus (вер. 1.0.3) development # нужен для создания логов
  4. Компилятор C++
  5. Библиотеки automake, libtool, pkg-config # для сборки и установки самого Kea
  6. Если будете использовать СУБД — то тогда установить MySQL, PostgreSQL или Cassandra.


Опционально если нужны RADIUS или NETCONF/YANG (на англ.)
  • FreeRADIUS client library when --with-freeradius configuration flag used.
  • Sysrepo (version 0.7.6 or later) and libyang (version 0.16-r2 or later) when --with-sysrepo configuration flag used.
  • googletest (version 1.8 or later), when using the --with-gtest configuration option to build the unit tests.
  • The documentation generation tools elinks, docbook-xsl, libxslt and Doxygen, if using the --enable-generate-docs configuration option to create the documentation.


Шаг 1. Устанавливаем нужные зависимости

# wget нужен для скачивания файлов 
sudo yum install wget
# репозиторий community программ
sudo yum install epel-release
# нужен для создания логов
sudo yum install log4cplus-devel
# run-time среда с++ для запуска самого Kea
sudo yum install boost-devel
# для генериации ssl сертификатов, нужен именно *-devel, иначе не поставиться
sudo yum install openssl-devel
# для сборки и установки Kead
sudo yum install automake libtool
# компилятор gcс, поставил Development Tools, т.к. другие варианты установки выдавали ошибку при установке 
sudo yum groupinstall Development\ Tools


Шаг 2. Если все зависимости встали нормально, переходим к установке самого Kea

# скачиваем исходники Kea (или скачиваем с сайта https://ftp.isc.org/isc/kea/1.5.0/ и передаем на сервер)
wget -nd https://ftp.isc.org/isc/kea/1.5.0/kea-1.5.0.tar.gz
# распаковываем архив
tar zxvf kea-1.5.0.tar.gz
# переходим в папку из архива
cd kea-1.5.0
# проверяем нужные библиотеки и готовимся к установке
#./configure [нужные опции здесь] я устанавливал без дополнительных опций
./configure 


*Тут нужно упомянуть про нужные опции — если вы планируете использовать СУБД, нужно отметить эту опцию.

Все опции при сборке:
--prefix
Define the installation location (the default is /usr/local).
--with-boost-include
Define the path to find the Boost headers.
--with-botan-config
Specify the path to the botan-config script to build with Botan for cryptographic functions.
--with-mysql
Build Kea with code to allow it to store leases and host reservations in a MySQL database.
--with-pgsql
Build Kea with code to allow it to store leases and host reservations in a PostgreSQL database.
--with-cql
Build Kea with code to allow it to store leases and host reservations in a Cassandra (CQL) database.
--with-gtest, --with-gtest-source
Enable the building of the C++ Unit Tests using the Google Test framework. This option specifies the path to the gtest source. (If the framework is not installed on your system, it can be downloaded from github.com/google/googletest.) from github.com/google/googletest.)
--with-benchmark, --with-benchmark-source
Enable the building of the database backend benchmarks using the Google Benchmark framework. This option specifies the path to the gtest source. (If the framework is not installed on your system, it can be downloaded from github.com/google/benchmark.)
--with-log4cplus
Define the path to find the Log4cplus headers and libraries.
--with-openssl
Replace Botan by the OpenSSL the cryptographic library. By default configure searches for a valid Botan installation: if one is not found, it searches for OpenSSL.


Собирается относительно долго, при сборке может выдавать ошибки если не установили какую-то зависимость. В конце вы увидите итог сборки:

image

Шаг 3. Устанавливаем

make
sudo make install


Операция make проходит очень долго (час или около того). Make install около минуты.

Запуск и настройка


Запускается из установленной директории:

keactrl start


Еще есть опции stop, reload (перезагрузка конфигурации) и status

При старте запускает три процесса — kea-dhcp4, kea-dhcp6 kea-ctrl-agent — агент для управления и управляющих коммуникации сервера

Если вам не нужен dhcp6, то можно запустить только dhcp4, не забываем запустить агента:

keactrl start -s dhcp4, ctrl_agent


Конфигурация


Основной конфигурационный файл dhcp4 — /usr/local/etc/kea/kea-dhcp4.conf

Файл хорошо описан, очень много комментариев и примеров настроек, не запутаетесь, напишу только главные настройки:
Указываем интерфейс или адрес через который будет работать dhcp4:

"interfaces-config": {
         // interface name (e.g. "eth0" or specific IPv4 address on that
        // interface name (e.g. "eth0/192.0.2.1").
        "interfaces": [ ]
}


Указываем где хранить базу lease

"lease-database": {
        // Memfile is the simplest and easiest backend to use. It's a in-memory
        // C++ database that stores its state in CSV file.
        "type": "memfile",
        "lfc-interval": 3600
    },


Какие DNS сервера будут презентованы клиентам

"option-data": [
       {
            "name": "domain-name-servers",
            "data": "192.0.2.1, 192.0.2.2"
        },

Доменное имя вашей организации

{
            "name": "domain-search",
            "data": "mydomain.example.com, example.com"
        },


И главная настройка — подсети, пулы и default gateway:

"subnet4": [
{ //subnet обязательный параметр, указывает Kea из какой подсети выдавать адреса
"subnet": "192.0.2.0/24",

            //пул адресов, который будут использоваться для выдачи клиентам
            "pools": [ { "pool": "192.0.2.1 - 192.0.2.200" } ],

"option-data": [
                {
                  // указываем default gateway для этой подсети
                    "name": "routers",
                    "data": "192.0.2.1"
                }
            ],


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


"reservations": [
                {
                    "hw-address": "1a:1b:1c:1d:1e:1f",
                    "ip-address": "192.0.2.201"
                }
]


Вот пожалуй основные настройки, после изменения конфигурации нужно перезапустить сервис —

keacrtl stop
keactrl start -s dhcp4,ctrl_agent


CSV-база


Локальная база хранится тут — /usr/local/var/kea/kea-leases4.csv

Логи


Логи по умолчанию хранятся — /usr/local/var/log/

Тут у каждого из компонентов отдельный файл:

  • kea-dhcp4.log
  • kea-dhcp6.log
  • kea-ctrl-agent.log


В отдельной статье опишу как запустить кластер из двух серверов и настройку синхронизации базы выдачи lease.

© Habrahabr.ru