Просмотр сообщений
|
Страниц: [1]
|
3
|
Главная категория / Nodeny 50 / Re: Подсчет траффика, откуда выборка из базы
|
: 14 Февраля 2011, 10:31:08
|
Есть ещё таблица usession, где собирается статистика по коннектам. Ну и понятное дело модифицирован под неё Sseance.pl
Прошу прощения ещё раз за свой "индийский код", конечно правильно было бы отдавать radius отлупом (reject), и все такое, но строгал на коленке, в продакшн не запускал.
|
|
|
4
|
Главная категория / Nodeny 50 / Re: Подсчет траффика, откуда выборка из базы
|
: 14 Февраля 2011, 10:28:09
|
Клиенту назначается адрес из фейковой сети (таблица users поле ip) Дальше проверка баланса в radreply:
DROP PROCEDURE IF EXISTS `radreply`; DELIMITER $$ CREATE PROCEDURE `radreply` (IN login VARCHAR(64), IN mac VARCHAR(18), IN nas_ip VARCHAR(16)) BEGIN DECLARE usr_id INT; DECLARE usr_ip VARCHAR(16); DECLARE rate_limit INT; DECLARE rate_limit_out INT; DECLARE normal_burst INT; DECLARE normal_burst_out INT; DECLARE extended_burst INT; DECLARE extended_burst_out INT; DECLARE balance_ch INT; DECLARE lmbalance INT;
SELECT id,balance,limit_balance INTO usr_id,balance_ch,lmbalance FROM users WHERE name=login; SELECT plans2.speed,plans2.speed_out INTO rate_limit,rate_limit_out from users,plans2 where users.name=login and users.paket=plans2.id ;
IF balance_ch < lmbalance THEN SELECT ip INTO usr_ip FROM users WHERE name=login; END IF;
INSERT into dblogin (mid,act,time) VALUES (usr_id,47,unix_timestamp()); INSERT INTO usession (login,ip,mac,nas_ip,status) VALUES (login,ip,mac,nas_ip,'START'); SET rate_limit=rate_limit*1024*1024; SET rate_limit_out=rate_limit_out*1024*1024; SET normal_burst=ROUND(rate_limit*3/16); SET normal_burst_out=ROUND(rate_limit_out*3/16); SET extended_burst=2*normal_burst; SET extended_burst_out=2*normal_burst_out;
SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','='; SELECT NULL,login,'Simultaneous-Use','1',':='; IF (rate_limit>0) THEN SELECT usr_id as id,login,"mpd-limit" as Attribute,concat("out#1=all rate-limit ",rate_limit," ",normal_burst," ",extended_burst) as Value,"+=" as op; END IF; IF (rate_limit_out>0) THEN SELECT usr_id as id,login,"mpd-limit" as Attribute,concat("in#1=all rate-limit ",rate_limit_out," ",normal_burst_out," ",extended_burst_out) as Value,"+=" as op; END IF; END$$ DELIMITER;
Соответственно РРРоЕ автризация доступна всегда, просто заблоченым юзерам выдается не маршрутизируемые айпи, с переадресацией на страницу, где сообщается об отсутствии денег или нарушении (спам,флуд,учасник ботнент) Опять же, я понимаю, что корифеи програмерства меня сейчас заплюют.
Ах да, есть ещё внешний скрипт, чекает баланс каждые 5 минут по крону.
|
|
|
5
|
Главная категория / Nodeny 50 / Re: Подсчет траффика, откуда выборка из базы
|
: 14 Февраля 2011, 10:03:58
|
На ваше обсуждение выложу тут свои наработки в плане подсчета трафика. Входящий и исходящий направления подсчитываются с помощью radius аккаунтинга, с помощью процедур radupdate и radstop.
accounting_update_query = "... ,'%{Acct-Input-Packets}','%{Acct-Output-Packets}')"
Выглядит примерно это так:
1. Создается временная таблица, содержащая поточные даные аккаунтинга по каждому клиенту
CREATE TABLE temp_trf ( login VARCHAR (64), in_o BIGINT, out_o BIGINT, PRIMARY KEY (login) );
2. Модифицируется процедура radupdate
DROP PROCEDURE IF EXISTS `radupdate`; DELIMITER $$ CREATE PROCEDURE `radupdate` (IN login VARCHAR(64), IN stime VARCHAR (12), IN iccts VARCHAR(12), IN occts VARCHAR (12), ip_h VARCHAR(12)) BEGIN INSERT into dblogin (mid,act,time) VALUES ((SELECT id FROM users WHERE name=login LIMIT 1),47,unix_timestamp()); INSERT INTO temp_trf VALUES (login,iccts,occts) ON DUPLICATE KEY UPDATE in_o=iccts, out_o=occts; END$$ DELIMITER ;
3. Внедряется тригер, который и обрабатывает расчеты
DROP TRIGGER IF EXISTS `update_trf`; DELIMITER ;; CREATE TRIGGER `update_trf` AFTER UPDATE ON `temp_trf` FOR EACH ROW BEGIN UPDATE users_trf SET in1 = `in1` + (NEW.in_o - OLD.in_o), out1 = `out1` + (NEW.out_o - OLD.out_o) WHERE uid = (SELECT id FROM users WHERE name= OLD.login LIMIT 1); END;;
Сделано топорно, готов выслушать ваши идеи Единственное что меня смущает - производительность тригеров.
Косяки: - если будет сбой в работе связки NAS(RADIUS+DB+MPD) сервера последняя сессия не будет учтена. - нагрузка???
|
|
|
7
|
Главная категория / Nodeny 50 / Подсчет траффика, откуда выборка из базы
|
: 27 Декабря 2010, 18:19:22
|
Доброго времени суток. Волей судеб была необходимость сделать динамическую выдачу внешних адресов. Сделано. Но с недавнего времени возникла необходимость считать этот самы трафик и подсовывать клиентам. С помощью процедур заполняются x-таблицы, тоесть в разделе Траффик кабенета юзера трафик наличиствует. Но, на главной пользовательской странице (модуль Smain.pl) трафик все-равно по нулям. В связи с этим хотелось бы узнать, откуда берутся выборки для формирования значений подведеных красным. Биллинг официален и куплен за кровные.
|
|
|
8
|
Главная категория / Курилка / Дроп тунелей pppoe через 5-10сек после авторизации
|
: 26 Октября 2010, 15:34:49
|
При настройке сателлита столкнулся с проблемой дропа тунелей pppoe (FreeBSD 8.1/ mpd5.5 freeradius 2.1.10) В логах radius.log
Ready to process requests. rad_recv: Accounting-Request packet from host 172.16.0.13 port 45947, id=157, length=279 Received Accounting-Request packet from client 172.16.0.13 with invalid signature! (Shared secret is incorrect.) Dropping packet without response.
Но априори ключи правильные, в файле clients.conf и mpd.conf одинаковые И ещё более странно то что mpd и nodeny access пакетами обменялись, дело только за аккаунтингом осталось.
|
|
|
9
|
Главная категория / Курилка / Re: Вопрос по mpd/pppoe
|
: 26 Октября 2010, 10:51:57
|
1. У меня 8.1, где проблема с маршрутизацией решена. 2. Проблема явно с неправильно указаными ключами. Но вот только где эти ключи указать для Accounting-Request'ов ? Ведь клиент автоизацию проходит, а аккаунт пакеты сервером не передаются из-за incorrect ключа.
|
|
|
10
|
Главная категория / Курилка / Re: Вопрос по mpd/pppoe
|
: 26 Октября 2010, 10:35:12
|
Аналогичная проблема с дропом тунелей pppoe (FreeBSD 8.1/ mpd5.5) В логах radius.log
Ready to process requests. rad_recv: Accounting-Request packet from host 172.16.0.13 port 45947, id=157, length=279 Received Accounting-Request packet from client 172.16.0.13 with invalid signature! (Shared secret is incorrect.) Dropping packet without response.
Но априори ключи правильные, в файле clients.conf и mpd.conf одинаковые
|
|
|
11
|
Главная категория / Nodeny 50 / Re: ng_car
|
: 16 Апреля 2010, 21:55:50
|
Копайте в направлении CoA, через radclient можно динамически менять полосу. Схема уже накатаная и используется.
|
|
|
|