...
Установка пакетов
Блок кода |
---|
|
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 |
...
По умолчанию логи сервиса записываются в файл
...
Рассмотрим на примере реальной адресации:
Адрес или подсеть | Назначение |
---|
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 заканчиваются точкой с запятой (;). Некоторые параметры могут иметь несколько значений, например, 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;
}
} |
...
Для определения имени сетевого интерфейса можно ввести команду
Файл содержит основные настройки, в частности, список используемых сетевых интерфейсов:
Блок кода |
---|
|
INTERFACES="eth1.101 eth1.102" |
На этом минимальная конфигурация завершена. Для применения настроек необходимо перезапустить сервис
Блок кода |
---|
|
service isc-dhcp-server restart |
...
- внутренняя операторская подсеть (inner operator) – используется для связи с внутренней сетью оператора. В этой сети администраторы и операторы подключаются к GUI EMS, осуществляется связь с SMS gateway и сервисами оператора через NorthboundInterface. Интерфейс в этой подсети является виртуальным (используется механизм keepalived);
- внешняя операторская подсеть (outer operator) – используется для связи с точками доступа и другим сетевым оборудованием. Имеет жесткие политики безопасности. Интерфейс в этой подсети является виртуальным (используется механизм keepalived);
- внешняя подсеть для приема DHCP запросов от Relay-агентов на конечном операторском оборудовании.
Без форматированияcode |
---|
|
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 должен иметь доступ к подсетям:
...
Пример конфигурирования маршрутов в файле /etc/network/interfaces.
Без форматированияcode |
---|
|
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 |
...
Файл содержит основные настройки, в частности, список используемых сетевых интерфейсов:
Без форматированияcode |
---|
|
INTERFACES="eth1.101 eth1.102" |
...
Конфигурация пула адресов DHCP-сервера.
Пример конфигурации
Без форматированияcode |
---|
|
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;
}
} |
...
2. Внести записи в файл.
Формат записи
Без форматированияcode |
---|
|
host wep_01 { hardware ethernet a8:f9:4b:b0:00:00; fixed-address 192.168.1.1; } |
...
3. В пул адресов точек доступа необходимо добавить строку:
Без форматированияcode |
---|
|
include "/var/lib/dhcp/hosts"; |
4. Для того чтобы DHCP-сервер мог прочитать файл, необходимо установить принадлежность командой:
Без форматированияcode |
---|
|
chown dhcpd:dhcpd /var/lib/dhcp/static/hosts |
...
5. Разрешить чтение этого файла в apparmor, для этого в файл /etc/apparmor.d/usr.sbin.dhcpd необходимо добавить строку (строка заканчивается запятой):
Без форматированияcode |
---|
|
/var/lib/dhcp/hosts r, |
6. Перезапустить сервисы
Без форматированияcode |
---|
|
service apparmor restart
service isc-dhcp-server restart |
Пример конфигурации пула:
Без форматированияcode |
---|
|
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 новые классы создаются следующим образом:
Без форматированияcode |
---|
|
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")
)
);
} |
Созданный класс требуется указать в пуле, например:
Без форматированияcode |
---|
|
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";
}
} |
...
В SoftWLC используются следующие подопции:
Подопция | Описание |
---|
10 | адрес EMS-сервера. |
11 | адрес для создания management-туннеля. |
12 | адрес для создания data-туннеля. |
13 | опция, указывающая принадлежность точки доступа определенному участку сети оператора. |
В RFC2132 формат представлен в следующем виде:
Без форматированияcode |
---|
|
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 | ... | ... |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ |
...
- В пуле первичных адресов 43 опция (11 и 12 подопции) записывается в виде:
Без форматированияcode |
---|
|
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; |
...
- В пуле вторичных адресов 43 опция (10 подопция) записывается в виде:
Якорь |
---|
| 43опция10подопция |
---|
| 43опция10подопция |
---|
|
Без форматированияcode |
---|
|
option vendor-encapsulated-options 0A:0D:31:39:32:2E:31:36:38:2E:31:31:34:2E:34; |
...
- 13 подопция записывается в виде:
Без форматированияcode |
---|
|
option vendor-encapsulated-options 0D:0A:65:6c:74:65:78:2e:72:6f:6f:74; |
...
Примечание |
---|
В случае, если в пуле необходимо передать несколько подпций, то все они записываются в одну строку. Например для 10 и 13 подопции это будет выглядеть так: Без форматированияcode |
---|
| 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; |
|
...
Section |
---|
Для проверки конфигурационного файла на ошибки в синтаксисе без перезапуска DHCP сервиса и применения конфигурации, можно использовать утилиту dhcpd. Для проверки запускаем утилиту dhcpd с ключем -t и если конфигурационный файл находится не по дефолтному адресу , то добавляем ключи -cf Без форматированияcode |
---|
| 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 |
|
...
Для удобства анализа требуется настроить логирование в отдельный файл.
Редактируем файл:
Без форматированияcode |
---|
|
/etc/rsyslog.d/50-default.conf |
Добавляем в начало файла:
Без форматированияcode |
---|
|
if $programname == 'dhcpd' then /var/log/dhcpd.log
& stop |
Перезапускаем службу rsyslog:
Без форматированияcode |
---|
|
systemctl restart rsyslog |
Далее требуется настроить ротацию файлов dhcpd.log.
Редактируем файл:
Без форматированияcode |
---|
|
/etc/logrotate.d/rsyslog |
Добавляем в конец файла:
Без форматированияcode |
---|
|
/var/log/dhcpd.log
{
rotate 4
maxsize 50M
daily
missingok
notifempty
delaycompress
compress
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
} |
...
В файле конфигурации /etc/dhcp/dhcpd.conf необходимо добавить описание
На первом сервере:
Без форматированияcode |
---|
|
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;
} |
На втором сервере:
Без форматированияcode |
---|
|
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) добавить строку
Без форматированияcode |
---|
|
failover peer "dhcp-failover";
|
Предупреждение |
---|
Обязательным условием работы DHCP-failover является синхронизация времени на серверах. При рассинхронизации времени возможны сбои в работе. |
...
Section |
---|
Для настройки мониторинга и проверки состояния DHCP серверов, необходимо сгенерировать ключ и указать в конфигурационном файле DHCP сервера. Сперва сгенерируем ключи, добавив -K и указав дерикторию назначенияключ, при помощи утилиты tsig-keygen (входящей в состав dns сервера BIND) перенаправив вывод в файл, в директорию /etc/dhcp/ Блок кода |
---|
| root@vagrant-ubuntu-trusty-64-test1111:~# dnssec-keygen -K tsig-keygen omapi_key > /etc/dhcp/ -r /dev/urandom -a HMAC-MD5 -b 512 -n HOST omapi_key
Komapi_key.+157+35749
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
|
После чего временную папку со всем содержимым можно удалить Выводим ключ Блок кода |
---|
| root@vagrant-ubuntu-trusty-64-test1111:~# cat /etc/dhcp/Komapiomapi_key.+157+35749.key
| awk '{print $7 $8}'
kvxcUNEtu0137tWK/uEKU/MSQxinN0lTifbLwaQd0SvvhtW+PpvlHqSbHJnNLIfo7KSA7KFWtjoEUqIIJXgxmg==key "omapi_key" {
algorithm hmac-sha256;
secret "/ZKsvMBjG6VjQgYQ0V6dEeYPycVmRmQLfs9b4AOdcNk=";
}; |
Указываем в файле конфигурации DHCP сервера обоих серверов полученный ключ, алгоритм шифрования, порт и имя omapi_key Блок кода |
---|
| key omapi_key {
algorithm HMAChmac-MD5sha256;
secret "kvxcUNEtu0137tWK/uEKU/MSQxinN0lTifbLwaQd0SvvhtW+PpvlHqSbHJnNLIfo7KSA7KFWtjoEUqIIJXgxmgZKsvMBjG6VjQgYQ0V6dEeYPycVmRmQLfs9b4AOdcNk==";
};
omapi-port 7911;
omapi-key omapi_key;
|
Далее перезапускаем isc-dhcp-server на обоих хостах Блок кода |
---|
| service isc-dhcp-server restart |
Осталось добавить в дерево объектов EMS, DHCP сервер и указать в настройках доступа EMS DHCP, OMAPI key name, OMAPI key и Failover peer name Image RemovedImage Added
|