Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Описание

В качестве DHCP сервера используется свободное решение ISC-DHCP-SERVER. Если на вашей ЛВС уже используется сторонний DHCP сервер, то не обязательно переходить на решение контроллера SoftWLC. Использование стороннего DHCP сервера, на работу контроллера не влияет.

Применительно к проекту Eltex.SoftWLC данное ПО позволяет решать задачи:

  • Выдача первичных (внешних) IP-адресов точкам доступа с опцией 43 (11 и 12 подопции) , что позволяет поднимать GRE туннели к ESR.
  • Выдача вторичных (management, туннельных) IP-адресов точкам доступа с опцией 43 (10 и 13 подопции) для управления, обнаружения и автоматической инициализации точек доступа.
  • Выдача IP-адресов для Wi-Fi пользователей, подключающихся к точкам доступа.
  • Классификация DHCP клиентов по 82, 60 опциям и giAddrField.

Установка

Установка ISC-DHCP-SERVER лучше производить после установки программного контроллера SoftWLC.

Установка пакетов

sudo -s
apt-get update
apt-get install isc-dhcp-server

Способ запуска/остановки

Для остановки сервиса используется команда:

service isc-dhcp-server stop

Для запуска сервиса после остановки используется команда:

service isc-dhcp-server start

Для проверки — запущен ли сервис в данный момент или нет, используется команда:

service isc-dhcp-server status

В ответ последует сообщение:

* isc-dhcp-server is running

в случае если сервис запущен, или

service isc-dhcp-server status

в случае если сервис не запущен.

Журналирование

По умолчанию логи сервиса записываются в файл 

/var/log/syslog

Для удобства анализа рекомендуется настроить перенаправление логов в файл "/var/log/dhcpd.log".

Конфигурация сервера DHCP

Описанные варианты конфигурации приведены для типовых схем организации связи, однако, они могут отличаться от конфигурации, необходимой для Вашей сети!

Минимальная конфигурация DHCP-сервера

Для небольших сетей, где все ТД подключены по L2 схеме, для конфигурации DHCP сервера будет достаточно указать:

  • Подсеть, маску и шлюз для адресов управления ТД
  • Подсеть, маску и шлюз для адресов клиентов, подключающихся к ТД

Подсети ТД и клиентов разделяются по соображениям безопасности, для того, чтобы у злоумышленников не было возможности проникнуть в сеть управления ТД при подключении к одному из SSID.

  • Опционально адрес EMS сервера.

Эти параметры всегда будут использоваться при его настройке.

Пример минимальной конфигурации DHCP-сервера

Рассмотрим на примере реальной адресации:

Адрес или подсетьНазначение

100.111.70.0/24

Подсеть управления ТД
100.111.70.1Шлюз по умолчанию для ТД
100.123.0.54Адрес сервера управления ТД (адрес EMS)
100.111.71.0/24Подсеть для клиентских устройств
100.111.71.1Шлюз по умолчанию для клиентских устройств
172.16.0.1, 8.8.8.8адреса DNS серверов

Сам DHCP сервер должен иметь маршруты ко всем этим подсетям, иначе устройства не будут получать от него ответов.


Файл конфигурации DHCP сервера находится в директории /etc/dhcp/

nano /etc/dhcp/dhcpd.conf

Все строки параметров в файле конфигурации dhcp заканчиваются точкой с запятой (;). Некоторые параметры могут иметь несколько значений, например, domain-name-servers,  у которого два IP-адреса, разделенные запятой. Строки, начинающиеся с ‘#’, являются комментариями и не обрабатываются сервером dhcp.

log-facility local7; 
default-lease-time 3600; 
max-lease-time 3610; 

# Список устройств Eltex
class "ELTEX-DEVICES" {
 match if (
  (substring (option vendor-class-identifier, 0, 14)="ELTEX_WEP-12AC") or
  (substring (option vendor-class-identifier, 0, 14)="ELTEX_WOP-12AC") or
  (substring (option vendor-class-identifier, 0, 14)="ELTX_WEP-12AC") or
  (substring (option vendor-class-identifier, 0, 14)="ELTX_WOP-12AC") or
  (substring (option vendor-class-identifier, 0, 13)="ELTEX_WEP-2AC") or
  (substring (option vendor-class-identifier, 0, 19)="ELTEX_WEP-2AC-SMART") or
  (substring (option vendor-class-identifier, 0, 13)="ELTEX_WOP-2AC") or
  (substring (option vendor-class-identifier, 0, 12)="ELTEX_WEP-1L") or
  (substring (option vendor-class-identifier, 0, 12)="ELTEX_WEP-2L") or
  (substring (option vendor-class-identifier, 0, 12)="ELTEX_WOP-2L") or
  (substring (option vendor-class-identifier, 0, 6)="ESR-10") or
  (substring (option vendor-class-identifier, 0, 6)="ESR-20")
 );
}

# Подсеть адресов управления ТД
subnet 100.111.70.0 netmask 255.255.255.0 { 
 pool {
  option routers 100.111.70.1;
  range 100.111.70.4 100.111.70.254;
# 43 опция 10 подопция, передает ТД адрес EMS сервера (в данном случае 100.123.0.54)
  option vendor-encapsulated-options 0A:0C:31:30:30:2e:31:32:33:2e:30:2e:35:34;
  allow members of "ELTEX-DEVICES";
  option domain-name-servers 172.16.0.1, 8.8.8.8;
 }
}

# Объявляем подсеть для адресов клиентов
subnet 100.111.71.0 netmask 255.255.255.0 {
 pool {
  option routers 100.111.71.1;
  range 100.111.71.4 100.111.71.254;
  option domain-name-servers 172.16.0.1, 8.8.8.8;
 }
}


Некоторые общие параметры сервера DHCP:

log-facility local7 — Запись логов в файл

default-lease-time — Промежуток времени в секундах, на который выделяется адрес клиенту, парамерт назначен глобально, т.е. действует для ТД и клиентов.

max-lease-time — Максимальный промежуток времени в секундах, на который выделяется адрес клиенту

subnet — Параметр объявляет подсеть (в нашем случае 100.111.71.0 с маской 255.255.255.0)

option routers — Определяет IP-адрес вашего шлюза или точки выхода в сеть.(100.111.71.1)

range  — Диапазон выдаваемых адресов ( от 100.111.71.4 до 100.111.71.254)

option vendor-encapsulated-options  — 43 опция 10 подопция, используется для передачи ТД адреса контроллера.

domain-name-servers — Адреса серверов DNS. (172.16.0.1, 8.8.8.8).

allow members of "ELTEX-DEVICES" —  оператор соответствия класса. В пул будут записаны те устройства, имя типа вендора которых совпало с  глобально объявленным классом (class "ELTEX-DEVICES",  ELTEX_WEP-12AC, ELTEX_WEP-2AC, ELTEX_WEP-2L и т.д.)


В файле конфигурации /etc/default/isc-dhcp-server записан интерфейс, с которого DHCP сервер должен принимать DHCP запросы. Если не указать ни один из интерфейсов, то будут сервер будет отвечать на все запросы, вне зависимости от того, с какого он пришел интерфейса. 

Для определения имени сетевого интерфейса можно ввести команду

 ifconfig

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

 INTERFACES="eth1.101 eth1.102"

На этом минимальная конфигурация завершена. Для применения настроек необходимо перезапустить сервис

service isc-dhcp-server restart



Продвинутая настройка конфигурации DHCP-сервера

Сетевые интерфейсы

DHCP-сервер должен иметь интерфейсы в трех подсетях:

  • внутренняя операторская подсеть (inner operator) – используется для связи с внутренней сетью оператора. В этой сети администраторы и операторы подключаются к GUI EMS, осуществляется связь с SMS gateway и сервисами оператора через NorthboundInterface. Интерфейс в этой подсети является виртуальным (используется механизм keepalived);
  • внешняя операторская подсеть (outer operator) – используется для связи с точками доступа и другим сетевым оборудованием. Имеет жесткие политики безопасности. Интерфейс в этой подсети является виртуальным (используется механизм keepalived);
  • внешняя подсеть для приема DHCP запросов от Relay-агентов на конечном операторском оборудовании.
auto eth1.102 # Интерфейс во внешней операторской сети обмена
    iface eth1.102 inet static
    address 192.168.114.8
    netmask 255.255.255.192
    network 192.168.114.0
    vlan_raw_device eth1
 
auto eth1.100 # Интерфейс во внутренней операторской сети обмена
    iface eth1.100 inet static
    address 172.17.209.9
    netmask 255.255.255.192
    network 172.17.209.0
    vlan_raw_device eth1
 
auto eth1.101 # Интерфейс для раздачи предварительных IP на точки доступа
    iface eth1.101 inet static
    address 10.203.5.7
    netmask 255.255.255.192
    network 10.203.5.0
    vlan_raw_device eth1

Маршрутизация

Сервер DHCP должен иметь доступ к подсетям:

10.203.32.0 – для раздачи первичных IP-адресов на точки доступа;

192.168.200.0 – для раздачи management IP-адресов на точки доступа;

100.65.64.0– для раздачи IP-адресов клиентским устройствам.

Пример конфигурирования маршрутов в файле /etc/network/interfaces.

up ip route add 100.65.64.0/22 via 192.168.114.10
up ip route add 192.168.200.0/22 via 192.168.114.10
up ip route add 10.203.32.0/19 via 10.203.5.1

Конфигурация ISC-DHCP-SERVER

/etc/default/isc-dhcp-server

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

INTERFACES="eth1.101 eth1.102"

/etc/dhcp/dhcpd.conf

 Конфигурация пула адресов DHCP-сервера.


Пример конфигурации

default-lease-time 60;
max-lease-time 120;
log-facility local7;
class "ELTEX-DEVICES" {
    match if (
        (substring (option vendor-class-identifier, 0, 14) = "ELTEX_WEP-12AC") or
        (substring (option vendor-class-identifier, 0, 14) = "ELTEX_WOP-12AC") or
        (substring (option vendor-class-identifier, 0, 14) = "ELTX_WEP-12AC") or
        (substring (option vendor-class-identifier, 0, 14) = "ELTX_WOP-12AC")
    );
}
subnet 192.168.114.64 netmask 255.255.255.192 {}
subnet 10.203.5.64 netmask 255.255.255.192 {}
#first IP подсеть для выдачи первичных адресов для точек доступа
subnet 10.203.32.0 netmask 255.255.254.0 {
    pool {
        option routers 10.203.32.2;
        range 10.203.32.130 10.203.32.230;
        failover peer "dhcp-failover";
        option vendor-encapsulated-options 0B:0c:31:30:2E:32:30:33:2E:35:2E:31:31:32:0C:0C:31:30:2E:32:30:33:2E:35:2E:31:31:33;
        allow members of "ELTEX-DEVICES";
    }
}
#managed IP сеть для выдачи вторичных адресов на точках доступа
subnet 192.168.200.0 netmask 255.255.252.0 {
    pool {
        option routers 192.168.200.5;
        range 192.168.200.120 192.168.200.164;
        failover peer "dhcp-failover";
        option vendor-encapsulated-options A:F:31:39:32:2E:31:36:38:2E:31:31:34:2E:31:30:34;
        allow members of "ELTEX-DEVICES";
    }
}
#User IP подсеть пользователей (клиентов)
subnet 200.65.64.0 netmask 255.255.240.0 {
    pool {
        option routers 200.65.64.5;
        range 200.65.64.200 200.65.64.250;
        failover peer "dhcp-failover";
        option domain-name-servers 172.16.0.1, 8.8.8.8;
    }
}

Конфигурирование статических адресов точек доступа

Если необходимо использовать заранее определенные IP-адреса точек доступа в управляющей сети (вторичные адреса), в конфигурацию можно включить список статических хостов. Чтобы не загружать этим списком файл /etc/dhcp/dhcpd.conf, рекомендуем воспользоваться следующим способом:

1. Создать файл со списком, который может находиться в любом каталоге, например /var/lib/dhcp/touch /var/lib/dhcp/hosts.

2. Внести записи в файл.

Формат записи

host wep_01 {   hardware ethernet a8:f9:4b:b0:00:00;  fixed-address 192.168.1.1;  }

Где,

host wep_01 – имя хоста.

hardware ethernet a8:f9:4b:b0:00:01 – MAC-адрес устройства. Обратите внимание, что для получения вторичного адреса точка использует MAC на единицу больший, чем при получении первичного адреса.

fixed-address 192.168.200.133  – IP-адрес устройства.

3. В пул адресов точек доступа необходимо добавить строку:

include "/var/lib/dhcp/hosts";

4. Для того чтобы DHCP-сервер мог прочитать файл, необходимо установить принадлежность командой:

chown dhcpd:dhcpd /var/lib/dhcp/static/hosts


5. Разрешить чтение этого файла в apparmor, для этого в файл /etc/apparmor.d/usr.sbin.dhcpd необходимо добавить строку (строка заканчивается запятой):

/var/lib/dhcp/hosts r,


6. Перезапустить сервисы

service apparmor restart
service isc-dhcp-server restart

Пример конфигурации пула:

subnet 192.168.200.0 netmask 255.255.252.0 {
    pool {
        option routers 192.168.200.5;
        range 192.168.200.120 192.168.200.164;
        option vendor-encapsulated-options A:F:31:39:32:2E:31:36:38:2E:31:31:34:2E:31:30:34;
        include "/var/lib/dhcp/hosts";
    }
}

Списки должны быть созданы на обоих серверах и поддерживаться в актуальном состоянии. После изменения содержимого списков необходимо перезапустить серверы.

Использование опции 82

При необходимости использования опции 82 новые классы создаются следующим образом:

class "NEW_class" {
match if (
    (option agent.circuit-id = "E320-1-210:GigabitEthernet 1/0/2.25030007:2503-7")
    and
        (
            (substring (option vendor-class-identifier, 0, 14) = "ELTEX_WEP-12AC") or
            (substring (option vendor-class-identifier, 0, 14) = "ELTEX_WOP-12AC") or
            (substring (option vendor-class-identifier, 0, 14) = "ELTX_WEP-12AC") or
            (substring (option vendor-class-identifier, 0, 14) = "ELTX_WOP-12AC")
        )
    );
}

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

subnet 192.168.200.0 netmask 255.255.252.0 {
    pool {
        option routers 192.168.200.5;
        range 192.168.200.120 192.168.200.164;
        option vendor-encapsulated-options A:F:31:39:32:2E:31:36:38:2E:31:31:34:2E:31:30:34;
        allow members of "NEW_class";
    }
}

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


Использование опции 43

Опция используется для передачи DHCP-клиенту вендор-специфических данных.

В SoftWLC используются следующие подопции:

ПодопцияОписание
10 адрес EMS-сервера.
11адрес для создания management-туннеля.
12 адрес для создания data-туннеля.
13опция, указывающая принадлежность точки доступа определенному участку сети оператора.


В RFC2132 формат представлен в следующем виде:

   When encapsulated vendor-specific extensions are used, the
   information bytes 1-n have the following format:
 
    Code   Len   Data item        Code   Len   Data item       Code
   +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
   |  T1 |  n  |  d1 |  d2 | ... |  T2 |  n  |  D1 |  D2 | ... | ... |
   +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+

Опция передается в формате HEX (шестнадцатеричное представление). Все данные из формата ASCII должны быть преобразованы в HEX.

Все значения в опции разделяются двоеточием ':', а строка завершается точкой с запятой ';'.

Примеры опций:

  • В пуле первичных адресов 43 опция (11 и 12 подопции) записывается в виде:
option vendor-encapsulated-options 0B:0B:31:30:2E:32:30:33:2E:35:2E:31:30:0C:0B:31:30:2E:32:30:33:2E:35:2E:31:31;

Расшифровка:

11 подопция, длиной 11 символов, содержит адрес 10.203.5.10;

12 подопция, длиной 11 символов, содержит адрес 10.203.5.11.

  • В пуле вторичных адресов 43 опция (10 подопция) записывается в виде:
option vendor-encapsulated-options 0A:0D:31:39:32:2E:31:36:38:2E:31:31:34:2E:34;

Расшифровка:

10 подопция, длиной 13 символов, содержит адрес 192.168.114.4

  • 13 подопция записывается в виде:
option vendor-encapsulated-options 0D:0A:65:6c:74:65:78:2e:72:6f:6f:74;

Расшифровка:

13 подопция, длиной 10 символов, содержит домен: eltex.root

В случае, если в пуле необходимо передать несколько подпций, то все они записываются в одну строку. Например для 10 и 13 подопции это будет выглядеть так:

option vendor-encapsulated-options 0A:0D:31:39:32:2E:31:36:38:2E:31:31:34:2E:34:0D:0A:65:6c:74:65:78:2e:72:6f:6f:74;


Проверка конфигурационного файла dhcpd

Для проверки конфигурационного файла на ошибки в синтаксисе без перезапуска DHCP сервиса и применения конфигурации,  можно использовать утилиту dhcpd.

Для проверки запускаем утилиту dhcpd с ключем -t  и если конфигурационный файл находится не по дефолтному адресу , то добавляем ключи -cf

dhcpd -t -cf /path/to/dhcpd.conf

пример :

root@vagrant-ubuntu-trusty-64-test1111:~# dhcpd -t -cf /etc/dhcp/dhcpd_test.conf 
Internet Systems Consortium DHCP Server 4.2.4
Copyright 2004-2012 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
/etc/dhcp/dhcpd_test.conf line 97: semicolon expected.
        range 
         ^
/etc/dhcp/dhcpd_test.conf line 105: Pool declaration with no address range.
          }
           ^
Pool declarations must always contain at least
one range statement.
Configuration file errors encountered -- exiting

Настройка логирования в отдельный файл

Для удобства анализа требуется настроить логирование в отдельный файл.

Редактируем файл:

/etc/rsyslog.d/50-default.conf

Добавляем в начало файла:

if $programname == 'dhcpd' then /var/log/dhcpd.log
& stop

Перезапускаем службу rsyslog:

systemctl restart rsyslog

Далее требуется настроить ротацию файлов dhcpd.log. 

Редактируем файл:

/etc/logrotate.d/rsyslog

Добавляем в конец файла:

/var/log/dhcpd.log
{
        rotate 4
        maxsize 50M
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                /usr/lib/rsyslog/rsyslog-rotate
        endscript
}

Настройка DHCP-failover

В файле конфигурации /etc/dhcp/dhcpd.conf необходимо добавить описание

На первом сервере:

failover peer "dhcp-failover" {
    primary;
    address 192.168.114.8;
    port 647;
    peer address 192.168.114.9;
    peer port 647;
    max-response-delay 30;
    max-unacked-updates 10;
    load balance max seconds 3;
    auto-partner-down 180;
    mclt 1800;
    split 128;
}

На втором сервере:

failover peer "dhcp-failover" {
    secondary;
    address 192.168.114.9;
    port 647;
    peer address 192.168.114.8;
    peer port 647;
    max-response-delay 30;
    max-unacked-updates 10;
    load balance max seconds 3;
    auto-partner-down 60;
}

В резервируемых пулах (подсеть 192.168.200.0) добавить строку

failover peer "dhcp-failover";

Обязательным условием работы DHCP-failover является синхронизация времени на серверах. При рассинхронизации времени возможны сбои в работе.

Настройка OMAPI

Для настройки мониторинга и проверки состояния DHCP серверов, необходимо сгенерировать ключ и указать в конфигурационном файле DHCP сервера. Сперва сгенерируем ключ, при помощи утилиты tsig-keygen (входящей в состав dns сервера BIND) перенаправив вывод в файл, в директорию /etc/dhcp/

tsig-keygen omapi_key > /etc/dhcp/omapi_key.key

Можете выполнить данную операцию на сервере с установленным BIND и затем скопировать файл с ключом на сервера DHCP.

Чтоб не устанавливать сервер BIND ради единственной операции генерации ключа, создадим в домашней директории временную папку и перейдем в нее:

mkdir tmp
cd tmp

Теперь скачаем и распакуем содержимое пакета bind9

apt download bind9
dpkg-deb -xv bind9_1%3a9.18.12-0ubuntu0.22.04.3_amd64.deb ./

Cгенерируем ключ, при помощи бинарника tsig-keygen, перенаправив вывод в файл, в директорию /etc/dhcp/

~/tmp/usr/sbin/tsig-keygen omapi_key > /etc/dhcp/omapi_key.key

После чего временную папку со всем содержимым можно удалить

rm -rf ~/tmp

Выводим ключ

cat /etc/dhcp/omapi_key.key
key "omapi_key" {
        algorithm hmac-sha256;
        secret "/ZKsvMBjG6VjQgYQ0V6dEeYPycVmRmQLfs9b4AOdcNk=";
};

Указываем в файле конфигурации DHCP обоих серверов полученный ключ, алгоритм шифрования, порт и имя omapi_key

key omapi_key {
        algorithm hmac-sha256;
        secret "/ZKsvMBjG6VjQgYQ0V6dEeYPycVmRmQLfs9b4AOdcNk=";
              };

omapi-port 7911;
omapi-key omapi_key;

Далее перезапускаем isc-dhcp-server на обоих хостах

service isc-dhcp-server restart

Осталось добавить в дерево объектов EMS, DHCP сервер и указать в настройках доступа DHCP, OMAPI key name, OMAPI key и Failover peer name





  • Нет меток