forum.bitel.ru http://forum.bitel.ru/ |
|
Рестарт Inet-сессии http://forum.bitel.ru/viewtopic.php?f=19&t=12638 |
Страница 1 из 1 |
Автор: | a.vo [ 25 сен 2017, 17:27 ] |
Заголовок сообщения: | Рестарт Inet-сессии |
Добрый день, для абонентов СКД (через портал BGInetWiFiAgent) количество сессий в модуле Inet = 1. Это правильно, но в случае когда абонент, не закрыв сессию, пытается вводить логин/пароль с другого устройства или через другую точку доступа, то соответственно получает отлуп и авторизация не проходит, приходится ждать пока она по таймауту отвалится сама. Нужно, чтобы, в таких случаях, активная сессия обрывалась и стартовала новая, как это можно реализовать? Вероятно в WiFiServiceActivator нужно как-то такое поведение обрабатывать? Спасибо |
Автор: | skyb [ 26 сен 2017, 06:56 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
https://docs.bitel.ru/pages/diffpagesby ... Versions=6 |
Автор: | a.vo [ 26 сен 2017, 12:39 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
Спасибо, подскажите точнее, если не сложно. У нас версия сервера 7.0.1267 В приимере конфигурации устройства (https://docs.bitel.ru/pages/viewpage.ac ... getreemode) сказано: Код: # Проверка на повторную аутентификацию при Access-Request. Бывает нужна в случаях, когда NAS сбрасывает (теряет) сессию, но # Stop-пакет не присылает и клиент пытается подключиться повторно, но у него стоит ограничение на максимум одну сессию. При совпадении # callingStationId с одной из активных сессий и установленным параметром: 1 - осуществляется попытка закрытия старой сессии (connectionClose), # 2 - попытка закрытия сессии (connectionClose) и завершение ее в базе, не дожидаясь стоп пакета, 3 - завершение в базе. #radius.connection.checkDuplicate=0 т.е. я ставлю radius.connection.checkDuplicate=2, чтобы был безусловный разрыв сессии, так? Но вот здесь сказано: Код: Без атрибута Calling-Station-Id в Access-Request-пакете данная функция работать не будет. При невозможности присылать Calling-Station-Id в Access-Request можно настроить подмену в обработчике процессора протокола (в предобработке RADIUS-запросов). Вот пример моего Access-Request, там нет Calling-Station-Id: Код: Time: 26.09.2017 01:15:17 Packet type: Access-Request Identifier: 4 Authenticator: {A2 E8 B0 AA 38 B3 D2 38 63 C1 58 DB 59 AF E0 CD} Attributes: NAS-Identifier=Multiple_access_portal User-Name=id1000000 User-Password=0000000 NAS-Port=167772167 Framed-IP-Address=10.0.0.7 Acct-Session-Id=10.0.0.7_1506377717357 Time: 26.09.2017 01:15:17 Packet type: Access-Accept Identifier: 4 Authenticator: {A7 B7 F7 E7 D2 29 AF 5A 9D 3D F7 47 90 6E 6B FA} Attributes: Process time auth: 0 Time: 26.09.2017 01:15:17 Packet type: Accounting-Request Identifier: 5 Authenticator: {BB 75 D2 73 71 C7 50 E0 79 07 51 5C 45 AD 4D DE} Attributes: NAS-Identifier=Multiple_access_portal User-Name=id1000000 NAS-Port=167772167 Framed-IP-Address=10.0.0.7 Acct-Status-Type=1 Acct-Session-Id=10.0.0.7_1506377717357 обязательно нужно подменять Calling-Station-Id в Access-Request можно настроить подмену в обработчике процессора протокола (в предобработке RADIUS-запросов)? |
Автор: | skyb [ 26 сен 2017, 13:23 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
Код: radius.connection.checkDuplicate=898 Код: package ru.skyb.modules.inet.dyn.device;
import java.net.InetAddress; import java.net.InetSocketAddress; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.log4j.Logger; import ru.bitel.bgbilling.kernel.container.managed.ServerContext; import ru.bitel.bgbilling.kernel.network.radius.RadiusAttribute; import ru.bitel.bgbilling.kernel.network.radius.RadiusAttributeSet; import ru.bitel.bgbilling.kernel.network.radius.RadiusAttributeSetRealmMap; import ru.bitel.bgbilling.kernel.network.radius.RadiusDictionary; import ru.bitel.bgbilling.kernel.network.radius.RadiusPacket; import ru.bitel.bgbilling.kernel.network.radius.RadiusProtocolHandler; import ru.bitel.bgbilling.modules.inet.access.sa.ProtocolHandlerAdapter; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetDevice; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetDeviceType; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServType; import ru.bitel.bgbilling.modules.inet.api.server.InetUtils; import ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor; import ru.bitel.bgbilling.modules.inet.radius.RadiusAccessRequestHandler; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.ParameterMap; import ru.bitel.common.Utils; import ru.bitel.common.inet.IpAddress; import ru.bitel.common.inet.IpNet; import ru.bitel.common.sql.ConnectionSet; public class EricssonRadiusProtocolHandler extends ru.bitel.bgbilling.modules.inet.dyn.device.radius.AbstractRadiusProtocolHandler { @Override public void setMacAddress(final RadiusPacket request) { String macAddress = request.getStringAttribute(2352, 145, null); if(macAddress != null) { String callingStationId = macAddress.replaceAll("\\-", ""); request.setStringAttribute(-1, 31, callingStationId); } } } |
Автор: | a.vo [ 26 сен 2017, 14:53 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
К сожалению, не работает. Выставляю в конфигурации устройства radius.connection.checkDuplicate=898, задаю обработчик процессора протокола в "Типах устройств", но переопределение MAC-адреса не отрабатывает почему-то, и в лог ничего не пишет. Подскажите на что еще обратить внимание? Может какой-то связаный параметр в конфигурации пропущен? |
Автор: | a.vo [ 26 сен 2017, 17:42 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
Обработчик процессора протокола в типе устройства не удается переопределить, почему-то. Еще один вопрос, Calling-Station-Id обязательно должен быть MAC-адресом или я могу User-Name туда подставить если разберусь с обработчиком? Спасибо |
Автор: | skyb [ 26 сен 2017, 18:23 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
да что угодно можно туда, главное чтобы уникальное, не работает потому что нету Calling-Station-Id можно на nas атрибут туда подставить, я так и не увидел что в качестве nas у вас, этот пример с redback'a |
Автор: | stark [ 26 сен 2017, 18:31 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
Если что checkDuplicate подробно описан на этой странице : https://docs.bitel.ru/pages/viewpage.ac ... d=73597961 |
Автор: | a.vo [ 26 сен 2017, 18:38 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
stark писал(а): Если что checkDuplicate подробно описан на этой странице : https://docs.bitel.ru/pages/viewpage.ac ... d=73597961 да, спасибо, что в нужную сторону направили, как раз читаю. От конечных абонентов MAC-адреса не приходят, попробую переопределить обработчик протокола, только его неудобно отлаживать конечно, каждый раз bgbilling перезапускать приходится. Можно как-то без перезагрузки инициировать изменения в этом классе? |
Автор: | stark [ 26 сен 2017, 18:46 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
a.vo писал(а): От конечных абонентов MAC-адреса не приходят, попробую переопределить обработчик протокола, только его неудобно отлаживать конечно, каждый раз bgbilling перезапускать приходится. Можно как-то без перезагрузки инициировать изменения в этом классе? Надо нажать "перечитать конфигурацию на серверах " в дереве устройств. Там ошибка была- не перечитывало, и это недавно относительно исправляли, может быть у вас старая версия. |
Автор: | a.vo [ 28 сен 2017, 16:46 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
stark писал(а): Надо нажать "перечитать конфигурацию на серверах " в дереве устройств. Там ошибка была- не перечитывало, и это недавно относительно исправляли, может быть у вас старая версия. Спасибо, все перечитывается, но никак не удается переопределить Calling-Station-Id Код: public class InetRadiusProtocolProcessor extends ru.bitel.bgbilling.modules.inet.dyn.device.radius.AbstractRadiusProtocolHandler { @Override public void setMacAddress(final RadiusPacket request) { } @Override public void setCallingStationId(final RadiusPacket request) { String userName = request.getStringAttribute(-1, RadiusStandartAttributes.User_Name, null); String userPassword = request.getStringAttribute(-1, RadiusStandartAttributes.User_Password, null); if (userName != null && userPassword != null) { String callingStationId = userName + userPassword; request.setStringAttribute( -1, RadiusDictionary.Calling_Station_Id, callingStationId); } } } пробую через request.setOption( InetRadiusProcessor.MAC_ADDRESS, (String) callingStationId );, тоже тишина, там где не было атрибута в request-пакете там и дальше пусто, там где был остается прежний. Куда копать? |
Автор: | a.vo [ 28 сен 2017, 17:56 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
в самой функции предобработки Calling-Station-Id проставляется, а в мониторе Inet я потом этого атрибута не вижу. Код: preprocessAccessRequest responce: Packet type: Access-Request
Identifier: 117 Authenticator: {89 DB D2 17 52 22 E4 FC D7 45 22 8A 86 02 17 08} Attributes: NAS-Identifier=Multiple_access_portal User-Name=id14005 User-Password=5cBP NAS-Port=180880739 Framed-IP-Address=10.200.5.99 Acct-Session-Id=10.200.5.99_1506599683764 Calling-Station-Id=id140055cBP |
Автор: | skyb [ 29 сен 2017, 06:58 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
ну дайте скрин этой сессии полностью в мониторе |
Автор: | a.vo [ 29 сен 2017, 11:07 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
Приветствую! Вот RadiusPacket, которые формируется в предообработке: Код: Packet type: Access-Request Вот что вижу в мониторе:Identifier: 96 Authenticator: {95 02 3B 87 3A 9E D9 79 2B 4C 70 C4 47 03 DE 5B} Attributes: NAS-Identifier=Multiple_access_portal User-Name=id8544 User-Password=XhCpe5 NAS-Port=167839254 Framed-IP-Address=10.1.6.22 Acct-Session-Id=10.1.6.22_1506661290287 Calling-Station-Id=id8544XhCpe5 Код: Time: 29.09.2017 08:01:30 Самое интересное, что рестарт сессии в случае даблирования работает, но почему монитор не показывает подмену? Он раньше предобработки забирает данные?
Packet type: Access-Request Identifier: 96 Authenticator: {95 02 3B 87 3A 9E D9 79 2B 4C 70 C4 47 03 DE 5B} Attributes: NAS-Identifier=Multiple_access_portal User-Name=id8544 User-Password=XhCpe5 NAS-Port=167839254 Framed-IP-Address=10.1.6.22 Acct-Session-Id=10.1.6.22_1506661290287 Time: 29.09.2017 08:01:30 Packet type: Access-Accept Identifier: 96 Authenticator: {A0 EE 97 35 B1 5B 90 71 A4 3D 5A E8 36 8F AC 5D} Attributes: Process time auth: 0 Time: 29.09.2017 08:01:30 Packet type: Accounting-Request Identifier: 97 Authenticator: {43 D6 53 16 98 B5 55 93 89 94 0D C9 2C B6 02 0F} Attributes: NAS-Identifier=Multiple_access_portal User-Name=id8544 NAS-Port=167839254 Framed-IP-Address=10.1.6.22 Acct-Status-Type=1 Acct-Session-Id=10.1.6.22_1506661290287 |
Автор: | skyb [ 29 сен 2017, 11:20 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
я просил скрин, а не вывод лога |
Автор: | skyb [ 29 сен 2017, 13:28 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
a.vo писал(а): skyb писал(а): я просил скрин, а не вывод лога пожалуйста, а в чем разница? ну тут видно что действительно нет мака в нужных полях |
Автор: | a.vo [ 29 сен 2017, 13:44 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
Да, к сожалению в мониторе подменные маки не видны, хотя они меняются и схема работает. Вероятно монитор отражает оригинальные сессии, до препроцесса. В любом случае, решение работает, спасибо за помощь. |
Автор: | Amir [ 29 сен 2017, 16:41 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
В мониторе не отображается, потому что у вас не сохраняется информация о выданном Access-Accept. connection.start.fromAccept=1 И потому что в Accounting-пакетах нет User-Password, соответственно (userName != null && userPassword != null) будет false, соответственно при старте сессии туда уже ничего не подставляется. Должно быть достаточно добавить connection.start.fromAccept=1 |
Автор: | a.vo [ 29 сен 2017, 16:50 ] |
Заголовок сообщения: | Re: Рестарт Inet-сессии |
Amir писал(а): Должно быть достаточно добавить connection.start.fromAccept=1 Отлично, теперь все отображается. Спасибо! |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |