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

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

Ключ

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

...

Предназначен для выдачи IP-адресов по протоколу DHCP с опцией 82. Опцию в запрос должен подставить коммутатор, пропускающий запрос, далее запрос обязательно должен переслать DHCP-Relay. Идентификация сервисов осуществляется на основании полей circuitId и remoteId, но также могут быть настроены любые другие поля, определяющие порт коммутатора клиента.

Scroll Ignore

Оглавление
printablefalse

Загружает список устройств-коммутаторов, начиная с корневого узла. Типы устройств-коммутаторов определяются в переменной конфигурации корневого узла dhcp.relay.deviceTypeIds через запятую. Также загружаются привязанные к коммутаторам сервисы договоров.

Когда приходит DHCP-запрос, из него извлекается поле giaddr (Relay-IP). Осуществляется поиск устройства-релея сначала по совпадению этого поля с адресом устройства в биллинге. Затем, если поиск был отрицательным - осуществляется поиск по совпадению IP-адреса, с которого пришёл DHCP-запрос с IP-адресом устройства.

Для обработки DHCP-RENEW-запросов без опции DHCP Option 82 в конфигурации корневого устройства необходимо указать:

Блок кода
languageruby
linenumbersfalse
# Нужно ли обрабатывать RENEW-запросы без Option 82 (требуется перезапуск InetAccess)
# 0 - нет (по умолчанию), 1  - да (рекомендуется)
dhcp.renew=1

Если по каким-то причинам клиентские устройства (например, NetGear JWNR2000) в DHCP-REQUEST посылают xid, отличный от DHCP-DISCOVER, можно убрать привязку к xid-запросам, прописав в конфигурации устройства-коммутратора/типа устройства/конфигурации модулякорневого устройства:

Блок кода
languageruby
linenumbersfalse
# Привязка к xid DHCP-запросов (требуется перезапуск InetAccess)
# 0 - выкл., 1 (по умолчанию) - вкл.
dhcp.xid=0

...

Процесс DHCP-авторизации состоит из двух запросов: DISCOVER и REQUEST. В первом запросе клиент запрашивает IP-адреса, какие ему могут предложить DHCP сервера. Во втором просит закрепить за ним конкретный IP-адрес. На DHCP-сервер биллинга попадают запросы с опцией 82, которая позволяет идентифицировать клиента. После идентификации клиента ему выдаётся IP-адрес. Идентификатором сессии при DHCP.82 авторизации выступает MAC-адрес клиента. Допускается одновременная инициализация нескольких сессий за одним портом коммутатора.

Выдача IP-адреса

Адрес сессии выделяется либо из диапазона, указанного в самом сервисе, либо, если он исчерпан или не указан - из пула, определённого в конфигурации устройства. Пул адресов устройства определяется параметром конфигурации dhcp.ipCategories=<cat_codes>, где <cat_codes> - id коды категорий ресурсов IP адресов через запятую. Например:

...

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

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

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

Блок кода
languageruby
# При активной опции на сервисе договора выдаем адрес из указанного пула IP-адресов
dhcp.ipPool=myWhitePool

Или в конфигурации устройства:

Блок кода
languageruby
# При активной опции c ID 5 на сервисе договора выдаем адрес из указанного пула IP-адресов
dhcp.inetOption.5.ipPool=myWhitePool

Выдача DHCP-опций

Якорь
dhcp_options
dhcp_options
Помимо IP-адреса в ответе DHCP-запроса могут передаваться различные опции. Их можно указать как в IP-ресурсе, так и конфигурации устройства. При указании в IP-ресурсе полей Роутер, Маска и DNS, значения, при выдаче адреса из этого ресурса соответственно попадут в опции gate, subnetMask и dns. Также в конфигурации IP-ресурса можно указать дополнительные опции с помощью параметров dhcp.option.<option_name>=<option_value>.

...

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

Название опцииЗначение в видеВ 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 при наличии активной сессии

...

В большинстве случаев подойдет значение dhcp.connection.checkDuplicate=90.

 

Дополнительные параметры

В некоторых случаях возможна ситуация, когда запросы с неизвестных биллингу relay-агентов нужно игнорировать (т.к. в случае RENEW-запроса и dhcp.renew=1 биллинг будет отвечать NAK). Для этого в конфигурации корневого устройства укажите:

Блок кода
languageruby
linenumbersfalse
# Нужно ли игнорировать все запросы с неизвестным giaddr (требуется перезапуск InetAccess)
# 0 - нет (по умолчанию), 1 - да
dhcp.skipUnknownDevices=1

При поиске relay-агента сначала происходит поиск по giaddr, затем, если устройство еще не найден - поиск по source IP-адресу DHCP-пакета. Если данный дополнительный поиск необходимо отключить, укажите в конфигурации корневого устройства:

Блок кода
languageruby
linenumbersfalse
# Поиск по IP-адресу дополнительно к поиску по giaddr (требуется перезапуск InetAccess)
# 0 - нет, 1 - да (по умолчанию)
dhcp.findDeviceBySocketAddress=0

Если Вы не хотите указывать в дереве устройств все relay-агенты, а производить поиск только по agentRemoteId, то в конфигурации корневого устройства вы можете указать ID устройства, к которому будут привязываться DHCP-пакеты, вместо поиска по giaddr:

Блок кода
languageruby
linenumbersfalse
# Привязка всех DHCP-пакетов к устройству, вместо поиска по giaddr (требуется перезапуск InetAccess)
dhcp.overrideRelayDeviceId=