Cisco ISG c авторизацией по порту коммутатора

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
(Конфигурация Cisco)
(Схема сети)
 
(5 промежуточных версий не показаны.)
Строка 35: Строка 35:
и переносит счётчики байт в атрибут cisco-avpair сопровождая префиксом INET_IN, INET_OUT, INET_TURBO_IN, INET_TURBO_OUT.
и переносит счётчики байт в атрибут cisco-avpair сопровождая префиксом INET_IN, INET_OUT, INET_TURBO_IN, INET_TURBO_OUT.
-
Для лучшего понимания логики желательно изучить классы ru.bitel.bgbilling.inet.dyn.device.isg.ISGProtocolHandler и ru.bitel.bgbilling.inet.dyn.device.isg.ISGServiceActivator.
+
Для лучшего понимания логики желательно изучить классы ru.bitel.bgbilling.modules.inet.dyn.device.cisco.ISGProtocolHandler и ru.bitel.bgbilling.modules.inet.dyn.device.cisco.ISGServiceActivator.
Договор TEST представляет из себя клиента, TEST_Service Param - параметры сервиса.
Договор TEST представляет из себя клиента, TEST_Service Param - параметры сервиса.
Строка 84: Строка 84:
В конфигурации устройства ProcessGroup указаны строки.
В конфигурации устройства ProcessGroup указаны строки.
<source lang="bash">
<source lang="bash">
-
nas.deviceTypeIds=1
+
#типы устройств - Nas-ов
 +
radius.deviceTypeIds=1
 +
#типы устройств, являющиеся dhcp relay
dhcp.relay.deviceTypeIds=1
dhcp.relay.deviceTypeIds=1
-
#
+
-
session.suspend.timeout=1800
+
#количество потоков на worker'а
-
session.close.timeout=900
+
accounting.worker.1.thread.count=1
-
#
+
#тарификатор:
-
accounting.tariffication.thread.count=1
+
#минимальная сумма трафика, при которой тарифицировать соединение
-
accounting.tariffication.1=0:10:5
+
accounting.worker.1.tariffication.1.minDeltaAmount=0
-
#
+
#пауза между заданиями тарификации
-
accounting.flushing.thread.count=1
+
accounting.worker.1.tariffication.1.delay=10
-
accounting.flushing.1=0:10:5
+
#максимальное количество тарифицируемых соединений за задание
 +
accounting.worker.1.tariffication.1.batchSize=100
 +
#трекер (обработка сессий без наработки):
 +
#пауза между заданиями трекинга
 +
accounting.worker.1.tracking.1.delay=20
 +
#максимальное количество проверенных соединений за задание
 +
accounting.worker.1.tracking.1.batchSize=100
 +
 +
#количество потоков на worker'а
 +
accounting.worker.2.thread.count=1
 +
#сброс в базу трафиков и наработки
 +
#минимальная наработка, при которой сбрасывать соединения в базу
 +
accounting.worker.2.flushing.1.minDeltaAccount=0
 +
#пауза между заданиями сброса в базу
 +
accounting.worker.2.flushing.1.delay=20
 +
#максимальное количество сброшенных соединений в базу за задание
 +
accounting.worker.2.flushing.1.batchSize=500
 +
 +
#количество потоков на worker'а
 +
accounting.worker.3.thread.count=1
 +
#завершатель соединений
 +
#пауза между заданиями
 +
accounting.worker.3.finishing.1.delay=20
 +
#максимальное количество сброшенных соединений в базу за задание
 +
accounting.worker.3.finishing.1.batchSize=500
 +
 +
 +
#таймаут перевода соединения в статус suspended при остутствии радиус пакетов
 +
connection.suspend.timeout=900
 +
#таймаут закрытия соединения при остутствии радиус пакетов (не складывается с connection.suspend.timeout)
 +
connection.close.timeout=900
 +
#таймаут перевода соединения в статус suspended при остутствии радиус пакетов (для сессий с ограниченным доступом)
 +
#connection.disable.suspend.timeout=900
 +
#таймаут закрытия соединения при остутствии радиус пакетов (не складывается с connection.suspend.timeout, для сессий с ограниченным доступом)
 +
#connection.disable.close.timeout=900
</source>
</source>
Первая строка необходима для процессора ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor, чтобы определить, какие типы устройств являются NASами. Вторая - для ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpHelperProcessor, для определения, какие типы устройств являются DHCP релеем. В нашем случае это один тип устройства - ISG. Причём идентификация устройства как NASа будет производится по его идентификатору 7201-ipoe.nettrans.ru, а как DHCP релея - по IP адресу 109.233.170.1. В данном случае использовать для идентификации RADIUS процессором IP адрес просто не выйдет, т.к. это поле нужно для DHCP процессора.
Первая строка необходима для процессора ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor, чтобы определить, какие типы устройств являются NASами. Вторая - для ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpHelperProcessor, для определения, какие типы устройств являются DHCP релеем. В нашем случае это один тип устройства - ISG. Причём идентификация устройства как NASа будет производится по его идентификатору 7201-ipoe.nettrans.ru, а как DHCP релея - по IP адресу 109.233.170.1. В данном случае использовать для идентификации RADIUS процессором IP адрес просто не выйдет, т.к. это поле нужно для DHCP процессора.
Строка 102: Строка 138:
Конфигурация устройства ISG в текстовом виде:
Конфигурация устройства ISG в текстовом виде:
<source lang="bash">
<source lang="bash">
 +
#хост для отправки PoD и CoA запросов (по умолчанию - хост, заданный в параметрах устройства Хост/порт)
 +
#radius.host=<хост устройства>
 +
#порт для отправки PoD и CoA запросов (по умолчанию - порт, заданный в параметрах устройства Хост/порт)
 +
#radius.port=<порт устройства>
 +
#идентификатор - Nas-Identifier (по умолчанию - значение из поля Идентификатор параметров устройства)
 +
#radius.identifier=<идентификатор устройства>
 +
#используемый secret для общения по radius-протоколу (по умолчанию - значение из поля Community/secret параметров устройства)
 +
#radius.secret=<community/sercret устройства>
 +
 +
#код атрибута, из которого извлекать acctSessionId родительской сессии (по умолчанию - из cisco-avpair)
 +
#radius.parentAcctSessionId.type=1
 +
#префикс в значении атрибута перед acctSessionId родительской сессии
 +
#radius.parentAcctSessionId.prefix=parent-session-id=
 +
#код атрибута, из которого извлекать имя сервиса ISG (по умолчанию cisco-SSG-Service-Info)
 +
#radius.serviceName.type=251
 +
#префикс в значении атрибута перед именем сервиса ISG (если есть)
 +
#radius.serviceName.prefix=
 +
 +
# радиус атрибуты, выдаваемые при авторизации для сервисов INET и INET_TURBO
# радиус атрибуты, выдаваемые при авторизации для сервисов INET и INET_TURBO
-
nas.radius.inetOption.1.attributes=cisco-SSG-Account-Info=AINET
+
radius.inetOption.1.attributes=cisco-SSG-Account-Info=AINET
-
nas.radius.inetOption.4.attributes=cisco-SSG-Account-Info=AINET_TURBO
+
radius.inetOption.4.attributes=cisco-SSG-Account-Info=AINET_TURBO
-
#
+
 
# радиус атрибуты, выдываемые при авторизции самих сервисов, запросе их свойств
# радиус атрибуты, выдываемые при авторизции самих сервисов, запросе их свойств
-
nas.radius.inetOption.2.attributes=cisco-avpair=ip:traffic-class=in access-group 196 priority 200;cisco-avpair=ip:traffic-class=in default drop;cisco-avpair=ip:traffic-class=out access-group 196 priority 200;cisco-avpair=ip:traffic-class=out default drop;cisco-avpair=subscriber:accounting-list=ISG-AUTH-1;Acct-Interim-Interval=60;cisco-SSG-Service-Info=QU;;500000;;750000;;D;;500000;;750000
+
radius.inetOption.2.attributes=cisco-avpair=ip:traffic-class=in access-group 196 priority 200;cisco-avpair=ip:traffic-class=in default drop;cisco-avpair=ip:traffic-class=out access-group 196 priority 200;cisco-avpair=ip:traffic-class=out default drop;cisco-avpair=subscriber:accounting-list=ISG-AUTH-1;Acct-Interim-Interval=60;cisco-SSG-Service-Info=QU;;500000;;750000;;D;;500000;;750000
-
nas.radius.inetOption.3.attributes=cisco-avpair=ip:traffic-class=in access-group 196 priority 201;cisco-avpair=ip:traffic-class=in default drop;cisco-avpair=ip:traffic-class=out access-group 196 priority 200;cisco-avpair=ip:traffic-class=out default drop;cisco-avpair=subscriber:accounting-list=ISG-AUTH-1;Acct-Interim-Interval=60;cisco-SSG-Service-Info=QU;;600000;;760000;;D;;600000;;760000
+
radius.inetOption.3.attributes=cisco-avpair=ip:traffic-class=in access-group 196 priority 201;cisco-avpair=ip:traffic-class=in default drop;cisco-avpair=ip:traffic-class=out access-group 196 priority 200;cisco-avpair=ip:traffic-class=out default drop;cisco-avpair=subscriber:accounting-list=ISG-AUTH-1;Acct-Interim-Interval=60;cisco-SSG-Service-Info=QU;;600000;;760000;;D;;600000;;760000
-
nas.radius.inetOption.6.attributes=cisco-avpair=ip:traffic-class=in access-group 196 priority 201;cisco-avpair=ip:traffic-class=in default drop;cisco-avpair=ip:traffic-class=out access-group 196 priority 200;cisco-avpair=ip:traffic-class=out default drop;cisco-avpair=subscriber:accounting-list=ISG-AUTH-1;Acct-Interim-Interval=60;cisco-SSG-Service-Info=QU;;600000;;760000;;D;;600000;;760000
+
radius.inetOption.6.attributes=cisco-avpair=ip:traffic-class=in access-group 196 priority 201;cisco-avpair=ip:traffic-class=in default drop;cisco-avpair=ip:traffic-class=out access-group 196 priority 200;cisco-avpair=ip:traffic-class=out default drop;cisco-avpair=subscriber:accounting-list=ISG-AUTH-1;Acct-Interim-Interval=60;cisco-SSG-Service-Info=QU;;600000;;760000;;D;;600000;;760000
-
#
+
 
-
# код категории ресурсов с "нормальными" адресами
+
#категории ip адресов из ресурсов, из которых будут выдаваться адреса ("пул", указывается во вкладке "IP ресурсы")
-
nas.radius.realm.default.pool=1
+
radius.realm.default.ipCategories=1
-
#
+
 
-
# коды ошибок, которые обрабатываются системой Reject-To-Accept
+
#коды ошибок, при которых вместо reject выдавать accept с заданными атрибутами
-
realm.reject.error=1,2,3,4,10,11,12
+
#(пользователю выдается серый адрес и устанавливается HTTP-редирект)
-
# код категории ресурсов Fake пула
+
radius.disable.accessCodes=1,2,3,4,10,11,12
-
nas.radius.realm.reject.pool=2
+
#атрибуты, выдаваемые при rejectToAccept
-
# радиус атрибуты, отправляемые в режиме Reject-To-Accept
+
radius.disable.attributes=cisco-SSG-Account-Info=AINET_FAKE
-
nas.radius.realm.reject.attributes=cisco-SSG-Account-Info=AINET_FAKE
+
#категории ip адресов из ресурсов, из которых будут выдаваться адреса для отключенных ("пул", указывается во вкладке "IP ресурсы")
-
#
+
radius.disable.ipCategories=2
-
#CoA порт
+
 
-
nas.radius.port=1700
+
-
nas.radius.host=94.125.95.117
+
-
nas.secret=123
+
-
#
+
# параметры DHCP к сети не привязанные
# параметры DHCP к сети не привязанные
dhcp.option.serverIdentifier=0.0.0.0
dhcp.option.serverIdentifier=0.0.0.0
Строка 133: Строка 184:
# параметр DHCP "основной шлюз" для сети
# параметр DHCP "основной шлюз" для сети
dhcp.net.option.109.233.170.0:255.255.255.0.gate=109.233.170.1
dhcp.net.option.109.233.170.0:255.255.255.0.gate=109.233.170.1
 +
 +
#----------------------------
 +
#параметры активации сервисов
 +
#----------------------------
 +
#длина паузы, если возникла ошибка
 +
#sa.error.pause=60
 +
#количество заданий за раз
 +
#sa.batch.size=20
 +
#время (сек) ожидания завершения всех заданий (при асинхронной работе)
 +
#sa.batch.wait=5
 +
#пауза (сек) после обработки заданий
 +
#sa.batch.pause=0
 +
#время (сек) ожидания новой задачи перед вызовом disconnect.
 +
#sa.batch.waitNext=5
 +
 +
#----------------------------------------
 +
#параметры обработчика активации сервисов
 +
#----------------------------------------
 +
#режим отправки CoA. 1 - команды 0xc и 0xb в одном пакете для каждого сервиса, 2 - атрибуты subscriber:command= в раздельных пакетах для каждого сервиса
 +
sa.radius.connection.coa.mode=1
 +
#если dhcp lease time большой, а при положительном балансе доступ нужно дать (даже если адрес сейчас выдан серый), нужно установить 1
 +
sa.radius.connection.coa.onEnable=0
 +
#откуда при отправке CoA брать атрибуты опций (по умолчанию - те же атрибуты, что выдаются при удачной авторизации)
 +
#sa.radius.option.attributesPrefix=
 +
sa.radius.connection.attributes=Acct-Session-Id
 +
#атрибуты CoA запроса для прекращения доступа (используется при sa.radius.connection.withoutBreak=1)
 +
#sa.radius.disable.attributes=
 +
#фиксированные атрибуты, добавляемые в запрос перед отправкой CoA
 +
#sa.radius.coa.attributes=
 +
#добавлять ли при отправке CoA атрибуты реалма (для default - из radius.realm.default.attributes)
 +
#sa.radius.realm.addAttributes=0
 +
#фиксированные атрибуты, добавляемые в запрос перед отправкой PoD
 +
#sa.radius.pod.attributes=
</source>
</source>
Строка 472: Строка 556:
                                 <param name="port" value="2001"/>
                                 <param name="port" value="2001"/>
                                 <param name="threadCount" value="10"/>
                                 <param name="threadCount" value="10"/>
-
                                 <param name="recvBufferSize">8 * 1024 * 1024</param>
+
                                 <param name="recvBufferSize">2 * 1024 * 1024</param>
                                 <param name="soRCVBUF">512 * 1024</param>
                                 <param name="soRCVBUF">512 * 1024</param>
                                 <param name="sources" value=""/>
                                 <param name="sources" value=""/>
Строка 484: Строка 568:
                                 <param name="port" value="9367"/>
                                 <param name="port" value="9367"/>
                                 <param name="threadCount" value="8"/>
                                 <param name="threadCount" value="8"/>
-
                                 <param name="recvBufferSize">8 * 1024 * 1024</param>
+
                                 <param name="recvBufferSize">2 * 1024 * 1024</param>
                                 <param name="soRCVBUF">512 * 1024</param>
                                 <param name="soRCVBUF">512 * 1024</param>
                                 <param name="sources" value="4"/>
                                 <param name="sources" value="4"/>
Строка 497: Строка 581:
                                 <param name="port" value="9368"/>
                                 <param name="port" value="9368"/>
                                 <param name="threadCount" value="8"/>
                                 <param name="threadCount" value="8"/>
-
                                 <param name="recvBufferSize">8 * 1024 * 1024</param>
+
                                 <param name="recvBufferSize">2 * 1024 * 1024</param>
                                 <param name="soRCVBUF">512 * 1024</param>
                                 <param name="soRCVBUF">512 * 1024</param>
                                 <param name="sources" value="20"/>
                                 <param name="sources" value="20"/>
Строка 969: Строка 1053:
6. Изменение свойств соединения.
6. Изменение свойств соединения.
-
Для изменения свойств соединения во время его работы используются CoA запросы. Их отправляет класс ru.bitel.bgbilling.inet.dyn.device.isg.ISGServiceActivator при вызове в нём метода connectionModify. В BGInetAccess/log/mq.log.
+
Для изменения свойств соединения во время его работы используются CoA запросы. Их отправляет класс ru.bitel.bgbilling.modules.inet.dyn.device.cisco.ISGServiceActivator при вызове в нём метода connectionModify. В BGInetAccess/log/mq.log.
В тестовых целях проще всего инициировать изменение свойств переключив опцию непосредственно в сервисе и сохранив, либо изменив её в тарифном плане.
В тестовых целях проще всего инициировать изменение свойств переключив опцию непосредственно в сервисе и сохранив, либо изменив её в тарифном плане.

Текущая версия на 09:42, 30 января 2012

Содержание

Схема сети


                                                vlan 50   (94.125.95.113)
                              -------------------trunk----[ whole world ]
                             |
                             |
                             |
	  vlan 834			       vlan 50	  (109.233.170.1)
[клиент] --access-- [ edge-core opt.82 ] -------trunk----[ cisco 7201 ISG ] 
                             |      	       vlan 834	  (94.125.95.117) 
                             |      					
                             | 		        vlan 50	   (94.125.95.114) 
			      -------------------trunk----[ bgbilling server ]


Адреса реальные, клиенту выдаются адреса из сети 109.233.170.0/24. Далее всё руководство построено под эти адреса, при необходимости корректируйте на свои. Взаимодействие сервера биллина с Cisco происходит через внешнюю сеть. Не совсем правильно, так сделано для упрощения схемы.

Предоставляется 2 сервиса INET и INET_TURBO. В случае ошибки авторизации клиент авторизуется с сервисом INET_FAKE с выдачей фиктивного адреса.

При необходимости блокировки сессии с помощью CoA все сервисы блокируются и активируется INET_FAKE, в DHCP сервере ставится пометка о необходимости переаренды. При следующем DHCP запросе клиент получит NAK ответ, в результате чего сессия переавторизуется и клиент получит фиктивный адрес и сервис INET_FAKE. До этого момента он будет пользоваться реальным адресом но с тем же сервисом.

Сервис INET_FAKE предполагает перенаправление всех HTTP запросов на страницу с ошибкой.

При необходимости разблокировки клиента. Если у него есть сессия с сервисом INET_FAKE - в DHCP сервере ставится пометка он необходимости переаренды. Со следующим DHCP запросом клиент получает NAK ответ, сессия переавторизуется с полноценным сервисом и адресом.

Обсчёт трафика производится по атрибутам, класс ru.bitel.bgbilling.inet.dyn.device.isg.ISGProtocolHandler переносит подменяет в Update пакета сервисов Acct-Session-Id на код родительской сессии. и переносит счётчики байт в атрибут cisco-avpair сопровождая префиксом INET_IN, INET_OUT, INET_TURBO_IN, INET_TURBO_OUT.

Для лучшего понимания логики желательно изучить классы ru.bitel.bgbilling.modules.inet.dyn.device.cisco.ISGProtocolHandler и ru.bitel.bgbilling.modules.inet.dyn.device.cisco.ISGServiceActivator.

Договор TEST представляет из себя клиента, TEST_Service Param - параметры сервиса.

Настройка экземпляра модуля

Установка и создание экземпляра модуля стандартное код экземлляра - 1. Далее скриншоты с процессом настройки и примечаниями. Если где-то конфигурация расходится со скриншотом - верить конфигурации.

Модуль и услуги
Опции

Обратите внимание, что почти каждая опция у нас дублирована второй опцией, которая называется "параметры". Сделано так из-за изумительно "удобного" режима работы ISG, когда после указания параметров сессии поступает ещё один авторизационный запрос с запросом параметров переданных опций, где уже указываются скорость и т.п. Далее будет объяснено более подробно. Коды опций, услуг, экземпляра модуля далее используются по всему руководству. Внимательно сверяйте их со своими, либо при первой настройке переименуйте опции согласно данному руководству для получения нужных кодов.

Типы трафиков
Привязки типов трафиков
Редактор "Стандартной привязки"

Привязки типов трафика. Трафик извлекается из атрибута cisco-avpair с текстовым префиксом, зависящим от сервиса. В этот атрибут трафик помещает динамический код предобработки запроса. Пустая привязка типов трафика остаётся пустой.

Ресурсы IP адресов

Сеть 109.233.170 с 2 по 100 адреса выдаётся для реальных соединений, с 101 по 254 -для соединений Reject-To-Accept. В конфигурациях (см. далее) используются коды категорий ресурсов, не коды самих ресурсов.

Типы устройств
Тип устройства ISG
Тип устройства Switch
Тип устройства Switch - интерфейсы
Тип устройства ProcessGroup

В типе устройства ISG определены динамические классы управления и предобработки запросов. Они поставляются с модулем. Если данных классов в списке нет, посмотрите Сервис => Автоматизация => Управление динамическим кодом, возможно код необходимо принудительно скомпилировать. Тип устройства ProcessGroup нужен исключительно для группировки, никакого другого смысла он не несёт. Коды типов устройств также далее активно используются в конфигурации, будьте внимательны или подгоните вашу настройку под эти коды.

Дерево устройств
Конфигурация устройства ProcessGroup
Конфигурация устройства ISG
Конфигурация устройства Switch

В конфигурации устройства ProcessGroup указаны строки.

#типы устройств - Nas-ов
radius.deviceTypeIds=1
#типы устройств, являющиеся dhcp relay
dhcp.relay.deviceTypeIds=1
 
#количество потоков на worker'а
accounting.worker.1.thread.count=1
#тарификатор:
#минимальная сумма трафика, при которой тарифицировать соединение
accounting.worker.1.tariffication.1.minDeltaAmount=0
#пауза между заданиями тарификации
accounting.worker.1.tariffication.1.delay=10
#максимальное количество тарифицируемых соединений за задание
accounting.worker.1.tariffication.1.batchSize=100
#трекер (обработка сессий без наработки):
#пауза между заданиями трекинга
accounting.worker.1.tracking.1.delay=20
#максимальное количество проверенных соединений за задание
accounting.worker.1.tracking.1.batchSize=100
 
#количество потоков на worker'а
accounting.worker.2.thread.count=1
#сброс в базу трафиков и наработки
#минимальная наработка, при которой сбрасывать соединения в базу
accounting.worker.2.flushing.1.minDeltaAccount=0
#пауза между заданиями сброса в базу
accounting.worker.2.flushing.1.delay=20
#максимальное количество сброшенных соединений в базу за задание
accounting.worker.2.flushing.1.batchSize=500
 
#количество потоков на worker'а
accounting.worker.3.thread.count=1
#завершатель соединений
#пауза между заданиями
accounting.worker.3.finishing.1.delay=20
#максимальное количество сброшенных соединений в базу за задание
accounting.worker.3.finishing.1.batchSize=500
 
 
#таймаут перевода соединения в статус suspended при остутствии радиус пакетов
connection.suspend.timeout=900
#таймаут закрытия соединения при остутствии радиус пакетов (не складывается с connection.suspend.timeout)
connection.close.timeout=900
#таймаут перевода соединения в статус suspended при остутствии радиус пакетов (для сессий с ограниченным доступом)
#connection.disable.suspend.timeout=900
#таймаут закрытия соединения при остутствии радиус пакетов (не складывается с connection.suspend.timeout, для сессий с ограниченным доступом)
#connection.disable.close.timeout=900

Первая строка необходима для процессора ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor, чтобы определить, какие типы устройств являются NASами. Вторая - для ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpHelperProcessor, для определения, какие типы устройств являются DHCP релеем. В нашем случае это один тип устройства - ISG. Причём идентификация устройства как NASа будет производится по его идентификатору 7201-ipoe.nettrans.ru, а как DHCP релея - по IP адресу 109.233.170.1. В данном случае использовать для идентификации RADIUS процессором IP адрес просто не выйдет, т.к. это поле нужно для DHCP процессора.

Остальные строки - параметры обсчёта и закрытия сессий, можно прочитать о них в документации.

Конфигурация устройства ISG в текстовом виде:

#хост для отправки PoD и CoA запросов (по умолчанию - хост, заданный в параметрах устройства Хост/порт)
#radius.host=<хост устройства>
#порт для отправки PoD и CoA запросов (по умолчанию - порт, заданный в параметрах устройства Хост/порт)
#radius.port=<порт устройства>
#идентификатор - Nas-Identifier (по умолчанию - значение из поля Идентификатор параметров устройства)
#radius.identifier=<идентификатор устройства>
#используемый secret для общения по radius-протоколу (по умолчанию - значение из поля Community/secret параметров устройства)
#radius.secret=<community/sercret устройства>
 
#код атрибута, из которого извлекать acctSessionId родительской сессии (по умолчанию - из cisco-avpair)
#radius.parentAcctSessionId.type=1
#префикс в значении атрибута перед acctSessionId родительской сессии
#radius.parentAcctSessionId.prefix=parent-session-id=
#код атрибута, из которого извлекать имя сервиса ISG (по умолчанию cisco-SSG-Service-Info)
#radius.serviceName.type=251
#префикс в значении атрибута перед именем сервиса ISG (если есть)
#radius.serviceName.prefix=
 
 
# радиус атрибуты, выдаваемые при авторизации для сервисов INET и INET_TURBO
radius.inetOption.1.attributes=cisco-SSG-Account-Info=AINET
radius.inetOption.4.attributes=cisco-SSG-Account-Info=AINET_TURBO
 
# радиус атрибуты, выдываемые при авторизции самих сервисов, запросе их свойств
radius.inetOption.2.attributes=cisco-avpair=ip:traffic-class=in access-group 196 priority 200;cisco-avpair=ip:traffic-class=in default drop;cisco-avpair=ip:traffic-class=out access-group 196 priority 200;cisco-avpair=ip:traffic-class=out default drop;cisco-avpair=subscriber:accounting-list=ISG-AUTH-1;Acct-Interim-Interval=60;cisco-SSG-Service-Info=QU;;500000;;750000;;D;;500000;;750000
radius.inetOption.3.attributes=cisco-avpair=ip:traffic-class=in access-group 196 priority 201;cisco-avpair=ip:traffic-class=in default drop;cisco-avpair=ip:traffic-class=out access-group 196 priority 200;cisco-avpair=ip:traffic-class=out default drop;cisco-avpair=subscriber:accounting-list=ISG-AUTH-1;Acct-Interim-Interval=60;cisco-SSG-Service-Info=QU;;600000;;760000;;D;;600000;;760000
radius.inetOption.6.attributes=cisco-avpair=ip:traffic-class=in access-group 196 priority 201;cisco-avpair=ip:traffic-class=in default drop;cisco-avpair=ip:traffic-class=out access-group 196 priority 200;cisco-avpair=ip:traffic-class=out default drop;cisco-avpair=subscriber:accounting-list=ISG-AUTH-1;Acct-Interim-Interval=60;cisco-SSG-Service-Info=QU;;600000;;760000;;D;;600000;;760000
 
#категории ip адресов из ресурсов, из которых будут выдаваться адреса ("пул", указывается во вкладке "IP ресурсы")
radius.realm.default.ipCategories=1
 
#коды ошибок, при которых вместо reject выдавать accept с заданными атрибутами
#(пользователю выдается серый адрес и устанавливается HTTP-редирект)
radius.disable.accessCodes=1,2,3,4,10,11,12
#атрибуты, выдаваемые при rejectToAccept
radius.disable.attributes=cisco-SSG-Account-Info=AINET_FAKE
#категории ip адресов из ресурсов, из которых будут выдаваться адреса для отключенных ("пул", указывается во вкладке "IP ресурсы")
radius.disable.ipCategories=2
 
# параметры DHCP к сети не привязанные
dhcp.option.serverIdentifier=0.0.0.0
dhcp.option.dns=109.233.170.1
dhcp.option.leaseTime=600
#
# параметр DHCP "основной шлюз" для сети
dhcp.net.option.109.233.170.0:255.255.255.0.gate=109.233.170.1
 
#----------------------------
#параметры активации сервисов
#----------------------------
#длина паузы, если возникла ошибка
#sa.error.pause=60
#количество заданий за раз
#sa.batch.size=20
#время (сек) ожидания завершения всех заданий (при асинхронной работе)
#sa.batch.wait=5
#пауза (сек) после обработки заданий
#sa.batch.pause=0
#время (сек) ожидания новой задачи перед вызовом disconnect.
#sa.batch.waitNext=5
 
#----------------------------------------
#параметры обработчика активации сервисов
#----------------------------------------
#режим отправки CoA. 1 - команды 0xc и 0xb в одном пакете для каждого сервиса, 2 - атрибуты subscriber:command= в раздельных пакетах для каждого сервиса
sa.radius.connection.coa.mode=1
#если dhcp lease time большой, а при положительном балансе доступ нужно дать (даже если адрес сейчас выдан серый), нужно установить 1
sa.radius.connection.coa.onEnable=0
#откуда при отправке CoA брать атрибуты опций (по умолчанию - те же атрибуты, что выдаются при удачной авторизации)
#sa.radius.option.attributesPrefix=
sa.radius.connection.attributes=Acct-Session-Id
#атрибуты CoA запроса для прекращения доступа (используется при sa.radius.connection.withoutBreak=1)
#sa.radius.disable.attributes=
#фиксированные атрибуты, добавляемые в запрос перед отправкой CoA
#sa.radius.coa.attributes=
#добавлять ли при отправке CoA атрибуты реалма (для default - из radius.realm.default.attributes)
#sa.radius.realm.addAttributes=0
#фиксированные атрибуты, добавляемые в запрос перед отправкой PoD
#sa.radius.pod.attributes=
Тип сервиса ISG
Тип сервиса ISG описание сервиса

Первый тип сервиса - непосредственно ISG сервис, добавляемый в договор клиента. Для простоты здесь в логин вручную вбиваются опции circuit_id:remote_id, приходящие в опциях 82 отрелеенного запроса. Далее, при запуске системы в реальную эксплуатацию, имеет смысл убрать требование ввода логина и заменить на его генерацию исходя из выбранного коммутатора и порта. Скрипт или динамический код можно повесить на событие "Измененяется сервис договора". Примерный вид динамического класса для генерации логина:

package ru.clink.bgbilling.module.inet.serv;
 
import ru.bitel.bgbilling.kernel.script.server.dev.*;
import ru.bitel.bgbilling.modules.inet.api.common.bean.*;
import ru.bitel.bgbilling.modules.inet.api.server.event.*;
import ru.bitel.bgbilling.server.util.*;
import ru.bitel.common.sql.*;
 
public class ClipsLoginGenerator 
 
	extends EventScriptBase<InetServChangingEvent>
	implements EventScript<InetServChangingEvent> {
	@Override
	public void onEvent( InetServChangingEvent e, Setup setup, ConnectionSet connectionSet )
		throws Exception
	{
		InetServ inetServ = e.getInetServ();
		int deviceId = inetServ.getDeviceId();
 
		InetDevice device = new InetDeviceDao( connectionSet.getConnection(), e.getModuleId() ).get( deviceId );
 
		int port = inetServ.getInterfaceId();
		String port_str = "";
 
		if (port > 15) {
			port_str = String.format( "%x", new Object[]{ port } );
 
		} else {
			port_str = String.format( "0%1$x", new Object[]{ port } );
		}
 
		String userName = device.getIdentifier().toLowerCase() + ":" + port_str;
		inetServ.setLogin( userName );
		inetServ.setPassword( "123" );
 
		print( "Setting userName:" + userName ); 
	}
}

Сервисы типа ISG описание сервиса добавляются на один договор и используются для передачи ISG параметров конкретного ISG сервиса.

Настройка тарифа и договора

Тариф для клиента
Тариф для фиктивного клиента с параметрами сервиса

В тарифном плане определяется услуга и стоимость для каждого из типов трафиков, потребляемых сервисом. Второй тариф сделан по принципу "чтобы был", т.к. при отсутствии тарифа в договоре сервиса не пройдёт RADIUS авторизация. Первый тариф указывается для договора TEST, второй - TEST_Service Param. Не забывайте нажимать "Оповестить об изменениях" по завершению правки тарифа.

Сервисы в договоре клиента
Сервис в договоре клиента
Опции сервиса в договоре клиента
Сервисы в договоре фиктивного клиента с параметрами сервиса
Сервис в договоре фиктивного клиента
Опция сервиса в договоре фиктивного клиента

К каждому из сервисов в фиктивном договоре привязано по одной опции. Для опции в конфигурации устройства ISG определены атрибуты. Пароль для сервисов в договоре клиента - 123, это указано в конфигурации Cisco. Для сервисов в фиктивном договоре - cisco, это ничем не определяется. Просто данность. По крайней мере, я не нашёл.

Настройка Коммутатора

Использовался EDGE-CORE ES3528(52)M. Firmware версия 1.4.10.1 (примечательно, что последняя на данный момент версия firmware 1.4.16.4 не пропускает в сторону сервера dhcp - запросы)

vlan database
 vlan 834 name IPOE media ethernet state active
!
ip dhcp snooping
ip dhcp snooping vlan 834
ip dhcp snooping information option
!
клиентский порт
!
interface ethernet 1/1
 description IPOE
 ip source-guard sip-mac
 switchport allowed vlan add 834 untagged
 switchport native vlan 834
 switchport allowed vlan remove 1
!
порт в сторону IPOE
!
interface ethernet 1/26
 description Link to 7201-ipoe
 ip dhcp snooping trust
 switchport allowed vlan add 1 untagged
 switchport allowed vlan add 1,50,834 tagged
 switchport mode trunk
!

Конфигурация Cisco

IOS: c7200p-adventerprisek9-mz.122-33.SRD6.bin или c7200p-advipservicesk9-mz.122-33.SRD5.bin

!
aaa new-model
aaa session-mib disconnect
!
!
aaa group server radius ISG-RADIUS
 server 94.125.95.114 auth-port 1812 acct-port 1813
!
aaa authentication login ISG-AUTH-1 group ISG-RADIUS
aaa authorization network ISG-AUTH-1 group ISG-RADIUS 
aaa authorization subscriber-service default local group ISG-RADIUS 
aaa accounting delay-start
aaa accounting update periodic 5
aaa accounting network ISG-AUTH-1 start-stop group ISG-RADIUS                                                                                                                                                                                               
!                                                                                                                                                                                                                                                           
aaa nas port extended                                                                                                                                                                                                                                                    
!                                                                                                                                                                                                                                                           
aaa server radius dynamic-author                                                                                                                                                                                                                            
 client 94.125.95.114                                                                                                                                                                                                                                       
 client 109.233.170.2                                                                                                                                                                                                                                       
 server-key 123                                                                                                                                                                                                                                             
 auth-type any                                                                                                                                                                                                                                              
!                                                                                                                                                                                                                                                           
aaa session-id common                                                                                                                                                                                                                                       
!                                                                              
ip subnet-zero                                                                                                                                                                                                                                              
ip source-route                                                                                                                                                                                                                                             
!                                                                                                                                                                                                                                                           
!                                                                                                                                                                                                                                                           
ip dhcp relay information policy keep
ip dhcp relay information trust-all
!
!
ip cef
!
!
subscriber authorization enable
multilink bundle-name authenticated
!
!
!
ip ssh version 2
policy-map type control ISG-INTERFACE-POLICY
 class type control always event session-start
  10 authorize aaa list ISG-AUTH-1 password 123 identifier remote-id plus circuit-id plus mac-address 
  30 service-policy type service name LOCAL_L4R
 !
 class type control always event session-restart
  10 authorize aaa list ISG-AUTH-1 password 123 identifier remote-id plus circuit-id plus mac-address 
  30 service-policy type service name LOCAL_L4R
 !
!
interface GigabitEthernet0/1
 no ip address
 media-type rj45
 speed auto
 duplex auto
 negotiation auto
!
interface GigabitEthernet0/1.50
 description MGMT test ISG
 encapsulation dot1Q 50
 ip address 94.125.95.117 255.255.255.240
!
interface GigabitEthernet0/1.834
 description IPOE
 encapsulation dot1Q 834
 ip address 109.233.170.1 255.255.255.0
 ip helper-address 94.125.95.114
 service-policy type control ISG-INTERFACE-POLICY
 ip subscriber l2-connected
  initiator dhcp class-aware
!
ip classless
ip route 0.0.0.0 0.0.0.0 94.125.95.113
!
!
radius-server attribute 44 include-in-access-req
radius-server attribute 8 include-in-access-req
radius-server attribute 32 include-in-access-req 
radius-server attribute 32 include-in-accounting-req 
radius-server attribute 55 include-in-acct-req
radius-server attribute 55 access-request include
radius-server attribute nas-port format e UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
radius-server attribute 61 extended
radius-server host 94.125.95.114 auth-port 1812 acct-port 1813 key 123
radius-server unique-ident 112
radius-server vsa send cisco-nas-port
radius-server vsa send accounting
radius-server vsa send authentication
!
access-list 196 remark catch all traffic
access-list 196 permit ip any any
!

Настройка BGInetAccess, BGInetAccounting серверов

Конфигурация BGInetAccess, файл inet-access.xml.

<?xml version="1.0" encoding="UTF-8"?>
<application context="access">
        <param name="app.name" value="BGInetAccess"/>
        <param name="app.id" value="1"/>
 
        <param name="moduleId" value="1"/>
 
        <param name="db.driver" value="com.mysql.jdbc.Driver"/>
        <param name="db.url" value="jdbc:mysql://127.0.0.1/bgbilling?useUnicode=true&amp;characterEncoding=Cp1251&amp;allowUrlInLocalInfile=true&amp;zeroDateTimeBehavior=convertToNull&amp;jdbcCompliantTruncation=false&amp;queryTimeoutKillsConnection=true"/>
        <param name="db.user" value="bill"/>
        <param name="db.pswd" value="bgbilling"/>
 
        <param name="mq.url" value="failover:(tcp://localhost:61616)"/>
        <param name="mq.user" value="bill"/>
        <param name="mq.pswd" value="bgbilling"/>
 
        <!--  код корневого устройства -->
        <param name="rootDeviceId" value="4"/>
        <!--  типы фейковых устройств, являющихся аккаунтинг серверами -->
        <param name="accounting.deviceTypeIds" value="4"/>
 
        <param name="commonIdentifierName" value="rootDeviceId" />
 
        <bean name="access" class="ru.bitel.bgbilling.modules.inet.access.Access" />
 
        <param name="datalog.radius.dir" value="data/radius"/>
 
        <context name="radius">
                <bean name="radiusProcessor" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor"/>
 
                <scheduledExecutorService name="hrlydtlggr" corePoolSize="1" />
 
                <bean name="radiusDataLogger" class="ru.bitel.bgbilling.modules.inet.radius.RadiusHourlyDataLogger">
                        <param name="scheduledExecutor">hrlydtlggr</param>
                </bean>
 
                <bean name="radiusListener" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusListener">
                        <constructor>
                                <param name="host" value=""/>
                                <param name="port" value="1812"/>
                                <param name="byteBufferCapacity">512 * 1024</param>
                                <param name="processor">radiusProcessor</param>
                                <param name="mode">RadiusListener.Mode.authentication</param>
                                <param name="dataLogger">radiusDataLogger</param>
                                <param name="threadCount">10</param>
                                <param name="maxQueueSize">200</param>
                        </constructor>
                </bean>
        </context>
 
        <context name="dhcp">
                <bean name="dhcpProcessor" class="ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpHelperProcessor"/>
 
                <bean name="dhcpListener" class="ru.bitel.bgbilling.kernel.network.dhcp.DhcpListener">
                        <constructor>
                                <param name="host" value=""/>
                                <param name="port" value="67"/>
                                <param name="byteBufferCapacity">512 * 1024</param>
                                <param name="processor">dhcpProcessor</param>
                                <param name="dataLogger"></param>
                                <param name="threadCount">10</param>
                                <param name="maxQueueSize">200</param>
                        </constructor>
                </bean>
        </context>
</application>

Конфигурация BGInetAccounting, файл inet-accounting.xml.

<?xml version="1.0" encoding="UTF-8"?>
<application context="accounting">
        <param name="app.name" value="BGInetAccounting"/>
        <param name="app.id" value="2"/>
 
        <param name="moduleId" value="1"/>
 
        <param name="db.driver" value="com.mysql.jdbc.Driver"/>
        <param name="db.url" value="jdbc:mysql://127.0.0.1/bgbilling?useUnicode=true&amp;characterEncoding=Cp1251&amp;allowUrlInLocalInfile=true&amp;zeroDateTimeBehavior=convertToNull&amp;jdbcCompliantTruncation=false&amp;queryTimeoutKillsConnection=true"/>
        <param name="db.user" value="bill"/>
        <param name="db.pswd" value="bgbilling"/>
 
        <param name="mq.url" value="failover:(tcp://localhost:61616)"/>
        <param name="mq.user" value="bill"/>
        <param name="mq.pswd" value="bgbilling"/>
 
        <!--  код корневого устройства -->
        <param name="rootDeviceId" value="4"/>
 
        <param name="commonIdentifierName" value="rootDeviceId"/>
 
        <bean name="accounting" class="ru.bitel.bgbilling.modules.inet.accounting.Accounting"/>
 
        <param name="datalog.radius.dir" value="data/radius" />
        <param name="datalog.flow.dir" value="data/flow" />
 
        <context name="radius">
                <bean name="processor" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor"/>
 
                <scheduledExecutorService name="hrlydtlggr" corePoolSize="1"/>
 
                <bean name="radiusDataLogger" class="ru.bitel.bgbilling.modules.inet.radius.RadiusHourlyDataLogger">
                        <param name="scheduledExecutor">hrlydtlggr</param>
                </bean>
 
                <bean name="radiusListener" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusListener">
                        <constructor>
                                <param name="host" value=""/>
                                <param name="port" value="1813"/>
                                <param name="byteBufferCapacity">512 * 1024</param>
                                <param name="processor">processor</param>
                                <param name="mode">RadiusListener.Mode.accounting</param>
                                <param name="setup">setup</param>
                                <param name="dataLogger">radiusDataLogger</param>
                        </constructor>
                </bean>
        </context>
 
 
        <!-- 
        <context name="collector">

                <scheduledExecutorService name="hrlydtlggr" corePoolSize="1"/>
 
                <bean name="flowDataLogger" class="ru.bitel.bgbilling.modules.inet.collector.IPHourlyDataLogger">
                        <param name="scheduledExecutor">hrlydtlggr</param>
                </bean>
 
                <bean name="flowListener" class="ru.bitel.bgbilling.modules.inet.collector.InetFlowListener">
                        <constructor factoryMethod="newInstance">
                                <param name="type" value="netflow"/>
                                <param name="host" value=""/>
                                <param name="port" value="2001"/>
                                <param name="threadCount" value="10"/>
                                <param name="recvBufferSize">2 * 1024 * 1024</param>
                                <param name="soRCVBUF">512 * 1024</param>
                                <param name="sources" value=""/>
                        </constructor>
                </bean>
 
                <bean name="flowListener" class="ru.bitel.bgbilling.modules.inet.collector.InetFlowListener">
                        <constructor factoryMethod="newInstance">
                                <param name="type" value="netflow9"/>
                                <param name="host" value=""/>
                                <param name="port" value="9367"/>
                                <param name="threadCount" value="8"/>
                                <param name="recvBufferSize">2 * 1024 * 1024</param>
                                <param name="soRCVBUF">512 * 1024</param>
                                <param name="sources" value="4"/>
                        </constructor>
                </bean>
 
 
                <bean name="flowListener" class="ru.bitel.bgbilling.modules.inet.collector.InetFlowListener">
                        <constructor factoryMethod="newInstance">
                                <param name="type" value="netflow"/>
                                <param name="host" value=""/>
                                <param name="port" value="9368"/>
                                <param name="threadCount" value="8"/>
                                <param name="recvBufferSize">2 * 1024 * 1024</param>
                                <param name="soRCVBUF">512 * 1024</param>
                                <param name="sources" value="20"/>
                        </constructor>
                </bean>
        </context>
         -->
</application>

После конфигурирования устройства необходимо обновить с BGBillingServer а командой update.sh. В конфигурации указываются слушатели и процессоры протоколов и их параметры: порты, количество потоков обработки, буферы. Указывается код экземпляра модуля и код корневого устройства, от которого сервер начинает загрузку базы устройств и сервисов клиентов. Такая разбивка позволяет разнести обслуживание по нескольким Access и Accounting серверам. С группой серверов каждого Access сервера может быть связано один или более групп Accounting серверов, каждый из которых идентифицируется своим узлом. В данном простейшем случае у нас одна группа Access и Accounting серверов и она завязано на устройство с кодом 4 и типом с кодом также 4.

Отладка и разбор алгоритма работы

Список полезных команд для Cisco:

  • show subscr sess all - просмотр всех ISG сессий
  • clear subscr sess all - сброс всех ISG сессий
  • show subscriber session detailed - просмотр детальной информации по ISG сессии с выводом сервисов
  • show subscriber session uid 1 detailed - по Based on Unique ID
  • show subscriber session username WORD detailed - по Based on username

Что можно включить для дебага на Cisco:

debug aaa authentication 
debug aaa accounting
debug aaa coa
debug aaa attr 
debug aaa subscriber profile
debug sss error
debug sss event
debug sss fsm
debug sss aaa authorization event
debug sss aaa authorization fsm  
debug sss feature event 
debug sss feature detail  
debug sss policy all
debug subscriber service 
debug subscriber policy condition error
debug subscriber policy condition detail 
debug subscriber policy condition event
debug ip dhcp server packet 
debug ip udp

После запуска BGInetAccess убедитесь: 1. Что устройства и привязанные к ним сервисы загрузились:

[root@bgb BGInetAccess]# ./access.sh servmap
Java Runtime: Sun Microsystems Inc. Java HotSpot(TM) Server VM [1.6.0_26] /usr/java/jdk1.6.0_26/jre
  Runtime name: 19324@bgb.nettrans.ru
  Java endorsed dirs: /usr/java/jdk1.6.0_26/jre/lib/endorsed
  OS: Linux 2.6.32.26-175.fc12.i686.PAE [i386], file.encoding: UTF-8, user.name: root
  Heap sizes: current=30912k  free=30098k  max=233024k
ContractId: 5; servId: 3
        Логин: INET
        Options [2:17.03.2011-…; ] TariffModuleTreeSet [3:28.02.2011-…; ]
        Device state: 1; optionSet:
        Balance: 0; Limit: 0
ContractId: 5; servId: 4
        Логин: INET_TURBO
        Options [3:17.03.2011-…; ] TariffModuleTreeSet [3:28.02.2011-…; ]
        Device state: 0; optionSet:
        Balance: 0; Limit: 0
ContractId: 5; servId: 6
        Логин: INET_FAKE
        Options [6:22.04.2011-…; ] TariffModuleTreeSet [3:28.02.2011-…; ]
        Device state: 1; optionSet:6
        Balance: 0; Limit: 0
ContractId: 1; servId: 1
        LOGIN: 00060012cf539f5e:000403420101                                                                                                                                                                                                                
        Options [1:24.03.2011-…; ] TariffModuleTreeSet [1:14.02.2011-…; ]                                                                                                                                                                                   
        Device state: 1; optionSet:1                                                                                                                                                                                                                        
        Balance: 77; Limit: 0       

2. В radius-processor.log должен быть загружен NAS.

radius-processor.log                                                                                                                                                                                                             2348/2348  UTF-8       100%
08-24/09:39:33  INFO [main] DefaultServerSetup - Binding javax.jms.ConnectionFactory[org.apache.activemq.ActiveMQConnectionFactory@198cb3d] to java:comp/env/mq/connectionFactory                                                                           
08-24/09:39:33  INFO [main] DefaultServerSetup - Init DB connection pools                                                                                                                                                                                   
08-24/09:39:33  INFO [main] DefaultServerSetup - Binding JDBC pool "master" to java:comp/env/jdbc/master                                                                                                                                                    
08-24/09:39:34  INFO [main] DefaultServerSetup - Init trash pools..                                                                                                                                                                                         
08-24/09:39:35  INFO [main] InetRadiusProcessor - Reloading nas list                                                                                                                                                                                        
08-24/09:39:35  INFO [main] InetNasList - Loading NAS list...                                                                                                                                                                                               
08-24/09:39:36  INFO [main] NasList - LOADED NAS: Nas id: 7201-ipoe.nettrans.ru; ip: 109.233.170.1                                                                                                                                                          
CONFIG:                                                                                                                                                                                                                                                     
dhcp.option.dns=109.233.170.1                                                                                                                                                                                                                               
dhcp.option.leaseTime=600                                                                                                                                                                                                                                   
dhcp.option.serverIdentifier=0.0.0.0                                                                                                                                                                                                                        
dhcp.relay.deviceTypeIds=1                                                                                                                                                                                                                                  
nas.deviceTypeIds=1                                                                                                                                                                                                                                         
nas.radius.host=94.125.95.117                                                                                                                                                                                                                               
nas.radius.inetOption.1.attributes=cisco-SSG-Account-Info=AINET                                                                                                                                                                                             
nas.radius.inetOption.2.attributes=cisco-avpair=ip:traffic-class=in access-group 196 priority 200;cisco-avpair=ip:traffic-class=in default drop;cisco-avpair=ip:traffic-class=out access-group 196 priority 200;cisco-avpair=ip:traffic-class=out default dr
nas.radius.inetOption.3.attributes=cisco-avpair=ip:traffic-class=in access-group 196 priority 201;cisco-avpair=ip:traffic-class=in default drop;cisco-avpair=ip:traffic-class=out access-group 196 priority 200;cisco-avpair=ip:traffic-class=out default dr
nas.radius.inetOption.4.attributes=cisco-SSG-Account-Info=AINET_TURBO                                                                                                                                                                                       
nas.radius.inetOption.6.attributes=cisco-avpair=ip:traffic-class=in access-group 196 priority 201;cisco-avpair=ip:traffic-class=in default drop;cisco-avpair=ip:traffic-class=out access-group 196 priority 200;cisco-avpair=ip:traffic-class=out default dr
nas.radius.port=1700                                                                                                                                                                                                                                        
nas.radius.realm.default.pool=1                                                                                                                                                                                                                             
nas.radius.realm.reject.attributes=cisco-SSG-Account-Info=AINET_FAKE                                                                                                                                                                                        
nas.radius.realm.reject.pool=2                                                                                                                                                                                                                              
nas.secret=123                                                                                                                                                                                                                                              
realm.reject.error=1,2,3,4,10,11,12      

3. В dhcp.log должна отобразиться загрузка релея.

08-24/09:39:33  INFO [main] DefaultServerSetup - Binding javax.jms.ConnectionFactory[org.apache.activemq.ActiveMQConnectionFactory@198cb3d] to java:comp/env/mq/connectionFactory                                                                           
08-24/09:39:33  INFO [main] DefaultServerSetup - Init DB connection pools                                                                                                                                                                                   
08-24/09:39:33  INFO [main] DefaultServerSetup - Binding JDBC pool "master" to java:comp/env/jdbc/master                                                                                                                                                    
08-24/09:39:34  INFO [main] DefaultServerSetup - Init trash pools..                                                                                                                                                                                         
08-24/09:39:36  INFO [main] InetDhcpDeviceMap - Load DHCP relay list, types: [1].                                                                                                                                                                           
08-24/09:39:36  INFO [main] InetDhcpDeviceMap - Loaded device: 1; /109.233.170.1                                                                                                                                                                            
08-24/09:39:36  INFO [main] InetDhcpHelperProcessor - Restore connections on DhcpHelper

Порядок инициации соединения следующий: 1. Клиентская машина отправляет широковещательный запрос DHCP Discover. Для иницииации запроса можно использовать команду:

dhclient eth1 (или ваш интерфейс)

Тут есть риск "потерять" по SSH машину, когда она получит по DHCP новый шлюз по умолчанию. Решить проблему можно либо не передавая в период тестирования этот шлюз (уберите опцию dhcp.net.option.109.233.170.0:255.255.255.0.gate в конфигурации устройства ISG), либо придумать что-то с маршрутизацией.

2. Коммутатор пропускает запрос, добавляя в него опции 82 с remoteId и circuitId, содержащими информацию о MAC адресе коммутатора и порте абонента. И отправляет широковещательно же на Cisco.

3. Cisco получает запрос, инициирует авторизацию по RADIUS протоколу. В это время в radius.log BGInetAccess должно появиться.

08-23/17:38:29  INFO [radiusListener-p-9-t-3] RadiusListenerWorker - REQUEST:
Packet type: Access-Request
Identifier: 95
Authenticator: {A7 01 05 BB 98 BD AC 26 C3 91 C2 B1 FD 97 50 05}
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=1314102653
  NAS-IP-Address=94.125.95.117
  NAS-Port=357
  Service-Type=5
  Acct-Session-Id=7200000000000165
  NAS-Port-Type=33
  cisco-avpair=circuit-id-tag=000403420101
  cisco-avpair=remote-id-tag=00060012cf539f5e
  cisco-NAS-Port=0/0/1/834

08-23/17:38:29  INFO [radiusListener-p-9-t-3] InetRadiusProcessor - REQUEST_AFTER_PREPROCESS:
Packet type: Access-Request
Identifier: 95
Authenticator: {A7 01 05 BB 98 BD AC 26 C3 91 C2 B1 FD 97 50 05}
Attributes:
  User-Name=00060012cf539f5e:000403420101
  NAS-Identifier=7201-ipoe.nettrans.ru
  NAS-Port-Id=0/0/1/834
  User-Password=123
  Event-Timestamp=1314102653
  NAS-IP-Address=94.125.95.117
  NAS-Port=357
  Service-Type=5
  Calling-Station-Id=0080.4840.a46f
  Acct-Session-Id=7200000000000165
  NAS-Port-Type=33
  cisco-avpair=circuit-id-tag=000403420101
  cisco-avpair=remote-id-tag=00060012cf539f5e
  cisco-NAS-Port=0/0/1/834

08-23/17:38:29  INFO [radiusListener-p-9-t-3] InetRadiusProcessor - [username=00060012cf539f5e:000403420101] Authenticated as inetServId:1
08-23/17:38:29  INFO [radiusListener-p-9-t-3] InetRadiusProcessor - Return code=0
08-23/17:38:29  INFO [radiusListener-p-9-t-3] InetDhcpHelperProcessor - Put auth accept 1:00060012CF539F5E:000403420101:00804840A46F
08-23/17:38:29  INFO [radiusListener-p-9-t-3] InetRadiusProcessor - RESPONSE_BEFORE_POSTPROCESS:
Packet type: Access-Accept
Identifier: 95
Authenticator: {}
Attributes:
  Framed-IP-Address=109.233.170.2
  cisco-SSG-Account-Info=AINET

Process time auth: 4

08-23/17:38:29  INFO [radiusListener-p-9-t-3] InetRadiusListenerWorker - RESPONSE:
Packet type: Access-Accept
Identifier: 95
Authenticator: {93 20 E7 D2 47 8A 45 DE 0F 2B 5E 25 2C 9E CA F1}
Attributes:
  Framed-IP-Address=109.233.170.2
  cisco-SSG-Account-Info=AINET

Process time auth: 4

Это прошла первая авторизация: клиенту выдан адрес и выделен сервис. Реально адрес не нужен циске, он подставляется процессором по-умолчанию. Скрипт процессора протокола ru.bitel.bgbilling.inet.dyn.device.isg.ISGProtocolHandler вычленяет из User-Name последнюю часть и перемещает её в атрибут Calling-Station-Id.

Обратите внимание, что InetDhcpHelperProcessor Access сервера ловит событие успешной авторизации, размещаяя в своём кэше запись: <код устройства>:<User-Name до :>:<User-Name после :>:<Calling-Station-Id>. В данном случае в InetDhcpHelperProcessor жёстко зашита логика, что в User-Name должны идти разделённые двоеточием remoteId и circuitId, а в Calling-Station-Id - MAC адрес.

После получения акцепта первой авторизации Cisco посредством второй авторизации получает параметры сервисов.

08-23/17:38:29  INFO [radiusListener-p-9-t-4] RadiusListenerWorker - REQUEST:
Packet type: Access-Request
Identifier: 96
Authenticator: {36 17 4F 42 3B 6D B5 CE CE E4 8C 5A 15 CE AA 8B}
Attributes:
  User-Name=INET
  NAS-Identifier=7201-ipoe.nettrans.ru
  NAS-Port-Id=0/0/1/834
  User-Password=cisco
  Event-Timestamp=1314102653
  NAS-IP-Address=94.125.95.117
  NAS-Port=357
  Service-Type=5
  Acct-Session-Id=7200000000000165
  NAS-Port-Type=33
  cisco-avpair=circuit-id-tag=000403420101
  cisco-avpair=remote-id-tag=00060012cf539f5e
  cisco-NAS-Port=0/0/1/834

08-23/17:38:29  INFO [radiusListener-p-9-t-4] InetRadiusProcessor - REQUEST_AFTER_PREPROCESS:
Packet type: Access-Request
Identifier: 96
Authenticator: {36 17 4F 42 3B 6D B5 CE CE E4 8C 5A 15 CE AA 8B}
Attributes:
  User-Name=INET
  NAS-Identifier=7201-ipoe.nettrans.ru
  NAS-Port-Id=0/0/1/834
  User-Password=cisco
  Event-Timestamp=1314102653
  NAS-IP-Address=94.125.95.117
  NAS-Port=357
  Service-Type=5
  Acct-Session-Id=7200000000000165
  NAS-Port-Type=33
  cisco-avpair=circuit-id-tag=000403420101
  cisco-avpair=remote-id-tag=00060012cf539f5e
  cisco-NAS-Port=0/0/1/834

08-23/17:38:29  INFO [radiusListener-p-9-t-4] InetRadiusProcessor - [username=INET] Authenticated as inetServId:3
08-23/17:38:29  INFO [radiusListener-p-9-t-4] InetRadiusProcessor - Return code=0
08-23/17:38:29  INFO [radiusListener-p-9-t-4] InetDhcpHelperProcessor - Skip userName: INET
08-23/17:38:29  INFO [radiusListener-p-9-t-4] InetRadiusProcessor - RESPONSE_BEFORE_POSTPROCESS:
Packet type: Access-Accept
Identifier: 96
Authenticator: {}
Attributes:
  Acct-Interim-Interval=60
  cisco-avpair=ip:traffic-class=in access-group 196 priority 200
  cisco-avpair=ip:traffic-class=in default drop
  cisco-avpair=ip:traffic-class=out access-group 196 priority 200
  cisco-avpair=ip:traffic-class=out default drop
  cisco-avpair=subscriber:accounting-list=ISG-AUTH-1
  cisco-SSG-Service-Info=QU;500000;750000;D;500000;750000

Process time auth: 7

08-23/17:38:29  INFO [radiusListener-p-9-t-4] InetRadiusListenerWorker - RESPONSE:
Packet type: Access-Accept
Identifier: 96
Authenticator: {78 09 2E B6 16 56 0F 6F 49 78 DF CA DB DD 56 3F}
Attributes:
  Acct-Interim-Interval=60
  cisco-avpair=ip:traffic-class=in access-group 196 priority 200
  cisco-avpair=ip:traffic-class=in default drop
  cisco-avpair=ip:traffic-class=out access-group 196 priority 200
  cisco-avpair=ip:traffic-class=out default drop
  cisco-avpair=subscriber:accounting-list=ISG-AUTH-1
  cisco-SSG-Service-Info=QU;500000;750000;D;500000;750000

Process time auth: 7

Данная двухзвенная система авторизации изрядно путает схему и никакой логикой не объясняется.

4. Получив RADIUS Accept Cisco отправляет отрелеенные DHCP запросы. Примерно такое должно появиться в dhcp.log BGInetAccess сервера.

08-23/17:38:29  INFO [dhcpLstnr-p-10-t-3] InetAbstractDhcpProcessor - REQUEST:
Message type: BOOT_REQUEST
Dhcp message type: DHCP Discover{1}
htype: 1, hlen: 6, hops: 1
xid: 415586937, secs: 6, 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}

08-23/17:38:29  INFO [dhcpLstnr-p-10-t-3] InetAbstractDhcpProcessor - REQUEST_AFTER_PREPROCESS:
...

08-23/17:38:29  INFO [dhcpLstnr-p-10-t-3] InetAbstractDhcpProcessor - RESPONSE_BEFORE_POSTPROCESS:
...

08-23/17:38:29  INFO [dhcpLstnr-p-10-t-3] InetAbstractDhcpProcessor - RESPONSE:
Message type: BOOT_RESPONSE
Dhcp message type: DHCP Offer{2}
htype: 1, hlen: 6, hops: 1
xid: 415586937, secs: 0, flags: 0
Client IP: 0.0.0.0
Your IP: 109.233.170.2
Server IP: 0.0.0.0
Relay IP: 109.233.170.1
Client MAC: {00804840A46F}
  Server Identifier{54}={00000000}
  IP Address Lease Time{51}=600
  DNS{6}={6DE9AA01}
  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}

08-23/17:38:29  INFO [dhcpLstnr-p-10-t-4] InetAbstractDhcpProcessor - REQUEST:
Message type: BOOT_REQUEST
Dhcp message type: DHCP Request{3}
htype: 1, hlen: 6, hops: 1
xid: 415586937, secs: 6, 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}
  Server Identifier{54}={6DE9AA01}
  Requested IP Address{50}=109.233.170.2
  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}

08-23/17:38:29  INFO [dhcpLstnr-p-10-t-4] InetAbstractDhcpProcessor - REQUEST_AFTER_PREPROCESS:
...

08-23/17:38:29  INFO [dhcpLstnr-p-10-t-4] InetAbstractDhcpProcessor - RESPONSE_BEFORE_POSTPROCESS:
...

08-23/17:38:29  INFO [dhcpLstnr-p-10-t-4] InetAbstractDhcpProcessor - RESPONSE:
Message type: BOOT_RESPONSE
Dhcp message type: DHCP ACK{5}
htype: 1, hlen: 6, hops: 1
xid: 415586937, secs: 0, flags: 0
Client IP: 0.0.0.0
Your IP: 109.233.170.2
Server IP: 0.0.0.0
Relay IP: 109.233.170.1
Client MAC: {00804840A46F}
  Server Identifier{54}={00000000}
  IP Address Lease Time{51}=600
  DNS{6}={6DE9AA01}
  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}

Здесь происходит классический DHCP обмен: Discover - Offer - Request - Ack. Есть опять некоторый нюанс в реализации DHCP релея на Cisco. Пакет пересылается с обратным адресом 109.233.170.1, хотя выходит он с Cisco с интерфейса 94.125.95.117. Т.е. чтобы ответ дошёл до циски, необходимо наличие на сервере биллинга маршрута к адресу 109.233.170.1. Всё это весьма нелогично, хотя честно указано в документации Cisco.

Процессор DhcpHelper находит по этому адресу устройство - релей ISG, добавляет remoteId и circuitId и ищет в кэше выданный адрес. В случае если записи нет - запросы Discover игнорируются, а на Request выдаются NaK ответы.

5. На BGInetAccounting должен прийти старт-пакет с информацией по сессии.

08-23/17:38:29  INFO [radiusListener-p-5-t-4] RadiusListenerWorker - REQUEST:
Packet type: Accounting-Request
Identifier: 79
Authenticator: {1F B7 4F C3 07 15 C1 73 54 C0 DE EC 31 C2 36 04}
Attributes:
  User-Name=00060012cf539f5e:000403420101:0080.4840.a46f
  NAS-Identifier=7201-ipoe.nettrans.ru
  NAS-IP-Address=94.125.95.117
  NAS-Port=357
  Service-Type=2
  Framed-Protocol=1
  Framed-IP-Address=109.233.170.2
  Acct-Status-Type=1
  Acct-Delay-Time=0
  Acct-Session-Id=7200000000000166
  NAS-Port-Id=0/0/1/834
  Event-Timestamp=1314102653
  NAS-Port-Type=33
  UNKNOWN[-1-151]={39 44 46 33 33 36 46 35}
  cisco-avpair=parent-session-id=7200000000000165
  cisco-avpair=circuit-id-tag=000403420101
  cisco-avpair=remote-id-tag=00060012cf539f5e
  cisco-NAS-Port=0/0/1/834
  cisco-SSG-Service-Info=NINET

08-23/17:38:29  INFO [radiusListener-p-5-t-4] InetRadiusProcessor - REQUEST_AFTER_PREPROCESS:
Packet type: Accounting-Request
Identifier: 79
Authenticator: {1F B7 4F C3 07 15 C1 73 54 C0 DE EC 31 C2 36 04}
Attributes:
  User-Name=00060012cf539f5e:000403420101
  NAS-Identifier=7201-ipoe.nettrans.ru
  NAS-IP-Address=94.125.95.117
  NAS-Port=357
  Service-Type=2
  Framed-Protocol=1
  Framed-IP-Address=109.233.170.2
  Acct-Status-Type=1
  Acct-Delay-Time=0
  Acct-Session-Id=7200000000000165
  NAS-Port-Id=0/0/1/834
  Event-Timestamp=1314102653
  Calling-Station-Id=0080.4840.a46f
  NAS-Port-Type=33
  UNKNOWN[-1-151]={39 44 46 33 33 36 46 35}
  cisco-avpair=parent-session-id=7200000000000165
  cisco-avpair=circuit-id-tag=000403420101
  cisco-avpair=remote-id-tag=00060012cf539f5e
  cisco-avpair=INET_IN:0
  cisco-avpair=INET_OUT:0
  cisco-NAS-Port=0/0/1/834
  cisco-SSG-Service-Info=NINET

08-23/17:38:29  INFO [radiusListener-p-5-t-4] InetRadiusProcessor - Creating NasConnection from radius accounting packet
08-23/17:38:29  INFO [radiusListener-p-5-t-4] Accounting - Write new connection to DB
08-23/17:38:29  INFO [radiusListener-p-5-t-4] Accounting - New connection id=9
08-23/17:38:29  INFO [radiusListener-p-5-t-4] Accounting - Write new session to DB
08-23/17:38:29  INFO [radiusListener-p-5-t-4] Accounting - New session's id=9
08-23/17:38:29  INFO [radiusListener-p-5-t-4] connection - 9:9 Register ip: 109.233.170.2
08-23/17:38:29  INFO [radiusListener-p-5-t-4] RadiusListenerWorker - RESPONSE:
Packet type: Accounting-Response
Identifier: 79
Authenticator: {86 A1 4F 51 3E 1C BB 73 1B 92 1B 7A 1F AC 29 1C}
Attributes:

Process time start: 55

Строго говоря, это пришёл пакет старта сервиса. В ISG аккаунтинг сервисов идёт раздельно. Динамический код процессора протокола переносит атрибут cisco-avpair=parent-session-id= в Acct-Session-Id и переносит счётчики в посервисных же апдейт пакетах в атрибуты cisco-avpair=<префикс>:<значение>, что позволяет RADIUS процессору воспринимать аккаунтинг как будто поступающий от одной сессии.

В этот момент соединение уже должно быть видно в мониторе модуля в текущих. Также его можно посмотреть с помощью консольных команд BGInetAccess и BGInetAccounting:

[root@bgb BGInetAccess]# ./access.sh conlist                                                                                                                                                                                                                
Java Runtime: Sun Microsystems Inc. Java HotSpot(TM) Server VM [1.6.0_26] /usr/java/jdk1.6.0_26/jre                                                                                                                                                         
  Runtime name: 19660@bgb.nettrans.ru                                                                                                                                                                                                                       
  Java endorsed dirs: /usr/java/jdk1.6.0_26/jre/lib/endorsed                                                                                                                                                                                                
  OS: Linux 2.6.32.26-175.fc12.i686.PAE [i386], file.encoding: UTF-8, user.name: root                                                                                                                                                                       
  Heap sizes: current=30912k  free=30098k  max=233024k                                                                                                                                                                                                      
+----------+---------------+---------------+------------------------------+--------------------+------------------------------+---------------+--------------------+---------------+----------+                                                             
|    ID    |    NAS_ID     |    NAS_IP     |           Session            |       Start        |           UserName           |      IP       |      FromNum       |   Contract    |  Status  |                                                             
+----------+---------------+---------------+------------------------------+--------------------+------------------------------+---------------+--------------------+---------------+----------+                                                             
|    11    |    DID: 1     |               |       720000000000016C       |24.08.2011 09:42:36 |00060012cf539f5e:000403420101 | 109.233.170.2 |   0080.4840.a46f   |    CID: 0     |    0     |
+----------+---------------+---------------+------------------------------+--------------------+------------------------------+---------------+--------------------+---------------+----------+
 
[root@bgb BGInetAccounting]# ./accounting.sh sesslist
Java Runtime: Sun Microsystems Inc. Java HotSpot(TM) Server VM [1.6.0_26] /usr/java/jdk1.6.0_26/jre
  Runtime name: 19934@bgb.nettrans.ru
  Java endorsed dirs: /usr/java/jdk1.6.0_26/jre/lib/endorsed
  OS: Linux 2.6.32.26-175.fc12.i686.PAE [i386], file.encoding: UTF-8, user.name: root
  Heap sizes: current=30912k  free=30098k  max=233024k
Call sessions:
+---------------+---------------+---------------+--------------------+--------------------+---------------------+---------------------+---------------------+---------------------+---------------------+----------+
|      ID       |  ContractId   |    ServId     |      Session       |       Start        |        Stop         |     AccLastTime     |     AccPerFrom      |      AccPerTo       |      OptionSet      |  Status  |
+---------------+---------------+---------------+--------------------+--------------------+---------------------+---------------------+---------------------+---------------------+---------------------+----------+
|      11       |       1       |       1       |  720000000000016C  |24.08.2011 09:42:36 |                     | 24.08.2011 09:44:29 | 22.08.2011 00:00:00 | 31.08.2011 23:59:59 |          1          |    0     |
+---------------+---------------+---------------+--------------------+--------------------+---------------------+---------------------+---------------------+---------------------+---------------------+----------+

6. Изменение свойств соединения.

Для изменения свойств соединения во время его работы используются CoA запросы. Их отправляет класс ru.bitel.bgbilling.modules.inet.dyn.device.cisco.ISGServiceActivator при вызове в нём метода connectionModify. В BGInetAccess/log/mq.log. В тестовых целях проще всего инициировать изменение свойств переключив опцию непосредственно в сервисе и сохранив, либо изменив её в тарифном плане.

08-24/14:28:22  INFO [sa-p-5-t-3] ServiceActivatorSet - Invoking connectionModify                                                                                                                                                                           
08-24/14:28:22  INFO [sa-p-5-t-3] ISGServiceActivator - Connection modify!                                                                                                                                                                                  
08-24/14:28:22  INFO [sa-p-5-t-3] PodSupport - Sending to /94.125.95.117:1700                                                                                                                                                                               
Packet type: CoA-Request                                                                                                                                                                                                                                    
Identifier: 5                                                                                                                                                                                                                                               
Authenticator: {3C 9F 98 3A 4F F2 97 0C 61 D1 73 F6 61 22 5C E0}                                                                                                                                                                                            
Attributes:                                                                                                                                                                                                                                                 
  Acct-Session-Id=7200000000000181                                                                                                                                                                                                                          
  cisco-SSG-Command-Code=\0xbINET_TURBO                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                            
08-24/14:28:22  INFO [sa-p-5-t-3] ISGServiceActivator - Send adding CoA:                                                                                                                                                                                    
Packet type: CoA-Request                                                                                                                                                                                                                                    
Identifier: 5                                                                                                                                                                                                                                               
Authenticator: {02 14 A3 7C 54 02 78 C3 CF 85 33 72 C6 E2 66 86}                                                                                                                                                                                            
Attributes:                                                                                                                                                                                                                                                 
  Acct-Session-Id=7200000000000181                                                                                                                                                                                                                          
  cisco-SSG-Command-Code=\0xbINET_TURBO                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                            
08-24/14:28:22  INFO [sa-p-5-t-3] PodSupport - Sending to /94.125.95.117:1700                                                                                                                                                                               
Packet type: CoA-Request                                                                                                                                                                                                                                    
Identifier: 6                                                                                                                                                                                                                                               
Authenticator: {D0 9F 44 6F B9 A8 5D 44 7C 86 02 0A 71 AC A4 4E}                                                                                                                                                                                            
Attributes:                                                                                                                                                                                                                                                 
  Acct-Session-Id=7200000000000181                                                                                                                                                                                                                          
  cisco-SSG-Command-Code=\0xcINET                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                            
08-24/14:28:22  INFO [sa-p-5-t-3] ISGServiceActivator - Send closing CoA:                                                                                                                                                                                   
Packet type: CoA-Request                                                                                                                                                                                                                                    
Identifier: 6                                                                                                                                                                                                                                               
Authenticator: {DA 18 2C 29 99 72 17 27 28 3B 0F 57 63 87 C8 16}                                                                                                                                                                                            
Attributes:                                                                                                                                                                                                                                                 
  Acct-Session-Id=7200000000000181                                                                                                                                                                                                                          
  cisco-SSG-Command-Code=\0xcINET            

Так это выглядит на Cisco при включении debug aaa coa:

7201-ipoe# 
Aug 24 15:20:30: COA: 94.125.95.114 request queued
Aug 24 15:20:30: RADIUS:  authenticator 02 14 A3 7C 54 02 78 C3 - CF 85 33 72 C6 E2 66 86
Aug 24 15:20:30: RADIUS:  Acct-Session-Id     [44]  18  "7200000000000181"
Aug 24 15:20:30: RADIUS:  Vendor, Cisco       [26]  19  
Aug 24 15:20:30: RADIUS:   ssg-command-code   [252] 13  
Aug 24 15:20:30: RADIUS:   0B 49 4E 45 54 5F 54 55 52 42 4F        [Service-Log-On INET_TURBO]
Aug 24 15:20:30:  ++++++ CoA Attribute List ++++++
Aug 24 15:20:30: 068CD314 0 00000001 session-id(363) 4 385(181)
Aug 24 15:20:30: 068CD2A8 0 00000009 ssg-command-code(432) 11 0B 49 4E 45 54 5F 54 55 52 42 4F 
Aug 24 15:20:30: 
Aug 24 15:20:30: COA: 94.125.95.114 request queued
Aug 24 15:20:30: RADIUS:  authenticator DA 18 2C 29 99 72 17 27 - 28 3B 0F 57 63 87 C8 16
Aug 24 15:20:30: RADIUS:  Acct-Session-Id     [44]  18  "7200000000000181"
Aug 24 15:20:30: RADIUS:  Vendor, Cisco       [26]  13  
Aug 24 15:20:30: RADIUS:   ssg-command-code   [252] 7   
Aug 24 15:20:30: RADIUS:   0C 49 4E 45 54              [Service-Log-Off INET]
Aug 24 15:20:30:  ++++++ CoA Attribute List ++++++
Aug 24 15:20:30: 068CD380 0 00000001 session-id(363) 4 385(181)
Aug 24 15:20:30: 068CD3EC 0 00000009 ssg-command-code(432) 5 0C 49 4E 45 54 

Т.к. для ISG отключение и включение сервисов в одном CoA запросе поддерживается только для "старших" цисок, то переключение осуществляется двумя запросами. Результат ответа на второй запрос оценивается как результат всей операции смены сервисом. Т.е. пропадание первого запроса никак не отслеживается. Если же не поступит ответ на второй запрос, попытка CoA будет повторена.

7. Блокировка сервиса.

Проще всего инициировать переключением статуса договора на нерабочий. При блокировки класс-сервис активатор в методе conncetionClose посылает CoA с закрытием всех сервисов, затем открывает сервис INET_FAKE. Этот сервис предполагает ограниченный доступ. Кроме того производится удаление записи из кэша DHCP хелпера (Remove connection remove 1:00060012CF539F5E:000403420101:00804840A46F).

Выдержка из connection.log.

08-24/15:55:41  INFO [sa-p-6-t-4] ServiceActivatorSet - Connecting to device
08-24/15:55:41  INFO [sa-p-6-t-4] ServiceActivatorWorkerDevice - Do task deviceId: 2; Event[ru.bitel.bgbilling.modules.inet.access.event.InetSaStateModifyEvent] moduleId: 1; pluginId: 1; cid: -1; scid: -1; userId: 0; deviceId: 2; inetServId: 1; connectionId: 0; state: 0; accessCode: 44; timestamp: 1314179741060
08-24/15:55:41  INFO [sa-p-6-t-4] ServiceActivatorWorkerDevice - Command result event: ServiceActivatorEvent type=2; inetServId: 1; call: true; oldState: 1; newState: 0; oldOptionSet: 4; newOptionSet: 4
08-24/15:55:41  INFO [sa-p-6-t-4] ServiceActivatorWorkerDevice - Processing deviceId:2; command ServiceActivatorEvent type=2; inetServId: 1; call: true; oldState: 1; newState: 0; oldOptionSet: 4; newOptionSet: 4
08-24/15:55:41  INFO [sa-p-6-t-4] ServiceActivatorSet - Invoking serviceModify
08-24/15:55:41  INFO [sa-p-6-t-4] ServiceActivatorWorkerDevice - Process event type[2] result=true
08-24/15:55:41  INFO [sa-p-6-t-4] ServiceActivatorWorkerDevice - Changing InetServ:1 state and/or options
08-24/15:55:41  INFO [sa-p-6-t-4] ServiceActivatorSet - Disconnecting from device
08-24/15:55:56  INFO [sa-p-6-t-5] ServiceActivatorSet - Connecting to device
08-24/15:55:56  INFO [sa-p-6-t-5] ServiceActivatorWorkerDevice - Do task deviceId: 1; Event[ru.bitel.bgbilling.modules.inet.access.event.InetSaStateModifyEvent] moduleId: 1; pluginId: 0; cid: -1; scid: -1; userId: 0; deviceId: 1; inetServId: 1; connectionId: 24; state: 0; accessCode: 10; timestamp: 1314179756759
08-24/15:55:56  INFO [sa-p-6-t-5] ServiceActivatorWorkerDevice - Command result event: ServiceActivatorEvent type=2; inetServId: 1; call: true; oldState: 0; newState: 0; oldOptionSet: 4; newOptionSet: 4
08-24/15:55:56  INFO [sa-p-6-t-5] ServiceActivatorWorkerDevice - Processing deviceId:1; command ServiceActivatorEvent type=2; inetServId: 1; call: true; oldState: 0; newState: 0; oldOptionSet: 4; newOptionSet: 4
08-24/15:55:56  INFO [sa-p-6-t-5] ServiceActivatorSet - Invoking connectionClose
08-24/15:55:56  INFO [sa-p-6-t-5] ISGServiceActivator - Connection close!
08-24/15:55:56  INFO [sa-p-6-t-5] InetDhcpHelperProcessor - Remove connection remove 1:00060012CF539F5E:000403420101:00804840A46F
08-24/15:55:56  INFO [sa-p-6-t-5] ISGServiceActivator - Send fake service CoA: 
Packet type: CoA-Request
Identifier: 1
Authenticator: {66 1D 0E 6C 14 69 55 1A 09 3C 54 22 BB 6C A9 1B}
Attributes:
  Acct-Session-Id=7200000000000194
  cisco-SSG-Command-Code=\0xbINET_FAKE

08-24/15:55:56  INFO [sa-p-6-t-5] PodSupport - Sending to /94.125.95.117:1700
Packet type: CoA-Request
Identifier: 1
Authenticator: {66 1D 0E 6C 14 69 55 1A 09 3C 54 22 BB 6C A9 1B}
Attributes:
  Acct-Session-Id=7200000000000194
  cisco-SSG-Command-Code=\0xbINET_FAKE

08-24/15:55:56  INFO [sa-p-6-t-5] ISGServiceActivator - Send close all service CoA: 
Packet type: CoA-Request
Identifier: 2
Authenticator: {63 AB 84 29 EE CD F8 AF 45 46 E2 72 5A C0 17 46}
Attributes:
  Acct-Session-Id=7200000000000194
  cisco-SSG-Command-Code=\0xcINET
  cisco-SSG-Command-Code=\0xcINET_TURBO

08-24/15:55:56  INFO [sa-p-6-t-5] PodSupport - Sending to /94.125.95.117:1700
Packet type: CoA-Request
Identifier: 2
Authenticator: {63 AB 84 29 EE CD F8 AF 45 46 E2 72 5A C0 17 46}
Attributes:
  Acct-Session-Id=7200000000000194
  cisco-SSG-Command-Code=\0xcINET
  cisco-SSG-Command-Code=\0xcINET_TURBO

При следующем DHCP запросе будет выдан NaK ответ, после чего будет завершена ISG сессия и начнётся новая, также с сервисом INET_FAKE, но уже с фиктивным адресом. Выдержка из dhcp.log.

08-24/16:00:05  INFO [dhcpLstnr-p-11-t-7] InetAbstractDhcpProcessor - REQUEST:
Message type: BOOT_REQUEST
Dhcp message type: DHCP Request{3}
htype: 1, hlen: 6, hops: 1
xid: -2114533290, secs: 0, flags: 0
Client IP: 109.233.170.2
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}

08-24/16:00:05  INFO [dhcpLstnr-p-11-t-7] InetAbstractDhcpProcessor - REQUEST_AFTER_PREPROCESS:
.....

08-24/16:00:05 ERROR [dhcpLstnr-p-11-t-7] InetDhcpHelperProcessor - Not found params for request: 1:00060012CF539F5E:000403420101:00804840A46F
08-24/16:00:05  INFO [dhcpLstnr-p-11-t-7] InetAbstractDhcpProcessor - RESPONSE_BEFORE_POSTPROCESS:
.....

08-24/16:00:05  INFO [dhcpLstnr-p-11-t-7] InetAbstractDhcpProcessor - RESPONSE:
Message type: BOOT_RESPONSE
Dhcp message type: DHCP NAK{6}
htype: 1, hlen: 6, hops: 1
xid: -2114533290, secs: 0, flags: 0
Client IP: 109.233.170.2
Your IP: 0.0.0.0
Server IP: 0.0.0.0
Relay IP: 109.233.170.1
Client MAC: {00804840A46F}
  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}

08-24/16:00:15  INFO [dhcpLstnr-p-11-t-8] InetAbstractDhcpProcessor - REQUEST:
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}

08-24/16:00:15  INFO [dhcpLstnr-p-11-t-8] InetAbstractDhcpProcessor - REQUEST_AFTER_PREPROCESS:
....

08-24/16:00:15  INFO [dhcpLstnr-p-11-t-8] InetAbstractDhcpProcessor - RESPONSE_BEFORE_POSTPROCESS:
....

08-24/16:00:15  INFO [dhcpLstnr-p-11-t-8] InetAbstractDhcpProcessor - RESPONSE:
Message type: BOOT_RESPONSE
Dhcp message type: DHCP Offer{2}
htype: 1, hlen: 6, hops: 1
xid: 1067065417, secs: 0, flags: 0
Client IP: 0.0.0.0
Your IP: 109.233.170.129
Server IP: 0.0.0.0
Relay IP: 109.233.170.1
Client MAC: {00804840A46F}
  Server Identifier{54}={00000000}
  IP Address Lease Time{51}=600
  DNS{6}={6DE9AA01}
  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}

08-24/16:00:15  INFO [dhcpLstnr-p-11-t-9] InetAbstractDhcpProcessor - REQUEST:
Message type: BOOT_REQUEST
Dhcp message type: DHCP Request{3}
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}
  Server Identifier{54}={6DE9AA01}
  Requested IP Address{50}=109.233.170.129
  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}

08-24/16:00:15  INFO [dhcpLstnr-p-11-t-9] InetAbstractDhcpProcessor - REQUEST_AFTER_PREPROCESS:
....

08-24/16:00:15  INFO [dhcpLstnr-p-11-t-9] InetAbstractDhcpProcessor - RESPONSE_BEFORE_POSTPROCESS:
....

08-24/16:00:15  INFO [dhcpLstnr-p-11-t-9] InetAbstractDhcpProcessor - RESPONSE:
Message type: BOOT_RESPONSE
Dhcp message type: DHCP ACK{5}
htype: 1, hlen: 6, hops: 1
xid: 1067065417, secs: 0, flags: 0
Client IP: 0.0.0.0
Your IP: 109.233.170.129
Server IP: 0.0.0.0
Relay IP: 109.233.170.1
Client MAC: {00804840A46F}
  Server Identifier{54}={00000000}
  IP Address Lease Time{51}=600
  DNS{6}={6DE9AA01}
  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.log BGInetAccess сервера.

08-24/16:00:14  INFO [hrlydtlggr-p-9-t-1] HourlyDataLoggerTracker - Checking data log files to close [hours=1]...
08-24/16:00:15  INFO [radiusListener-p-10-t-6] RadiusListenerWorker - REQUEST:
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

08-24/16:00:15  INFO [radiusListener-p-10-t-6] InetRadiusProcessor - REQUEST_AFTER_PREPROCESS:
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
  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
  Calling-Station-Id=0080.4840.a46f
  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

08-24/16:00:15  INFO [radiusListener-p-10-t-6] InetRadiusProcessor - [username=00060012cf539f5e:000403420101] Authenticated as inetServId:1
08-24/16:00:15  INFO [radiusListener-p-10-t-6] Access - inetServ[id=1] deviceState not active.
08-24/16:00:15  INFO [radiusListener-p-10-t-6] InetRadiusProcessor - Return code=0
08-24/16:00:15  INFO [radiusListener-p-10-t-6] InetDhcpHelperProcessor - Put auth accept 1:00060012CF539F5E:000403420101:00804840A46F
08-24/16:00:15  INFO [radiusListener-p-10-t-6] InetRadiusProcessor - RESPONSE_BEFORE_POSTPROCESS:
....

08-24/16:00:15  INFO [radiusListener-p-10-t-6] InetRadiusListenerWorker - RESPONSE:
Packet type: Access-Accept
Identifier: 140
Authenticator: {8A 4F 3F 0D C7 28 19 26 F7 07 A1 2F 1B B2 60 61}
Attributes:
  Framed-IP-Address=109.233.170.129
  cisco-SSG-Account-Info=AINET_FAKE

Process time auth: 4

08-24/16:00:15  INFO [radiusListener-p-10-t-6] HourlyDataLogEntry - Create dataLog file: /usr/local/BGInetAccess/data/radius/source_1/2011/2011-08/2011-08-24/log_2011-08-24-16.000.bgdl
08-24/16:00:15  INFO [radiusListener-p-10-t-7] RadiusListenerWorker - REQUEST:
Packet type: Access-Request
Identifier: 141
Authenticator: {9B B7 D9 AF 69 B7 8B AC B0 C1 AC 7F 68 8B 1C FF}
Attributes:
  User-Name=INET_FAKE
  NAS-Identifier=7201-ipoe.nettrans.ru
  NAS-Port-Id=0/0/1/834
  User-Password=cisco
  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

08-24/16:00:15  INFO [radiusListener-p-10-t-7] InetRadiusProcessor - REQUEST_AFTER_PREPROCESS:
....

08-24/16:00:15  INFO [radiusListener-p-10-t-7] InetRadiusProcessor - [username=INET_FAKE] Authenticated as inetServId:6
08-24/16:00:15  INFO [radiusListener-p-10-t-7] InetRadiusProcessor - Return code=0
08-24/16:00:15  INFO [radiusListener-p-10-t-7] InetDhcpHelperProcessor - Skip userName: INET_FAKE
08-24/16:00:15  INFO [radiusListener-p-10-t-7] InetRadiusProcessor - RESPONSE_BEFORE_POSTPROCESS:
Packet type: Access-Accept
Identifier: 141
Authenticator: {}
Attributes:
  Acct-Interim-Interval=60
  cisco-avpair=ip:traffic-class=in access-group 196 priority 201
  cisco-avpair=ip:traffic-class=in default drop
  cisco-avpair=ip:traffic-class=out access-group 196 priority 200
  cisco-avpair=ip:traffic-class=out default drop
  cisco-avpair=subscriber:accounting-list=ISG-AUTH-1
  cisco-SSG-Service-Info=QU;600000;760000;D;600000;760000

Process time auth: 4

08-24/16:00:15  INFO [radiusListener-p-10-t-7] InetRadiusListenerWorker - RESPONSE:
Packet type: Access-Accept
Identifier: 141
Authenticator: {04 93 FB 21 44 41 0A E1 83 83 7C A2 CE 39 39 8A}
Attributes:
  Acct-Interim-Interval=60
  cisco-avpair=ip:traffic-class=in access-group 196 priority 201
  cisco-avpair=ip:traffic-class=in default drop
  cisco-avpair=ip:traffic-class=out access-group 196 priority 200
  cisco-avpair=ip:traffic-class=out default drop
  cisco-avpair=subscriber:accounting-list=ISG-AUTH-1
  cisco-SSG-Service-Info=QU;600000;760000;D;600000;760000

Process time auth: 4

При открытии сервиса процесс происходит подобный же процесс: удаляется запись из DHCP кэша, при следующем DHCP запросе поднимается корректная сессия.

Ссылки

  1. Обсуждение в форуме
  2. Изыскания в форуме
  3. WiKi в т.ч. по ISG
  4. Схема запросов при авторизации
  5. Презентация ISG
  6. Официальная дока по ISG
  7. CoA для ISG
  8. Официальная дока по отладке ISG
  9. Справочник по Cisco командам
  10. Официальная дока по настройке DHCP релея
  11. Разбор, как работает Cisco DHCP релей
Личные инструменты