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

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

Ключ

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

...

Блок кода
languageruby
linenumbersfalse
# Нужно ли отвечать на DHCP-INFO-запросы
# 0 - выкл. (по умолчанию), 1 - вкл.
dhcp.offer.infoDiscover=1

Опция 82

Подсказка

Смотри также Настройка разбора опции DHCP Option 82.

Далее алгоритм работы определяется переменными конфигурации найденного устройства-релея. Следующие параметры определяют, какие опции извлекаются для идентификации устройства-коммутатора клиента и непосредственно клиента по порту или VLAN.

...

Блок кода
languagejava
linenumbersfalse
@Override
public void preprocessDhcpRequest( DhcpPacket request, DhcpPacket response )
     throws Exception
{
  DhcpOption circuitId = request.getSubOption( (byte)1 );
  DhcpOption remoteId = request.getSubOption( (byte)2 );

  request.setOption( InetDhcpProcessor.AGENT_REMOTE_ID, new String( remoteId.value, "UTF-8" ) );
  request.setOption( InetDhcpProcessor.INTERFACE_ID, new String( circuitId.value, "UTF-8" ) );
}

При необходимости, для релея можно отключить проверку на наличие DHCP Option 82 в пакете. В этом случае поиск абонента должен осуществляться без их использования, например, по MAC-адресу.

Блок кода
languageruby
linenumbersfalse
# Требуется ли наличие DHCP Option 82 в пакете (за исключением RENEW-запросов),
# 0 - не требуется, 1 (по умолчанию) - требуется.
dhcp.option82.required=0

Поиск абонента

По описанным выше значениям AGENT_REMOTE_ID, INTERFACE_ID и VLAN, которые будут извлечены из пакета, происходит поиск устройства и сервиса. Конфигурация поиска устройства и сервиса на устройстве:

...

<servSearchMode> может принимать значения:

  • 0 - поиск по логину на всех устройствах (извлечение значения логина должно быть настроено в конфигурации или произведено в предобработке);
  • 1 - поиск по интерфейсу на (найденном) устройстве;
  • 2 - поиск по VLAN'у на устройстве;
  • 3 - поиск на устройстве по интерфейсу и MAC-адресу;
  • 4 - поиск по VLAN'у на устройстве и его дочерних устройствах;
  • 5 - поиск по MAC-адресу на устройстве;
  • 6 - поиск по MAC-адресу на устройстве и дочерних устройствах;
  • 10 - поиск по MAC-адресу на всех устройствах;
  • 11 - поиск по VLAN и MAC-адресу на устройстве, а также на его потомках и его предках;
  • 12 - поиск по VLAN и порту на устройстве;
  • 20 -  поиск по логину аналогично 0, но только на устройстве и его дочерних устройствах.

После поиска сервиса можно дополнительно использовать поиск дочернего устройства (как элемент дополнительной авторизации).

...

Также адреса для динамической выдачи можно указать с помощью именованных пулов IP-адресов:

Блок кода
languageruby
linenumbersfalse
dhcp.ipPool=myWhitePool
dhcp.disable.ipPool=myGreyPool

...

Блок кода
languageruby
linenumbersfalse
#код# сервиса,ID нафиктивного которомсервиса создаетсядля сессиянеаутентифицированных ссессий фиктивным
адресом. 
dhcp.disable.servId=1

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

...

Блок кода
languageruby
# Режим выдачи адреса при неудачной авторизации. 0 (по умолчанию) - выдает адрес согласно параметрам dhcp.disable.*,
# 1 - выдает адрес как при удачной авторизации (при изменении состояния выдается NAK, срабатывает onAccountingStop, выдает ACK, срабатывает onAccountingStart), 
# 2 - выдает адрес как при удачной авторизации (при изменении состояния продолжает выдавать адрес).
dhcp.disable.mode=0
Примечание

В случае, если состояние сессии изменяется с помощью обработчика активации сервисов или указан параметр sa.connection.stateModify=1 (меняющий состояние сессии, даже если нет обработчика активации сервисов), то при последующем получении DHCP-запроса состояние сессии будет уже совпадать с необходимым и буден выдан ACK даже если dhcp.disable.mode=0|1. Т.е. в этом случае подразумевается, что доступ абоненту уже был переключен и нет необходимости производить переполучение адреса.

В случае, если в сервисе или дочернем сервисе необходимо указать IP-адрес для управления, но при этом адрес из этого сервиса не должен выдаваться по DHCP, то в конфигурации типа сервиса следует указать:

Блок кода
languageruby
# Не выдавать адрес по DHCP из сервисов данного типа
serv.dhcp.noAddress=1

Выдача IP-адреса в зависимости от опций Inet

При необходимости выдачи IP-адресов из разных пулов в зависимости от опций Inet, необходимо описать именованный пул IP-адресов. и указать данный пул в конфигурации опции Inet:

...

Возможные значения названий опций и их значений перечислены в таблице.

Название опцииЗначение в видеВ DHCP пакете
leaseTimeЧисло в секундах.Опция 51, срок аренды IP-адреса
timeOffsetЧисло в секундах.Опция 2.
gateСтрока с IP-адресом в виде NNN.NNN.NNN.NNN.Опция 3, маршрутизатор
serverIdentifierСтрока с IP-адресом в виде NNN.NNN.NNN.NNN.Опция 54, идентификатор DHCP-сервера
dnsСтрока с одним или несколькими адресами вида NNN.NNN.NNN.NNN, разделённых запятой.Опция 6, DNS-сервера
domainNameСтрока.Опция 15, домен
subnetMaskСтрока с IP-адресом в виде NNN.NNN.NNN.NNN.Опция 1, маска подсети
renewalTimeЧисло в секундах.Опция 58, время, после которого DHCP-клиент должен перейти в RENEW
rebindingTimeЧисло в секундах.Опция 59, время, после которого DHCP-клиент должен перейти в REBIND

Также можно добавить опцию с помощью ее кода/типа и указания значения в формате HEX, например, dhcp.option.43=68656c6c6f.

...

Блок кода
languagejava
linenumbersfalse
# На сколько действует выданный OFFER (не может быть больше 60 секунд)
dhcp.offer.timeout=25
# промежуток времени в секундах, за которой пришло указанное кол-во DISCOVER
dhcp.ban.checkTimeout=120
# кол-во DISCOVER, которое пришло за указанный промежуток времени
dhcp.ban.discoverCount=10
# время в секундах, на которое перестаем отвечать на DISCOVER-запросы
dhcp.ban.timeout=1800

При необходимости можно сбросить бан с помощью командной строки:

Блок кода
languagebash
./access.sh dhcpBanRemove

Действие при получении DHCP-Discover при наличии активной сессии

...