sever
Пользователь
Карма: 1
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
|
|
« Ответ #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
Сообщений: 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
|
|
« Ответ #18 : 31 Октября 2016, 15:52:31 » |
|
В документации четко прописано: В $coa_connect__state_off атрибуты, которые посылаются когда авторизуется абонент, которому запрещен доступ в интернет В $coa_disconnect атрибуты, которые посылаются когда абонент отключается (перестает быть авторизованным) Абонент АВТОРИЗОВАН, ДОСТУП ВЫКЛЮЧЕН - $coa_connect__state_off Абонент НЕ авторизован, ДОСТУП похую - $coa_disconnect
|
|
|
Записан
|
|
|
|
sever
Пользователь
Карма: 1
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
|
|
« Ответ #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
Сообщений: 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
|
|
« Ответ #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
Сообщений: 367
|
|
« Ответ #23 : 01 Ноября 2016, 13:51:24 » |
|
я запускаю так: /usr/bin/perl /usr/local/nodeny/noserver.pl -a -i -g=_coa.cfg.pm -d &
|
|
|
Записан
|
|
|
|
sever
Пользователь
Карма: 1
Offline
Сообщений: 82
|
|
« Ответ #24 : 01 Ноября 2016, 13:57:58 » |
|
О так это совем другое дело. С ключами работает!!! Спасибо.
|
|
|
Записан
|
|
|
|
Pa4ka
|
|
« Ответ #25 : 01 Ноября 2016, 16:01:15 » |
|
Я до сегодня из самого noserver.pl делал что бы выдирались все пользователи изменял где было state='on'.) Проблема была только если услуга замораживалась, сессию убивал coa_disconnect. С ключами тоже норма)
|
|
|
Записан
|
|
|
|
NodenY45
NoDeny
Старожил
Карма: 2
Offline
Сообщений: 365
|
|
« Ответ #26 : 02 Ноября 2016, 22:09:07 » |
|
Я до сегодня из самого noserver.pl делал что бы выдирались все пользователи изменял где было state='on'.) Проблема была только если услуга замораживалась, сессию убивал coa_disconnect. С ключами тоже норма)
А с какими радиус процедурами? Выложите вариант как у вас настроено. Спасибо.
|
|
|
Записан
|
|
|
|
NodenY45
NoDeny
Старожил
Карма: 2
Offline
Сообщений: 365
|
|
« Ответ #27 : 06 Ноября 2016, 00:02:33 » |
|
Хорошо, такой вопрос, если клиенту меняется тарифный план с другой скоростью, как скоро у него сменится скорость? или надо руками доступ отключать-включать? тоесть согласно этому ключу скорость применится сразу? -a : reconnect a user after his auth params were changed получается сервис деактивируется и снова активируется с новой скоростью?
|
|
|
Записан
|
|
|
|
Warlock
NoDeny
Старожил
Карма: 8
Offline
Сообщений: 367
|
|
« Ответ #28 : 06 Ноября 2016, 08:37:37 » |
|
Деактивируется и активируется с новой скоростью в течении очень короткого промежутка времени.
|
|
|
Записан
|
|
|
|
dimonous
Пользователь
Карма: 0
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" если баланс остается положительным. Чтобы посылался дисконнект на аксель только в тех случая когда абонента действительно нужно отключить. Насколько верен такой путь и кто как борется иначе с описанной проблемой?
|
|
|
Записан
|
|
|
|
|