Биллинговая система Nodeny
24 Ноября 2024, 22:44:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
  Начало Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1] 2
1  Главная категория / Модули NodenyPlus / Re: Микротик : 27 Июня 2021, 12:44:08
все работает, только аккаунтинг видимо не производится.
Гадать можно сколько угодно, тут нужно чтобы ты привел свой файл sql.conf и процедуру radupdate

sql {
        driver = "rlm_sql_mysql"
        mysql {
                warnings = auto
        }
        server = "localhost"
        port = 3306
        login = "nodeny"      # користувач бази данних Нодені
        password = "Nod+SQL#1"   # пароль до бази данних Нодені
        radius_db = "nodeny"   # база Нодені
        authorize_check_query = "call radcheck('%{User-Name}')"
        authorize_reply_query = "call radreply('%{User-Name}')"

        accounting {
            query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
       'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}','%{Acct-Session-Id}',\
      (%{%{Acct-Input-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Input-Octets}:-0},\
      (%{%{Acct-Output-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Output-Octets}:-0})"
            type {
                start {
                    query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
      'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}','%{Acct-Session-Id}',\
      (%{%{Acct-Input-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Input-Octets}:-0},\
      (%{%{Acct-Output-Gigawords}:-0} * POWER(2, 32)) + %{%{Acct-Output-Octets}:-0})"
                }
            }
        }
}

CREATE PROCEDURE `radupdate`(IN login VARCHAR(64), IN ip VARCHAR(16),
    IN properties VARCHAR(255), IN ses VARCHAR(32), IN trafin BIGINT(20), IN trafout BIGINT(20))
BEGIN
    DECLARE usr_id INT;
    DECLARE usr_ip VARCHAR(15) DEFAULT NULL;
    DECLARE t_in BIGINT;
    DECLARE t_out BIGINT;
    SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1;
    SELECT get_ip(usr_id) INTO usr_ip;
    CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':','')));
    SELECT trafin - IFNULL((SELECT traf_in FROM ses_traf WHERE ses_id=ses LIMIT 1),0) INTO t_in;
    UPDATE users_trf SET in1=in1 + t_in WHERE uid=usr_id;
    SELECT trafout - IFNULL((SELECT traf_out FROM ses_traf WHERE ses_id=ses LIMIT 1),0) INTO t_out;
    UPDATE users_trf SET out1=out1 + t_out WHERE uid=usr_id;
    INSERT INTO ses_traf SET ses_id=ses, traf_in=trafin, traf_out=trafout, time=UNIX_TIMESTAMP()
           ON DUPLICATE KEY UPDATE traf_in=trafin, traf_out=trafout, time=UNIX_TIMESTAMP();
    SET @s = CONCAT('INSERT INTO X', YEAR(NOW()), '_', MONTH(NOW()), '_', DAY(NOW()), ' VALUES(?,?,?,?,?,?)');
    PREPARE stmt1 FROM @s;
    SET @iface = 0;
    SET @cls = 1;
    SET @ts = CEIL(UNIX_TIMESTAMP() / 60) * 60;
    SET @usr_id = usr_id;
    SET @t_in = t_in;
    SET @t_out = t_out;
    EXECUTE stmt1 USING @usr_id, @iface, @ts, @cls, @t_in, @t_out;
    DEALLOCATE PREPARE stmt1;
END$$
2  Главная категория / Модули NodenyPlus / Re: Микротик : 27 Июня 2021, 08:46:07

Может проблема не в этой процедуре а в radupdate? Тем более если ошибок больше одной на одно соединение.
да выяснить все просто, нужно запустить радиус в режиме дебага и выловить где именно ошибка. В дебаг радиус на фре запускается командой radiusd -X


Проаналізував ще раз детальніше radupdate і от що я там найшов

UPDATE users_trf SET in1=in1 + t_in WHERE uid=usr_id;

Цей uid є ключем в таблиці users_trf а от хто його туди вставляє покищо загадка
CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':',''))); немає вставки в таблицю users_trf тільки в auth_now.

Можливо тому сипить помилки але хтось їх туди пише?

Чи може це бути зв'язано з тим що абонів я набив вручну декілька і вони ніхто ще авторизувалися ніразу тільки один з яким я проводжу експерименти?

Коли запустив радіус режимі дебаг він дав помилку що uid не може бути ноль але ще ніхто не підключався після авторизаціїї все працює без помилок (процедуру радреплей я тимчасово замінив на стокову без запису макадресів).

Зловив - цю помилку дає всежтаки radupdate але чому, сесія авторизована все ок, чи може не встигає відповісти радіуссервер або база мускула але нагрузки 0?
3  Главная категория / Модули NodenyPlus / Re: Микротик : 26 Июня 2021, 20:18:57
Да ответ прост. Не надо путать мягкое с теплым.
Ошибки возникают от неправильного логина-пароля и сессия сбрасывается и идет запись в лог. Это никак не связано с нормальными подключениями )
Если речь идет о микротике как о брасе - так зайди в лог микротика и посмотри сколько там ебанатов ломятся и откидывается.


Cell я зібрав локальний стенд, сервер прямо підключений до мікротіка до мікротіка підключив бук, логінюся під ПППОЕ і вуаля в лог файл помилка. Поідеї туди ніхто не мав би ломитися лишній їх там небагато за одне пієднання шук 3 замітив підряд, може мікротік не встигає відповісти чи що. Чи може взагалі заби на цю помилку адже маки пишуться в базу добре а лог час відчасу стирати.
4  Главная категория / Модули NodenyPlus / Re: Микротик : 25 Июня 2021, 18:40:49
Это id  из таблицы users оказывается. И в каком это случае этот айди будет никакой? Правильно, когда данный запрос вернет пустой ответ, т.е. не найдет никого с name=login
Вот в этот момент и возникает ошибка.
Вопросы есть?

Це я зрозумів але наскільки я розумію коли абон отримав PPPOE сесію то для нього існує пара name=login а id є ключем і не може бути нуль. Тому цей запрос повинен завжди давати правильну відповідь чи в чомусь знову помиляюсь?

Першим відправляється radcheck, якщо абонент існує тоді дається добро на відкриття сесії, потім  radreply для перевірки чи абонент ще активний, radupdate відправляється кожні 50 сек.
5  Главная категория / Модули NodenyPlus / Re: Микротик : 24 Июня 2021, 20:59:39
Всім Привіт. Не можу розібрати з процедурою Мускула, вроді все добре навіть працює але просто засерає лог радіуса помилками? І так:
radius.log
...sql.... Error 1048 (Column 'uid' cannot be null):23000
Їх там тьма.
Сама процедура
DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$
CREATE PROCEDURE `radreply`(IN login VARCHAR(64), IN usr_mac VARCHAR(64))
BEGIN
  DECLARE usr_id INT;
  DECLARE usr_ip VARCHAR(15) DEFAULT NULL;
 
  SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1;
  SELECT get_ip(usr_id) INTO usr_ip;
 
  SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';
  SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';
  SELECT NULL,login,'Framed-Protocol','PPP','=';

  INSERT INTO mac_uid SET mac= REPLACE(usr_mac, ':',''),
                            uid=usr_id, device_mac='', device_port='0', ip=INET_ATON(usr_ip), time=UNIX_TIMESTAMP()
                ON DUPLICATE KEY UPDATE
                            uid=usr_id, device_mac='', device_port='0', ip=INET_ATON(usr_ip), time=UNIX_TIMESTAMP();
END$$
DELIMITER ;

Вона записує в базу маки абонентів, але чому помилка не можу зрозуміти і ще одне замітив, що ІП має дивний формат в базі 3232236847
6  Главная категория / Модули NodenyPlus / Re: Микротик : 14 Марта 2021, 21:22:10
Сорі. Розібрався (сам дурак) все працює.
7  Главная категория / Модули NodenyPlus / Re: Микротик : 14 Марта 2021, 20:49:30
Народ привіт. У когось є проблеми з авторизацією по АПІ з мікротіком чи тільки у мене (Нодені плюс), просто обновив мікротік до версії 6.48.1
8  Главная категория / Nodeny Plus / Re: Сбор трафика через Radius : 22 Ноября 2020, 15:54:56
Народ глянув лог файл радіуса а там:
ERROR: rlm_sql_mysql : ERROR 1048 (Column 'uid' cannot be null):23000
помилка пишеться з частотою до 30 секунд, таке враження що це період акаунтінгу

Перевірив процедури мускула вроді все добре, все працює клієнти отримують інтернет, трафік отримую (деколи пише про помилки при виводі на графік)
База зараз вся не задіяна працює тільки частина клієнтів решта на іншому обладнанні ще не переведені можливо це причина?
9  Главная категория / Модули NodenyPlus / Re: Микротик : 22 Ноября 2020, 15:21:40
Народ всім привіт. Хто може допомогти в іформації по наступному:
server (nodeny+ radius) по локалці - nas mikrotik все працює
Хочу:
server (nodene+ radius) по локалці - nas mikrotik + nas 2 mikritik (інший провайдер)
добавляю в радіус ще одного клієнта
запускаю noserver.pl з новим конфігом 2 мікротіка
Результат:
модуль мікротіка не логіниться на 2 мікротіку запроси до радіуса не йдуть від 2 мікротіка
в першому мікротіку dst-nat udp + порти 8728,8729 + маскародінг IP сервера
Що я ще упустив чи взагалі неправильно зробив.
Можливо треба прописати статичні роути для 2 мікротіка і сервера? Пробував але не впевнений що правильноб конкретної інфи по статичним роутам не знайшо і не повністю розібрався. Будьласка ткніть носом.
10  Главная категория / Модули NodenyPlus / Re: Микротик : 15 Января 2020, 21:32:34
В мене все Ок
11  Главная категория / Модули NodenyPlus / Re: Микротик : 12 Января 2020, 19:17:30
Тоже не працювала авторизація по АПІ. Але зробив такі зміни по рекомендації Ефенді
 Файл create.noserver.hw_mikrotik

$m->{sock}->blocking(0);

    # my $reply = $m->hw_dialog('/login') or return 0; так було
   my $reply = $m->hw_dialog('/login','=name='.$m->{user},'=password='.$m->{pass}) or return 0;    # так порекомендували
    return $reply->{'!done'};

Потім по звичному алгоритму - перекомпілювати модулі, перезапустити.
12  Главная категория / Nodeny Plus / Re: Ошибка при создании учетки : 30 Апреля 2019, 12:20:06
Все Ок, розібрався. Дубляж логіна мною створеного та автоматичного при створені абонента.
13  Главная категория / Nodeny Plus / Re: Ошибка при создании учетки : 30 Апреля 2019, 12:04:08
Під час заповнення бази, виникла помилка: Виникнула тимчасова помилка. Спробуйте повторити запит.
В дебаг:
Duplicate entry '213' for key 'name'

{
  'param' => [
    '213',
    21
  ],
  'sql' => 'UPDATE users SET name=? WHERE id=? LIMIT 1'
};
 
 UPDATE users SET name='213' WHERE id='21' LIMIT 1
14  Главная категория / Nodeny Plus / Re: Сбор трафика через Radius : 24 Апреля 2019, 12:00:39
Всім дуже дякую. Все працює.
15  Главная категория / Nodeny Plus / Re: Сбор трафика через Radius : 23 Апреля 2019, 08:01:52
Всім доброго дня. Радіус поборов повною перестановкою Фряхи. Підкажіть хтось де можна почитати про синтаксис запросів мускула, які прописані /usr/local/etc/raddb/mods-enabled/sql, цікавить акаунтінг. Хочу зробити підрахунок вихідного трафіку, а тупо добавити ще один параметер не вийшло, радіус пише, що неправильний синтаксис і вказує останній запис з реальними данними які передав мікротік.
Страниц: [1] 2
Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!