Обсуждение статьи тематического каталога: FreeRadius + FreeNIBS + FreeBSD + mpd4 Решаем недочеты (billing traffic freebsd radius)Ссылка на текст статьи: http://www.opennet.me/base/net/freenibs_mpd_tips.txt.html
Такое ощущение, что автор в принципе не очень понимает то, о чем пишет. Зачем nibs`у sql.conf?
radiusd.conf:# Include another file that has the SQL-related configuration.
# This is another file only because it tends to be big.
#
# The following configuration file is for use with MySQL.
# For Postgresql, use:${confdir}/postgresql.conf
# For MS-SQL, use:${confdir}/mssql.conf
# For Oracle, use:${confdir}/oraclesql.conf
#
$INCLUDE ${confdir}/sql.conf# NiBS Support
# The following configuration file is for use with MySQL.
$INCLUDE ${confdir}/nibs.confИли Я неправ?
ЗЫ:
Надо будет дописать для link-up/down работу с mySQL, а не с файлами.
Ну и еще пару фич...
Есть еще прикол:
Нельзя пополнить счет пользователя на больше чем 100, а точнее (99,999999).
В phpMYadmin надо подправить в Базе даных значение разрядов для deposit,credit в users, там стоит
double(8,6)(тоесть 2-а разряда до запятой и 6-ть после), а надо double(14,6) - думаю хватит.
Вот скрипт, который Мне прислали, когда Я спросил как в freeNIBs разрывать соеденение, при достижении 0-го баланса, если как сервер mpdmpd_kill.pl
#!/usr/bin/perl
if( $ARGV[3] eq '' ) { die 'Usage: mpddown user nasip userip nasport'; };$linkname='pptp'; ## имя линка без номера (links.conf, mpd.conf)
$maxng=40; ## номер последнего линка. первый должен быть 0 (ноль)
$user=$ARGV[0];$nasip=$ARGV[1];
$userip=$ARGV[2];
$nasport=$ARGV[3]; if( $nasport > $maxng ) { $nasport=1; };
$nastelnetport=5005;use IO::Socket;
sub checklink;
$sock = IO::Socket::INET->new(
PeerAddr => $nasip,
PeerPort => $nastelnetport,
Proto => 'tcp') or die "Can not connect to mpd!\n$!";
$sock->autoflush(1);
while (<$sock>){ print; last; }; ## читаем ввод из сокета
while (<$sock>){ print; last; }; ## пропускаем приветствие
while (<$sock>){ print; last; }; ## всего 3 строки
printf($ARGV[0]);
$portn=$nasport;
sprintf("PORT NO %d",portn);
checklink;
if( $user eq $luser ) {
print $sock "close\n"; }
else {
$portn++;
while( ($portn != $nasport) && ($user ne $luser) ) {
if( $portn > $maxng ) { exit 0};
checklink;
if( $user eq $luser ) {
print $sock "close\n";
};
$portn++;
} ;
};
close $sock;
exit 0;sub checklink {
print $sock "link pptp",$portn,"\n"; ## выбрали линк
print $sock "show radius\n"; ## запросили инфу о линке
while (<$sock>){ ## обрабатываем в цикле ввод
print;
@words=split(' ');
$luser=$words[2];
last if( $words[0] eq 'Authname' ); ## ищем строку с именем пользователя
};
};
, а в файле nibs.conf должна быть след. строчка:kill_program = "${sbindir}/mpd_kill.pl %{User-Name} %{NAS-IP-Address} %{Client-IP-Address} %{NAS-Port}
Захотел Я создать больше 100 нод, а тут мне все мпд какие Я не пробывал одну и туже ошибку выдают:
...
[pptp112] ppp node is "mpd9523-pptp112"
[pptp112] can't connect iface and inet: File exists
mpd: pipe: Too many open files in system
mpd: fatal error, exiting
[pptp1] IPCP: Down event
[pptp1] IFACE: Close event
...Решаем, просмотром параметров:
sysctl kern.maxfiles
sysctl kern.openfiles
sysctl kern.maxusersУ меня sysctl kern.maxusers =63
Помогло:
echo 'kern.maxusers="512"' >> /boot/loader.confТеперь Нод 252, больше не создавал
Кстате, иногда возникает вопрос:
"Сколько может выдержать mpd,mpd4 + radius?"
Вот цытата от сюда:
http://groups.google.com/group/fido7.ru.unix.bsd/browse_thre...*&rnum=1&hl=ru#e81f32f720eded9aCPU: Intel(R) Celeron(R) CPU 1.70GHz (1716.91-MHz 686-class CPU)
real memory = 125763584 (122816K bytes)
деpжит 400 интеpфейсов (пpавда, больше 300 интеpфейсов одновpеменно ни pазу не
было занято)а вот это:
CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz (2992.51-MHz 686-class CPU)
real memory = 1056108544 (1031356K bytes)
деpжит 800 интеpфейсов (максимум одновpеменных подключений - около 790).
с ng_tcpmss оба деpжат нагpузку без особых пpоблем. пеpвая машина вообще не
напpягается (10-20% cpu), втоpая, конечно, пpоседает сильнее (40-60% cpu)
Привожу цытату, орт сюда же - человек создал 999нод, но 1000-я уже валит сервер...
Что же нужно сделать, что бы Сервер жевал скажем 999нод? :Нужно увеличивать kern.ipc.maxpipekva. экспеpиментально установлено, что mpd4
на один бандл нужно около 200000 байт. итого, на 300 бандлов:
echo "kern.ipc.maxpipekva=\"60000000\"" >> /boot/loader.conf
кpоме этого, на каждый бандл нужно около 8 свободных file descriptor'ов (тоже
экспеpиментальная величина):
echo "kern.maxfiles=xxxxx" >> /etc/sysctl.conf
echo "kern.maxfilesperproc=3000" >> /etc/sysctl.conf
3000 < xxxxx
немалую pоль игpают такие паpаметpы ядpа, как vm.kmem_size_scale,
vm.kmem_size_max. vm.kmem_size - пpоизводная от двух упомянутых и объема
опеpативной памяти, полезна для контpоля того, сколько вы pеально отдали ядpу.
общий pецепт такой: если хотите ставить pекоpды - набивайте побольше памяти,
выделяйте больше памяти ядpу, задеpите KVA_PAGES (опция в конфиге ядpа).
напоследок - мои loader.conf и sysctl.conf на тестовой машине (512mb ram, p4
3ghz), где я тpениpуюсь в создании 1000 интеpфейсов(999 работающих):# cat /boot/loader.conf
kern.maxusers="512"
kern.ipc.maxpipekva="200000000"
vm.kmem_size_max="536870912"
vm.kmem_size_scale="2"
ng_ether_load="YES"
ng_netflow_load="YES"
# cat /etc/sysctl.conf
net.inet.ip.fastforwarding=1
kern.maxfiles=65000
kern.maxfilesperproc=32000
net.inet.ip.intr_queue_maxlen=1000
в конфиге ядpа стоит опция:
options KVA_PAGES=512
Ребят, очень намучался со скидыванием юзера при помощи этого скрипта.В конечном итоге всё порешалось добавлением следующей строки в rc.conf:
mpd_flags="--console-address 127.0.0.1 --background --console-port 5005"
>Надо будет дописать для link-up/down работу с >mySQL, а не с файлами.было решено что будет заведен просто файл с ип и номером правил...
И в link-up/down по ИП будет браться из Него какие правила (под какой номер кидать)
>mpd_flags="--console-address 127.0.0.1 --background --console-port 5005"
У Меня не работает...
НО!!!
Если Мы добавлем секцию:
startup:
set console port 5005
set console ip 127.0.0.1
set console user LOGIN PASSWORD
set console openто получаем доступ по телнет...
А Теперь вопрос - как авторизироваться из скрипта?
Файл который генрирует mpd.conf для mpd4
#!/bin/sh
ip4=2
ip3=11
ip2=168
ip1=192
serverip="192.168.11.1/32"
maxlink=199
echo "startup:
set console port 5005
set console ip 127.0.0.1
set console user user password
set console open
default:
">mpd.conf
lname=0
for num in `jot $maxlink 10 20`
do
lname=`expr $lname + 1`echo " load pptp$lname">>mpd.conf
donelname=0
for num in `jot $maxlink 10 20`
doif [ "$ip4" -ge 254 ]
then
ip3=`expr $ip3 + 1`
ip4=1
fi
lname=`expr $lname + 1`
ipall="$ip1.$ip2.$ip3.$ip4"
echo "pptp$lname:
new -i ng$lname pptp$lname pptp$lname
set ipcp ranges $serverip $ipall/32
load pptp_standart">>mpd.conf
ip4=`expr $ip4 + 1`
doneecho "
pptp_standart:
set pptp disable windowing
set iface route default
set iface disable on-demand
set iface enable tcpmssfix
set bundle disable multilink
set link yes acfcomp protocomp
set iface up-script \"/usr/local/etc/mpd4/link-up\"
set iface down-script \"/usr/local/etc/mpd4/link-down\"
set link no pap chap
set link enable chap
set link keep-alive 10 75
set ipcp yes vjcomp
set ipcp dns 10.11.25.1
# set link mtu 1460
# set link mru 1460
set iface enable proxy-arp
set bundle enable compression
set ccp yes mppc
set ccp yes mpp-e40
set ccp yes mpp-e128
set ccp yes mpp-stateless
set pptp enable incoming
set pptp disable originate
# set radius config /opt/radius.conf
set radius me 127.0.0.1
set radius retries 2
set radius server 127.0.0.1 password 1812 1813
set radius timeout 5
set auth acct-update 300
set auth enable radius-auth
set auth enable radius-acct ">>mpd.conf
Вот блин забыл - что бы отгенерировать файл mpd.links тут после
echo " load pptp$lname">>mpd.conf
добавляем
echo "pptp$lname:
set link type pptp">>mpd.links
И в начале надо добавить:
rm mpd.links
Иначе после нескольких запусков
mpd.links - будет непонятно что