DHCP/Failover
В этой статье мы рассмотрим настройку отказоустойчивого DHCP-сервера, состоящего из двух серверов ISC DHCPd с распределением нагрузки. На обоих серверах должна быть установлена одна и та же версия DHCP-сервера, так как разные версию могут реализовывать отказоустойчивость по разному.
Тестовый стенд:
- DHCP-Server01 — IP 192.168.135.121 с установленным ISC DHCP server
- DHCP-Server02 — IP 192.168.135.122 с установленным ISC DHCP server
- 192.168.135.50 — 192.168.135.70 диапазон раздаваемых адресов
- 192.168.135.251 — адрес шлюза
- 192.168.135.252 — адрес DNS-сервера
Настройка
1. Выберите какой из серверов будет главным (Primary), а какой подчиненным(Secondary).
2. Убедитесь, что время между серверами синхронизировано, так как DHCP протокол чувствителен к рассинхронизации времени.
3. Определите какие сети и пулы адресов будут обслуживаться.
4. Добавьте следующие блоки, описывающие отказоустойчивую группу, в файл /etc/dhcp/dhcpd.conf :
Для Primary сервера:
failover peer «failover-partner»
failover peer «failover-partner»
5. Добавьте на обоих серверах ссылку на отказоустойчивую группу в каждый пул подсети:
subnet 192.168.135.0 netmask 255.255.255.0 < option routers 192.168.135.251; option subnet-mask 255.255.255.0; option nis-domain "domain.org"; option domain-name "domain.org"; option domain-name-servers 192.168.135.252; default-lease-time 21600; max-lease-time 43200; pool < failover peer "failover-partner"; range 192.168.135.50 192.168.135.70; >>
6. Добавьте на каждом сервере настройки OMAPI и секретный ключ:
omapi-port 7911; omapi-key omapi_key; key omapi_key < algorithm hmac-md5; secret tMvk90x7s+/kCt+6syEMeLlVLUF9+Jg3VNUfMC1JLzz52+VwpMPiGXkA JtEaI9/wgAUQAm6C4Q8Ao9f4UEBOUQ==; >
Для генерации ключа можно воспользоваться утилитой dnssec-keygen, которая поставляется вместе с DNS-сервером BIND:
# dnssec-keygen -a HMAC-MD5 -b 512 -n USER DHCP_OMAPI Kdhcp_omapi.+157+17748 # cat Kdhcp_omapi.+157+17748.key DHCP_OMAPI. IN KEY 0 3 157 tMvk90x7s+/kCt+6syEMeLlVLUF9+Jg3VNUfMC1JLzz52+VwpMPiGXkA JtEaI9/wgAUQAm6C4Q8Ao9f4UEBOUQ==
7. Перезагрузите оба сервера.
8. Проверьте отказоустойчивость поочередно выключая серверы.
Записки IT специалиста
Настраиваем отказоустойчивый DHCP-сервер на базе ISC DHCP
DHCP-сервер является одним из ключевых элементов сетевой инфраструктуры любого размера и его нормальное функционирование является залогом стабильной работы сети. Одним из способов это обеспечить является создание отказоустойчивой структуры из двух серверов, которые в нормальном режиме балансируют нагрузку, а в случае недоступности одного из серверов обслуживание всех его клиентов переходит к партнеру. В данной статье мы расскажем, как настроить такой сервер на базе ISC DHCP на платформе Linux.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
ISC DHCP — один из самых популярных пакетов DHCP-сервера для Linux и Unix-like систем, при этом он прост в настройке и нетребователен к ресурсам. В данной статье мы будем выполнять все действия в среде Debian, и инструкция подойдет для любой современной системы основанной на Debian или Ubuntu, а с поправкой на работу пакетного менеджера — для любых иных Linux дистрибутивов.
Для облегчения понимания настроек мы подготовили схему, на которой обозначили все ключевые элементы и используемую в примере адресацию.
Если не указано иного, все команды выполняются от имени суперпользователя или через sudo.
Получение OMAPI-ключа
Для взаимодействия серверов между собой в составе отказоустойчивой структуры используется специальный интерфейс Object Management API (OMAPI), который позволяет получать доступ к объектам, расположенным в базе DHCP-сервера (данные об аренде, узлах, группах). в целях безопасности сервера производят взаимную аутентификацию и для этого нам понадобится специальный ключ.
Генерация ключа производится при помощи утилиты tsig-keygen, которая входит в состав DNS-сервера bind, но не будем же мы его ставить ради единственной, по сути, одноразовой операции. Кстати, если у вас есть установленный bind, то вы можете выполнить генерацию ключа на нем. Но мы пойдем другим путем. Создадим в домашней директории суперпользователя временную папку и перейдем в нее:
Теперь скачаем и распакуем содержимое пакета bind9, чтобы не вводить полное имя пакета во второй команде воспользуйтесь автоматической подстановкой по клавише Tab :
apt download bind9
dpkg-deb -xv bind9_1%3a9.16.27-1~deb11u1_amd64.deb /root/tmp
Перейдем в каталог с нужными бинарниками:
И выполним генерацию ключа:
./tsig-keygen DHCP.OMAPI > /root/dhсp_omapi.key
После чего временную папку со всем содержимым можно удалить, она нам больше не понадобится:
Посмотреть содержимое ключа можно командой:
В выводе вы должны увидеть следующее:
key "DHCP_OMAPI" algorithm hmac-sha256;
secret "3Vx8hd3OWNWudoJlq3bvvnnwv0H8n44ZdwCoTkFVPHo авторитетность" сервера, в этом случае получив запрос на адрес, не принадлежащий текущей сети, сервер ответит сообщением DHCPNAK, которое предлагает клиенту отказаться от адреса и запросить новый. Это позволяет быстрее получать адреса мобильным клиентам, которые до этого были подключены к другой сети. Затем в самый конец файла добавляем:
omapi-port 7911;
omapi-key omapi_key;
key omapi_key algorithm hmac-sha256;
secret 3Vx8hd3OWNWudoJlq3bvvnnwv0H8n44ZdwCoTkFVPHo=;
>
Вот здесь нам и понадобятся данные, полученные на предыдущем шаге, правильно указываем хеш-алгоритм и прописываем полученный ключ.
Также подключим внешние файлы конфигурации, мы разделили их на три части: конфигурация отказоустойчивости, настройки зоны и записи о резервировании. Хранить мы их будем в отдельной директории. Добавляем в конец файла еще три строки:
include "/etc/dhcp/dhcpd.d/failover.conf";
include "/etc/dhcp/dhcpd.d/subnet.conf";
include "/etc/dhcp/dhcpd.d/static.conf";
Сохраняем файл и перейдем к созданию внешних файлов и директорий:
mkdir /etc/dhcp/dhcpd.d
cd /etc/dhcp/dhcpd.d
touch failover.conf subnet.conf static.conf
Начнем с /etc/dhcp/dhcpd.d/failover.conf, в котором мы будем хранить конфигурацию отказоустойчивой группы, внесем в него следующий текст:
failover peer "failover-dhcp" primary;
address 192.168.72.11;
port 647;
peer address 192.168.72.12;
peer port 647;
max-response-delay 60;
max-unacked-updates 10;
mclt 3600;
split 128;
load balance max seconds 3;
>
Самой первой строкой мы указываем тип сервера - primary - первичный. Затем следует адрес и порт сервера, адрес и порт партнера. Для работы используется порт 647, который специально используется для DHCP-FAILOVER. опция max-response-delay указывает на максимально допустимое расхождение времени между двумя узлами.
Два следующих параметра должны быть указаны только на первичном сервере.
- mclt (максимальное время обслуживания клиента) - он показывает в течении какого времени сервер, находящийся в состоянии обработки отказа, будет ждать восстановления связи с партнером, по его истечении контроль за распределением IP-адресов полностью переходит под управление оставшегося сервера.
- split - задает параметры разделения пула адресов между серверами. Может иметь значения от 0 до 256, при значении в 128 пул будет разделен 50/50, и нагрузка будет равномерно балансироваться между серверами. Если указать 256, то весь пул будет управляться первичным сервером, а вторичный сервер перейдет в режим горячей замены.
Следующий конфигурационный файл /etc/dhcp/dhcpd.d/subnet.conf хранит в себе параметры области:
subnet 192.168.72.0 netmask 255.255.255.0 option subnet-mask 255.255.255.0;
option routers 192.168.72.1;
option domain-name-servers 192.168.72.1;
default-lease-time 28800;
max-lease-time 86400;
pool failover peer "failover-dhcp";
range 192.168.72.100 192.168.72.199;
>
>
Настройки области предельно просты, мы предлагаем клиентам самый базовый набор опций: маску сети, адрес маршрутизатора и адрес(а) DNS-серверов. С полным перечнем и синтаксисом всех доступных опций вы можете ознакомиться в данном разделе документации.
Отдельно обратим внимание на опции default-lease-time - время аренды, выдаваемое по умолчанию и max-lease-time - максимальное время аренды, которое может быть выдано по запросу клиента. Если клиент не запрашивает конкретное время аренды ему будет выдан адрес на время, указанное в параметре по умолчанию, иначе - желаемое время, но не превышающее максимальное. В нашем случае это 8 часов и сутки.
В секции pool указываем диапазон адресов к выдаче и ссылку на отказоустойчивую группу. Если пулов несколько - то указываем отказоустойчивые группы для каждого из них, при этом разные пулы могут обслуживать разные пары серверов.
И, наконец, последний файл /etc/dhcp/dhcpd.d/static.conf, здесь мы будем хранить резервирование IP-адресов, по мере надобности добавляем в него секции:
host myhost hardware ethernet 08:45:32:00:00:23;
fixed-address 192.168.72.121;
>
В данном случае мы зарезервировали за устройством с MAC-адресом 08:45:32:00:00:23 IP-адрес 192.168.72.121.
Проверим правильность конфигурации:
dhcpd -t -cf /etc/dhcp/dhcpd.conf
И при отсутствии ошибок обязательно перезагрузим сервер.
Для управления службой используйте
systemctl start|stop|restart|status isc-dhcp-server
Убедившись, что служба запущена и работает без ошибок, перейдем к настройке второго сервера.
Настройка вторичного DHCP-сервера
Настройки обоих серверов должны быть полностью идентичны, за исключением настроек отказоустойчивой группы, поэтому можете выполнить все настройки аналогично предыдущей части статьи или просто скопировать конфигурационные файлы с первичного сервера на вторичный. Все изменения также должны вноситься синхронно. Поэтому мы и разделили конфигурацию на несколько внешних файлов: если вы внесли изменения в настройки области или добавили новые резервирования - просто скопируйте соответствующий файл с первичного сервера на вторичный.
Внести изменения нам потребуется только в файл /etc/dhcp/dhcpd.d/failover.conf, он должен иметь следующее содержимое:
failover peer "failover-dhcp" secondary;
address 192.168.72.12;
port 647;
peer address 192.168.72.11;
peer port 647;
max-response-delay 60;
max-unacked-updates 10;
load balance max seconds 3;
>
Первая строка указывает что это вторичный сервер - secondary, затем следуют адрес и порт сервера и его партнера, за ними остальные опции, которые остаются без изменений.
Сохраняем настройки, проверяем их и перезагружаем сервер. Теперь нашу область будут обслуживать сразу оба сервера, балансируя нагрузку между собой. Для проверки по очереди выключаем сервера и убеждаемся, что оставшийся сервер берет на себя обслуживание клиентов.
Настройка брандмауэра
Если на ваших узлах включен брандмауэр iptables, то вам потребуется добавить в него два разрешающих правила:
iptables -A INPUT -p udp -m state --state NEW -m udp --dport 67 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 647 -j ACCEPT
Второе правило можно немного изменить, разрешив серверам принимать соединения только друг от друга:
iptables -A INPUT -s 192.168.72.12 -p tcp -m state --state NEW -m tcp --dport 647 -j ACCEPT
Где -s 192.168.72.12 - адрес сервера-партнера. Данные правила должны располагаться выше правила, запрещающего все входящие соединения.
Дополнительно
В завершение заглянем в /etc/default/isc-dhcp-server, здесь нас будут интересовать две последние опции в файле:
INTERFACESv4="eth0"
#INTERFACESv6=""
В первой из них желательно задать интерфейс (можно несколько) на которых ваш DHCP-сервер будет принимать запросы, это важно, если интерфейсов более одного. Вторая опция отвечает за работу c IPv6, если вы не работаете с этим протоколом и не настраивали обработку IPv6 запросов, то просто отключите шестую версию закомментировав эту строку.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал: