Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

Описание

В качестве DHCP сервера используется свободное решение ISC-DHCP-SERVER. Применительно к проекту Eltex.SoftWLC данное ПО позволяет решать задачи:

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

Установка

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

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

Блок кода
languagebash
themeRDark
sudo -s
apt-get update
apt-get install isc-dhcp-server


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

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

Блок кода
languagebash
themeRDark
service isc-dhcp-server stop


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

Блок кода
languagebash
themeRDark
service isc-dhcp-server start


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

Блок кода
languagebash
themeRDark
service isc-dhcp-server status


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

Блок кода
languagebash
themeRDark
* isc-dhcp-server is running

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

Блок кода
languagebash
themeRDark
service isc-dhcp-server status

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

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

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

Блок кода
languagebash
themeRDark
/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/

Блок кода
languagebash
themeRDark
nano /etc/dhcp/dhcpd.conf


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

Блок кода
languagebash
themeRDark
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 запросы. Если не указать ни один из интерфейсов, то будут сервер будет отвечать на все запросы, вне зависимости от того, с какого он пришел интерфейса. 

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

Блок кода
languagebash
themeRDark
 ifconfig

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

Блок кода
languagebash
themeRDark
 INTERFACES="eth1.101 eth1.102"

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

Блок кода
languagebash
themeRDark
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
Якорь
43опция
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 подопция) записывается в виде:
    Якорь
    43опция10подопция
    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

Section

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

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

Без форматирования
dhcpd -t -cf /path/to/dhcpd.conf

пример :

Блок кода
themeRDark
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

Section

Для настройки мониторинга и проверки состояния DHCP серверов, необходимо сгенерировать ключ и указать в конфигурационном файле DHCP сервера. Сперва сгенерируем ключи, добавив  -K и указав дерикторию назначения


Блок кода
themeRDark
root@vagrant-ubuntu-trusty-64-test1111:~# dnssec-keygen -K /etc/dhcp/ -r /dev/urandom -a HMAC-MD5 -b 512 -n HOST omapi_key 
Komapi_key.+157+35749

Выводим ключ

Блок кода
themeRDark
root@vagrant-ubuntu-trusty-64-test1111:~# cat /etc/dhcp/Komapi_key.+157+35749.key | awk '{print $7 $8}'
kvxcUNEtu0137tWK/uEKU/MSQxinN0lTifbLwaQd0SvvhtW+PpvlHqSbHJnNLIfo7KSA7KFWtjoEUqIIJXgxmg==

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

Блок кода
themeRDark
key omapi_key {
        algorithm HMAC-MD5;
        secret "kvxcUNEtu0137tWK/uEKU/MSQxinN0lTifbLwaQd0SvvhtW+PpvlHqSbHJnNLIfo7KSA7KFWtjoEUqIIJXgxmg==";
              };

omapi-port 7911;
omapi-key omapi_key;


Далее перезапускаем isc-dhcp-server

Блок кода
themeRDark
service isc-dhcp-server  restart

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