BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 20 июн 2025, 04:47

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Проблема с закрытием сессии
СообщениеДобавлено: 07 окт 2014, 20:13 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Угрюмов Роман писал(а):
У меня сейчас цель простая, разорвать соединение с клиентом, так что бы его оборудование перезапросило авторизацию по Radius протоколу и DHCP выдал новый адрес.
Алгоритм который пытаюсь реализовать такой.
Используется Opt82 c авторизацией порт:устройство
1) По приходу первого пакета авторизации автоматически создается договор на этом порт:устройство в статусе ПРИОСТАНОВЛЕН
2) RejectToAcept перегнаправляет клиента на локальный ресурс, где он читает страницу с условиями подключения и нажимает кнопку ПОДКЛЮЧИТЬСЯ
3) При нажатии на кнопку ПОДКЛЮЧИТЬСЯ отрабатывает скрипрт, который по текущему IP я находит договор и меняет статус договора на АКТИВЕН
4) РВУ СЕССИЮ
5) Клиент переподключается и DHCP выдает нормальный белый IP и клиент работает

Все это реализовано кроме пункта 4 - разрыв сессии


Стоп, стоп... рву сессию... это вам не PPPoE/PPTP. В DHCP нет такого понятия "рву сессию". тут надо не "сессию рвать", а флапать порт коммутатора (disable/enable), чтобы от клиента пришел DHCP-Request, он получит NACK и дальше полный цикл DHCP с выдачей нового адреса.

P.S. хотя на SE все равно состояние сервиса должен быть переключено.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с закрытием сессии
СообщениеДобавлено: 08 окт 2014, 10:33 
Не в сети
Клиент

Зарегистрирован: 30 янв 2013, 11:27
Сообщения: 305
Карма: 0
barguzin2 писал(а):
флапать порт коммутатора (disable/enable)

Вообще то я и хочу этого добиться. Я правильно понимаю что флопнув порт коммутатора (RedBac Erricson 600) он разорвет сессию с клиентом, и клиент перезапросит авторизацию?

Пока можно уточнить в какую ветку dictionary.xml вставлять эту сроку <attribute name="Deactivate-Service-Name" tag="2" type="string" code="194"/> ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с закрытием сессии
СообщениеДобавлено: 08 окт 2014, 12:13 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Добавлять, стало быть, сюда, в конце раздела.
Код:
<vendor code="2352" name="Redback">


А для того, чтобы порт ресетить - нужно не на SE CoA слать, а на коммутатор доступа SNMP-запросы disable/enable port. Т.е. тот порт, куда физически кабель клиента подключен. А RedBack 600 - это вряд ли коммутатор. На него CoA шлется только для переключения состояния сессии.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с закрытием сессии
СообщениеДобавлено: 08 окт 2014, 13:20 
Не в сети
Клиент

Зарегистрирован: 30 янв 2013, 11:27
Сообщения: 305
Карма: 0
Перенес строку в нужное место, уже лучше:
Код:
connection 10-08/11:17:54  INFO [sa-p-14-t-59] RadiusClient - Sending to /172.16.98.7:3799
Packet type: CoA-Request
Identifier: 2
Authenticator: {1B A1 17 48 F7 A5 7F AF D0 AE AD 48 24 43 35 EC}
Attributes:
  Acct-Session-Id=0202FFFF780051F3-5434B681
  Deactivate-Service-Name:1=RSE-SVC-EXT

connection 10-08/11:17:54  INFO [sa-p-14-t-59] ServiceActivatorDeviceWorker - Process event type[2] result=true
connection 10-08/11:17:54  INFO [rds-clnt-/172.16.98.7-3799] RadiusClient - Recieved from /172.16.98.7:3799
Packet type: CoA-ACK
Identifier: 2
Authenticator: {36 14 88 B5 1B 00 A3 B5 A8 AF AA BC 5B BC E4 31}
Attributes:
  Error-Cause=200
  Event-Timestamp=1412752816
  UNKNOWN[2352-193]={01 00 00 C8}
  Deactivate-Service-Name=RSE-SVC-EXT

Только роутер как раздавал интернет так и раздает


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с закрытием сессии
СообщениеДобавлено: 08 окт 2014, 14:22 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Так нужно еще второй CoA отправить для подключения сервиса NOAUTH


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с закрытием сессии
СообщениеДобавлено: 08 окт 2014, 14:38 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Вот текущий код SmartEdgeClipsServiceActivator с комментариями, который отвечает за изменение состояния и закрытие.
Это чтобы видно было какой параметр за что отвечает.

Код:
   /**
    * Изменение состояния сессии или набора опций.
    */
   @Override
   public Object connectionModify( ServiceActivatorEvent e )
           throws Exception
   {
      logger.info( "Connection modify: oldState: " + e.getOldState() + "; newState: " + e.getNewState() + "; oldOptionSet: " + e.getOldOptions() + "; newOptionSet: " + e.getNewOptions() );
      
      final InetConnection connection = e.getConnection();
      
      // если нужно переключить в состояние отключен
      if( e.getNewState() == InetServ.STATE_DISABLE )
      {
         // если всегда сбрасываем соединение при переключении состояния - вызываем просто connectionClose
         // например, чтобы поменять IP с белого на серый
         // sa.radius.connection.withoutBreak=0
         if( !withoutBreak )
         {
            return connectionClose( e );
         }
         
         // устанавливаем флаг, что нужно будет поменять состояние соединения в базе
         // sa.radius.connection.stateModify=1
         if( needConnectionStateModify )
         {
            e.setConnectionStateModified( true );
         }

         // отключаем соединение
         return connectionDisable( connection );
      }

      // если раньше было состояние отключено, а теперь включено
      if( e.getOldState() == InetServ.STATE_DISABLE )
      {
         // если всегда сбрасываем соединение при переключении состояния - вызываем просто connectionClose
         // например, чтобы поменять IP с белого на серый
         // sa.radius.connection.withoutBreak=0
         if( !withoutBreak )
         {
            // убрать из DHCP, чтобы выдало NaK
            EventProcessor.getInstance().request( new InetConnectionManager.ConnectionRemoveEvent( connection ) );

            // если при необходимости включить доступ до того как поменяли IP мы хотим включить доступ на SE, то идем дальше
            // иначе return
            if( !coaOnEnable )
            {
               return null;
            }
         }
         
         // устанавливаем флаг, что нужно будет поменять состояние соединения в базе
         // sa.radius.connection.stateModify=1
         if( needConnectionStateModify )
         {
            e.setConnectionStateModified( true );
         }
      }

      // закрываем все сервисы с помощью набора атрибутов sa.radius.service.closeAttributes=
      RadiusPacket request = radiusClient.createModifyRequest();
      prepareRequest( request, connection );
      request.addAttributes( serviceCloseAttributes );

      logger.info( "Send CoA: \n" + request );

      radiusClient.send( request );

      // готовим пакет на включение сервисов
      request = radiusClient.createModifyRequest();
      prepareRequest( request, connection );
      
      final String realm = e.getRealm();

      // открываем все подключенные сервисы
      for( Integer option : e.getNewOptions() )
      {
         RadiusAttributeSet set = optionRadiusAttributesMap.get( realm, option );
         if( set != null )
         {
            request.addAttributes( set );
         }
      }

      logger.info( "Send CoA: \n" + request );

      return radiusClient.sendAsync( request );
   }
   
   /**
    * Ограничение доступа.
    */
   private Object connectionDisable( InetConnection connection )
           throws Exception
   {
      logger.info( "Connection disable" );

      RadiusPacket request = radiusClient.createModifyRequest();
      prepareRequest( request, connection );

      // Выключение сервиса. Отправляем атрибуты редиректа
      // sa.radius.disable.attributes= radius.disable.attributes=
      request.addAttributes( disableRadiusAttributes );

      logger.info( "Send CoA lock: \n" + request );

      return radiusClient.sendAsync( request );
   }

   /**
    * Закрытие сессии. Ограничение доступа и в следующий раз выдаем NAK.
    */
   @Override
   public Object connectionClose( ServiceActivatorEvent event )
           throws Exception
   {
      logger.info( "Connection close" );

      InetConnection connection = event.getConnection();

      // убрать из DHCP, чтобы выдало NaK
      EventProcessor.getInstance().request( new InetConnectionManager.ConnectionRemoveEvent( connection ) );

      // вызываем отключение доступа
      return connectionDisable( connection );
   }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с закрытием сессии
СообщениеДобавлено: 08 окт 2014, 14:40 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Можем что-нибудь добавить, но нам нужно точно знать что когда нужно посылать.
В свое время c ISG более менее разобрались, а для SE или текущей логики хватало и/или он менее популярен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с закрытием сессии
СообщениеДобавлено: 08 окт 2014, 14:44 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
И да - если работать только с SE, то скорее всего не получится сделать так чтобы от абонента сразу пошел DHCP DISCOVER.
Насколько я понял, что в SE, что в ISG принцип примерно такой же как у нас в схеме с DHCP82 + IP Subscription.
Т.е. SE только пересылает DHCP-пакеты и управляет доступом для выданного IP-адреса.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с закрытием сессии
СообщениеДобавлено: 10 окт 2014, 10:51 
Не в сети
Клиент

Зарегистрирован: 30 янв 2013, 11:27
Сообщения: 305
Карма: 0
Amir писал(а):
Можем что-нибудь добавить, но нам нужно точно знать что когда нужно посылать.
В свое время c ISG более менее разобрались, а для SE или текущей логики хватало и/или он менее популярен.

Сейчас мы с сисадмином разгребемся и наверное попросим платную вашу техподдержку, что бы сделать это для RedBack 600


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.044s | 34 Queries | GZIP : On ]