В процессе установки ничего не компилировал и не собирал из исходников, старался использовать стандартные пакеты.
1. Установил Debian 4.0 r0 "Etch", в инсталлере галочкой отметил только Standart system. То есть ставил по-минимуму, без каких бы то нибыло Desktop Environment и прочего. Везде выбирал английский язык, так что получилось:
Код: Выделить всё
# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Код: Выделить всё
# apt-get install freeradius radiusclient1 pppoe mysql-server libmd5-perl libdigest-md4-perl libcrypt-des-perl libdigest-sha1-perl apache2 libapache2-mod-php4
Код: Выделить всё
# modprobe pppoe
# lsmod |grep ppp
pppoe 13152 0
pppox 3688 1 pppoe
ppp_generic 25908 2 pppoe,pppox
slhc 6528 1 ppp_generic
Код: Выделить всё
plugin rp-pppoe.so
Код: Выделить всё
logfile /var/log/pppoe.log
debug
mtu 1472
mru 1472
auth
login
default-asyncmap
ktune
lcp-echo-interval 20
lcp-echo-failure 2
ms-dns 192.168.1.254
plugin radius.so
plugin radattr.so
Код: Выделить всё
# /usr/sbin/pppoe-server -I eth0 -L 192.168.1.222
8. Установка abills, непременно в /usr (настройкой abills займемся чуть позже):
Код: Выделить всё
# cd ~
# mkdir abills
# cd abills
# wget "http://downloads.sourceforge.net/abills/abills-0.37.tgz?modtime=1194372982&big_mirror=0"
# tar -zxf abills-0.37.tgz -C /usr
Добавить в НАЧАЛО файла /etc/freeradius/users:
Код: Выделить всё
DEFAULT Auth-Type = Accept
Exec-Program-Wait = "/usr/abills/libexec/rauth.pl"
Код: Выделить всё
DEFAULT Acct-Status-Type == Start
Exec-Program = "/usr/abills/libexec/racct.pl"
DEFAULT Acct-Status-Type == Alive
Exec-Program = "/usr/abills/libexec/racct.pl"
DEFAULT Acct-Status-Type == Stop
Exec-Program = "/usr/abills/libexec/racct.pl"
Код: Выделить всё
client 127.0.0.1 {
secret = testing123
shortname = localhost
# nastype обязательно комментировать?
# nastype = other
}
Код: Выделить всё
# mv radiusd.conf radiusd.conf.orig
# egrep -v '#|^ *$' radiusd.conf.orig > radiusd.conf
Кстати в INSTALL.ru строчка suffix закомментирована, она вообще играет роль?
Код: Выделить всё
authorize {
preprocess
#chap
#mschap
suffix
#eap
files
}
Код: Выделить всё
# /etc/init.d/freeradius restart
Добавить в файл /etc/radiusclient/servers
Код: Выделить всё
localhost testing123
Код: Выделить всё
# cd /usr/abills
# mysql
> create database abills;
> use abills;
> source abills.sql;
> \q
!!! Обязательно подключить mod_rewrite:
Код: Выделить всё
# a2enmod rewrite
Код: Выделить всё
#Abills version 0.3
# User interface
Alias /abills "/usr/abills/cgi-bin/"
<Directory "/usr/abills/cgi-bin">
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_CGI_AUTHORIZATION:%1]
Options Indexes ExecCGI SymLinksIfOwnerMatch
</IfModule>
AddHandler cgi-script .cgi
Options Indexes ExecCGI FollowSymLinks
AllowOverride none
DirectoryIndex index.cgi
Order allow,deny
Allow from all
<Files ~ "\.(db|log)$">
Order allow,deny
Deny from all
</Files>
# Эту строчку пришлось добавить, иначе в браузере были проблемы с кодировкой
AddDefaultCharset utf8
</Directory>
#Admin interface
<Directory "/usr/abills/cgi-bin/admin">
AddHandler cgi-script .cgi
Options Indexes ExecCGI FollowSymLinks
AllowOverride none
DirectoryIndex index.cgi
order deny,allow
allow from all
# Эту строчку пришлось добавить, иначе в браузере были проблемы с кодировкой
AddDefaultCharset utf8
</Directory>
Код: Выделить всё
# /etc/init.d/apache2 restart
Код: Выделить всё
# cd /usr/abills
# cp libexec/config.pl.default libexec/config.pl
Код: Выделить всё
$conf{dbhost}='localhost';
$conf{dbname}='abills';
$conf{dbuser}='root';
$conf{dbpasswd}='';
$conf{dbtype}='mysql';
#For MySQL 5 and highter (в Debian etch именно так,
#однако с данной опцией вместо русских букв в веб-интерфейсе
#одни вопросики, поэтому, несмотря на то что у нас mysql5 опцию
#не включаем)
#$conf{dbcharset}='utf8';
Код: Выделить всё
*/5 * * * * root /usr/abills/libexec/billd -all
1 0 * * * root /usr/abills/libexec/periodic daily
1 0 * * * root /usr/abills/libexec/periodic monthly
Код: Выделить всё
# chown -Rf www-data /usr/abills/cgi-bin/
# chown -R freerad /usr/abills/var
Логин/пароль: abills/abills
Идем в Система -> Сервер доступа:
IP: 192.168.1.222
Название: NAS1
Тип: other
Alive: 60
После того как добавили NAS, жмем IP POOLS (первый ip-адрес в пуле и размер пула задайте согласно своим желаниям):
FIRST IP: 172.30.1.100
COUNT: 100
Идем в Система -> Dialup / VPN -> Тарифные планы и добавляем тарифный план (как минимум заполняем следующие поля):
#: 1
Название: Стандартный
Идем в Клиенты->Логины->Добавить и добавляем логин:
Пользователь: test
Денежный счет: создать
Еще раз нажимаем Клиенты. Появляется Информация о клиенте, где справа на сером фоне будут ссылки. Жмем Dialup/VPN и активируем клиенту данный сервис.
Слева среди выделенных жирным ссылок есть ссылка "Пароль", используем ее что бы задать клиенту пароль, а через ссылку "Оплаты" внесем деньги на депозит.
14. Тестирование
Код: Выделить всё
# radtest test 111 127.0.0.1:1812 0 testing123 0 192.168.1.222
Sending Access-Request of id 111 to 127.0.0.1 port 1812
User-Name = "test"
User-Password = "111"
NAS-IP-Address = 192.168.1.222
NAS-Port = 0
Framed-Protocol = PPP
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=111, length=38
Session-Timeout = 1300391
Framed-IP-Address = 172.30.1.139
Framed-IP-Netmask = 255.255.255.255
Я столкнулся с проблемой, что несмотря на Access-Accept в Windows все равно выходила 691 ошибка. При этом в логах ppp (/var/log/pppoe.log в нашем случае) можно заметить строки:
Не хватало словаря microsoft. Ищем в интернете dictionary.microsoft (http://vladmin.ru/download/dictionary.microsoft) и кладем в /etc/radiusclient/. В самом конце файла /etc/radiusclient/dictionary добавляем строчку:rc_avpair_new: unknown attribute 11
rc_avpair_new: unknown attribute 25
Peer <имя_пользователя> failed CHAP authentication
Код: Выделить всё
INCLUDE /etc/radiusclient/dictionary.microsoft
Что бы pppoe-клиенты выходили в интернет, необходимо сделать следующее:
Код: Выделить всё
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -s 172.30.1.0/24 -j SNAT --to-source <ip_адрес_внешнего_интерфейса>

greg |at| vladmin.ru