Пример настройки DHCP сервера на шлюзе «С-Терра Шлюз»

Скачать в формате PDF

Настоящий документ содержит описание способа совместного использования Продуктов компании ООО «С-Терра СиЭсПи» и Продуктов третьих производителей.

ООО «С-Терра СиЭсПи» осуществляет сопровождение настоящего сценария в части настроек Продуктов Компании. Упоминание наименований, продуктов, торговых марок третьих организаций исключительно неформально и не является поддержкой, рекомендацией либо рекламой. ООО «С-Терра СиЭсПи» не несет какой-либо ответственности в отношении работоспособности и использования этих Продуктов. Документ имеет статус вспомогательного материала, который может быть использован технологическими партнерами, компаниями-интеграторами, при разработке собственных решений.

Решения, разработанные на базе данного сценария, могут применяться в действующих сетях/системах только после тестовой и/или опытной эксплуатации.

Описание стенда

В данном документе рассматривается настройка DHCP сервера на шлюзе безопасности «С-Терра Шлюз».

Host1 получает по DHCP динамический IP-адрес, а Host2 – фиксированный (в качестве ОС на хостах Hos1/Host2 будет использоваться Debian 9). Построение защищенного IPsec туннеля в данном документе рассматриваться не будет.

Схема стенда (Рисунок 1):

Рисунок 1


 

Настройка стенда

Настройка шлюза безопасности GW1

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";

}


 

Приложение

Текст конфигурации /etc/dhcp/dhcpd.conf для шлюза GW1

# 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;

}

Текст конфигурации /etc/default/isc-dhcp-server для шлюза GW1

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"

Настройка опций для работы с TFTP сервером

В некоторых случаях, помимо 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 сервера и путь для скачивания файла с этого сервера.

Настройка на VRRP кластере

Разделение подсети на два диапазона

Основная идея заключается в том, чтобы разделить подсеть на два непересекающихся диапазона адресов. Раздачу параметров из первого диапазона нужно настроить на основной ноде кластера, а раздачу параметров из второго диапазона нужно настроить на резервной ноде кластера. Также нужно обеспечить следующее условие – на ноде кластера, которая находится в состоянии 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.    Перезагрузите обе ноды кластера.

Использование одной подсети (DHCP failover)

Цель – обеспечить выдачу 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.    Перезагрузите обе ноды кластера.