Описание
Применительно к проекту 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