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

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: freeradius 3  (Прочитано 5260 раз)
smollmd
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 6


Просмотр профиля Email
« : 29 Ноября 2017, 22:54:43 »

Добрый вечер всем.
Пробую собственно подружить nodeny 50.32 + freeradius3 + perl 5.24

/usr/local/etc/raddb/sites-enabled/nodeny

Код:
server default {
    listen {
        type = auth
        ipaddr = *
        port = 1812
    }
    listen {
        type = acct
        ipaddr = *
        port = 0
    }
    authorize {
            sql
            pap
    }
    authenticate {
            Auth-Type PAP {
                pap
            }
    }
    preacct {
            acct_unique
            preprocess
    }
    accounting {
            detail
            sql
            exec
    }
    session {
            radutmp
            sql
    }
    post-auth {
            sql
    }
}

/usr/local/etc/raddb/mods-enabled/sql

Код:
sql {
        driver = "rlm_sql_mysql"
        mysql {
                warnings = auto
        }
        server = "localhost"
        port = 3306
        login = "login"
        password = "pass"
        radius_db = "bill"
        authorize_check_query = "call radcheck('%{User-Name}')"
        authorize_reply_query = "call radreply('%{User-Name}')"
        accounting {
            query = "call radupdate('%{User-Name}')"
            type {
                start {
                    query = "call radupdate('%{User-Name}')"
                }
            }
        }
        post-auth {
            query = "call radupdate('%{User-Name}')"
        }
}

Конфиги с соседней темы, но для nodeny+

Почти все работает, правда при отключении абонентом pppoe сессии не отображает в админ интерфейсе. Сессия пропадает по таймауту который где-то в ядре биллинга, и как его хотя б временно уменьшить я не нашел(сейчас порядка 10 мин).

для первого фрирадиуса, на сколько я понимаю использовалсь функция radstop, а именно
accounting_stop_query = "call radstop('%{User-Name}')"

в моем примере ее нету, как не пытался ее прикрутить ничего не получилось...

Может кто-то сталкивался с данной проблемой, или я не так понимаю логику работы)
Буду рад любой помощи.




Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #1 : 30 Ноября 2017, 08:56:54 »

А если в секции accounting > type после секции start  поставить что то типа
Цитировать
stop {
                    query = "call radstop('%{User-Name}')"
        }
Записан
smollmd
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 6


Просмотр профиля Email
« Ответ #2 : 30 Ноября 2017, 10:40:20 »

Так пробовал изначально, не помогло. В дебаге радиуса не вижу попыток выполнять sql запрос, и не могу найти в документации описания Acct-Status-Type = Stop
Записан
ivanmfan
Постоялец
***

Карма: 9
Offline Offline

Сообщений: 131


Просмотр профиля Email
« Ответ #3 : 06 Марта 2018, 09:34:27 »

Так пробовал изначально, не помогло. В дебаге радиуса не вижу попыток выполнять sql запрос, и не могу найти в документации описания Acct-Status-Type = Stop


Если кому нужно рабочий пример для freeradius3
Код:
sql {
    driver = "rlm_sql_mysql"
    mysql {
        warnings = auto
    }
    server = "localhost"
    port = 3306
    login = "login"
    password = "pass"
    radius_db = "db_name"
        authorize_check_query = "call radcheck('%{User-Name}')"
        authorize_reply_query = "call radreply('%{User-Name}', 'accel')"
        accounting {
                reference = "%{tolower:type.%{Acct-Status-Type}.query}"
                type {
                        start {
                                query = "call radupdate('%{User-Name}','%{Framed-IP-Address}','nas=%{NAS-IP-Address}')"
                        }
                        stop {
                                query = "call radstop('%{Framed-IP-Address}')"
                        }
                        interim-update {
                                query = "call radupdate('%{User-Name}','%{Framed-IP-Address}','nas=%{NAS-IP-Address}')"
                        }
                }
        }
        post-auth {
                query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}','nas=%{NAS-IP-Address}')"
        }
}

post-auth можете закоментить в site-enable и тогда не будет лишний раз вызывать radupdate


Сама процедура у меня выглядит так для ipoe
Код:
CREATE PROCEDURE radstop(IN aip VARCHAR(16))
  BEGIN
    DECLARE user_id INT;
    DECLARE start_at INT;
    DECLARE end_at INT;
    DECLARE auth_properties VARCHAR(255);

    SELECT uid, v_ips.start, v_ips.last, properties INTO user_id, start_at, end_at, auth_properties FROM v_ips WHERE ip = aip LIMIT 1;
    DELETE FROM auth_now WHERE ip = aip LIMIT 1;
    IF (start_at AND start_at > 0) THEN
      INSERT INTO auth_log (uid, ip, start, end, properties) VALUES (user_id, INET_ATON(aip), start_at, end_at, IF(auth_properties!='',auth_properties,properties));
    END IF;
  END;

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

Карма: 0
Offline Offline

Сообщений: 26


Просмотр профиля Email
« Ответ #4 : 15 Мая 2019, 19:10:10 »

Можете привести примеры radcheck и radreply?
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

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