forum.bitel.ru
http://forum.bitel.ru/

[Решено] Странное поведение Inet при отключенном сервисе
http://forum.bitel.ru/viewtopic.php?f=44&t=7102
Страница 1 из 1

Автор:  vkulakov [ 13 авг 2012, 20:33 ]
Заголовок сообщения:  [Решено] Странное поведение Inet при отключенном сервисе

Сейчас обнаружил, что при попытке авторизации при отключенном сервисе, биллинг повторно пытается отключить уже отключенные сервисы на циске. Поясню более подробно по шагам.
1. Активных сессий нет, сервис в биллинге отключен (вручную, например).
2. Пытаемся авторизоваться и видим в логах:
Код:
...
radius 08-13/17:56:59  INFO [rdsLstnr-p-8-t-8] InetNas - Search by username=VK-001/12
radius 08-13/17:56:59  INFO [rdsLstnr-p-8-t-8] InetRadiusProcessor - [username=VK-001/12] Authenticated as inetServId:1
radius 08-13/17:56:59  INFO [rdsLstnr-p-8-t-8] InetApplication - inetServ[id=1] deviceState not active (accessCode=44).
radius 08-13/17:56:59  INFO [rdsLstnr-p-8-t-8] InetRadiusProcessor - Return code=0
radius 08-13/17:56:59  INFO [rdsLstnr-p-8-t-8] InetRadiusProcessor - RESPONSE_BEFORE_POSTPROCESS:
Packet type: Access-Accept
Identifier: 118
Authenticator: {}
Attributes:
  Reply-Message=44
  cisco-SSG-Account-Info=APORTAL
  cisco-SSG-Account-Info=AREDIRECT
...

Видно, что сервис выключен (deviceState not active), но, согласно настройкам, выдаётся Access-Accept с фейковыми сервисами.
3. Дальше циска запрашивает описание сервисов у радиуса и благополучно их получает. Смысла сюда выкладывать нет.
4. Теперь начинается аккаунтинг всех сессий, а сами сессии записываются в базу. Для примера в логах я оставил начало аккаунтинга только одной сессии.
Код:
connection 08-13/17:56:59  INFO [sa-p-10-t-2] ServiceActivatorSet - Connecting to device

connection 08-13/17:56:59  INFO [sa-p-10-t-2] ServiceActivatorDeviceWorker - Do task deviceId: 2; Event[ru.bitel.bgbilling.modules.inet.access.sa.event.InetSaAccountingEvent] moduleId: 8; pluginId: no; cid: 4; scid: -1; userId: 0; type: 1; deviceId: 2; connectionId: 120; timestamp: 1344866219558
connection 08-13/17:56:59  INFO [sa-p-10-t-2] InetApplication - TariffOptionMap: {}
connection 08-13/17:56:59  INFO [sa-p-10-t-2] ServiceActivatorDeviceWorker - Command result event: ServiceActivatorEvent type=4; inetServId: 1; call: true; oldState: 0; newState: 0; oldOptionSet: 4,9; newOptionSet: 4,9
connection 08-13/17:56:59  INFO [sa-p-10-t-2] ServiceActivatorDeviceWorker - Processing deviceId:2; command ServiceActivatorEvent type=4; inetServId: 1; call: true; oldState: 0; newState: 0; oldOptionSet: 4,9; newOptionSet: 4,9
connection 08-13/17:56:59  INFO [sa-p-10-t-2] ServiceActivatorSet - Invoking onAccountingStart
connection 08-13/17:56:59  INFO [sa-p-10-t-2] ServiceActivatorDeviceWorker - Process event type[4] result=true

mq 08-13/17:56:59  INFO [event-proc-p-2-t-1] InetConnectionManager - Add connection: InetConnection [id=118-0, iface=2:44962, sessId=5D5885820000AFA2, start=13.08.2012 17:56:59, uname=VK-001/12, addr=[IpAddress:null]]
mq 08-13/17:56:59  INFO [event-proc-p-2-t-1] InetConnectionManager - Add connection: InetConnection [id=119-118, iface=2:44962, sessId=5D5885820000AFA3, start=13.08.2012 17:56:59, uname=REDIRECT, addr=[IpAddress:null]]
mq 08-13/17:56:59  INFO [event-proc-p-2-t-1] InetConnectionManager - Add connection: InetConnection [id=120-118, iface=2:44962, sessId=5D5885820000AFA4, start=13.08.2012 17:56:59, uname=PORTAL, addr=[IpAddress:null]]

connection 08-13/17:57:04  INFO [sa-p-10-t-2] ServiceActivatorSet - Disconnecting from device

Видно, что сессии нормально создались и пошёл аккаунтинг. Также видно, что сервис по-прежнему отключен (oldState: 0; newState: 0;).

5. Теперь начинается интересное.
Код:
connection 08-13/17:57:11  INFO [sa-p-10-t-2] ServiceActivatorSet - Connecting to device
connection 08-13/17:57:11  INFO [sa-p-10-t-2] ServiceActivatorDeviceWorker - Do task deviceId: 2; Event[ru.bitel.bgbilling.modules.inet.access.sa.event.InetSaStateModifyEvent] moduleId: 8; pluginId: no; cid: 4; scid: -1; userId: 0; deviceId: 2; inetServId: 1; connectionId: 118; state: 0; accessCode: 44; timestamp: 1344866231859
connection 08-13/17:57:11  INFO [sa-p-10-t-2] InetApplication - TariffOptionMap: {}
connection 08-13/17:57:11  INFO [sa-p-10-t-2] ServiceActivatorDeviceWorker - Command result event: ServiceActivatorEvent type=2; inetServId: 1; call: true; oldState: 1; newState: 0; oldOptionSet: 4,9; newOptionSet: 4,9
connection 08-13/17:57:11  INFO [sa-p-10-t-2] ServiceActivatorDeviceWorker - Processing deviceId:2; command ServiceActivatorEvent type=2; inetServId: 1; call: true; oldState: 1; newState: 0; oldOptionSet: 4,9; newOptionSet: 4,9
connection 08-13/17:57:11  INFO [sa-p-10-t-2] ServiceActivatorSet - Invoking connectionModify
connection 08-13/17:57:11  INFO [sa-p-10-t-2] ISGServiceActivator - Connection modify: oldState: 1; newState: 0; oldOptionSet: [4, 9]; newOptionSet: [4, 9]
connection 08-13/17:57:11  INFO [sa-p-10-t-2] ISGServiceActivator - Connection close!
connection 08-13/17:57:11  INFO [sa-p-10-t-2] ISGPPPoEServiceActivator - Send deactivate service CoA:

Биллинг таинственным для меня образом начинает считать, что сервис выключился только что (oldState: 1; newState: 0;), и пытается отключить якобы активные сервисы договора и включить disabled-сервисы из параметра sa.radius.service.disable.
6. Дальше всё банально: посылаются CoA пакеты на отключение сервисов INTERNET_3mbps и LOCAL, которые и так отсутствуют на циске, на подключение сервисов PORTAL и REDIRECT, которые и так уже есть на циске.
7. Дальше всё работает как и должно.

Из вышесказанного следует вопрос: почему статус сервиса (oldState) изменился с 0 на 1?

Автор:  Amir [ 14 авг 2012, 15:28 ]
Заголовок сообщения:  Re: Странное поведение Inet при отключенном сервисе

Скорее всего проблема в том, что модуль не знает в каком состоянии сессия находится.
Для того чтобы знал, есть несколько способов:
Код:
# При Access-Accept заносить запись в базу, с информацией о выданных опциях и состоянии
connection.start.fromAccept=1
# При посылке CoA Access сам меняет состояние сессии (для ISG поддержку такого параметра в конфигурации добавили только сегодня, нужно перекомпилировать динамические классы)
sa.radius.connection.stateModify=1

Код:
# При Access-Accept заносить запись в базу, с информацией о выданных опциях и состоянии
connection.start.fromAccept=1
# При получении аккаунтинг пакета, если совпадает с шаблоном, то состояние сессии disable
radius.disable.pattern.attributes=cisco-SSG-Account-Info=AREDIRECT

Код:
# При Access-Accept заносить запись в базу, с информацией о выданных опциях и состоянии
connection.start.fromAccept=1
# При получении старт/стоп-пакета сервисной сессии ISG, если имя сервиса ISG совпадает, то состояние сессии disable/enable
radius.serviceName.disable=REDIRECT

Если есть возможность сделать, чтобы редирект шел отдельным сервисным аккаунтингом, то я рекомендую последний вариант (можно и с connection.start.fromAccept=0). Если нет - то первый.

Автор:  vkulakov [ 14 авг 2012, 18:38 ]
Заголовок сообщения:  Re: Странное поведение Inet при отключенном сервисе

Воспользовался последним вариантом.
По всей видимости, проблема была в опции sa.radius.service.disable. Сейчас подобного не возникает.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/