forum.bitel.ru http://forum.bitel.ru/ |
|
Пропадает соединение из БГ после изменения баланса. http://forum.bitel.ru/viewtopic.php?f=44&t=12019 |
Страница 1 из 1 |
Автор: | aneye [ 17 окт 2016, 13:41 ] |
Заголовок сообщения: | Пропадает соединение из БГ после изменения баланса. |
Всем снова привет. Продолжаем борьбу с БГБиллинг (6.0, inet) + ASR1001X. Возникла очередная трудность. Пытаемся разобраться, как изменить IPoE+opt82 подключение в зависимости от состояния счета абонента. Клиента (на данном этапе) аутентифицируем по мак-адресу. Клиент подключается, получает адрес и настройки по тарифу. Здесь все хорошо. Дальше, делаем ему отрицательный баланс (правим лимит счета). На ASR ловим следующее: Код: COA: 10.63.9.105 request queued RADIUS: authenticator 0F CC 57 78 B0 86 2B 6B - 59 11 E6 80 8B 31 BF 45 RADIUS: User-Name [1] 16 "0015.f904.a0c0" RADIUS: Nas-Identifier [32] 8 "ASR-01" RADIUS: NAS-IP-Address [4] 6 10.63.7.250 RADIUS: Framed-IP-Address [8] 6 145.255.xxx.xxx RADIUS: Acct-Session-Id [44] 29 "0/0/0/3882_0A3F07FA0000001A" RADIUS: Vendor, Cisco [26] 41 RADIUS: Cisco AVpair [1] 35 "subscriber:command=account-logoff" COA: Message Authenticator missing or failed decode ++++++ CoA Attribute List ++++++ 7FA7AB1A9490 0 00000081 username(450) 14 0015.f904.a0c0 7FA7AB1A9CA0 0 00000081 nas-identifier(167) 6 ASR-01 7FA7AB1A9CE0 0 00000001 nas-ip-address(600) 4 10.63.7.250 7FA7AB1A9D20 0 00000001 addr(8) 4 145.255.xxx.xxx 7FA7AB1A9D60 0 00000001 session-id(408) 4 26(1A) 7FA7AB1A9DA0 0 00000081 ssg-command-code(490) 15 02 30 30 31 35 2E 66 39 30 34 2E 61 30 63 30 ++++++ Received CoA response Attribute List ++++++ 7FA7AB1ABE38 0 00000081 ssg-command-code(490) 15 02 30 30 31 35 2E 66 39 30 34 2E 61 30 63 30 7FA7AB1ABE78 0 00000001 session-id(408) 4 26(1A) Сессия дропается, дальше где-то секунды через 3-4 поднимается снова. По радиус.логу, вроде бы, все штатно: Код: RadiusListenerWorker - REQUEST: Packet type: Access-Request Identifier: 25 Authenticator: {A4 EE 09 0A B8 2A 3C 26 A5 7D 7A 46 67 29 41 D6} Attributes: User-Name=0015.f904.a0c0 NAS-Identifier=ASR-01 NAS-Port-Id=0/0/0/3882 User-Password=cisco123 Event-Timestamp=1476688687 NAS-IP-Address=10.63.7.250 NAS-Port=27 Service-Type=5 Acct-Session-Id=0/0/0/3882_0A3F07FA0000001B NAS-Port-Type=15 Calling-Station-Id=0015.f904.a0c0 cisco-avpair=circuit-id-tag=00040f2a010d cisco-avpair=remote-id-tag=00060023ea650d80 Packet type: Access-Accept Identifier: 25 Authenticator: {} Attributes: Reply-Message=12 cisco-SSG-Account-Info=ATRUST-IPOE-SERVICE cisco-SSG-Account-Info=ARDR-IPOE-SERVICE cisco-SSG-Service-Info=NTRUST-IPOE-SERVICE cisco-SSG-Service-Info=NRDR-IPOE-SERVICE Т.е. отрабатывает строка в конфигурации БГ - radius.disable.attributes=cisco-ssg-account-info=ATRUST-IPOE-SERVICE;cisco-ssg-account-info=ARDR-IPOE-SERVICE;cisco-ssg-service-info=NTRUST-IPOE-SERVICE;cisco-ssg-service-info=NRDR-IPOE-SERVICE; При этом, в активных сессиях сесси нет, она в ошибках. В error.log при этом такое: Код: radius 10-17/11:16:34 ERROR [main] InetConnectionKeyMap - InetServRuntime not found with id=1 connection 10-17/11:18:04 ERROR [sa-p-14-t-1] AcknowledgeConsumer - Error on device:14 - java.lang.NullPointerException ru.bitel.bgbilling.common.BGException: Error on device:14 - java.lang.NullPointerException at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.doTask(ServiceActivatorDeviceWorker.java:495) at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.internalDoTaskImpl(AsyncEventWorker.java:211) at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.notify(AsyncEventWorker.java:201) at ru.bitel.bgbilling.kernel.event.AcknowledgeConsumer.onMessage0(AcknowledgeConsumer.java:83) at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.internalDoTask(AsyncEventWorker.java:176) at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.doTasks(AsyncEventWorker.java:109) at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.runWorker(ServiceActivatorDeviceWorker.java:245) at ru.bitel.bgbilling.kernel.event.EventWorker.internalRunWorker(EventWorker.java:139) at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.runImpl(ServiceActivatorDeviceWorker.java:151) at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:662) at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:40) Caused by: java.lang.NullPointerException at java.nio.CharBuffer.wrap(CharBuffer.java:464) at java.nio.charset.Charset.encode(Charset.java:830) at ru.bitel.bgbilling.kernel.network.radius.info.StringInfo.wrapValue(StringInfo.java:56) at ru.bitel.bgbilling.kernel.network.radius.info.StringInfo.wrapValue(StringInfo.java:1) at ru.bitel.bgbilling.kernel.network.tlv.Tlv.<init>(Tlv.java:36) at ru.bitel.bgbilling.kernel.network.radius.RadiusAttribute.<init>(RadiusAttribute.java:39) at ru.bitel.bgbilling.kernel.network.radius.RadiusAttribute.<init>(RadiusAttribute.java:51) at ru.bitel.bgbilling.modules.inet.dyn.device.radius.AbstractRadiusServiceActivator.prepareRequest(AbstractRadiusServiceActivator.java:332) at ru.bitel.bgbilling.modules.inet.dyn.device.cisco.ISGServiceActivator.connectionClose(ISGServiceActivator.java:359) at ru.bitel.bgbilling.modules.inet.dyn.device.cisco.ISGServiceActivator.connectionClose(ISGServiceActivator.java:314) at ru.bitel.bgbilling.modules.inet.dyn.device.cisco.ISGServiceActivator.connectionModify(ISGServiceActivator.java:228) at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorSet.connectionModify(ServiceActivatorSet.java:278) at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.doCommand(ServiceActivatorDeviceWorker.java:528) at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.doTask(ServiceActivatorDeviceWorker.java:491) ... 19 more connection 10-17/11:19:04 ERROR [sa-p-14-t-4] InetSaStateModifyEvent - Connection not found with id=5933 И соответственно, когда мы правим баланс обратно на положительный (меняем лимит) - ничего не происходит. Нет СоА пакетов, статус соединение не меняется, на ASR вообще ничего не летит, т.к. (как я понимаю) - нет активной сессии. Подскажите пожалуйста, где у нас косяк? |
Автор: | Amir [ 17 окт 2016, 14:04 ] |
Заголовок сообщения: | Re: Пропадает соединение из БГ после изменения баланса. |
В биллинге одно соединение или два (RADIUS и DHCP)? Ошибка происходит из-за того, что в параметре sa.radius.connection.attributes= (список атрибутов, необходимый для идентификации соединения) указан атрибут User-Name. Но значение в сессии почему-то username==null - может быть в аккаунтинге не приходит User-Name. |
Автор: | aneye [ 17 окт 2016, 14:54 ] |
Заголовок сообщения: | Re: Пропадает соединение из БГ после изменения баланса. |
Про юзернейм в аккаунтинге посмотрим, проверим. Обнаружили в коде такую сноску: "// если указан сервис, при котором доступ ограничен - проверяем, не его ли это аккаунтинг, // и, если это так, переключаем состояние соединения" . Работает это при указанном radius.serviceName.disable в связке с radius.serviceName.type и radius.serviceName.prefix . Т.е. если radius.serviceName.disable не пуста и имя сервиса содержится в этом списке (имя сервиса определяется исходя из префикса и типа (по умолчанию cisco-SSG-Service-Info)), то при типе аккаунтинга start / update, статус сессии меняется на disabled" В конфигурации сделали так: Код: sa.radius.connection.withoutBreak=1 radius.serviceName.disable=RDR-IPOE-SERVICE,TRUST-IPOE-SERVICE Теперь первый пакет CoA как будто приходит верно: Код: COA: 10.63.9.105 request queued RADIUS: authenticator 1E 12 5D 02 C4 65 9A 23 - 8B 9F C7 71 1A E4 A3 D5 RADIUS: User-Name [1] 16 "0015.f904.a0c0" RADIUS: Nas-Identifier [32] 8 "ASR-01" RADIUS: NAS-IP-Address [4] 6 10.63.7.250 RADIUS: Framed-IP-Address [8] 6 145.255.ччч.ччч RADIUS: Acct-Session-Id [44] 29 "0/0/0/3882_0A3F07FA00000023" RADIUS: Vendor, Cisco [26] 25 RADIUS: ssg-command-code [252] 19 RADIUS: 0B 52 44 52 2D 49 50 4F 45 2D 53 45 52 56 49 43 45 [Service-Log-On RDR-IPOE-SER COA: Message Authenticator missing or failed decode ++++++ CoA Attribute List ++++++ 7FA7AB1A8B28 0 00000081 username(450) 14 0015.f904.a0c0 7FA7AB1AA200 0 00000081 nas-identifier(167) 6 ASR-01 7FA7AB1AA240 0 00000001 nas-ip-address(600) 4 10.63.7.250 7FA7AB1AA280 0 00000001 addr(8) 4 145.255.ххх.ххх 7FA7AB1AA2C0 0 00000001 session-id(408) 4 35(23) 7FA7AB1AA300 0 00000081 ssg-command-code(490) 17 0B 52 44 52 2D 49 50 4F 45 2D 53 45 52 56 ++++++ Received CoA response Attribute List ++++++ 7FA7AB1A8878 0 00000082 reply-message(273) 18 Push invoke failed 7FA7AB1A88B8 0 00000002 error-cause(272) 4 Unsupported Service 7FA7AB1A9CA0 0 00000089 ssg-command-code(490) 34 10 36 3B 30 30 31 35 2E 66 39 30 34 2E 61 7FA7AB1A9CE0 0 00000001 session-id(408) 4 35(23) COA: 10.63.9.105 request queued RADIUS: authenticator 75 45 E3 F3 F4 76 CB 3B - 0F B1 5E 29 1C C3 49 99 RADIUS: User-Name [1] 16 "0015.f904.a0c0" RADIUS: Nas-Identifier [32] 8 "ASR-01" Через tcpdump видим, что на запрос от БГ ASR отвечает ACK, однако через некоторое время от БГ идет повторный запрос, на который ответ уже NAK (вывод почти такой же, только присутствует): Код: 7FA7AB1A8878 0 00000082 reply-message(273) 18 Push invoke failed 7FA7AB1A88B8 0 00000002 error-cause(272) 4 Unsupported Service Такое впечатление, что БГ не принимает (не понимает) АСК-ответы и продолжает засылать СоА... |
Автор: | Amir [ 17 окт 2016, 15:28 ] |
Заголовок сообщения: | Re: Пропадает соединение из БГ после изменения баланса. |
Аккаунтинг от cisco по этим сервисам идет: RDR-IPOE-SERVICE,TRUST-IPOE-SERVICE? Нужно добиться, чтобы состояние сессии в биллинге было "отключено". https://docs.bitel.ru/pages/viewpage.ac ... d=43385995 Для ISG рекомедуется использовать как раз radius.serviceName.disable=, но по этим сервисам должен идти аккаунтинг, чтобы биллинг знал, что соединение с ограниченным достопом (состояние "отключено"). |
Автор: | aneye [ 17 окт 2016, 20:30 ] |
Заголовок сообщения: | Re: Пропадает соединение из БГ после изменения баланса. |
В целом, добились того, что сессия переходит в состояние "отключена". При изменении баланса СоА-пакеты приходят. Однако, хотелось бы воплотить в жизнь функционал, при котором по коду ошибки подключения, клиент получал соответствующее уведомление на портале. Для этого код ошибки должен быть передан в radius-запросе. При том варианте что есть сейчас нового радиус-запроса не проиходит, т.к. сессия не разрывается, а лишь меняются ее атрибуты. Если же вернуться к первоначальной схеме с разрывом соединение (когда в СоА приходит Cisco AVpair [1] 35 "subscriber:command=account-logoff"), то сессия из БГ исчезает, и при изменении баланса соответственно ничего не происходит, т.к. сессии нет. Есть ли какой-нибудь вариант, как можно "и рыбку съесть и сковородку не испачкать"? ![]() |
Автор: | Amir [ 24 окт 2016, 19:23 ] |
Заголовок сообщения: | Re: Пропадает соединение из БГ после изменения баланса. |
В биллинге есть страничка, показывающая оповещение об ошибке для абонента (сессию находит по IP запроса или вытаскивает IP из HTTP-заголовка, если в конфиге ядра указано header.name.remote.addr=): bgbilling/pubexecuter?module=inet&mid=<IDмодуля>&action=ConnectionError |
Автор: | Dog [ 28 окт 2016, 16:43 ] |
Заголовок сообщения: | Re: Пропадает соединение из БГ после изменения баланса. |
Цитата: Ошибка происходит из-за того, что в параметре sa.radius.connection.attributes= (список атрибутов, необходимый для идентификации соединения) указан атрибут User-Name. Но значение в сессии почему-то username==null - может быть в аккаунтинге не приходит User-Name. а где задаётся передача этого атрибута? на кошке? или в биллинге при удачной авторизации в Ассеss-Accept? |
Автор: | Amir [ 28 окт 2016, 16:49 ] |
Заголовок сообщения: | Re: Пропадает соединение из БГ после изменения баланса. |
Там перечисляются имена атрибутов, которые посылаются в CoA/PoD. Т.е. это своего рода ключи, по которой железка находит сессию, по которой мы просим произвести изменения. Часто достаточно одного Acct-Session-Id. При некоторых лишних железка может ругаться (например Redback), отвечая Usupported Attribute (401) |
Автор: | Dog [ 28 окт 2016, 17:00 ] |
Заголовок сообщения: | Re: Пропадает соединение из БГ после изменения баланса. |
чтобы наверняка: у нас вот такое в лог валит: Код: 10-28/13:50:59 INFO [sa-p-13-t-30] ISGServiceActivator - Packet type: CoA-Request Identifier: 7 Authenticator: {0C 91 76 21 98 9B 69 27 CF 42 C9 74 DC 09 71 FC} Attributes: Acct-Session-Id=38dbd26f 10-28/13:50:59 INFO [sa-p-13-t-30] ISGServiceActivator - InetConnection [id=10745888-0, iface=330:14, sessId=38dbd26f, start=28.10.2016 13:20:33, uname=null, addr=100.64.2.236] 10-28/13:50:59 ERROR [sa-p-13-t-30] EventWorker - Error on device:330 - java.lang.NullPointerException ru.bitel.bgbilling.common.BGException: Error on device:330 - java.lang.NullPointerException at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.doTask(ServiceActivatorDeviceWorker.java:504) at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.internalDoTaskImpl(AsyncEventWorker.java:211) at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.internalDoTask(AsyncEventWorker.java:183) at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.doTasks(AsyncEventWorker.java:109) at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.runWorker(ServiceActivatorDeviceWorker.java:246) at ru.bitel.bgbilling.kernel.event.EventWorker.internalRunWorker(EventWorker.java:142) at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.runImpl(ServiceActivatorDeviceWorker.java:152) at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:46) Caused by: java.lang.NullPointerException at java.nio.CharBuffer.wrap(CharBuffer.java:487) at java.nio.charset.Charset.encode(Charset.java:863) at ru.bitel.bgbilling.kernel.network.radius.info.StringInfo.wrapValue(StringInfo.java:56) at ru.bitel.bgbilling.kernel.network.radius.info.StringInfo.wrapValue(StringInfo.java:11) at ru.bitel.bgbilling.kernel.network.tlv.Tlv.<init>(Tlv.java:36) at ru.bitel.bgbilling.kernel.network.radius.RadiusAttribute.<init>(RadiusAttribute.java:39) at ru.bitel.bgbilling.kernel.network.radius.RadiusAttribute.<init>(RadiusAttribute.java:51) at ru.bitel.bgbilling.modules.inet.dyn.device.radius.AbstractRadiusServiceActivator.prepareRequest(AbstractRadiusServiceActivator.java:333) at ru.bitel.bgbilling.modules.inet.dyn.device.cisco.ISGServiceActivator.sendCommands(ISGServiceActivator.java:521) at ru.bitel.bgbilling.modules.inet.dyn.device.cisco.ISGServiceActivator.connectionClose(ISGServiceActivator.java:319) at ru.bitel.bgbilling.modules.inet.dyn.device.cisco.ISGServiceActivator.connectionModify(ISGServiceActivator.java:230) at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorSet.connectionModify(ServiceActivatorSet.java:278) at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.doCommand(ServiceActivatorDeviceWorker.java:537) at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.doTask(ServiceActivatorDeviceWorker.java:500) ... 15 more Код: uname=null в конфиге: Код: sa.radius.connection.attributes=Acct-Session-Id,User-Name в акаунтинге есть User-Name: Код: 10-28/13:53:19 INFO [rdsLstnr-p-7-t-8] update - REQUEST: Packet type: Accounting-Request Identifier: 30 Authenticator: {43 14 BF 6D A7 BA 9E 7E 00 49 3C 3F 9B 33 30 FF} Attributes: ... User-Name=100.64.2.15 ... в COA я так понимаю его нет. я правильно понимаю, что либо убрать из конфига User-Name, либо заставить кошку присылать этот User-Name в COA, т.е. в конфиге кошки покопать? |
Автор: | Amir [ 28 окт 2016, 17:29 ] |
Заголовок сообщения: | Re: Пропадает соединение из БГ после изменения баланса. |
У вас наверно схема с отдельной DHCP-сессией? Тогда ошибка возникает, из-за того что пытается послать CoA/PoD для DHCP сессии, т.к. она тоже под Cisco (т.к. ServiceActivator вызывается по всей иерархии вверх). Посмотрите ru.bitel.bgbilling.modules.inet.dyn.device.cisco.ipdhcp.ISGServiceActivatorIpDhcp Там изменения вроде Цитата: if( e.getConnection().getDeviceId() != this.deviceId ) чтобы для DHCP сессий не пытался ничего делать.
{ logger.debug( "Skip " + e.getConnection() + " " + this.deviceId ); return null; } |
Автор: | Dog [ 30 окт 2016, 23:02 ] |
Заголовок сообщения: | Re: Пропадает соединение из БГ после изменения баланса. |
Код: public class ISGServiceActivatorIpDhcp extends ISGServiceActivator я так понимаю, что если я использовал ISGServiceActivator, то могу поменять на ISGServiceActivatorIpDhcp и ничего не паламается? =) а ISGProtocolHandlerIpDhcp обязательно при этом использовать? |
Автор: | Amir [ 31 окт 2016, 15:52 ] |
Заголовок сообщения: | Re: Пропадает соединение из БГ после изменения баланса. |
Не должно. ISGServiceActivator делался для IPoE, когда сессия иницируется в ISG по DHCP-пакету, а также для PPPoE. ISGServiceActivatorIpDhcp - для DHCP + сессия по IP-пакету. Например, там при закрытии DHCP-сессии отправляет команду на сброс IP-сессии. Ну и не |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |