Jump to content

Recommended Posts

Posted

В продолжение темы отключения VPN-сессии на сабже. Теперь нашему биллингописателю потребовалось периодически узнавать какие сессии активны на NAS, чтобы сверять их со своим списком сессий. Я предложил ему опять же заходить по ssh и выполнять там команду ps. Например вот так:

 

[pts/5]root@potok:~<105> ssh radius@192.168.0.36 "ps -ax | grep ppp"

9932 ?? R 1:13.15 /usr/sbin/ppp -direct pptp

10032 ?? S 0:00.56 /usr/sbin/ppp -direct pptp

10043 ?? S 0:00.25 /usr/sbin/ppp -direct pptp

10066 ?? Ss 0:00.03 sh -c ps -ax | grep ppp

10068 ?? S 0:00.02 grep ppp

 

 

Где видим в строчках содержащих -direct pptp эти самые сесии и их PID. Я думаю вполне информативно. Есть ли еще какиенибудь варианты?

Posted

radwho -- показывает таблицу юзеров на сервере

radping <login> -- проверяет в онлайне пользователь или нет, a

 

root@potok:~<105> ssh radius@192.168.0.36 "ps -ax | grep ppp"  

9932 ?? R 1:13.15 /usr/sbin/ppp -direct pptp  

10032 ?? S 0:00.56 /usr/sbin/ppp -direct pptp  

10043 ?? S 0:00.25 /usr/sbin/ppp -direct pptp  

10066 ?? Ss 0:00.03 sh -c ps -ax | grep ppp  

10068 ?? S 0:00.02 grep ppp  

 

просто изврат, ибо использовать надо стандартные методы, а не изобретать велосипед.

Posted

не смог найти этих команд ни на самом NAS ни на биллинге под Solaris. Что это за утилиты? где их взять?

Posted

я использую gnu-radius, там этот есть. В freeradius тоже есть.

это стандартные утилиты radius сервера... точна также как lasttaс у tacacs+

Posted

В том то и дело что в моем биллинге используется коммерческий Radiator, написанный на перле. И в нем я таких вещей не обнаружил.

Posted

Коммерческий RADIUS сервер под названием Radiator www.open.com.au входящий в состав коммерческой же биллинговой системы. Оба продукта разных фирм. Radiator принимая запросы от NAS, выполняет внешний скрипт биллинга, обрабатывает таким образом и запросы доступа и запросы учета. Вопрос: каким же скриптом биллингу сверяться с NAS по вопросу списка сессий?

Posted

Развиваю тему: этот же биллинг для сверки сессий с такой железкой как Lucent MAX6000 использует стандартную команду UNIX - finger. Получается что эту команду можно попробовать примениь и на NAS FreeBSD. Только вот у меня не получилось: выполняю "finger user@host" - получаю зависание и таймаут.

Posted
Там написано что этот скрипт работает с БД активных сессий - у нас такой нет.

 

гы... как это нет... а как же по твоему радиус ограничивает по числу одновременных сессий ???

в доке по нему написано что он такое может... а значит и база такая есть.

и вообще ... у тебя должна быть единая база биллинга и радиуса... а как следствие этого тебе надо посмотреть в СУБД не меняются ли значения каких либо полей в зависимости от того подключен пользоваетель или нет...

Posted

Нет. Собственная БД радиуса нам не подходит. Задача такова, что необходимо всякий раз запрашивать список сессий ИМЕННО с NAS. Я пока что задерживаюсь на методе finger - разбираюсь как заставить эту команду работать с NAS на платформе FreeBSD.

Posted

В директории /tools дистрибутива PoPToP нашел утилиты управления и мониторинга сервера VPN. Там есть утилита vpnwho.pl следующего содержания

 

#!/usr/bin/perl

# By Jason Collins-Webb (jason@rbaltd.co.uk)

# usage: vpnwho

#

# This program is free software; you can redistribute it and/or

# modify it under the terms of the GNU General Public License

# as published by the Free Software Foundation; either version 2

# of the License, or (at your option) any later version.

#

# This program is distributed in the hope that it will be useful,

# but WITHOUT ANY WARRANTY; without even the implied warranty of

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

# GNU General Public License for more details.

#

# You should have received a copy of the GNU General Public License

# along with this program; if not, write to the Free Software

# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# Your copy is available at: http://www.gnu.org/licenses/gpl.html

#

 

$TDateM = substr(`/bin/date +"%b"`, 0, -1);

$TDateD = substr(`/bin/date +"%e"`, 0, -1);

$whoson = `/bin/ps -eo pid,bsdstart,cmd|/usr/bin/grep "pptpd ["`;

if ($whoson ne "") {

@logons = split(/n/, $whoson);

foreach $l (@logons) {

if ($l =~ /(d+)s+(d+:d+).*[(d+.d+.d+.d+)]/) {

$PID = $1+1;

$IP = $3;

$STIME = $2;

open MESSAGES, "</var/log/messages";

while(<MESSAGES>){

if ($_ =~ /.*spppd[$PID]:s+MSCHAP-v2s.*s(.+)*(.+)$/i) {

$User = lc($2);

}

}

close MESSAGES;

print "Current VPN connection from $User ($IP), started at $STIMEn";

}

}

} else {

print "There are no current VPN connections.n";

}

 

 

Но при попытке запустить получил ошибки:

 

test-nas# perl /usr/ports/net/poptop/work/poptop-1.1.4/tools/vpnwho.pl

ps: bsdstart: keyword not found

ps: cmd: keyword not found

There are no current VPN connections.

 

 

Объясните пожалуйста чайнику что тут не так?

Posted

eddy_mut,

хм... если ты используешь pppoe на user-level то мору подсказать одно решение.

 

смотри:

pppoe:

 set server /var/run/ppp/ppp%d "" 0177

 

далее

### BEGIN ls-user.sh ###

#!/bin/sh

ppp=`ls /var/run/ppp`

for str in $ppp

do

/usr/sbin/pppctl /var/run/ppp/$str ! echo USER UPTIME OCTETSIN OCTETSOUT

done

### END ls-user.sh ###

 

home/sergey/old2/oldhome/script > ./ls-user.sh

reality 0:02:08 11477 147810

kseniya 0:02:02 13353 37651

 

у pppctl также есть CLOSE что позволяет закрыть соединение... man pppctl там много чаго полезного найдёшь... если тебе подойдёт такое решение

Posted

Я вот тут еще почитал повнимательней инструкцию к Radiator, тоже, мне кажется, вполне красивое решение, правда более громоздкое т. к. потребует инсталляции еще и web-сервера для выполнения скрипта radwho.cgi.

 

В общем посмотрю еще эти варианты.

Posted

eddy_mut,

незнаю я непробовал... но список активных сессий по pppoe я получаю именно так.

не

$whoson = `/bin/ps -eo pid,bsdstart,cmd|/usr/bin/grep "pptpd ["`;  

а

$whoson = `/bin/ps -eo pid,start,command|/usr/bin/grep "pptpd ["`;

Posted

test-nas# less list-users.sh

### BEGIN ls-user.sh ###

#!/bin/sh

ppp=`ls /var/run/ppp`

for str in $ppp

do

/usr/sbin/pppctl /var/run/ppp/$str ! echo USER UPTIME OCTETSIN OCTETSOUT

done

### END ls-user.sh ###

Posted

Проверил еще раз /etc/ppp/ppp.conf - и нашел ошибку. Теперь выдает так:

 

test-nas# ./list-users.sh

ppp=ppp0: Command not found.

ppp: Undefined variable.

 

Раньше нельзя было найти файл /var/run/ppp%d, а теперь наверное она не может его прочитать.

Posted

pppctl /var/run/ppp/pppX ! echo USER UPTIME OCTETSIN OCTETSOUT

 

вот так попробуй... для начала

и пришли ls /var/run/ppp/

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.