Ключевые слова:freebsd, radius, billing, mysql, mpd, vpn, pptp, (найти похожие документы)
From: Роман Сотников <drive(-sobaka-)oln(точка)ru>
Newsgroups: email
Date: Mon, 11 Apr 2005 14:31:37 +0000 (UTC)
Subject: [FreeBSD] Настройка PPTP сервера на базе mpd и FreeRadius
Настройка mpd+freeradius+freenibs+mysql
Необходимость назрела как всегда, домашняя сеть и трафик считать нечем.
Набрёл в интернете на сайт www.nibs.net.ua, решение понравилось, взялся
за его реализацию.
cd /usr/ports/net/mpd
make
make install
версия mpd у меня вот такая:
su-2.05# mpd -v
Version 3.18 ([email protected] 07:41 28-Mar-2005)
Следует заметить, что freenibs работает только со строго определённой
версией freeradius, у меня freeradius версии:
su-2.05# radiusd -v
radiusd: FreeRADIUS Version 0.9.3, for host i386-unknown-freebsd4.11, built on Mar 30 2005 at 22:41:23
Copyright (C) 2000-2003 The FreeRADIUS server project.
Ставил я его _не_ из портов, на nibs.net.ua есть ссылка откуда можно его
забрать. Для него есть определённый freenibs, на сайте nibs.net.ua он есть.
Версия системы:
su-2.05# uname -a
FreeBSD solar.oln.ru 4.11-RELEASE FreeBSD 4.11-RELEASE #0: Sun Mar 27 07:42:36 NOVST 2005 root@:/usr/src/sys/compile/PROXY_SAT i386
Ставим freeradius и freenibs следующим образом.
Разархивируем radius к примеру в /tmp/billing,
tar -zxvf freeradius-0.9.3.tar.gz /tmp/billing
а потом _туда же_ с перезаписью разархивируем frebibs
tar -zxvf freenibs-0.0.3-bf3-freeradius-0.9.3.tar.gz /tmp/billing
cd /tmp/billing
make
make install
Теперь правим конфиги:
После наступания на все мыслимые и не мыслимые грабли родились вот такие
конфиги.
bash-2.05# more mpd.conf
default:
load pptp0
load pptp1
load pptp2
load pptp3
load pptp4
load pptp5
load pptp6
pptp0:
new -i ng0 pptp0 pptp0
set ipcp ranges 10.10.10.1/30 10.10.10.47/30
load pptp_standart
pptp1:
new -i ng1 pptp1 pptp1
set ipcp ranges 10.10.10.1/30 10.10.10.20/30
load pptp_standart
pptp2:
new -i ng2 pptp2 pptp2
set ipcp ranges 10.10.10.1/30 10.10.10.74/30
load pptp_standart
pptp3:
new -i ng3 pptp3 pptp3
set ipcp ranges 10.10.10.1/30 10.10.10.223/30
load pptp_standart
pptp4:
new -i ng4 pptp4 pptp4
set ipcp ranges 10.10.10.1/30 10.10.10.10/30
load pptp_standart
pptp5:
new -i ng5 pptp5 pptp5
set ipcp ranges 10.10.10.1/30 10.10.10.175/30
load pptp_standart
pptp6:
new -i ng6 pptp6 pptp6
set ipcp ranges 10.10.10.1/30 10.10.10.50/30
load pptp_standart
pptp_standart:
set iface disable on-demand
set iface enable tcpmssfix
set bundle enable multilink
set link yes acfcomp protocomp
set link no pap chap
set link enable chap
set link keep-alive 60 180
set ipcp yes vjcomp
set ipcp dns 192.168.2.1
set ipcp nbns 192.168.2.1
set iface enable proxy-arp
set bundle enable compression
set ccp yes mppc
set ccp yes mpp-e40
set ccp yes mpp-e56
set ccp yes mpp-e128
set ccp yes mpp-stateless
set bundle yes crypt-reqd
set pptp self 0.0.0.0
set pptp enable incoming
set pptp disable originate
set radius server 192.168.2.1 <пароль к радиусу> 1812 1813
set radius timeout 10
set radius config /usr/local/etc/raddb/radius.conf
set radius retries 3
set bundle enable radius-acct
set bundle enable radius-auth
set ipcp yes radius-ip
open
Необходимо заметить, что mpd не любит пробелов в конфиге, поэтому
следует использовать табуляцию.
bash-2.05# more mpd.links
pptp0:
set link type pptp
pptp1:
set link type pptp
pptp2:
set link type pptp
pptp3:
set link type pptp
pptp4:
set link type pptp
pptp5:
set link type pptp
pptp6:
set link type pptp
Файл mpd.secret пустой, потому как пароли проверяет радиус.
bash-2.05# more acct_users
DEFAULT
Service-Type == Framed-User,
Service-Type == Login-User,
Login-Service == Telnet,
Login-Service == Rlogin,
Login-Service == TCP-Clear,
Login-TCP-Port <= 65536,
Framed-IP-Address == 255.255.255.254,
Framed-IP-Netmask == 255.255.255.255,
Framed-Protocol == PPP,
Framed-Protocol == SLIP,
Framed-Compression == Van-Jacobson-TCP-IP,
Framed-MTU >= 576,
Framed-Filter-ID =* ANY,
Reply-Message =* ANY,
Proxy-State =* ANY,
Session-Timeout <= 28800,
Idle-Timeout <= 600,
Port-Limit <= 2
Насколько я помню, в файле acct_users я ничего не менял.
bash-2.05# more clients
# Client Name Key
#---------------- ----------
#portmaster1.isp.com testing123
#portmaster2.isp.com testing123
#proxyradius.isp2.com TheirKey
192.168.2.1 <пароль к радиусу>
127.0.0.1 <пароль к радиусу>
Вообщк то файл clients устаревший, он тут для совместимости, вдруг
кому-нибудь он будет нужен :)
bash-2.05# more clients.conf
client 127.0.0.1 {
secret = <пароль к радиусу>
shortname = localhost
nastype = other # localhost isn't usually a NAS...
}
client 192.168.2.1 {
secret = <пароль к радиусу>
shortname = localhost
nastype = other # localhost isn't usually a NAS...
}
bash-2.05# more naslist
# NAS Name Short Name Type
#---------------- ---------- ----
#portmaster1.isp.com pm1.NY livingston
#portmaster2.isp.com pm1.LA livingston
localhost local portslave
192.168.2.1 local portslave
bash-2.05# more radius.conf
acct 192.168.2.1 <пароль к радиусу>
auth 192.168.2.1 <пароль к радиусу>
Как правило у всех возникает проблема, что nibs трафик считает, а с
линии юзера не скидывает, в логах вот что пишет:
Sat Apr 9 15:58:48 2005 : Info: rlm_nibs (rlm_nibs_accounting):
User `drive' must be killed (no money on deposit) [192.168.2.1:0] |192.168.2.47|
в файлике nibs.conf есть вот такая строчка:
kill_program = "/usr/local/etc/raddb/kill.pl %{User-Name} %{NAS-IP-Address} %{Client-IP-Address} %{NAS-Port}"
nibs.conf есть смысл править только в начале:
# SQL Server configuration
server = "localhost"
port = "3306"
login = "freenibs"
password = "ваш пароль к базе"
Как настроить nibs и mysql написано в докции по nibs, на русском языке. ;)
Как раз она и вызывает скрипт kill.pl, для его правильной работы
необходимо поставить перловый модуль Socket
Содержимое kill.pl
bash-2.05# more kill.pl
#!/usr/bin/perl -w
if( $ARGV[3] eq '' ) { die 'Usage: kill.pl user nasip userip nasport'; };
$user=$ARGV[0];
$nasip=$ARGV[1];
$userip=$ARGV[2];
$nasport=$ARGV[3];
$nastelnetport=5005;
use IO;
$sock = IO::Socket::INET->new(
PeerAddr => $nasip,
PeerPort => $nastelnetport,
Proto => 'tcp') or die "Can not connect to mpd!\n$!";
$sock->autoflush(1);
print $sock "link pptp",$nasport,"\n";
print $sock "show radius\n";
print $sock "close\n";
close $sock;
exit 0;
После подобных телодвижений, у меня всё заработало.
Ещё на сайте nibs.net.ua есть веб-морда для управления всем этим
хозяйством. Однако, в ней есть ошибка, правится вот так:
скрипт lists/packet_list.php
строчка 21:
$mtraff = gtraffic() or die("Error: Call to function gtraffic()");
должна быть:
$mtraff = gtraffic();
Ну собственно вот и всё :)
По всем вопросам обращайтесь по адресу drive(-sobaka-)oln(точка)ru
Это не ошибка, это для того что бы такие как ты и мы об нее запинались. В ногих конфигах такая строга существует, например в той же программе что и eggdrop (бот под ircd )
Коментируеш ее и все в норме.
Ребят столкнулся с такой проблемой.
call_from выдает только ИП, мак не показывает. Раньше ставил на другую машину светили и ип и мак и интерфейс. где грабли искать ?
Скорее всего дело в gcc. На FreeBSD 5.4:
%gcc -v
Using built-in specs.
Configured with: FreeBSD/i386 system compiler
Thread model: posix
gcc version 3.4.2 [FreeBSD] 20040728
%
который жалуется на goto метку в неположенном месте
в файле x99_rlm.c
Короче, чтобы собрать freenibs-0.0.3-bf3_freeradius-1.0.1.tar.bz2 и freeradius-1.0.1.tar.gz, надо сперва редактировать файл
src/modules/rlm_x99_token/x99_rlm.c , 550-ю и 551-ю строки
good_state:
/* State is good! */
перенести на 10 строк вниз, сразу за этой:
} /* if (!fast_sync) */
т.е., должно выглядеть так:
} /* if (!fast_sync) */
good_state:
/* State is good! */