Предназначен для работы в связке с RADIUS-процессором. При успешной авторизиции или старте сессии
запоминает сессию по ключу, который создается из шаблона , указанного в конфиге. В шаблоне могут быть указаны следующие параметры:deviceId - устройство, к которому привязана сессия, т.е. NAS, с которого идет RADIUS-аккаунтинг, |
remoteId - агентское устройство, обычно коммутатор с которого пришел DHCP-relay-запрос на NAS, |
circuitId - порт или VLAN, в зависимости от указанного типа поиска, |
mac - MAC-адрес, для данной схемы он должен быть в RADIUS-атрибуте Calling-Station-Id. |
При получении DHCP-запроса по указанному
извлекаются данные из DHCP-пакета, т.е. по giaddr или IP-адресу, от которого запроса идет поиск устройства deviceId, аналогично из пакета извлекаются 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-адреса (сессии) к DHCP dhcp.key.pattern=$deviceId:$remoteId:$circuitId:$mac # Если по какой-то причине невозможно узнать из RADIUS-запроса агентское устройство или номер интерфейса/VLAN, то привязку можно сократить до кода устройства + MAC: #dhcp.key.pattern=$deviceId:$mac
Процессор загружает список устройств-коммутаторов, начиная с корневого узла. Типы устройств-коммутаторов можно отфильтровать в переменной конфигурации корневого узла
через запятую. Алгоритм поиска устройства при получении запроса идентичен ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpProcessor.Пример пакетов для обработчика ISGProtocolHandler:
RADIUS: Packet type: Access-Request Identifier: 140 Authenticator: {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/834 DHCP: Message type: BOOT_REQUEST Dhcp message type: DHCP Discover{1} htype: 1, hlen: 6, hops: 1 xid: 1067065417, secs: 0, flags: 0 Client IP: 0.0.0.0 Your IP: 0.0.0.0 Server IP: 0.0.0.0 Relay IP: 109.233.170.1 Client 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-avpair radius.agent.option.remoteId.type=1 # префикс для cisco-avpair с опцией remoteId radius.agent.option.remoteId.prefix=remote-id-tag= # RADIUS-атрибут cisco-avpair radius.agent.option.circuitId.type=1 # префикс для cisco-avpair с опцией circuitId radius.agent.option.circuitId.prefix=circuit-id-tag= # Параметры извлечения опций из DHCP-пакета # игнорирование заголовка опций (длина) dhcp.option82.removeHeader=2 # Параметры для извлечения из пакета agentRemoteId # код субопции 82, содержащей идентификатор коммутатора клиента, позиция и длина последовательности идентификатора dhcp.option82.agentRemoteId.code=2 dhcp.option82.agentRemoteId.position=0 dhcp.option82.agentRemoteId.length=6 # Параметры извлечения INTERFACE_ID и VLAN # (position и length используются и для извлечения их из circuitId, найденном в RADIUS-пакете!) # код субопции 82, содержащей VLAN, позиция и длина в субопции dhcp.option82.vlanId.code=1 dhcp.option82.vlanId.position=0 dhcp.option82.vlanId.length=2 # код субопции 82, содержащей интерфейс, позиция и длина в субопции dhcp.option82.interfaceId.code=1 dhcp.option82.interfaceId.position=3 dhcp.option82.interfaceId.length=1 # Шаблон, по которому создается ключ для привязки RADIUS-сессии и DHCP-пакетов. # $deviceId - устройство (обычно NAS и relay-агент, с которого пришел DHCP-запрос на биллинг) # $remoteId - агенское устройство (обычно коммутатор, к которому подключен абонент), определенное по agentRemoteId # $circuitId - в зависимости от типа поиска сервиса либо interfaceId, либо VLAN # $mac - MAC-адрес radius.key.pattern=$deviceId:$remoteId:$circuitId:$mac