Пример настройки DHCP сервера на шлюзе «С-Терра Шлюз»
Настоящий документ содержит описание способа совместного использования Продуктов компании ООО «С-Терра СиЭсПи» и Продуктов третьих производителей.
ООО «С-Терра СиЭсПи» осуществляет сопровождение настоящего сценария в части настроек Продуктов Компании. Упоминание наименований, продуктов, торговых марок третьих организаций исключительно неформально и не является поддержкой, рекомендацией либо рекламой. ООО «С-Терра СиЭсПи» не несет какой-либо ответственности в отношении работоспособности и использования этих Продуктов. Документ имеет статус вспомогательного материала, который может быть использован технологическими партнерами, компаниями-интеграторами, при разработке собственных решений.
Решения, разработанные на базе данного сценария, могут применяться в действующих сетях/системах только после тестовой и/или опытной эксплуатации.
В данном документе рассматривается настройка DHCP сервера на шлюзе безопасности «С-Терра Шлюз».
Host1 получает по DHCP динамический IP-адрес, а Host2 – фиксированный (в качестве ОС на хостах Hos1/Host2 будет использоваться Debian 9). Построение защищенного IPsec туннеля в данном документе рассматриваться не будет.
Схема стенда (Рисунок 1):
Рисунок 1
1. Измените файл конфигурации /etc/dhcp/dhcpd.conf.
root@GW1:~# vim.tiny /etc/dhcp/dhcpd.conf
# Sample configuration file for ISC dhcpd
authoritative;
server-name GW1;
log-facility local7;
ddns-update-style none;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.1;
range 192.168.1.10 192.168.1.254;
default-lease-time 21600;
max-lease-time 28800;
}
host host2 {
hardware ethernet 00:50:56:9e:d6:06;
fixed-address 192.168.1.5;
}
где:
· authoritative – этот параметр рекомендуется указывать в случаях, когда данный DHCP сервер является единственным или главным DHCP сервером в сети. Этот параметр включает отправку DHCPNAK, когда DHCP клиент пытается продлить или запросить некорректный с точки зрения DHCP сервера адрес. Этот параметр можно размещать как на глобальном уровне, так внутри subnet (в этом случае DHCP сервер будет считаться authoritative для данной конкретной подсети).
· server-name <имя> – имя сервера;
· log-facility <уровень> – уровень лога syslog; при указании local7, файлы логов будут писаться в файл /var/log/cspvpngate.log;
· ddns-update-style none; – отключение поддержки DDNS;
· subnet <IP-адрес> netmask <маска> { – описание параметров сети, для которой будут раздаваться сетевые настройки;
· option routers <IP-адрес> – IP адрес шлюза по умолчанию;
· option subnet-mask <маска> – маска сети;
· option domain-name-servers <IP-адрес> – DNS сервер по умолчанию;
· range <диапазон IP-адресов> – диапазон IP-адресов, который будет раздаваться клиентам, допускается использовать несколько range внутри одного subnet;
· default-lease-time <время> – время аренды IP-адресов (в секундах);
· max-lease-time <время> – максимальное время аренды;
· host <имя хоста> { hardware ethernet <MAC-адрес>; fixed-address <IP-адрес>; } – хосту с соответствующим MAC-адресом статически привязать IP-адрес. Данный параметр следует размещать на глобальном уровне, а не внутри subnet. IP-адрес, указанный в host, не должен входить в диапазон адресов, которые заданы в параметрах range.
2. Для настройки интерфейса, на котором будут раздаваться IP-адреса, отредактируйте файл /etc/default/isc-dhcp-server. В переменной INTERFACES пропишите необходимый интерфейс:
root@GW1:~# vim.tiny /etc/default/isc-dhcp-server
INTERFACES="eth0"
Если необходимо задать несколько интерфейсов пропишите их через пробел (в данном сценарии используется только один интерфейс):
INTERFACES="eth0 eth3"
3. Задайте через cisco-like консоль IP-адреса для интерфейсов из п.2 (соответствие между именами интерфейсов в нотации linux и cisco-like можно посмотреть в файле /etc/ifaliases.cf). IP-адреса должны быть из диапазона, который задан в параметре subnet в п.1.
4. Запустите сервис DHCP сервера:
root@GW1:~# systemctl start isc-dhcp-server.service
· Для того чтобы демон при перезагрузке стартовал автоматически, выполните команду:
root@GW1:~# systemctl enable isc-dhcp-server.service
В Приложение представлены тексты конфигураций /etc/dhcp/dhcpd.conf и /etc/default/isc-dhcp-server для шлюза GW1.
Настройте получение сетевых параметров на соответствующих интерфейсах (в данной инструкции это ens32) хостов Host1/Host2 по DHCP.
На устройстве Host1 проверьте полученные по DHCP настройки (имя файла настроек: /var/lib/dhcp/dhclient.<название_интерфейса>.leases):
root@Host1:~# cat /var/lib/dhcp/dhclient.ens32.leases
lease {
interface "ens32";
fixed-address 192.168.1.10;
server-name "GW1";
option subnet-mask 255.255.255.0;
option routers 192.168.1.1;
option dhcp-lease-time 21600;
option dhcp-message-type 5;
option domain-name-servers 192.168.1.1;
option dhcp-server-identifier 192.168.1.1;
renew 1 2019/07/22 10:41:08;
rebind 1 2019/07/22 13:01:36;
expire 1 2019/07/22 13:46:36;
}
Устройству Host1 выдан IP-адрес 192.168.1.10 из заданного диапазона.
На устройстве Host2 проверьте полученные по DHCP настройки:
root@Host2:~# cat /var/lib/dhcp/dhclient.ens32.leases
lease {
interface "ens32";
fixed-address 192.168.1.5;
server-name "GW1";
option subnet-mask 255.255.255.0;
option routers 192.168.1.1;
option dhcp-lease-time 21600;
option dhcp-message-type 5;
option domain-name-servers 192.168.1.1;
option dhcp-server-identifier 192.168.1.1;
renew 1 2019/07/22 10:58:56;
rebind 1 2019/07/22 13:13:55;
expire 1 2019/07/22 13:58:55;
}
Устройству Host2 был назначен фиксированный IP-адрес 192.168.1.5 по MAC-адресу интерфейса.
Также, можно увидеть отправленные сервером настройки на стороне DHCP сервера:
root@GW1:~# cat /var/lib/dhcp/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.3.5
# authoring-byte-order entry is generated, DO NOT DELETE
authoring-byte-order little-endian;
server-duid "\000\001\000\001$\310@\266\000PV\236\370\027";
lease 192.168.1.10 {
starts 1 2019/07/22 09:44:51;
ends 1 2019/07/22 15:44:51;
cltt 1 2019/07/22 09:44:51;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:50:56:9e:10:2e;
client-hostname "Host1";
}
# Sample configuration file for ISC dhcpd for Debian
authoritative;
server-name GW1;
log-facility local7;
ddns-update-style none;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.1;
range 192.168.1.10 192.168.1.254;
default-lease-time 21600;
max-lease-time 28800;
}
host host2 {
hardware ethernet 00:50:56:9e:d6:06;
fixed-address 192.168.1.5;
}
INTERFACES="eth0"
В случае необходимости, можно настроить DHCP сервер для работы на нескольких интерфейсах и раздачи с них адресов из разных пулов. В иностранной литературе такое решение называется Multihomed DHCP Server.
Ниже показан пример конфигурации /etc/dhcp/dhcpd.conf для такого случая. Привязка пула к интерфейсу здесь происходит при помощи параметра subnet (на интерфейсе шлюза должен быть адрес из этой подсети).
default-lease-time 600;
max-lease-time 7200;
subnet 10.0.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option routers 10.0.0.1;
range 10.0.0.5 10.0.0.15;
}
subnet 172.16.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option routers 172.16.0.1;
range 172.16.0.5 172.16.0.15;
}
В файле /etc/default/isc-dhcp-server следует указать используемые интерфейсы через пробел. Пример:
INTERFACES="eth0 eth3"
В некоторых случаях, помимо IP-адреса, устройству необходимо получать адрес TFTP сервера для скачивания файлов. Для этого, сервисом DHCP предусмотрены опции под номерами 66 и 67. Для того, чтобы осуществить настройку данных опций, необходимо произвести некоторые настройки на DHCP сервере и на DHCP клиенте.
На DHCP сервере необходимо отредактировать файл /etc/dhcp/dhcpd.conf, добавив в него следующие строки:
...
option tftp-server-name "ftp://login:password@192.168.30.245";
option bootfile-name "serial";
...
· option tftp-server-name – опция под номером 66, которая передаёт в качестве аргумента строку с адресом TFTP сервера;
· option bootfile-name – опция под номером 67, которая передаёт в качестве аргумента строку с путём до файла, который необходимо скачать c TFTP сервера.
Файл /etc/dhcp/dhcpd.conf должен иметь вид:
root@GW1:~# cat /etc/dhcp/dhcpd.conf
# Sample configuration file for ISC dhcpd
server-name GW1;
log-facility local7;
ddns-update-style none;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.1;
option tftp-server-name "ftp://login:password@192.168.30.245";
option bootfile-name "serial";
range 192.168.1.10 192.168.1.254;
default-lease-time 21600;
max-lease-time 28800;
}
После редактирования данного файла, необходимо перезапустить сервис isc-dhcp-server:
root@GW1:~# systemctl restart isc-dhcp-server.service
На DHCP клиенте необходимо отредактировать файл /etc/dhcp/dhclient.conf, добавив в список запросов (после ключевого слова “request”) опции tftp-server-name и bootfile-name. Файл /etc/dhcp/dhclient.conf должен иметь следующий вид:
root@GW1:~# cat /etc/dhcp/dhcpd.conf
...
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers, tftp-server-name, bootfile-name;
...
После запроса на получение адреса, можно увидеть отправленные сервером настройки на стороне DHCP клиента:
root@Host1:~# cat /var/lib/dhcp/dhclient.leases
...
lease {
interface "ens32";
fixed-address 192.168.1.10;
server-name "GW1";
option subnet-mask 255.255.255.0;
option routers 192.168.1.1;
option dhcp-lease-time 21600;
option tftp-server-name "192.168.30.245";
option bootfile-name "serial";
option dhcp-message-type 5;
option domain-name-servers 192.168.1.1;
option dhcp-server-identifier 192.168.1.1;
renew 3 2021/03/03 15:40:57;
rebind 3 2021/03/03 17:58:25;
expire 3 2021/03/03 18:43:25;
}
...
При запросе адреса со стороны DHCP клиента, DHCP сервер выдал адрес TFPT сервера и путь для скачивания файла с этого сервера.
Основная идея заключается в том, чтобы разделить подсеть на два непересекающихся диапазона адресов. Раздачу параметров из первого диапазона нужно настроить на основной ноде кластера, а раздачу параметров из второго диапазона нужно настроить на резервной ноде кластера. Также нужно обеспечить следующее условие – на ноде кластера, которая находится в состоянии MASTER, – DHCP сервер должен быть запущен, а на ноде кластера, которая находится в состоянии BACKUP, либо FAULT, – DHCP сервер не должен быть запущен.
Пример. Пусть есть локальная подсеть 192.168.100.0/24 и VRRP кластер, который настроен в соответствии со сценарием («Построение отказоустойчивого решения на базе протокола VRRP с настройкой через cisco-like консоль»). Разделим подсеть на два диапазона:
· 192.168.100.101 – 192.168.100.150
· 192.168.100.151 – 192.168.100.200
В данный диапазон не должны попадать адреса сетевых интерфейсов и кластерные адреса Шлюза.
1. Выполните следующие шаги на основной ноде кластера:
Выключите DHCP сервер, если был запущен:
root@Hub1-n1:~# systemctl stop isc-dhcp-server.service
Отредактируйте конфигурационный файл /etc/dhcp/dhcpd.conf:
root@Hub1-n1:~# vim.tiny /etc/dhcp/dhcpd.conf
# Hub1-n1 dhcpd.conf
log-facility local7;
default-lease-time 600;
max-lease-time 3600;
subnet 192.168.100.0 netmask 255.255.255.0 {
option routers 192.168.100.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.100.255;
option domain-name-servers 8.8.8.8;
range 192.168.100.101 192.168.100.150;
}
Отредактируйте конфигурационный файл /etc/keepalived/notify_common.conf, добавив в него следующие настройки:
root@Hub1-n1:~# vim.tiny /etc/keepalived/notify_common.conf
FLAG_MANAGE_SERVICES="true"
SERVICES_LIST="isc-dhcp-server.service"
2. Выполните следующие шаги на резервной ноде кластера:
Выключите DHCP сервер, если был запущен:
root@Hub1-n2:~# systemctl stop isc-dhcp-server.service
Отредактируйте конфигурационный файл:
root@Hub1-n2:~# vim.tiny /etc/dhcp/dhcpd.conf
# Hub1-n2 dhcpd.conf
log-facility local7;
default-lease-time 600;
max-lease-time 3600;
subnet 192.168.100.0 netmask 255.255.255.0 {
option routers 192.168.100.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.100.255;
option domain-name-servers 8.8.8.8;
range 192.168.100.151 192.168.100.200;
}
Отредактируйте конфигурационный файл /etc/keepalived/notify_common.conf, добавив в него следующие настройки:
root@Hub1-n2:~# vim.tiny /etc/keepalived/notify_common.conf
FLAG_MANAGE_SERVICES="true"
SERVICES_LIST="isc-dhcp-server.service"
3. Перезагрузите обе ноды кластера.
Цель – обеспечить выдачу IP‑адресов клиентам обоими нодами кластера из одного диапазона IP‑адресов. Основная идея заключается в использовании механизма DHCP failover, реализованного в isc_dhcp_server, в котором обе ноды кластера работают в качестве DHCP-сервера одновременно и синхронизируют между собой информацию о выданных клиентам IP‑адресах. В случае отказа одной ноды вторая нода (оставшаяся в работе) обеспечивает выдачу всего диапазона IP-адресов, с учетом IP‑адресов, ранее выданных отказавшей нодой. Данный режим работы нод в качестве DHCP‑серверов не связан с работой нод в составе VRRP‑кластера и является штатным средством резервирования DHCP‑серверов на базе isc_dhcp_server.
При настройке DHCP failover следует учитывать следующие требования и ограничения:
1. Службы isc-dhcp-server.service должны быть настроены на автоматический запуск на обоих нодах и работать одновременно;
2. Параметр split настроек DHCP-сервера, определяющий разделение диапазона IP-адресов между нодами кластера, не должен принимать предельных значений 0 или 256. Рекомендуемым значением для двух нод является 128, что соответствует разделению исходного пула адресов в пропорции 50/50;
3. Время между нодами должно быть синхронизировано, например, с помощью NTP-клиента;
4. Размер пула адресов (диапазона выделяемых IP-адресов) должен быть больше или равен максимальному количеству клиентов.
Невыполнение условия 4 может привести к блокировке выдачи IP‑адреса новому клиенту, запросившему этот IP‑адрес, если ранее адрес был выдан другому клиенту отказавшей нодой. Блокировка выдачи IP-адреса, ранее выданного отказавшей нодой, новому клиенту устраняется после восстановления отказавшей ноды.
5. Настройки нод VRRP‑кластера должны соответствовать сценарию («Построение отказоустойчивого решения на базе протокола VRRP с настройкой через cisco-like консоль»). Дополнительных настроек VRRP‑кластера не требуется.
Пример. Пусть есть локальная подсеть 192.168.100.0/24 и VRRP кластер, который настроен в соответствии со сценарием («Построение отказоустойчивого решения на базе протокола VRRP с настройкой через cisco-like консоль»). Требуется настроить две ноды на выдачу IP‑адресов по DHCP из одного диапазона адресов 192.168.100.51‑192.168.100.150.
В данный диапазон не должны попадать адреса сетевых интерфейсов и кластерные адреса Шлюза.
1. Выполните следующие шаги на основной ноде кластера:
Выключите DHCP сервер, если был запущен:
root@Hub1-n1:~# systemctl stop isc-dhcp-server.service
Отредактируйте конфигурационный файл /etc/dhcp/dhcpd.conf:
root@Hub1-n1:~# vim.tiny /etc/dhcp/dhcpd.conf
# Hub1-n1 dhcpd.conf
log-facility local7;
default-lease-time 600;
max-lease-time 3600;
failover peer "failover-partner" {
primary;
address 192.168.100.10;
port 519;
peer address 192.168.100.20;
peer port 520;
max-response-delay 60;
max-unacked-updates 10;
mclt 3600;
split 128;
load balance max seconds 3;
}
subnet 192.168.100.0 netmask 255.255.255.0 {
option routers 192.168.100.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.100.255;
option domain-name-servers 8.8.8.8;
pool {
failover peer "failover-partner";
range 192.168.100.51 192.168.100.150;
}
}
2. Выполните следующие шаги на резервной ноде кластера:
Выключите DHCP сервер, если был запущен:
root@Hub1-n2:~# systemctl stop isc-dhcp-server.service
Отредактируйте конфигурационный файл:
root@Hub1-n2:~# vim.tiny /etc/dhcp/dhcpd.conf
# Hub1-n2 dhcpd.conf
log-facility local7;
default-lease-time 600;
max-lease-time 3600;
failover peer "failover-partner" {
secondary;
address 192.168.100.20;
port 520;
peer address 192.168.100.10;
peer port 519;
max-response-delay 60;
max-unacked-updates 10;
load balance max seconds 3;
}
subnet 192.168.100.0 netmask 255.255.255.0 {
option routers 192.168.100.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.100.255;
option domain-name-servers 8.8.8.8;
pool {
failover peer "failover-partner";
range 192.168.100.51 192.168.100.150;
}
}
3. Перезагрузите обе ноды кластера.