The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"radius-cisco"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"radius-cisco"
Сообщение от ru Искать по авторуВ закладки on 25-Июн-03, 11:09  (MSK)
У меня связка GNU-RADIUS + cisco2610 dialup server
уважаемые как заставить radius  когда время работы ползователя
истекло что-то шепнуть киске что-бы та завершила соединение
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "radius-cisco"
Сообщение от Grey Искать по авторуВ закладки on 25-Июн-03, 11:28  (MSK)
>У меня связка GNU-RADIUS + cisco2610 dialup server
>уважаемые как заставить radius  когда время работы ползователя
>истекло что-то шепнуть киске что-бы та завершила соединение
>

такую связку я не пробовал, но знаю вот что:
когда устанавливается коннект и радиус "говорит" NAS-у "пускать этого зверя", он (радиус) может передать replay атрибуты NAS-у, в том числе Session-Timeout
У меня FreeBSD и FreeRADIUS, такой атрибут нормально отрабатывается, время указывается в секундах. Расчитываю время при завершении коннекта и оно передаётся при следующем коннекте.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "radius-cisco"
Сообщение от ru Искать по авторуВ закладки on 27-Июн-03, 08:54  (MSK)
>У меня связка GNU-RADIUS + cisco2610 dialup server
>уважаемые как заставить radius  когда время работы ползователя
>истекло что-то шепнуть киске что-бы та завершила соединение
>
Тут проблема в другом нужно чтоб кошка "положила трубку" грубо говоря
допустим что юзверу положено время с 1400 до 1700 в 1400 он входит
работает и в 1700 кошка должна разорвать с ним связь принудительно

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "radius-cisco"
Сообщение от Grey Искать по авторуВ закладки on 27-Июн-03, 09:09  (MSK)
>>У меня связка GNU-RADIUS + cisco2610 dialup server
>>уважаемые как заставить radius  когда время работы ползователя
>>истекло что-то шепнуть киске что-бы та завершила соединение
>>
>Тут проблема в другом нужно чтоб кошка "положила трубку" грубо говоря
>допустим что юзверу положено время с 1400 до 1700 в 1400 он
>входит
>работает и в 1700 кошка должна разорвать с ним связь принудительно

Для этого есть параметр Login-Time, его значение может быть к примеру таким: 'Al8000-2000' пускать в любой день недели с 8 до 20, или таким: 'Wk0700-2100,Sa,Su2300-1655'
Я проверял на freeradius + FreeBSD + pppd и всё пашет как надо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "radius-cisco"
Сообщение от Grey Искать по авторуВ закладки on 27-Июн-03, 09:10  (MSK)
>>>У меня связка GNU-RADIUS + cisco2610 dialup server
>>>уважаемые как заставить radius  когда время работы ползователя
>>>истекло что-то шепнуть киске что-бы та завершила соединение
>>>
>>Тут проблема в другом нужно чтоб кошка "положила трубку" грубо говоря
>>допустим что юзверу положено время с 1400 до 1700 в 1400 он
>>входит
>>работает и в 1700 кошка должна разорвать с ним связь принудительно
>
>Для этого есть параметр Login-Time, его значение может быть к примеру таким:
>'Al8000-2000' пускать в любой день недели с 8 до 20, или
>таким: 'Wk0700-2100,Sa,Su2300-1655'
>Я проверял на freeradius + FreeBSD + pppd и всё пашет как
>надо.

Этот атрибут в таблице radcheck должен быть

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "radius-cisco"
Сообщение от A Clockwork Orange Искать по авторуВ закладки on 27-Июн-03, 10:15  (MSK)
Не подскажешь где брал pppd  с поддержкой радиуса
  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "radius-cisco"
Сообщение от Grey Искать по авторуВ закладки on 27-Июн-03, 10:20  (MSK)
>Не подскажешь где брал pppd  с поддержкой радиуса

Ну эта тема во многих местах освещена, и тут в том числе, pppd и так можно научить раюотать с radius, правда мне один добрый человек замылил pppd, после установки которого в radius начали нормально передаваться номера портов дайлапщиков.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "radius-cisco"
Сообщение от A Clockwork Orange Искать по авторуВ закладки on 27-Июн-03, 11:08  (MSK)
>>Не подскажешь где брал pppd  с поддержкой радиуса
>
>Ну эта тема во многих местах освещена, и тут в том числе,
>pppd и так можно научить раюотать с radius, правда мне один
>добрый человек замылил pppd, после установки которого в radius начали нормально
>передаваться номера портов дайлапщиков.

МОЖЕТ МНЕ НАМЫЛИШЬ PPPD С ПОДДДЕРЖКОЙ РАДИУСА

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "radius-cisco"
Сообщение от Grey Искать по авторуВ закладки on 27-Июн-03, 11:15  (MSK)
>>>Не подскажешь где брал pppd  с поддержкой радиуса
>>
>>Ну эта тема во многих местах освещена, и тут в том числе,
>>pppd и так можно научить раюотать с radius, правда мне один
>>добрый человек замылил pppd, после установки которого в radius начали нормально
>>передаваться номера портов дайлапщиков.
>
>МОЖЕТ МНЕ НАМЫЛИШЬ PPPD С ПОДДДЕРЖКОЙ РАДИУСА

хоть щас (адресок бы знать куда мылить), но имей в виду, это не "с поддержкой", просто он правильно передаёт порт на котором юзер сидит, а что бы просто "завелось" его не обязательно ставить...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "radius-cisco"
Сообщение от A Clockwork Orange Искать по авторуВ закладки on 27-Июн-03, 12:15  (MSK)
мне нужен pppd с поддержкой radius
  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "radius-cisco"
Сообщение от Grey Искать по авторуВ закладки on 27-Июн-03, 13:29  (MSK)
>мне нужен pppd с поддержкой radius

ну оно у меня и есть... тока если возможно, подскажи в обмен как pptpd заставить пахать через pppd

  Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "radius-cisco"
Сообщение от A Clockwork Orange Искать по авторуВ закладки on 27-Июн-03, 15:45  (MSK)
>>мне нужен pppd с поддержкой radius
>
>ну оно у меня и есть... тока если возможно, подскажи в обмен
>как pptpd заставить пахать через pppd


Скажу тебе в обмен я лично использую mpd для сервера а он уж как хочет поверх ethernet или поверх ppp ему все равно

aclockworkorange@operamail.ru

адресок для pppd с поддержкой radius

  Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "radius-cisco"
Сообщение от A Clockwork Orange Искать по авторуВ закладки on 27-Июн-03, 16:34  (MSK)
Пардон конечно
aclockworkorange@operamail.com
  Рекомендовать в FAQ | Cообщить модератору | Наверх

13. "radius-cisco"
Сообщение от Soldier Искать по авторуВ закладки on 27-Июн-03, 16:59  (MSK)
>>>У меня связка GNU-RADIUS + cisco2610 dialup server
>>>уважаемые как заставить radius  когда время работы ползователя
>>>истекло что-то шепнуть киске что-бы та завершила соединение
>>>
>>Тут проблема в другом нужно чтоб кошка "положила трубку" грубо говоря
>>допустим что юзверу положено время с 1400 до 1700 в 1400 он
>>входит
>>работает и в 1700 кошка должна разорвать с ним связь принудительно
>
>Для этого есть параметр Login-Time, его значение может быть к примеру таким:
>'Al8000-2000' пускать в любой день недели с 8 до 20, или
>таким: 'Wk0700-2100,Sa,Su2300-1655'
>Я проверял на freeradius + FreeBSD + pppd и всё пашет как
>надо.

По моему в данном случае будет пахать не совсем так как надо. То есть если пользователь зайдет в 16:59, то он спокойненько  будет висеть и после 17:00, а нужно чтобы его в 17:00:01 вынесло на... ну вобщем отсоеденило. Мне, чтобы решить эту проблему пришлось написать демона, который следит за radutmp и если надо по телнету лезет на кошку, и далее принудительно (clear line) выкидывает таких товарищей.  Наверное не самое удачное решение, и я  был бы признателен, если кто знает как это сделать более изящно и безопасно (telnet все таки) и поделился б своими знаниями ;-).

  Рекомендовать в FAQ | Cообщить модератору | Наверх

15. "radius-cisco"
Сообщение от LS emailИскать по авторуВ закладки on 28-Июн-03, 02:08  (MSK)
> Наверное не самое удачное решение, и я  был бы
>признателен, если кто знает как это сделать более изящно и безопасно
>(telnet все таки) и поделился б своими знаниями ;-).

на самом деле это самое лучшее решение, из того что здесь представлено. в самом общем случае порядок действий примерно такой:

- на циске говорим aaa account ... update periodic xxx
- через xxx ловим в радиусе alive-пакет
- изменяем счет клиента в зависимости от тарифов на данное время суток (или другие параметры)
- проверяем - а оно (в смысле - клиент) еще может работать?
- если нет - скидываем его (лучше не ч/з telnet, а по snmp)

radius должен поддерживать выполнение внешних скриптов (таких сейчас как грязи), через которые и будет реализовываться обработка alive-пакетов от циски и все последующие реакции

  Рекомендовать в FAQ | Cообщить модератору | Наверх

19. "radius-cisco"
Сообщение от Soldier Искать по авторуВ закладки on 28-Июн-03, 07:40  (MSK)
>- на циске говорим aaa account ... update periodic xxx
>- через xxx ловим в радиусе alive-пакет
>- изменяем счет клиента в зависимости от тарифов на данное время суток
>(или другие параметры)
>- проверяем - а оно (в смысле - клиент) еще может работать?
>
>- если нет - скидываем его (лучше не ч/з telnet, а по
>snmp)
>
>radius должен поддерживать выполнение внешних скриптов (таких сейчас как грязи), через которые
>и будет реализовываться обработка alive-пакетов от циски и все последующие реакции
>

Да вобщем у меня идея примерно таже, только реализация другая. Freeradius-0.8.1, которым я пользуюсь, записывает всю необходимую информацию в radutmp - username (login), nas_port, time, framed_address и т.д. Мне осталось только написать демона который отслеживает изменения в данном файле, считывает их (радиус ставил из исходников, поэтому описание struct radutmp было под рукой) и далее дело техники.

По сути, как мне кажется, это примерно тоже самое, что "заставлять" киску слать с некоторой периодичностью пакеты и "заставлять" радиус запускать внешние проги - ставятся некоторые checkpoint-ы, по достижении которых выплолняются некоторые процедуры. Но в моем случае, если что не так, то юзверя вынесет моментально (если честно, то от моментально до 4 секунд :) ), а в твоем придется ждать очередного пакета от киски (кстати, а с какой периодичностью они шлются?)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

22. "radius-cisco"
Сообщение от LS emailИскать по авторуВ закладки on 30-Июн-03, 01:00  (MSK)
>Да вобщем у меня идея примерно таже, только реализация другая. Freeradius-0.8.1, которым
>я пользуюсь, записывает всю необходимую информацию в radutmp - username (login),
>nas_port, time, framed_address и т.д. Мне осталось только написать демона который
>отслеживает изменения в данном файле, считывает их (радиус ставил из исходников,
>поэтому описание struct radutmp было под рукой) и далее дело техники.
>
>
>По сути, как мне кажется, это примерно тоже самое, что "заставлять" киску
>слать с некоторой периодичностью пакеты и "заставлять" радиус запускать внешние проги
>- ставятся некоторые checkpoint-ы, по достижении которых выплолняются некоторые процедуры. Но
>в моем случае, если что не так, то юзверя вынесет моментально
>(если честно, то от моментально до 4 секунд :) ), а
>в твоем придется ждать очередного пакета от киски (кстати, а с
>какой периодичностью они шлются?)

как скажешь, так и шлет. что там клиент по модему за лишние 3-5 минут скачать сможет? - от меня не убудет. с другой стороны может получится так, что юзер отвалился некорректно и содержимое radutmp не соответствует действительности. в этом случае по отсутствию alive-пакета от циски, за определенный промежуток времени, можно делать соответсятвующие выводы и переносить такие сессии в разряд закрытых, чтобы с юзера лишние деньги не щипать (а то обидится). так что по хорошему без дополнительных демонов и чекпоинтов все равно не обойдешься (то же отсутствие alive-пакетов ловить, да и много чего другого делать). все только от требований зависит, а улучшать что-то можно до бесконечности :). вобщем-то это уже задачи билинга, а не радиуса, как ты и говорил.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

23. "radius-cisco"
Сообщение от Soldier Искать по авторуВ закладки on 30-Июн-03, 08:15  (MSK)
>как скажешь, так и шлет. что там клиент по модему за лишние
>3-5 минут скачать сможет? - от меня не убудет. с другой

Почту например :). Да вобщем не убудет, но как говорится, пустячок, а приятно :)))

>стороны может получится так, что юзер отвалился некорректно и содержимое radutmp
>не соответствует действительности. в этом случае по отсутствию alive-пакета от циски,
>за определенный промежуток времени, можно делать соответсятвующие выводы и переносить такие
>сессии в разряд закрытых, чтобы с юзера лишние деньги не щипать
>(а то обидится). так что по хорошему без дополнительных демонов и
>чекпоинтов все равно не обойдешься (то же отсутствие alive-пакетов ловить, да
>и много чего другого делать). все только от требований зависит, а
>улучшать что-то можно до бесконечности :). вобщем-то это уже задачи билинга,
>а не радиуса, как ты и говорил.

Ну вообще-то, accounting у меня через SQL-модуль. Если сессия завершится некорректно, то там поле acctstoptime таблицы radacct будет содержать NULL значение и соответствующие выводы  можно делать из этого, и вовсе необязательно перехватывать пакеты от кошки :). И демон у меня всего один + внешняя прога для принудительного отключения юзверя. Да и radutmp пока ни разу не подвел ;-) Правда работает все это только 2 месяца, но пока как часы (тьфу, тьфу, тьфу... :))

А вообще, принципиальной разницы, как мне кажется, в наших подходах нет. Я не говорю что мой метод лучше, но мне не кажется, что он хуже - и там и там есть свои плюсы и минусы.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

24. "radius-cisco"
Сообщение от LS Искать по авторуВ закладки on 30-Июн-03, 16:24  (MSK)
[skip]

>
>Ну вообще-то, accounting у меня через SQL-модуль. Если сессия завершится некорректно, то
>там поле acctstoptime таблицы radacct будет содержать NULL значение и соответствующие
>выводы  можно делать из этого, и вовсе необязательно перехватывать пакеты
>от кошки :). И демон у меня всего один + внешняя

какая разница SQL, файл, еще что-нибудь - дело-то не в этом. в твою БД информация заносится при получении stop-пакета от циски. ты его можешь вообще никогда  не дождаться: сбои при некоректном отключении, UDP (нет гарантий доставки пакета), etc. поэтому обработка alive-пакетов дает возможность действовать  по принципу: один раз - случайность, несколько раз - правило. первого alive-пакета нет - подождем, а пока отметим сессию как "мертвую". если следующий alive-пакет пришел - good - оживляем "мертвую" сессию и делаем вид, что ничего не было. а если несколько alive не пришло - переводим сессию в разряд закрытых со stoptime на момент условной смерти (то есть фактически сами имитируем получение stop-пакета от циски).

>прога для принудительного отключения юзверя. Да и radutmp пока ни разу
>не подвел ;-) Правда работает все это только 2 месяца, но
>пока как часы (тьфу, тьфу, тьфу... :))
>

ну и хорошо

>А вообще, принципиальной разницы, как мне кажется, в наших подходах нет.

есть - я выше описал в чем разница. радиус-сервер не может достоверно знать, что творится на NAS. поэтому информация, периодически приходящая с NAS никогда не повредит.

Я
>не говорю что мой метод лучше, но мне не кажется, что
>он хуже - и там и там есть свои плюсы и
>минусы.

да я тоже твой метод не хаю :). каждый делает как ему надо - под свои задачи.


  Рекомендовать в FAQ | Cообщить модератору | Наверх

25. "radius-cisco"
Сообщение от Soldier Искать по авторуВ закладки on 30-Июн-03, 18:50  (MSK)
>>А вообще, принципиальной разницы, как мне кажется, в наших подходах нет.
>
>есть - я выше описал в чем разница. радиус-сервер не может достоверно
>знать, что творится на NAS. поэтому информация, периодически приходящая с NAS
>никогда не повредит.

А кому циска эту информацию шлет? Правильно! - radius-серверу :) А что с ней радиус делает? В частности пишет в radutmp.

Фрагмент структуры radutmp:

time_t time;                  /* Time entry was last updated. */

На размышления не наталкивает? :))) При каждом обновлении, информация заносится в radutmp. То есть опять же, то что ты так красочно описал, можно сделать без перехвата пакетов. Кстати наш кошак не слал стоп-пакеты, только если его рестартовали, не очистив линни, поэтому мы решили такие сессии не включать в трафик (типа наша вина), поэтому NULL-значение в поле acctstoptime достаточное условие. А ситуации, когда связь между radius-сервером и кошаком падала еще не возникало (локалка все таки), я б ее конечно съиммитировал бы, да биг-босс по башке настучит :))) Ранее у нас был portmaster, так тот слал пакеты до потери пульса (пока ответ не получит), не знаю, правда, как на этот счет у циски.

Ну и в чем разница? В том что ты перехватываешь и анализируешь пакеты предназначенные для радиуса, а я предоставляю это самому радиусу и анализирую информацию которую тот пишет в radutmp? По моему непринципиально - и у тебя и у меня на основании данных, полученных от кошака и предназначенных прежде всего для радиуса, производятся какие-то действия, разница лишь в способе получения этой информации.

Да, еще одна мысля, сейчас только появилась. Через SQL модуль, в таблицу radacct можно заносить и время поледнего update (через переменную accounting_update_query) - может лучше ипользовать это, чем перехват пакетов, для закрытия "мертвых" сесий?
Ну это я так, ввиде идеи :))), если идея не очень то прошу прощения и ногами не пинать:)))

  Рекомендовать в FAQ | Cообщить модератору | Наверх

26. "radius-cisco"
Сообщение от LS Искать по авторуВ закладки on 01-Июл-03, 18:54  (MSK)
>>>А вообще, принципиальной разницы, как мне кажется, в наших подходах нет.
>>
>>есть - я выше описал в чем разница. радиус-сервер не может достоверно
>>знать, что творится на NAS. поэтому информация, периодически приходящая с NAS
>>никогда не повредит.
>
>А кому циска эту информацию шлет? Правильно! - radius-серверу :) А что
>с ней радиус делает? В частности пишет в radutmp.
>
>Фрагмент структуры radutmp:
>
>time_t time;          
>       /* Time entry was
>last updated. */
>
>На размышления не наталкивает? :))) При каждом обновлении, информация заносится в radutmp.
>То есть опять же, то что ты так красочно описал, можно
>сделать без перехвата пакетов. Кстати наш кошак не слал стоп-пакеты, только
>если его рестартовали, не очистив линни, поэтому мы решили такие сессии
>не включать в трафик (типа наша вина), поэтому NULL-значение в поле
>acctstoptime достаточное условие. А ситуации, когда связь между radius-сервером и кошаком
>падала еще не возникало (локалка все таки), я б ее конечно
>съиммитировал бы, да биг-босс по башке настучит :))) Ранее у нас
>был portmaster, так тот слал пакеты до потери пульса (пока ответ
>не получит), не знаю, правда, как на этот счет у циски.
>
>
>Ну и в чем разница? В том что ты перехватываешь и анализируешь
>пакеты предназначенные для радиуса, а я предоставляю это самому радиусу и
>анализирую информацию которую тот пишет в radutmp? По моему непринципиально -
>и у тебя и у меня на основании данных, полученных от
>кошака и предназначенных прежде всего для радиуса, производятся какие-то действия, разница
>лишь в способе получения этой информации.
>
>Да, еще одна мысля, сейчас только появилась. Через SQL модуль, в таблицу
>radacct можно заносить и время поледнего update (через переменную accounting_update_query) -
>может лучше ипользовать это, чем перехват пакетов, для закрытия "мертвых" сесий?
>
>Ну это я так, ввиде идеи :))), если идея не очень то
>прошу прощения и ногами не пинать:)))


судя по одному из предыдущих вопросов update periodic на твоей циске не включен. весь твой учет построен на получении старт/стоп-записей от циски. этого явно не достаточно. ты исходишь из предположения, что твой радиус _всегда_ получает пакет и на этом строишь свою систему. я тебе до завтрашнего утра могу перечислять причины, по которым единичный пакет до радиуса может не дойти. ГЛАВНОЕ - постоянно получать информацию о состоянии сессий с циски и обрабатывать ее. а как ты это делаешь radutmp или что-то еще - дело десятое. мне в свое время показалось более удобным обращаться к БД через внешние скрипты радиуса, а не городить для этого дела отдельного демона (для серьезного биллинга их и так придется немало написать).

для примера:
при обработке только старт/стоп записей, когда перезагружаешь киску, ты не обсчитываешь (отбрасываешь, как сам сказал) все сесии без стоп-записи (если я все правильно понял). сидел клиент 2 часа, ты циску перезагрузил и денег с него не взял. а если бы была обработка alive-пакетов (реализация не важна - не в этом суть), то через несколько минут после перезагрузки, ты бы смог сам эту сессию корректно закрыть (с момента отсутствия alive-пакетов для этого соединения) и взять с клиента деньги, за то что он твоими услугами 2ч и 3мин пользовался. а "лишние" 3 минуты клиент потом "нагонит" - когда денег у него на счете не останется, система его только через те же 3 мин отрубит (если циску не каждый день перезагружаешь - вы квиты ;)).

причем при таком подходе возможно реализовывать гибкие тарифные планы (днем - одни цены, вечером - другие, ночью - третьи), поскольку счет клиента будет меняться динамически при обработке alive-пакета и отражаеть реальное состояние дел. при обработке только старт/стоп-записей  ты будешь вынужден "прогнозировать" момент отключения клиента, какие уж тут гибкие тарифы - один геморой.

PS этому треду уже больше подходит название "принципы разработки и реализации биллинговых систем", а не "radius-cisco" :о). предлагаю его X :о)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

27. "radius-cisco"
Сообщение от Soldier Искать по авторуВ закладки on 01-Июл-03, 23:39  (MSK)
Я вообщем то имел ввиду, что информацию от циски можно обрабатывать анализируя radutmp, а не то что надо это или не надо периодически слать эту информацию. Может быть оно так действительно надежнее. Просто я этого не делаю, так мне оно пока не надо -  пакетов затерянных навсегда на пути к киске - такого еще не случалось ни разу, по крайней мере последние года два (хм, пожалуй я данный феномен  объяснить вообще не смогу :)), да и со стоп-пакетами все было нормально если перед перезагрузкой кошака  принудительно очистить все линни.

Насчет клиентов. У меня была задача (точнее одна из задач), как только у клиента кончаются деньги и долг достигнет определенной суммы, его надо сразу отключать и больше не давать ему входа, пока долг не будет погашен, так что твой фокус с "потом нагонит" здесь бы не прошел. Теперь что такое 2 часа. Это твои 40 клиентов переседевших по 3 минуты - наверняка за день у тебя больше набегает этих лишних минут, а циску, как мы например, в среднем грузят раз в год. И кроме того, перед перезагрузкой мы все-таки делаем clear all... ;-)))

На счет гибкости. Представь себе - этого демона (кстати пока одного единственного - наверное билинг не очень серьезный :)))) я написал именно для достижения этой гибкости. Пришлось конечно немножко поднапрячь мозги, но я бы не назвал это гемороем - даже для меня, умеренно-умного, задача чуть выше среднего. Кроме ночных,вечерних и дневных, есть еще скажем только праздничные, только будничные, определенное число часов по одному, более дешевому тарифу, по достижении этого числа часов по другому, более дорогому. Далее, если пользователь вошел когда действовал дневной тариф, а вышел когда действует вечерний, то дневное время подсчитается по дневному, а вечернее по вечернему тарифу ну и так далее. Не буду утомлять еще и алгоритмом, скажу только, что он довольно простой. Всего то около 50Kb С++ исходников + пара ранее написанных мною либ. Хотя может для кого-то это и геморой.

И все это в режиме реального времени, а не с периодичностью в 3 минуты (уже третий месяц пошел - пока полет нормальный :)))). Ну, а если все таки возникнут проблемы (сомневаюсь аднака), то я пожалуй воспользуюсь твоей подсказкой насчет update-periodic ;-))).

P.S. Меня этот тред тоже несколько утомил, но ты тут такие мрачные картины потери трафика расписал... ;-)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

28. "radius-cisco"
Сообщение от LS emailИскать по авторуВ закладки on 02-Июл-03, 02:49  (MSK)
>Я вообщем то имел ввиду, что информацию от циски можно обрабатывать анализируя
>radutmp, а не то что надо это или не надо периодически
>слать эту информацию.

ну наконец-то до сути добрались :). я же с самого начала нашего с тобой разговора именно на этом акцент делал: надо прежде чем данные обрабатывать, быть уверенным в том, что они достоверны (отражают текущее состояние). radius сам по себе этого обеспечить не может, да и не должен - это не его задача. он только обрабатывает что к нему пришло и дает ответ. а что там после его ответа случилось его не волнует. и информацией он может оперировать устаревшей - что к нему последний раз пришло, тому и верит. поэтому не лишнее "дергать" его переодически новыми данными.

Может быть оно так действительно надежнее. Просто я
>этого не делаю, так мне оно пока не надо -  

и об этом я говорил - все решает поставленная задача

>пакетов затерянных навсегда на пути к киске - такого еще не
>случалось ни разу, по крайней мере последние года два (хм, пожалуй
>я данный феномен  объяснить вообще не смогу :)), да и

да и у меня не было таких проблем, за последние два года. а сейчас вот получилось так, что радиус-сервер от моей циски за 200 км с лишним стоит. так что все эти мои "придумки" не из пальца высосаны :)

>со стоп-пакетами все было нормально если перед перезагрузкой кошака  принудительно
>очистить все линни.
>

дык еще бы - ты таким путем все сессии нормально завершаешь, получаешь своим радиусом стоп-пакеты - и дело в шляпе

>Насчет клиентов. У меня была задача (точнее одна из задач), как только
>у клиента кончаются деньги и долг достигнет определенной суммы, его надо
>сразу отключать и больше не давать ему входа, пока долг не
>будет погашен, так что твой фокус с "потом нагонит" здесь бы
>не прошел.

еще как замечательно прошел бы :). видно ты не совсем этот "фокус" понял. учитывая наши доисторические АТС, которые повсеместно (и учитывая прочие причины), больше шансов на то, что ты получишь NULL поле структуры radutmp из за некоректного отвала пользователя, чем то что клиент будет через каждые 3 мин рвать связь со своим провайдером и восстанавливать ее снова, чтобы работать на халяву (это первое). ты при любой нестандартной ситуации снимаешь со счета клиента чуть больше (за 3 мин), чем надо было бы. я не говорил, что не должно быть механизма, который "отбивает" нормально работающего пользователя, у которого кончились деньги в течении 1-4 с :). я говорил, что для норамльного биллинга демонов пописать придется (это второе). сортировка пользователей на "нормально работающих" и отвалившихся осуществляется обработкой alive-пакетов с циски (это третье).  в конечном счете ты всегда оказываешься в выигрыше (это четвертое)

(3 мин было приведено в моих придыдущих постингах как пример. если не жаль свой сервак и клиентов - можешь поставить меньший интервал. однако моя практика показывает, что оптимальное значение от 3 до 5 мин)

Теперь что такое 2 часа. Это твои 40 клиентов
>переседевших по 3 минуты - наверняка за день у тебя больше
>набегает этих лишних минут, а циску, как мы например, в среднем

умножь все что я скаал выше на 40 и я в 40 раз больше в выигрыше окажусь при нестандартных ситуациях. а при нормальной работе ничего не потеряю.

>грузят раз в год. И кроме того, перед перезагрузкой мы все-таки
>делаем clear all... ;-)))
>

ну счет clear all коментарий уже выше был, а насчет перезагузки - ежу понятно, что не каждый день это происходит :))

>На счет гибкости. Представь себе - этого демона (кстати пока одного единственного

тоже не есть хорошо, что "единственного". на мой взгляд не стоит не связанные м/ду собой задачи одному демону поручать. этот же "единственный", к тому же уже выполняет выполняет задачу, которую можно было решить и средствами демона radius. если честно - я не понимаю зачем такое надо было делать.

>- наверное билинг не очень серьезный :)))) я написал именно для
>достижения этой гибкости. Пришлось конечно немножко поднапрячь мозги, но я бы
>не назвал это гемороем - даже для меня, умеренно-умного, задача чуть
>выше среднего. Кроме ночных,вечерних и дневных, есть еще скажем только праздничные,
>только будничные, определенное число часов по одному, более дешевому тарифу, по
>достижении этого числа часов по другому, более дорогому. Далее, если пользователь
>вошел когда действовал дневной тариф, а вышел когда действует вечерний, то

"умеренно-умные" ч/з iptables все считают (не в обиду никому сказано - для определенного круга задач тоже очень неплохой вариант) - так что не надо прибедняться :).

>дневное время подсчитается по дневному, а вечернее по вечернему тарифу ну
>и так далее. Не буду утомлять еще и алгоритмом, скажу только,
>что он довольно простой. Всего то около 50Kb С++ исходников +
>пара ранее написанных мною либ. Хотя может для кого-то это и
>геморой.
>

а как сложность алгоритма связана с количеством кода его реализующего? зависимость на мой взгляд отнюдь не прямая :). на самом деле у меня было желание, когда я писал на счет прогнозирования отключения, в предыдущем постинге, предложить тебе еще один демон состряпать (специально обученный), но ты уже ухитрился сделать "все в одном флаконе" :)

>И все это в режиме реального времени, а не с периодичностью в
>3 минуты (уже третий месяц пошел - пока полет нормальный :)))).

дык, "сколько вешать в граммах"? :о) несколько раз уже повторял - все от задач зависит. насколько надо тебе, настолько и делай. тока про возможность развития не забывай - сейчас если что, будешь демона, который "один за всех" переписывать...

>Ну, а если все таки возникнут проблемы (сомневаюсь аднака), то я
>пожалуй воспользуюсь твоей подсказкой насчет update-periodic ;-))).
>

если нет проблем, значит уже умер ;-))

>P.S. Меня этот тред тоже несколько утомил, но ты тут такие мрачные
>картины потери трафика расписал... ;-)

не так страшен черт... :)


всего самого лучшего!

  Рекомендовать в FAQ | Cообщить модератору | Наверх

29. "radius-cisco"
Сообщение от Soldier Искать по авторуВ закладки on 02-Июл-03, 15:55  (MSK)
На счет того, что ты 40 раз окажешься в выигрыше - мечтать не вредно :) Единственый случай, когда acctstoptime содержал NULL значение, это когда перегружали киску, при этом radutmp ВСЕГДА содержал корректные значения (может кошак перед смертью че-нить мяукнуть успевает). В остальных случаях, как бы не отлетал клиент, сам ли, из-за плохого качества линии или по моему велению, стоп-запись ВСЕГДА присутствовала.

Насчет абсолютно разных задач. Ну это  как посмотреть. В моем вИдении, решается только одна задача (ну максим две) - держать пользователя в некоторых рамках - шаг влево, шаг вправо - расстрел на месте, в смысле отключение + сохранение данных о завершенной сессии. По моему не менее логично чем запускать десяток внешних прог. А то что его (демон) придется переписывать - вряд-ли чаще чем тебе внешнюю прогу (или набор прог?) Кроме того, тебе при каждом вызове внешней проги необходимо открывать новое соеденение с базой данных (или у тебя тарифные планы хранятся в текстовых файлах в домашних директориях пользователей?) А тут открывается только одно соединение (правда на постоянно, но его можно прикрыть, а потом открыть снова в случае чего). Сейчас мой демон работает в однопоточном режиме (20 одновременно засоединенных пользователей  чекает мгновенно (причем проверка идет не в лоб, что то типа каждую секунду, а достаточно редко)- наверное это мало, но мы только начинаем и по моим прикидкам он и 100 обсчитает моментально), но в случае необходимости его довольно легко можно перевести в многопоточный - главное принцип действия. Для подсчета/проверки и используются динамически подгружаемая либа - один SIGHUP  и она подгружается заново без перезагрузки демона.

Насчет радиусовских задач. Правила (тарифные планы) хранятся в базе, в том числе там хранится  и время когда клиент может логинится, когда нет. Но кроме того, бывают тарифы скажем, только выходные и праздники. Поскольку праздником может быть и будний день, а субота, воскресенье может быть и рабочим - как ты это объяснишь радиусу? А там еще надо следит за переходам от буднего дня к праздничному и наоборот. То есть в некоторых случаях все равно придется брать на себя ответственность за отключение пользователя. Ну а если ты все равно должен брать такую ответственность время от времени, то почему бы и не следить за этим постоянно? Тут получается другой выигрыш - допустим пользователь сменил свой тарифный план, тогда тебе надо отразить эти изменения и в таблице где хранятся тарифные планы, и изменять соответствующий radreply, а в моем случае только таблицы тарифных планов.

Как ты сказал, все зависит от задачи - моя задача была real time и я не вижу другого способа ее решения кроме как написание демона.


P.S. Я б прекратил этот тред, но ты стал на моего демона тянуть :))) А насчет целесообразности перехвата Alive-пакетов я подумаю когда расстояние между циско и радиусом у меня будет 200км вместо нынешних 2 метров :))) В любом случае спасибо за подсказку - в случае чего буду иметь все это в виду

>всего самого лучшего!

И тебе тоже!

  Рекомендовать в FAQ | Cообщить модератору | Наверх

18. "radius-cisco"
Сообщение от Grey Искать по авторуВ закладки on 28-Июн-03, 05:51  (MSK)
>>>>У меня связка GNU-RADIUS + cisco2610 dialup server
>>>>уважаемые как заставить radius  когда время работы ползователя
>>>>истекло что-то шепнуть киске что-бы та завершила соединение
>>>>
>>>Тут проблема в другом нужно чтоб кошка "положила трубку" грубо говоря
>>>допустим что юзверу положено время с 1400 до 1700 в 1400 он
>>>входит
>>>работает и в 1700 кошка должна разорвать с ним связь принудительно
>>
>>Для этого есть параметр Login-Time, его значение может быть к примеру таким:
>>'Al8000-2000' пускать в любой день недели с 8 до 20, или
>>таким: 'Wk0700-2100,Sa,Su2300-1655'
>>Я проверял на freeradius + FreeBSD + pppd и всё пашет как
>>надо.
>
>По моему в данном случае будет пахать не совсем так как надо.
>То есть если пользователь зайдет в 16:59, то он спокойненько  
>будет висеть и после 17:00, а нужно чтобы его в 17:00:01
>вынесло на... ну вобщем отсоеденило. Мне, чтобы решить эту проблему пришлось
>написать демона, который следит за radutmp и если надо по телнету
>лезет на кошку, и далее принудительно (clear line) выкидывает таких товарищей.
> Наверное не самое удачное решение, и я  был бы
>признателен, если кто знает как это сделать более изящно и безопасно
>(telnet все таки) и поделился б своими знаниями ;-).

Ну спорить прям щас не буду (перепроверю дл яначала) но мне помнится я это уже проверял в своё время... во всяком случае в данной связке всё как надо пашет.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

20. "radius-cisco"
Сообщение от Soldier Искать по авторуВ закладки on 28-Июн-03, 07:47  (MSK)
>Ну спорить прям щас не буду (перепроверю дл яначала) но мне помнится
>я это уже проверял в своё время... во всяком случае в
>данной связке всё как надо пашет.

Да я тоже проверял - если залогиниться хоть за минуту до окончания интервала, то считай проскочил :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

21. "radius-cisco"
Сообщение от Grey Искать по авторуВ закладки on 28-Июн-03, 09:22  (MSK)
>>Ну спорить прям щас не буду (перепроверю дл яначала) но мне помнится
>>я это уже проверял в своё время... во всяком случае в
>>данной связке всё как надо пашет.
>
>Да я тоже проверял - если залогиниться хоть за минуту до окончания
>интервала, то считай проскочил :)

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

17. "radius-cisco"
Сообщение от LS emailИскать по авторуВ закладки on 28-Июн-03, 02:23  (MSK)
>>У меня связка GNU-RADIUS + cisco2610 dialup server
>>уважаемые как заставить radius  когда время работы ползователя
>>истекло что-то шепнуть киске что-бы та завершила соединение
>>
>Тут проблема в другом нужно чтоб кошка "положила трубку" грубо говоря
>допустим что юзверу положено время с 1400 до 1700 в 1400 он
>входит
>работает и в 1700 кошка должна разорвать с ним связь принудительно

если задача только в этом, то на циске есть временные списки доступа (не уверен на счет серии 2600) - time based acl. а радиус может "шепнуть" киске какой acl навесить на пользователя во время его авторизации. возможно это будет самым простым решением в твоем случае.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

14. "radius-cisco"
Сообщение от Soldier Искать по авторуВ закладки on 27-Июн-03, 17:09  (MSK)
>У меня связка GNU-RADIUS + cisco2610 dialup server
>уважаемые как заставить radius  когда время работы ползователя
>истекло что-то шепнуть киске что-бы та завершила соединение
>

Насколько я знаю, радиус ничего не должен никому шептать по собственной инициативе. Только когда к нему приходит запрос на аунтификацию или на  экаунтинг.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

16. "radius-cisco"
Сообщение от LS emailИскать по авторуВ закладки on 28-Июн-03, 02:16  (MSK)
>>У меня связка GNU-RADIUS + cisco2610 dialup server
>>уважаемые как заставить radius  когда время работы ползователя
>>истекло что-то шепнуть киске что-бы та завершила соединение
>>
>
>Насколько я знаю, радиус ничего не должен никому шептать по собственной инициативе.
>Только когда к нему приходит запрос на аунтификацию или на  
>экаунтинг.

он и не дожен. его задача аутентификация клиента, его авторизация, и аккаунтинг. но эти данные (особенно последние) могут в большинстве реализаций radius передаваться внешним скриптам - вот они-то и должны обо всем остальном думать.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру