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

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

Карма: 1
Offline Offline

Сообщений: 82


Просмотр профиля
« Ответ #15 : 28 Октября 2016, 17:13:43 »

UP
помогите пожалуйста у кого работает


Замени в coa.cfg.pm
template => 'Acct-Session-Id={{auth_ses}}
на
template => 'User-Name={{name}}

В моём случае username = ifname и для меня годится параметр
template => 'NAS-Port-Id={{name}}

а "Acct-Session-Id "
в базе просто не находится это параметр  auth_ses
вот к пример user ON
Код:
mysql> 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';
+----+---------+---------------+-------+------------+------------+-------------------------------------------+
| id | balance | name          | state | auth_start | ip         | properties                                |
+----+---------+---------------+-------+------------+------------+-------------------------------------------+
|  1 |  -32.60 | eth0.3001.202 | on    | 1477660948 | 172.22.0.2 | mod=pppoe;user=0025b35c0899;nas=127.0.0.1 |
+----+---------+---------------+-------+------------+------------+-------------------------------------------+
1 row in set (0.00 sec)

Вот user OFF
Код:
mysql> 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='off';
+----+---------+---------------+-------+------------+------------+-------------------------------------------+
| id | balance | name          | state | auth_start | ip         | properties                                |
+----+---------+---------------+-------+------------+------------+-------------------------------------------+
|  1 |  -32.60 | eth0.3001.202 | off   | 1477660948 | 172.22.0.2 | mod=pppoe;user=0025b35c0899;nas=127.0.0.1 |
+----+---------+---------------+-------+------------+------------+-------------------------------------------+
1 row in set (0.00 sec)

Параметра auth_ses  вообще нет, возможно это тольок с IPOE.
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #16 : 28 Октября 2016, 20:22:19 »

UP
помогите пожалуйста у кого работает


Замени в coa.cfg.pm
template => 'Acct-Session-Id={{auth_ses}}
на
template => 'User-Name={{name}}

В моём случае username = ifname и для меня годится параметр
template => 'NAS-Port-Id={{name}}

а "Acct-Session-Id "
в базе просто не находится это параметр  auth_ses
вот к пример user ON
Код:
mysql> 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';
+----+---------+---------------+-------+------------+------------+-------------------------------------------+
| id | balance | name          | state | auth_start | ip         | properties                                |
+----+---------+---------------+-------+------------+------------+-------------------------------------------+
|  1 |  -32.60 | eth0.3001.202 | on    | 1477660948 | 172.22.0.2 | mod=pppoe;user=0025b35c0899;nas=127.0.0.1 |
+----+---------+---------------+-------+------------+------------+-------------------------------------------+
1 row in set (0.00 sec)

Вот user OFF
Код:
mysql> 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='off';
+----+---------+---------------+-------+------------+------------+-------------------------------------------+
| id | balance | name          | state | auth_start | ip         | properties                                |
+----+---------+---------------+-------+------------+------------+-------------------------------------------+
|  1 |  -32.60 | eth0.3001.202 | off   | 1477660948 | 172.22.0.2 | mod=pppoe;user=0025b35c0899;nas=127.0.0.1 |
+----+---------+---------------+-------+------------+------------+-------------------------------------------+
1 row in set (0.00 sec)

Параметра auth_ses  вообще нет, возможно это тольок с IPOE.
Я для себя тогда решил что буду создавать интерфейсы radius атрибутом при аторизации. ipoeX где X id учетки абонента(по имени интерйфейса прибиваю или изменяю параметры "сессии").
А весть процес авторизации написал на rlm_perl, так передаю абоненту любые параметры сразу при авторизации как и в PPP  (кривоватенько но работает уже скоро два месяца в боевом режиме).
А Acct-Session-Id должен быть и при PPP, и я его тоже пишу в базу из rlm_perl.

За ответ спасибо, хотя и довольно позно)


Записан
sever
Пользователь
**

Карма: 1
Offline Offline

Сообщений: 82


Просмотр профиля
« Ответ #17 : 31 Октября 2016, 15:03:41 »

Из моих тестов модуль до конца ещё не допилян.
Если у кого-то другие результаты - поделитесь.

1. Берём состояние COA модуль не запущен, состояние клиента меняем с ON на OFF, запускаем COA модуль
    Клиент так и не заблокируется. Хотя должен.
2. Берём состояние COA модуль не запущен, состояние клиента меняем с OFF на ON, запускаем COA модуль
    Клиент разблокируется нормально.

При выключении абонента срабатывает параметр $coa_disconnect, а не $coa_connect__state_off
Параметры $coa_connect__state_off  не передаются вообще, пока временно блокирую дисконнектом.

Я предполагаю что п.1 и п.2 реигируют именно так, потому что, выборка из кода ниже идёт по параметру u.state='on'.

Код:
 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'
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #18 : 31 Октября 2016, 15:52:31 »

В документации четко прописано:

Цитировать
В $coa_connect__state_off атрибуты, которые посылаются когда авторизуется абонент, которому запрещен доступ в интернет
В $coa_disconnect атрибуты, которые посылаются когда абонент отключается (перестает быть авторизованным)

Абонент АВТОРИЗОВАН, ДОСТУП ВЫКЛЮЧЕН - $coa_connect__state_off
Абонент НЕ авторизован, ДОСТУП похую - $coa_disconnect
Записан
sever
Пользователь
**

Карма: 1
Offline Offline

Сообщений: 82


Просмотр профиля
« Ответ #19 : 31 Октября 2016, 18:57:48 »

В документации четко прописано:

Цитировать
В $coa_connect__state_off атрибуты, которые посылаются когда авторизуется абонент, которому запрещен доступ в интернет
В $coa_disconnect атрибуты, которые посылаются когда абонент отключается (перестает быть авторизованным)

Абонент АВТОРИЗОВАН, ДОСТУП ВЫКЛЮЧЕН - $coa_connect__state_off
Абонент НЕ авторизован, ДОСТУП похую - $coa_disconnect

Описано да, но по факту параметры функции $coa_connect__state_off  не передаются.
Вместо него передаётся $coa_disconnect,
Допустим на пальцах:

$coa_connect__state_on = {L4-Redirect=0};
$coa_connect__state_off = {L4-Redirect=1};
$coa_disconnect = {L4-Redirect=2};

Если Абонент авторизован и доступ изменить на запрещён, должна сработать $coa_connect__state_off
Так вот вместо этого срабатывает $coa_disconnect и передаётся L4-Redirect=2

Доступ могу дать. Увидишь вживую.
« Последнее редактирование: 31 Октября 2016, 19:29:29 от sever » Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #20 : 31 Октября 2016, 23:01:12 »

Ты выполнял sql, что дал Pa4ka?

Например, в поле properties записано: mod=pppoe;user=0025b35c0899;nas=127.0.0.1

В шаблоне, ты можешь обратиться к этим данным так:
{{auth_mod}}
{{auth_user}}
{{auth_nas}}

Если ты хочешь в coa пакет передать какие-либо другие данные, связанные с авторизацией, тебе нужно это инфу записать в поле properties таблицы auth_now. Это надо изменять mysql-процедуры и/или радиус настройки. Например, процедуру radupdate и/или accounting_update_query и postauth_query в радиусе
Записан
sever
Пользователь
**

Карма: 1
Offline Offline

Сообщений: 82


Просмотр профиля
« Ответ #21 : 01 Ноября 2016, 11:36:41 »

Это надо изменять mysql-процедуры и/или радиус настройки. Например, процедуру radupdate и/или accounting_update_query и postauth_query в радиусе

Хорошо на данный момент в sql.conf (добавлен параметр {Acct-Session-Id})

Код:
postauth_query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\
            'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')"
accounting_update_query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
            'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')"

В Mysql параметры сессии в properties мы видим, добавился ses
Код:
mysql> mysql>  select * from auth_now;
+-------+------------+------------+------------+----------------------------------------------------------------+
| id    | ip         | start      | last       | properties                                                     |
+-------+------------+------------+------------+----------------------------------------------------------------+
| 13179 | 172.22.0.2 | 1477992246 | 1477992766 | mod=pppoe;user=0025b35c0899;nas=127.0.0.1;ses=b8585c1ab2ed0d3b |
+-------+------------+------------+------------+----------------------------------------------------------------+
1 row in set (0.00 sec)

1. Переключаю авторизированного клиента из status OFF => ON (отрабатывает на 100% все ок..)
Код:
ip: 172.22.0.2 , auth properies: mod=pppoe;user=0025b35c0899;nas=127.0.0.1;ses=b8585c1ab2ed0d3b

  sending:  = 'Acct-Session-Id=b8585c1ab2ed0d3b, PPPD-Upstream-Speed-Limit=21504, PPPD-Downstream-Speed-Limit=21504,L4-Redirect=0'
  to:       = '/usr/bin/radclient -x 127.0.0.1:3799 coa hardpass5'

Sending CoA-Request of id 171 to 127.0.0.1 port 3799
Acct-Session-Id = "b8585c1ab2ed0d3b"
PPPD-Upstream-Speed-Limit = 21504
PPPD-Downstream-Speed-Limit = 21504
L4-Redirect = 0
rad_recv: CoA-NAK packet from host 127.0.0.1 port 3799, id=171, length=20

2. Переключаю  авторизированного клиента из status ON => status OFF (передать должно L4-Redirect=1)
Код:
Fw Off uid: 1, ip: 172.22.0.2

ip: 172.22.0.2 , auth properies:

  sending:  = 'Acct-Session-Id=, PPPD-Upstream-Speed-Limit=2048, PPPD-Downstream-Speed-Limit=2048, L4-Redirect=2'
  to:       = '/usr/bin/radclient -x 127.0.0.1:3799 coa hardpass5'

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


Вместо OFF - срабатывает disconnect, данные auth properies: не показывает.

Вот сам coa cfg

Код:
$coa_connect__state_on = {
    type     => 'coa',
    template => 'Acct-Session-Id={{auth_ses}}, PPPD-Upstream-Speed-Limit={{speed_in1_kb}}, PPPD-Downstream-Speed-Limit={{speed_out1_kb}},L4-Redirect=0',
};

$coa_connect__state_off = {
    type     => 'coa',
    template => 'Acct-Session-Id={{auth_ses}}, PPPD-Upstream-Speed-Limit={{speed_in1_kb}}, PPPD-Downstream-Speed-Limit={{speed_out1_kb}},L4-Redirect=1',
};

$coa_disconnect = {
    type     => 'coa',
    template => 'Acct-Session-Id={{auth_ses}}, PPPD-Upstream-Speed-Limit=2048, PPPD-Downstream-Speed-Limit=2048, L4-Redirect=2',
};

Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #22 : 01 Ноября 2016, 13:46:14 »

Я кажется понял в чем бок. У  noserver.pl есть дополнительные ключи, в частности:

Цитировать
    -a      : reconnect a user after his auth params were changed
    -i      : allow access if a user is blocked
Первый нужен чтобы noserver "передергивал" фаервол (ну или то, чем управляет) когда изменились параметры авторизации. Второй нужен чтоб управление работало и при состоянии когда юзер выключен. По идее оба флага нужно установить. Уточни у Pa4ka 
Записан
Warlock
NoDeny
Старожил
*

Карма: 8
Offline Offline

Сообщений: 369


Просмотр профиля
« Ответ #23 : 01 Ноября 2016, 13:51:24 »

я запускаю так:
Код:
/usr/bin/perl /usr/local/nodeny/noserver.pl -a -i -g=_coa.cfg.pm -d &
Записан
sever
Пользователь
**

Карма: 1
Offline Offline

Сообщений: 82


Просмотр профиля
« Ответ #24 : 01 Ноября 2016, 13:57:58 »

О так это совем другое дело.
С ключами работает!!!
Спасибо.
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #25 : 01 Ноября 2016, 16:01:15 »

Я до сегодня из самого noserver.pl делал что бы выдирались все пользователи изменял где было state='on'.)
Проблема была только если услуга замораживалась, сессию убивал coa_disconnect.
С ключами тоже норма)
Записан
NodenY45
NoDeny
Старожил
*

Карма: 2
Offline Offline

Сообщений: 365


Просмотр профиля
« Ответ #26 : 02 Ноября 2016, 22:09:07 »

Я до сегодня из самого noserver.pl делал что бы выдирались все пользователи изменял где было state='on'.)
Проблема была только если услуга замораживалась, сессию убивал coa_disconnect.
С ключами тоже норма)

А с какими радиус процедурами? Выложите вариант как у вас настроено. Спасибо.
Записан
NodenY45
NoDeny
Старожил
*

Карма: 2
Offline Offline

Сообщений: 365


Просмотр профиля
« Ответ #27 : 06 Ноября 2016, 00:02:33 »

Хорошо, такой вопрос, если клиенту меняется тарифный план с другой скоростью, как скоро у него сменится скорость? или надо руками доступ отключать-включать?
тоесть согласно этому ключу скорость применится сразу?
Код:
-a      : reconnect a user after his auth params were changed
получается сервис деактивируется и снова активируется с новой скоростью?
Записан
Warlock
NoDeny
Старожил
*

Карма: 8
Offline Offline

Сообщений: 369


Просмотр профиля
« Ответ #28 : 06 Ноября 2016, 08:37:37 »

Деактивируется и активируется с новой скоростью в течении очень короткого промежутка времени.
Записан
dimonous
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 34


Просмотр профиля
« Ответ #29 : 14 Ноября 2016, 10:54:23 »

Добрый день, коллеги.

Просьба помочь советом.

Использую модуль таким образом:
Код:
$coa_disconnect = {
        type     => 'disconnect',
        template => 'Framed-IP-Address={{ip}}',
    };

С той стороны - Accel-ppp. Проблема же в том, что в момент автопродления услуги inet_unlim, длительностью 24 часа, абоненты жалуется что роутер не может получить адрес в течение нескольких минут. Поскольку такое проявляется у единиц (но у самых назойливых, как всегда), то возможно связано с некорректной работой роутера абона с "coa". В момент смены услуги баланс положительный. Поэтому возникла идея пропатчить noserver.pl, чтобы он не посылал при автопродлении команду "fw_user_off" если баланс остается положительным. Чтобы посылался дисконнект на аксель только в тех случая когда абонента действительно нужно отключить.
Насколько верен такой путь и кто как борется иначе с описанной проблемой?
Записан
Страниц: 1 [2] 3 4 ... 9
  Печать  
 
Перейти в:  

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