Процессор InetDhcpHelperProcessor
Предназначен для работы в связке с RADIUS-процессором. При успешной авторизиции или старте сессии InetDhcpHelperProcessor запоминает сессию по ключу, который создается из шаблона dhcp.key.pattern, указанного в конфиге. В шаблоне могут быть указаны следующие параметры:
deviceId - устройство, к которому привязана сессия, т.е. NAS, с которого идет RADIUS-аккаунтинг,
remoteId - агентское устройство, обычно коммутатор с которого пришел DHCP-relay-запрос на NAS,
circuitId - порт или VLAN, в зависимости от указанного типа поиска,
mac - MAC-адрес, для данной схемы он должен быть в RADIUS-атрибуте Calling-Station-Id.
При получении DHCP-запроса по указанному dhcp.key.pattern извлекаются данные из DHCP-пакета, т.е. по giaddr или IP-адресу, от которого запроса идет поиск устройства deviceId, аналогично InetDhcpProcessor из пакета извлекаются agentRemoteId и circuitId, по agentRemoteId идет поиск агентского устройства remoteId, и по circuitId - порта или VLAN, MAC-адрес извлекается из соответсвующего поля DHCP-пакета.
По этому ключу идет поиск среди запомненных RADIUS-сессий и выдача соответствующего ответа c IP-адресом из сессии.
Т.е. задача настроить так, чтобы из RADIUS-пакета и DHCP-пакета извлекались одни и те же данные (устройство, агентское устройство, порт/VLAN, MAC-адрес). Для этого в обработчике процессора протокола происходит извлечение из RADIUS-пакета DHCP-опций remoteId и circuitId.
Работа процессора зависит от параметра radius.servSearchMode:
при поиске по логину (не рекомендуется, устарел, не удобен для связки с DHCP), в логине пользователя должны содержаться разделёнными двоеточием субопции DHCP.82 remoteId и circuitId, в номере звонящего - строка с HEX MAC-адреса. IP-адрес запоминается по ключу код устройства + опции + MAC-адрес;
при остальных видах поиска из DHCP-запроса извлекаются идентификатор агентского устройства и номер порта или VLAN, аналогично InetDhcpProcessor. IP-адрес запоминается по ключу код устройства + код агентского устройства + номер интерфейса/VLAN + MAC.
Во всех случаях в RADIUS-атрибуте Calling-Station-Id должен быть проставлен MAC-адрес, чтобы при перезагрузке Access-сервера данные загрузились из сессий.
# Параметр привязки IP-адреса (сессии) к DHCPdhcp.key.pattern=$deviceId:$remoteId:$circuitId:$mac# Если по какой-то причине невозможно узнать из RADIUS-запроса агентское устройство или номер интерфейса/VLAN, то привязку можно сократить до кода устройства + MAC:#dhcp.key.pattern=$deviceId:$macПроцессор загружает список устройств-коммутаторов, начиная с корневого узла. Типы устройств-коммутаторов можно отфильтровать в переменной конфигурации корневого узла dhcp.relay.deviceTypeIds через запятую. Алгоритм поиска устройства при получении запроса идентичен ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpProcessor.
Пример пакетов для обработчика ISGProtocolHandler:
RADIUS:Packet type: Access-RequestIdentifier: 140Authenticator: {12 6B D7 9F 37 1E A1 39 BA 8C CD 13 0B CD 98 7B}Attributes: User-Name=00060012cf539f5e:000403420101:0080.4840.a46f NAS-Identifier=7201-ipoe.nettrans.ru NAS-Port-Id=0/0/1/834 User-Password=123 Event-Timestamp=1314183142 NAS-IP-Address=94.125.95.117 NAS-Port=412 Service-Type=5 Acct-Session-Id=720000000000019C NAS-Port-Type=33 cisco-avpair=circuit-id-tag=000403420101 cisco-avpair=remote-id-tag=00060012cf539f5e cisco-NAS-Port=0/0/1/834DHCP:Message type: BOOT_REQUESTDhcp message type: DHCP Discover{1}htype: 1, hlen: 6, hops: 1xid: 1067065417, secs: 0, flags: 0Client IP: 0.0.0.0Your IP: 0.0.0.0Server IP: 0.0.0.0Relay IP: 109.233.170.1Client MAC: {00804840A46F} Host name{12}={support-desktop} Parameter request list{55}={1, 28, 2, 3, 15, 6, 119, 12, 44, 47, 26, 121, 42} Agent information{82}= sub{1}={000403420101} sub{2}={00060012CF539F5E}Пример конфигурации для таких пакетов:
# Параметры извлечения опций из RADIUS-пакета# игнорирование заголовка опций (длина)radius.agent.option.removeHeader=2# RADIUS-атрибут cisco-avpairradius.agent.option.remoteId.type=1# префикс для cisco-avpair с опцией remoteIdradius.agent.option.remoteId.prefix=remote-id-tag=# RADIUS-атрибут cisco-avpairradius.agent.option.circuitId.type=1# префикс для cisco-avpair с опцией circuitIdradius.agent.option.circuitId.prefix=circuit-id-tag=# Параметры извлечения опций из DHCP-пакета# игнорирование заголовка опций (длина)dhcp.option82.removeHeader=2# Параметры для извлечения из пакета agentRemoteId# код субопции 82, содержащей идентификатор коммутатора клиента, позиция и длина последовательности идентификатораdhcp.option82.agentRemoteId.code=2dhcp.option82.agentRemoteId.position=0dhcp.option82.agentRemoteId.length=6# Параметры извлечения INTERFACE_ID и VLAN# (position и length используются и для извлечения их из circuitId, найденном в RADIUS-пакете!)# код субопции 82, содержащей VLAN, позиция и длина в субопцииdhcp.option82.vlanId.code=1dhcp.option82.vlanId.position=0dhcp.option82.vlanId.length=2# код субопции 82, содержащей интерфейс, позиция и длина в субопцииdhcp.option82.interfaceId.code=1dhcp.option82.interfaceId.position=3dhcp.option82.interfaceId.length=1# Шаблон, по которому создается ключ для привязки RADIUS-сессии и DHCP-пакетов.# $deviceId - устройство (обычно NAS и relay-агент, с которого пришел DHCP-запрос на биллинг)# $remoteId - агенское устройство (обычно коммутатор, к которому подключен абонент), определенное по agentRemoteId# $circuitId - в зависимости от типа поиска сервиса либо interfaceId, либо VLAN# $mac - MAC-адресradius.key.pattern=$deviceId:$remoteId:$circuitId:$mac