Страница 1 из 1
Radius и "зависшие сесии"
Добавлено: 2008-10-15 13:46:26
savio
стоит freeradius+mpd4+mysql
пишу под себя что-то вроде билинга. все отлично работает.
для просмота активных сесий vpn-клиентов. делаю выборку с таблицы radacct.
если поиле AcctStopTime='0000-00-00 00:00:00' то сесия активна
но возникает проблема, если рестартануть mpd. некоторые сесии не закрываються....
возникает несколько записей с одним и тем же логином и AcctStopTime='0000-00-00 00:00:00'
через конфиг эту проблемк решить можно. потомукак ничего нормального не нашел
может кто-то сталкивался?
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-15 14:21:28
schizoid
у мну тоже самое. забил. не так часто у мну мпд рестартится
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-15 14:25:59
savio
у меня тоже. но все же....
я уже даже написал скриптец на пхп, который убивает ненужные сесии.
Код: Выделить всё
# удаляем зависшие сесии в БД(посре рестарта mpd не удаляеться почемуто...)
$query="select max(RadAcctId)as mymax,count(username) as mycount,username from radius.radacct where AcctStopTime='0000-00-00 00:00:00' group by username";
$res=mysql_query($query);
while ($row=mysql_fetch_assoc($res))
{
if ($row['mycount']>1)
{
# удаляем зависшие сессии
$query="delete from radius.radacct where username='".$row['username']."' and RadAcctId<>".$row['mymax']." and AcctStopTime='0000-00-00 00:00:00'";
mysql_query($query);
}
}
теперь понял что так не пайдет, потому как трафик считаю радиусом, и удаление сесий внесет неточность...
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-15 14:31:26
savio
schizoid писал(а):у мну тоже самое. забил. не так часто у мну мпд рестартится
кстати, а у тебя какой фрирадиус? v1 или v2? у меня первая версия. может во второй пофиксили, нада будет поставить попробовать...
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-15 16:49:00
schizoid
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-15 16:55:18
savio
аналогично. выяснил следующее.
у меня mpd4 поднимает 200 ng интерфейсов. думал тупняк из-за етого. на тестовой машине когда конекчусь тока я сам и ребут mpd такой проблемы не наблюдаю.
а вот на рабочей когда конектов наблюдается хотя бы 15 и сделать ребут mpd то не закрытые сесии. получается что не успевает радиус выполнить запросы к mysql.
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-15 20:21:47
paradox
я чет так и не понял в чем проблема
вообще то этими ньюансами должен заниматься биллинг
закрывать незакрытые сессии
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-16 10:31:08
savio
объясняю.
при установке freeradius'а с поддержкой БД(MySql в моем случаи), создаются база данных с таблицами, одна из таблиц - radacct, в которой радиус записывает сессии, то есть кто(username), c какой айпишки подключился, трафик(in/out), какай айпишка была назначена vpn-соединению и так далее.
так вот, если vpn-соединение не закрыто, то соответственно AcctStopTime='0000-00-00 00:00:00'. Если клиент отключиться, то в поле AcctStopTime= запишется время отключения.
если пользователей несколько, и я перегружаю mpd - радиус нормально отрабатывает, и делает update поля AcctStopTime, а вот если клиентов было подключено человек 15, то не все закрывает. При повторном коннекте имеет уже две записи с AcctStopTime='0000-00-00 00:00:00' одного и того же юзера.
ух... вроде доступно объяснил ?

Re: Radius и "зависшие сесии"
Добавлено: 2008-10-16 10:50:12
schizoid
та оно собсна и с начала было понятно

я просто не знаю сам как с таким бороться.
либо искать способы/методы как еще узнавать активные сессии от радиуса...
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-16 13:37:42
savio
да я paradox'у расписал все это дело. пока на ум приходит идея вставить в скрипт /usr/local/etc/rc.d/mpd4 при вызове stop скрипт, который будет закрывать в базе сесии
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-16 13:50:04
paradox
все потяно
это скорее всего проблема радиуса
потому что это должен делать биллинг
но можно поробовать такой скрипт
Код: Выделить всё
#!/bin/sh
radclient="/usr/local/bin/radclient"
server=127.0.0.1
secrets=testing123
#usage () {
# echo "Usage: $0 radius-server secret" >&2
# exit 1
#}
#if [ $# -lt 2 ]
#then
# usage
#fi
case "$1" in
start)
echo -n ' NAS Accounting-On: '
(
echo "Acct-Status-Type = Accounting-On"
) | ${radclient} ${server} acct ${secrets}
;;
stop)
echo -n ' NAS Accounting-Off: '
(
echo "Acct-Status-Type = Accounting-Off"
) | ${radclient} ${server} acct ${secrets}
;;
-h)
echo "Usage: `basename $0` { start | stop }"
;;
*)
;;
esac
и после перегрузки сервера
он будет посылать насу(радиусу) пакет о том что клиент изменил статус
радиус должен будет позакрывать открытые сесси от этого клиента
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-16 14:23:17
paradox
вообще конечно глупость
пытаться добиться отрадиуса возможностей биллинговой системы
лучше всетаки поставь какую нибудь билл систем
чем постоянно наталкиваться на подводные камни
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-16 14:30:56
savio
а помоему наилутший биллинг это свой(написаный самим админом)
но это чистомое мнение
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-16 14:33:00
paradox
ну или так
но не так как ты пытаешься из радиуса выжать невозможное
зы
секрет
и айпи наса незабудь поставить))точнее поправить
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-20 10:54:06
savio
спасибо. вставил строку в /usr/local/etc/rc.d/mpd4
Код: Выделить всё
echo "Acct-Status-Type = Accounting-Off" | ${radclient} ${server} acct ${secrets}
и все пашет!
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-20 10:57:05
paradox
представь что у тебя сервер случайно ребутнулся
и нужно как раз таки Account-On послать
а у тебя не сработает
поэтому ставь скрипт
темболее он уже готовый
при старте сработает он
при стопе офф
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-20 11:06:35
savio
мой mpd4 файл запуска имеет щас такой вид
Код: Выделить всё
#!/bin/sh
#
# $FreeBSD: ports/net/mpd4/files/mpd4.sh.in,v 1.3 2007/07/06 07:35:54 sem Exp $
#
# PROVIDE: mpd
# REQUIRE: SERVERS
# BEFORE: DAEMON
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf to enable mpd4:
# mpd_enable (bool): Set to "NO" by default.
# Set it to "YES" to enable mpd4.
# mpd_flags (string): Set to "-b" by default.
# Extra flags passed to start command.
#
# See mpd(8) for flags.
#
. /etc/rc.subr
name="mpd4"
rcvar=`set_rcvar mpd`
load_rc_config ${name}
: ${mpd_enable="NO"}
: ${mpd_flags="-b"}
pidfile="/var/run/${name}.pid"
command="/usr/local/sbin/${name}"
required_files="/usr/local/etc/${name}/mpd.conf /usr/local/etc/${name}/mpd.links"
case "${mpd_flags}" in
*-p\ *)
echo "ERROR: \$mpd_flags includes -p option." \
"PID file is already set to $pidfile."
exit 1
;;
*)
command_args="-p ${pidfile} ${mpd_flags}"
;;
esac
echo "Acct-Status-Type = Accounting-Off"| /usr/local/bin/radclient 127.0.0.1 acct testing123
run_rc_command "$1"
1) куда мне вставлять on/off?
2) выше приведенным файлом сделал restart. подключился по vpn. трафик считает в racacct.
или я чего то не в куриваю?
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-20 11:11:35
paradox
http://forum.lissyara.su/viewtopic.php? ... 24#p106093
скрипт который по start посылает on
и который по stop посылает off
копи паст и нию файл сш нехочешь сделать?
зачем это все добавлять в mpd.sh я непонимаю
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-20 11:27:55
savio
а........... затупил.....
Код: Выделить всё
....
*)
command_args="-p ${pidfile} ${mpd_flags}"
;;
esac
my_script.sh "$1"
run_rc_command "$1"
наверное так.
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-20 11:30:32
paradox
зачем это все добавлять в mpd.sh я непонимаю
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-20 11:33:44
savio
ну а куда мне его прилепить чтоб закрывалась сессия?
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-20 11:39:45
paradox
а что просто создать файл с расширением sh и закинуть в rc.d нельзя?
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-20 11:43:23
savio
создал файл radacct.sh, закинул в rc.d
если сделаю mpd4 restart то что radacct.sh тоже отработает? думаю что нет.
а если да, то я вообше ничего не понимаю в этой жизни.................
Re: Radius и "зависшие сесии"
Добавлено: 2008-10-20 11:51:54
paradox
1 наскоко я помню restart отрабатываеться токо ручками
2 если нужно restart в новый sh то прописать несоставляет труда в restart): $ stop && $ start ну или в том дуже
3 когда сервер выключаеться - отрабытваються stop, когда включаеться - отрабатываються start
у тебя практические ситуации которые требуют restart для mpd?
тогда ручками будешь отдельно стартовать stop для radacct.sh