Биллинговая система Nodeny
26 Апреля 2024, 19:12:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2 3 ... 9
  Печать  
Автор Тема: Модуль RADIUS Change of Authorization  (Прочитано 44995 раз)
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« : 18 Марта 2016, 12:13:42 »

Здравствуйте!
Расскажите что умеет, как использовать.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Online Online

Сообщений: 4782



Просмотр профиля
« Ответ #1 : 18 Марта 2016, 12:29:30 »

Модуль умеет то, что умеет этот протокол)

Изначально протокол radius работал в одном направлении: устройство делает запрос на радиус-сервер и в ответ получает какие-то атрибуты текущего подключения, например скорость. Если же мы захотим послать на устройство какую-то команду, то у нас ничего не получится - нам нужно ждать пока само устройство не запросит что-либо у радиуса. Представьте, что у нас на устройстве (на NAS-е) запущен dhcp-сервер - пока не выйдет время аренды ip, NAS ничего не пошлет на радиус. Получается что мы не сможем ни заблочить абона, ни изменить его скорость несколько минут. Поэтому приходится отдельными средствами (скриптом noserver) управлять либо фаерволом либо по api заходить на микротик и там крутить правила, либо по ssh или telnet заходить на свич и там что-то крутить.

Осознав гемор, мировая общественность придумала расширение COA для радиуса, которое позволяет в любой момент времени послать команду от радиуса в сторону устройства. Тут есть ложка дегтя - не все устройства поддерживают это расширение, в частности Микротик не поддерживает, а в нем очень бы хотелось поиметь эту фичу ибо он хреново переваривает API-запросы.

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

Код:
$coa_connect__state_on = {
    type     => 'coa',
    template => 'Acct-Session-Id={{auth_ses}}, ERX-Service-Activate:1="pppoe_local({{speed_in1_mb}}m,{{speed_out1_mb}}m)"',
};

$coa_connect__state_off = {
    type     => 'coa',
    template => 'Acct-Session-Id={{auth_ses}}, ERX-Service-Activate:1="svc-guest-pppoe"',
};



$coa_disconnect = [
    {
        type     => 'coa',
        template => 'Acct-Session-Id={{auth_ses}}, ERX-Service-Deactivate="pppoe_local"',
    },
    {
        type     => 'coa',
        template => 'Acct-Session-Id={{auth_ses}}, ERX-Service-Deactivate="svc-guest"',
    }
];

Если клиент подключается и у него включен доступ, посылаются команды в coa_connect__state_on. Если у него вдруг доступ блокируется - посылается команда coa_connect__state_off. Если клиент вообще отконнекчивается - запускается coa_disconnect
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #2 : 18 Марта 2016, 12:37:22 »

Здравствуйте!
Расскажите что умеет, как использовать.
я еще на тесте сервак запустил Debian+accel-ppp(IPOE) и все чётенко через CoA кручу верчу шейпер/доступ
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« Ответ #3 : 18 Марта 2016, 17:58:36 »

Здравствуйте!
Расскажите что умеет, как использовать.
я еще на тесте сервак запустил Debian+accel-ppp(IPOE) и все чётенко через CoA кручу верчу шейпер/доступ
А как доступ через CoA работает?
А можно ваши конфиги accel и модуля.
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #4 : 18 Марта 2016, 18:12:35 »

Здравствуйте!
Расскажите что умеет, как использовать.
я еще на тесте сервак запустил Debian+accel-ppp(IPOE) и все чётенко через CoA кручу верчу шейпер/доступ
А как доступ через CoA работает?
А можно ваши конфиги accel и модуля.
пока что не очень доработано и не проверялось на пользователях, только на пару человек пробовал, потому что сеть местами не управляемая, а гте то ОНУшки
ну модуль нодени запускаеться и отсылает атрибуты из конфига к примеру для запрета доступа клиенту
Цитировать
$coa_connect__state_off = {
    type     => 'coa',
     template => 'Acct-Session-Id={{auth_ses}}, L4-Redirect="1"',
    },
на сервере с ацеелем принимаю и делаю уже что нужно, будь-то сменить ему ИП на гостевой, или же в табличку для редиректа на заглушку.
Повторюсь ето у меня на тесте, допиливаем под свои нужды, толком не проверено, времени нету((
Записан
Warlock
NoDeny
Старожил
*

Карма: 8
Offline Offline

Сообщений: 369


Просмотр профиля
« Ответ #5 : 18 Марта 2016, 21:32:59 »

Блин, в первый раз от Стаса вижу такой развернутый ответ :-)
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« Ответ #6 : 19 Марта 2016, 10:59:34 »

Значит это ему интересно  Улыбающийся
А вообще нужный модуль, я бы сказал изначально необходимый, открывает много возможностей, жаль что поздно так появился.
Записан
elite
Начальник планеты
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1227

In LAN we trust!

358714596
Просмотр профиля
« Ответ #7 : 26 Апреля 2016, 16:47:44 »

Если бы еще саму процедуру radius-авторизации сделали на rlm_perl, чтобы сразу выставляло нужные параметры, то цены бы не было
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #8 : 27 Апреля 2016, 20:41:40 »

Если бы еще саму процедуру radius-авторизации сделали на rlm_perl, чтобы сразу выставляло нужные параметры, то цены бы не было
+
было бы отличненько
Записан
Sis
Старожил
****

Карма: -7
Offline Offline

Сообщений: 370


Просмотр профиля
« Ответ #9 : 29 Апреля 2016, 01:22:07 »

угу и я надумал Radius использовать.
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #10 : 29 Апреля 2016, 08:15:23 »

угу и я надумал Radius использовать.
ну радиус всеравно работает только через sql без rlm_perl
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #11 : 03 Сентября 2016, 13:43:21 »

Если кто использует модуль CoA, поделитесь как дропаете или добавляете в список заблокированных, тех у кого замораживаеться услуга! Подмигивающий
Записан
Warlock
NoDeny
Старожил
*

Карма: 8
Offline Offline

Сообщений: 369


Просмотр профиля
« Ответ #12 : 04 Сентября 2016, 07:33:25 »

Если кто использует модуль CoA, поделитесь как дропаете или добавляете в список заблокированных, тех у кого замораживаеться услуга! Подмигивающий
На каком оборудовании?
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #13 : 04 Сентября 2016, 16:20:08 »

Если кто использует модуль CoA, поделитесь как дропаете или добавляете в список заблокированных, тех у кого замораживаеться услуга! Подмигивающий
На каком оборудовании?
NAS с accel-ipoe.
Проблема в том что просто когда услуга замораживаеться то модуль не выбирает из таблицы Acct-Session-Id={{auth_ses}}.
И естественно не отправляеться L4-redirect.
Когда авторизируеться все верно срабатывает.
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #14 : 06 Сентября 2016, 15:47:23 »

UP
помогите пожалуйста у кого работает
я настраивал все на стенде, но вместо модуля CoA просто отправлял запросы с консоли.
Начал внедрение и пробую сделать через модуль CoA
Модуль при отключении абоненту доступа в биллинге делает следующее:
Цитировать
SELECT uid FROM v_services WHERE tags LIKE '%,inet,%' GROUP BY uid
Строк: 1309. Время выполнения sql: 0.0008 сек

 SELECT u.id, u.balance, u.name, u.state, a.auth_start, a.ip, a.properties FROM ( SELECT INET_NTOA(i.ip) AS ip, '' as properties, UNIX_TIMESTAMP() AS auth_start FROM users u JOIN ip_pool i ON i.uid=u.id WHERE u.lstate=1 UNION ALL SELECT ip, properties, start AS auth_start FROM auth_now ) a JOIN ip_pool i ON INET_ATON(a.ip)=i.ip JOIN users u ON i.uid=u.id WHERE TRUE  AND u.state='on' AND (i.tags LIKE '%,dulovo,%')
Строк: 0. Время выполнения sql: 0.0642 сек

SELECT SQL_BUFFER_RESULT uid, SUM(in1+in2+in3+in4) AS traf_in, SUM(out1+out2+out3+out4) AS traf_out FROM users_trf GROUP BY uid
Строк: 1739. Время выполнения sql: 0.0012 сек

Fw Off uid: 329, ip: 100.64.60.4,100.64.60.4

ip: 100.64.60.4 , auth properies:

  sending:  = 'Acct-Session-Id=, L4-Redirect="2"'
  to:       = '/usr/local/bin/radclient -x 172.22.2.251:3799 coa pass'

radclient:: Expected end of line or comma
radclient: Nothing to send.

ip: 100.64.60.4 , auth properies:

  sending:  = 'Acct-Session-Id=, L4-Redirect="2"'
  to:       = '/usr/local/bin/radclient -x 172.22.2.251:3799 coa pass'

radclient:: Expected end of line or comma
radclient: Nothing to send.
При разрешение доступа все отличненько:
Цитировать
SELECT uid FROM v_services WHERE tags LIKE '%,inet,%' GROUP BY uid
Строк: 1309. Время выполнения sql: 0.0008 сек

 SELECT u.id, u.balance, u.name, u.state, a.auth_start, a.ip, a.properties FROM ( SELECT INET_NTOA(i.ip) AS ip, '' as properties, UNIX_TIMESTAMP() AS auth_start FROM users u JOIN ip_pool i ON i.uid=u.id WHERE u.lstate=1 UNION ALL SELECT ip, properties, start AS auth_start FROM auth_now ) a JOIN ip_pool i ON INET_ATON(a.ip)=i.ip JOIN users u ON i.uid=u.id WHERE TRUE  AND u.state='on' AND (i.tags LIKE '%,dulovo,%')
Строк: 2. Время выполнения sql: 0.0599 сек

Fw On uid: 329, ip: 100.64.60.4,100.64.60.4, вх.скор: 0 КБит/с

ip: 100.64.60.4 , auth properies: mod=dhcp;user=c8600093a224;nas=172.22.2.251;ses=b679f57e1706017b;

  sending:  = 'Acct-Session-Id=b679f57e1706017b, L4-Redirect="0"'
  to:       = '/usr/local/bin/radclient -x 172.22.2.251:3799 coa pass'

Sending CoA-Request of id 106 to 172.22.2.251 port 3799
        Acct-Session-Id = "b679f57e1706017b"
        L4-Redirect = 0

rad_recv: CoA-ACK packet from host 172.22.2.251 port 3799, id=106, length=20
ip: 100.64.60.4 , auth properies: mod=dhcp;user=c8600093a224;nas=172.22.2.251;ses=b679f57e1706017b;

  sending:  = 'Acct-Session-Id=b679f57e1706017b, L4-Redirect="0"'
  to:       = '/usr/local/bin/radclient -x 172.22.2.251:3799 coa pass'

Sending CoA-Request of id 87 to 172.22.2.251 port 3799
        Acct-Session-Id = "b679f57e1706017b"
        L4-Redirect = 0
rad_recv: CoA-ACK packet from host 172.22.2.251 port 3799, id=87, length=20
Посмотрев в коде и попробовал закоментить в noserver.pl строчку где то 67-я по порядку
Цитировать
#$sql_get_auth_usr .= " AND u.state='on'" if !$Allow_off_state;

И в биллинге Заблокирован = Да то модуль отправляет атрибуты.
А вот при замороженной услуге в учетке пользователя Заблокирован=НЕТ и модуль ничего не делает.
Где же я ошибся не пойму(
Сам конфиг модуля CoA:
Цитировать
$coa_connect__state_on = {
    type     => 'coa',
    template => 'Acct-Session-Id={{auth_ses}}, L4-Redirect="0"',
};
$coa_connect__state_off = {
    type     => 'coa',
    template => 'Acct-Session-Id={{auth_ses}}, L4-Redirect="1"',
};
$coa_disconnect =
    {
        type     => 'coa',
        template => 'Acct-Session-Id={{auth_ses}}, L4-Redirect="2"',
    };
Записан
Страниц: [1] 2 3 ... 9
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!