Linux Установка ABillS

Попытка адаптировать документацию по биллинговой системе ABILLS применительно к использованию ее под ОС Linux

Версия: 0.55 от 16.02.2007

Версия abills: 0.35 релиз

Этот документ базируется на оригинальной документации по ABILLS от Asmodeus'а http://abills.asmodeus.com.ua

Использование связки ABILLS + Linux осложняется тем, что в этой операционной системе невозможно использовать программные NAS серверы expppd и mpd. Зато у нас есть старый горячо любимый pppd, который как всегда для получения нужной функциональности нужно патчить и пересобирать причем вместе с ядром

Здесь будет описана установка биллинга для VPN сервера (abills + pppd + pptpd) Пути установки программ и расположения конфигурационных файлов несколько изменены по сравнению с оригинальной документацией. Вы можете их изменять, однако отдавайте себе отчет, что при этом потребуется изрядно переконфигурировать весь комплекс программ. Все компоненты (NAS, radius, web-сервер, база данных) расположены на одном сервере, хотя это не исключает возможности вынести например NAS или базу данных на другую машину.

Итак..

1. Установка freeradius

Загрузить пакет FreeRadius можно по адресу [http://www.freeradius.org] Рекомендую взять версию 1.1.0, потому как в более новых версиях несколько изменился формат конфигурационных файлов и вам придется самостоятельно с ними разбираться. Выполняем следующие действия:

cd /usr/src
wget ftp://ftp.freeradius.org/pub/radius/old/freeradius-1.1.8.tar.gz
tar zxvf freeradius-1.1.8.tar.gz
freeradius-1.1.8
./configure --prefix=/usr/local/radiusd
make
make install

После успешной установки правим файлы: /usr/local/radius/etc/raddb/users

DEFAULT Auth-Type = Accept
		Exec-Program-Wait = "/usr/abills/libexec/rauth.pl"

/usr/local/radius/etc/raddb/acct_users

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"

Не забываем про пробелы перед Exec-Program

У большинства такая конфигурация работает нормально, а в моем случае после каждого аккаунтинг-запроса в памяти оставались зомби-процессы racct.pl. Проверить это можно командой:

ps ax|grep racct

Если у вас тоже остаются зомби, то рекомендую заменить в файле acct_users Exec-Program на Exec-Program-Wait

/usr/local/radius/etc/raddb/clients.conf В этот файл нужно вписать IP адрес или имя NAS сервера с которого будут поступать данные для радиуса и пароль доступа.

client localhost {
   # Ниже пароль для доступа к радиусу. Запомните его, он 
   # понадобится в п. 8 
   secret = radsecret     
   shortname = shortname
}

/usr/local/radius/etc/raddb/radiusd.conf В этом файле нужно закоментировать использование модулей 'chap' и 'mschap' в разделе 'authorize'

authorize {
  preprocess
#  chap
#  counter
#  attr_filter
#  eap
  suffix
  files
# etc_smbpasswd
# sql
# mschap
}

Если вы желаете использовать MPPE, MPPC, MS-Chap V2 (протоколы шифрования и компрессии от M$ - для VPN очень желательно) то в файл /usr/local/radius/etc/raddb/radiusd.conf вносятся следующие изменения:

Cоздаются функции для преавторизации и поставторизации

exec pre_auth { 
  wait = yes 
  program = "/usr/abills/libexec/rauth.pl pre_auth" 
  input_pairs = request 
  output_pairs = config 
}
 
exec post_auth {
  wait = yes
  program = "/usr/abills/libexec/rauth.pl post_auth"
  input_pairs = request
  output_pairs = config
}

В секции 'authorize' внести 'pre_auth' и раскоментировать 'mschap'

authorize { 
  pre_auth 
  preprocess
 # auth_log 
 # attr_filter 
 # chap 
  mschap 
  suffix 
  files 
} 

Для оповещения о неавторизированых пользователях правим секцию post-auth

post-auth {
  Post-Auth-Type REJECT {
     post_auth
  }
}

Для нормальной работы с NAS на основе pppd необходимо добавить в файл словарей freeradius'а /usr/local/radius/etc/raddb/dictionary следующие строки:

 # Limit session traffic
 ATTRIBUTE       Session-Octets-Limit            227     integer
 # What to assume as limit - 0 in+out, 1 in, 2 out, 3 max(in,out)
 ATTRIBUTE       Octets-Direction                228     integer
 # Connection Speed Limit
 ATTRIBUTE       PPPD-Upstream-Speed-Limit       230     integer
 ATTRIBUTE       PPPD-Downstream-Speed-Limit     231     integer
 ATTRIBUTE       PPPD-Upstream-Speed-Limit-1     232     integer
 ATTRIBUTE       PPPD-Downstream-Speed-Limit-1   233     integer
 ATTRIBUTE       PPPD-Upstream-Speed-Limit-2     234     integer
 ATTRIBUTE       PPPD-Downstream-Speed-Limit-2   235     integer
 ATTRIBUTE       PPPD-Upstream-Speed-Limit-3     236     integer
 ATTRIBUTE       PPPD-Downstream-Speed-Limit-3   237     integer

В директории с исходниками freeradius есть подкаталоги redhat и debian. в них вы можете найти скрипты для автозапуска radiusd. Для RedHat-based дистрибутивов установка скрипта выглядит так:

cp /usr/src/freeradius-1.1.0/redhat/rc.radiusd-redhat /etc/init.d/radiusd
chmod 755 /etc/init.d/radiusd

Правим /etc/init.d/radiusd :

RADIUSD=/usr/sbin/radiusd
LOCKF=/var/lock/subsys/radiusd
CONFIG=/etc/raddb/radiusd.conf

Выполняем:

chkconfig -level 345 radiusd on

2. MYSQL

В дистрибутиве вашей операционной системы наверняка есть пакеты mysql* . Если не хотите усложнять себе жизнь - установите их. У меня заработало с версией 3.23

Если вы любитель собирать все из исходников - загрузите исходники MySQL с http://www.mysql.com

tar xvfz mysql-4.1.16.tar.gz
cd mysql-4.1.16
./configure --prefix=/usr
make
make install

Создаем файл pre_abills.sql следующего содержания:

use mysql;
INSERT INTO user (Host, User, Password) VALUES ('%','abills',password('sqlpassword'));
INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Index_priv, Alter_priv) VALUES ('localhost', 'abills', 'abills', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
CREATE DATABASE abills;

Не забудьте исправить sqlpassword на свое усмотрение. Для тех кто не понял, это пароль mysql-пользователя abills, необходимый для доступа к базе данных abills

Создаём пользователя и базу.

mysql -u root -p < pre_abills.sql
mysqladmin flush-privileges;

На этом настройка mysql завершена.

3. Web server

Для работы web-интерфейса требуется установить и настроить web сервер. Как и в случае с mysql нет особого смысла собирать его из исходников, поскольку любой приличный дистрибутив уже имеет в своем составе web-сервер Apache. Он должен быть собран и сконфигурирован с поддержкой модуля mod_rewrite. Добавляем в конфигурационный файл вебсервера httpd.conf содержимое файла /usr/abills/misc/abills_httpd.conf и перезапускаем вебсервер

4. Perl modules

Для работы системы нужны модули.

DBI 	
DBD::mysql	
Digest-MD5	для Chap авторизации
Digest-MD4	для MS-Chap авторизации
Crypt-DES 	для MS-Chap авторизации
Digest-SHA1	для MS-ChapV2 авторизации
libnet 	Нужен только при авторизации из UNIX passwd
Time-HiRes	Нужен только для тестирования скорости выполнения авторизации,
 		акаунтинга, и страниц веб интерфейса.

Часть из них возможно уже установлена в вашей системе. Недостающие можно скачать на http://www.cpan.org. Порядок установки модулей достаточно стандартный:

tar xvzf modulename.tar.gz
cd modulename
perl Makefile.PL
make
make test
make install

В моем случае пришлось переустановить еще и модуль PathTools (Cwd.pm)

5. Abills

Скачиваем и распаковываем релиз версии 0.35 в отдельный каталог:

    cd /usr/src/abills_distr
    wget http://puzzle.dl.sourceforge.net/sourceforge/abills/abills-0.35.tgz
    tar -xvzf abills-0.35.tgz

Правим конфигурационый файл системы /usr/abills/libexec/config.pl :

#DB configuration 
$conf{dbhost}='localhost';
$conf{dbname}='abills'; 
$conf{dblogin}='abills';

#Здесь нужно подставить пароль mysql-пользователя abills (п.2)
$conf{dbpasswd}='sqlpassword'; 
$conf{ADMIN_MAIL}='info@your.domain'; 
$conf{USERS_MAIL_DOMAIN}="your.domain";
# используется для шифрования паролей администраторов и пользователей.
$conf{secretkey}="test12345678901234567890"; 

#Лимит трафика на сессию, больше нельзя, изза глюка radiusclient'а
$conf{MAX_SESSION_TRAFFIC}=2047; 
# Проверять депозит по текущим сесиям, при достижении 0 сбрасывать с линии
$conf{periodic_check}=’yes’; 

При использовании модуля Dv полезно так же добавить в конфиг следующие параметры, и изменить их по своему усмотрению.

$conf{MAC_AUTO_ASSIGN}=0;    # Заполнять поле CID при cоединении, если оно не заполнено
$conf{DV_USER_CHG_TP}=0;     # Разрешить пользователю менять тарифный план из своего веб акаунта
$conf{ERROR_ALIVE_COUNT}=3;  # Количество периодов непришедших Alive пакетов после которого сесия автоматом попадает в Zap таблицу

При изменении значения в $conf{secretkey} поменяйте его также в файле abills.sql из дистрибутива abills. После этого загружаем структуру таблиц в базу:

mysql -D abills < abills.sql

Для того, чтобы можно было осуществлять hangup подключенного пользователя необходимо добавить в файл /etc/sudoers:

apache   ALL = NOPASSWD: /usr/abills/misc/pppd_kill

Вносим в cron периодические процессы, /etc/crontab (уберите восклицательный знак в начале первой строки):

 !*/5 *  *  *  *   root    /usr/abills/libexec/billd -all
 1    0  *  *  *   root    /usr/abills/libexec/periodic daily
 1    0  *  *  *   root    /usr/abills/libexec/periodic monthly

Если хотите, чтоб ежедневно осуществлялось автоматическое резервное копирование базы данных, добавьте туда же:

 1    3  *  *  *   root     /usr/abills/libexec/periodic backup

Определяем от имени какого пользователя запускается web-сервер в нашей системе. Для этого надо просмотреть файл httpd.conf и найти в нем директиву User, которая определяет имя владельца процесса. В моем случае:

User apache

Устанавливаем права на чтение и запись вебсервером для файлов веб интерфейса

chown -Rf apache /usr/abills/cgi-bin

Создаем недостающие каталоги:

mkdir /usr/abills/backup
chown apache /usr/abills/backup
mkdir /usr/abills/var
mkdir /usr/abills/var/log

Правим файл /usr/abills/Abills/defs.conf

$SNMPWALK = '/usr/bin/snmpwalk';
$GZIP = '/bin/gzip';
$MYSQLDUMP = '/usr/bin/mysqldump';

В вашем случае пути к этим программам могут быть иными, проверьте командой which.

Открываем веб интерфейс - http://your.host/abills/admin/ Логин администратора по умолчанию - abills , пароль - abills. От имени этого администратора будут выполняться различные операции в автоматическом режиме, например снятие абонплаты в начале месяца, по этому удалять его не нужно, нужно только изменить пароль на более безопасный. Для реальных администраторов необходимо завести свои аккаунты и назначить им необходимые права: Система → Администраторы

Если впоследствии вам понадобится самая свежая функциональность обновления из CVS можно производить следующим образом:

    cd /usr/src/abills_distr
    cvs -d:pserver:anonymous@abills.cvs.sourceforge.net:/cvsroot/abills login
    cvs -z3 -d:pserver:anonymous@abills.cvs.sourceforge.net:/cvsroot/abills checkout -r rel-0-3 abills      
    cp -Rf abills /usr/
    chown -Rf apache /usr/abills/cgi-bin

После этого изучаем changelog и выполняем необходимые рекомендации.

Тот кто выполнил все предыдущие пункты и увидел вебинтерфейс заслужил первую бутылку пива. Дальнейшее описание специфично именно для Linux-систем с pppd.

6. pppd

Для работы с виндовыми vpn-клиентами pppd должен (желательно) поддерживать mppe (шифрование), mppc (компрессия), MS-CHAP v2 (аутентификация). Возможно ваш дистрибутивный pppd и ядро уже имеют поддержку этих возможностей, тогда этот раздел можно не читать. Если же нет, то для того, чтобы включить возможность mppe-mppc нужно патчить и пересобирать pppd и ядро. Для этого потребуются:

Исходники pppd,

cd /usr/src
wget ftp://ftp.samba.org/pub/ppp/ppp-2.4.3.tar.gz
tar xvzf ppp-2.4.3.tar.gz

Исходники ядра, либо возьмите из дистрибутива, либо скачайте с http://kernel.org. Не забывайте, что на исходники ядра из дистрибутива уже может быть наложен какой либо несовместимый патч.. Я пока использую ядра ветки 2.4, в данном случае - 2.4.32

cd /usr/src
wget http://kernel.org/pub/linux/kernel/v2.4/linux-2.4.32.tar.bz2
bzcat linux-2.4.32.tar.bz2 | tar xvf -

Патч mppe-mppc для pppd,

cd /usr/src

wget http://mppe-mppc.alphacron.de/ppp-2.4.3-mppe-mppc-1.1.patch.gz 
gunzip ppp-2.4.3-mppe-mppc-1.1.patch.gz | patch -p0

Патч mppe-mppc для ядра, Для каждой версии ядра есть свой патч, но для версии 2.4.32 его очевидно еще не выпустили. Поэтому делаем финт ушами.

cd /usr/src 

Чтобы обмануть патч делаем симлинк:

ln -s  linux-2.4.32  linux-2.4.31
wget http://mppe-mppc.alphacron.de/linux-2.4.31-mppe-mppc-1.3.patch.gz	
gunzip linux-2.4.31-mppe-mppc-1.3.patch.gz | patch -p0

Патч накладывается нормально. Если у вас есть какие либо особые потребности, можете наложить еще какие нибудь дополнительные патчи. Я, например , всегда накладываю patch-o-matic . Затем стандартная процедура сборки ядра:

cd /usr/src/linux-2.4.32
make menuconfig

Включаем поддержку PPP со всеми наворотами в виде модулей:

  • network device support
  • → <M> PPP (point-to-point protocol) support
  • → [*] PPP multilink support (EXPERIMENTAL)
  • → [*] PPP filtering
  • → <M> PPP support for async serial ports
  • → <M> PPP support for sync tty ports
  • → <M> PPP Deflate compression
  • → <M> PPP BSD-Compress compression
  • → <M> Microsoft PPP compression/encryption (MPPC/MPPE)
  • → <M> PPP over Ethernet (EXPERIMENTAL)

Включаем поддержку криптоалгоритмов SHA1 и ARC4 :

  • Criptographic options
  • → <M> SHA1 digest algorithm
  • → <M> ARC4 cipher algorithm

Включаем поддержку опций необходимых для функционирования шейпера:

  • Network options ⇒ QOS and/or fair queuing
  • → включаем поддержку всех опций в виде модулей - <M>

Остальные опции выставляете в зависимости от ваших потребностей. Далее делаем:

make dep
make bzImage
make modules
make modules_install
make install

прописываем новое ядро в lilo.conf (если не прописалось автоматически):

image=/boot/vmlinuz-2.4.32-**
initrd=/boot/initrd-2.4.32-**.img
label=mppe_mppc
root=/dev/hda1
read-only

Выполняем :

lilo

Если все прошло без ошибок, правим файл /etc/modules.conf

alias char-major-108 ppp_generic
alias ppp-compress-18 ppp_mppe_mppc
alias tty-ldisc-3 ppp_async
alias tty-ldisc-14 ppp_synctty
alias net-pf-24 pppoe

Перезагружаемся с новым ядром, и убеждаемся, что оно действительно новое :)

uname -a

Надеюсь все прошло нормально. Проверяем установлен ли в нашей системе pppd, если да, то стоит его удалить, чтобы не было недоразумений. Если необходимо, сделайте резервную копию каталога /etc/ppp . Далее приступаем к сборке нового pppd:

cd /usr/src/ppp-2.4.3
./configure --prefix=/usr
make
make install
make install-etcppp

7. pptpd

pptpd, (подпольная кличка - PopTop) можете взять из своего дистрибутива, или скачать исходники с http://sourceforge.net/projects/poptop. Проще взять готовый, но если вы решили собирать самостоятельно:

cd /usr/src
tar xvzf pptpd-1.3.0.tar.gz
cd pptpd-1.3.0
./configure --prefix=/usr
make
make install
cp pptpd.init /etc/init.d/pptpd
chmod 755 /etc/init.d/pptpd
chkconfig --level 345 pptpd on

Правим файл /etc/pptpd.conf :

ppp /usr/sbin/pppd
option /etc/ppp/pptpd.options
debug
# stimeout 10
# noipparam
logwtmp
bcrelay eth0
localip ***.***.***.*** # Здесь IP адрес вашего сервера в локальной сети 
#remoteip 192.168.0.234-238,192.168.0.245 # Закоментировать, назначается
				 	  #радиусом

Создаем файл /etc/ppp/pptpd.options со следующим содержимым:

plugin radius.so
plugin radattr.so
proxyarp
debug
require-mschap-v2
        #+chap
        #+pap
ms-dns ***.***.***.***  # Здесь укажите IP адрес DNS сервера, который
       			# будет сообщаться подключившемуся клиенту	

Более детальное описание опций здесь - http://mppe-mppc.alphacron.de/

Примечание: в последнее время я пришел к выводу, что MPPE и MPPC в домашней сети не такая уж и полезная фича. Ресурсов отъедает прилично. По этому если вы строите NAS на недостаточно производительном железе, подумайте, нужно ли оно вам. Возможно лучшим выходом будет отключить обязательное шифрование в виндовом клиенте.

8. radiusclient

pppd общается с радиусом не напрямую, а через radiusclient (!! во намудрили !!) Как всегда два пути, взять из дистрибутива, или собрать самому. Следующий абзац для самоделкиных.

# cd /usr/src	
# wget ftp://ftp.cityline.net/pub/radiusclient/radiusclient-0.3.2.tar.gz
# tar xvzf radiusclient-0.3.2.tar.gz
# cd radiusclient-0.3.2
# ./configure
# make
# make install

Правим файл /etc/radiusclient/radiusclient.conf :

authserver      127.0.0.1
acctserver      127.0.0.1

В файл /etc/radiusclient/servers вносим IP адрес радиус-сервера и соответствующий ему пароль (см п.1)

127.0.0.1          radsecret  

В случае если radius и NAS будут находится на разных хостах в вышеупомянутых файлах необходимо указать IP адрес радиус сервера.

Не все ключи обходимые для работы системы присутствуют в стандартном словаре по этому прийдётся его дополнить /etc/radiusclient/dictionary

ATTRIBUTE       CHAP-Challenge          60      string

ATTRIBUTE       Acct-Input-Packets      47      integer
ATTRIBUTE       Acct-Output-Packets     48      integer
  
ATTRIBUTE       Acct-Interim-Interval         85      integer
ATTRIBUTE       Session-Octets-Limit          227     integer
ATTRIBUTE       Octets-Direction              228     integer

ATTRIBUTE       PPPD-Upstream-Speed-Limit     230     integer
ATTRIBUTE       PPPD-Downstream-Speed-Limit   231     integer

9. Шейпер

Здесь рассказывается как использовать атрибуты, передаваемые радиусом NAS'у на основе linux pppd. Это нужно для того, чтобы ограничивать пользователям скорость и выставлять фильтры. Последние версии pppd имеют в своем составе плагины для работы с radius-сервером. Убедитесь что в файле /etc/ppp/options.pptpd есть следующие строки:

 plugin radius.so
 plugin radattr.so

radius.so предназначен для аутентификации и аккаунтинга через радиус, а radattr.so принимает от радиуса дополнительные атрибуты и помещает их в файл /var/run/radattr.pppX , где pppX - имя интерфейса. Выглядит он примерно так:

 MS-CHAP2-Success \207S=F17E6A6B06CD4B0C38F6....F35CD130BD7EBE
 MS-MPPE-Recv-Key \302\177\360\305\202I\362O....65\26\216#\336
 MS-MPPE-Send-Key \317Ab4\353\275R\24\331O\3....\236gr*\274$\233
 MS-MPPE-Encryption-Policy
 MS-MPPE-Encryption-Types
 Framed-IP-Address 192.168.144.226
 Filter-Id test_filter
 PPPD-Downstream-Speed-Limit 128
 PPPD-Upstream-Speed-Limit 128
 Octets-Direction Sum
 Session-Octets-Limit 106954752
 Framed-IP-Netmask 255.255.255.255
 MS-CHAP-MPPE-Keys p3\314wm\333B7@S/\024\370E\....\241'e\371K\303
 Acct-Interim-Interval 60
 Session-Timeout 29293

Этот файл удобно обрабатывать в скрипте /etc/ppp/ip-up.local, для этого добавляем в него следующие строки :

 if [ -f /var/run/radattr.$1 ]
   then
   DOWNSPEED=`/bin/awk  '/PPPD-Downstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`
   UPSPEED=`/bin/awk  '/PPPD-Upstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`
   FILTERS=`/bin/awk  '/Filter-Id/ {print $2}'  /var/run/radattr.$1`
 #echo $DOWNSPEED
 #echo $UPSPEED
 #echo $FILTERS
    /sbin/tc qdisc del dev $1 root    > /dev/null
    /sbin/tc qdisc del dev $1 ingress > /dev/null

 ##### speed server->client
   if [ "$UPSPEED" != "0" ] ;
   then
     /sbin/tc qdisc add dev $1 root handle 1: htb default 20 r2q 1
     /sbin/tc class add dev $1 parent 1: classid 1:1 htb rate ${UPSPEED}kbit burst 4k
     /sbin/tc class add dev $1 parent 1:1 classid 1:10 htb rate ${UPSPEED}kbit burst 4k prio 1
     /sbin/tc class add dev $1 parent 1:1 classid 1:20 htb rate ${UPSPEED}kbit burst 4k prio 2
     /sbin/tc qdisc add dev $1 parent 1:10 handle 10: sfq perturb 10 quantum 1500
     /sbin/tc qdisc add dev $1 parent 1:20 handle 20: sfq perturb 10 quantum 1500
     /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:10
     /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:10
     /sbin/tc filter add dev $1 parent 1: protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u160x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10
   fi 
 ##### speed client->server
   if [ "$DOWNSPEED" != "0" ] ;
   then
     /sbin/tc qdisc add dev $1 handle ffff: ingress
     /sbin/tc filter add dev $1 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${DOWNSPEED}kbit burst 12k drop flowid :1
   fi
 fi

Скорость можно выставлять индивидуально для каждого пользователя и в тарифном плане. При этом в тарифном плане можно установить разные upspeed и downspeed. Если установлена скорость в настройках пользователя, то скорость из тарифного плана игнорируется. Скорость выставляется в Kbit/s

Если у кого то не заработает (не будут отдаваться нужные параметры ), то скорее всего у вас старая версия Abills'а, обновитесь из CVS:

#!/bin/bash
cvs -d:pserver:anonymous@abills.cvs.sourceforge.net:/cvsroot/abills login
cvs -z3 -d:pserver:anonymous@abills.cvs.sourceforge.net:/cvsroot/abills checkout -r rel-0-3 abills

Я предполагаю, что вышеописанный шейпер далеко не идеален и можно было бы в нем что то улучшить.

10. Конфигурирование NAS

Теперь необходимо сконфигурировать NAS. Заходим в web-интерфейс администратора http://your.host/abills/admin/ Логин - abills, пароль - abills Идем: Система → Сервер доступа Создаем новый NAS с необходимыми параметрами. В нашем случае:

IP 			***.***.***.*** (По непонятным причинам мне 
			пришлось указать здесь IP адрес моего WAN интерфейса) 
Название 		(произвольно, напр. - vpn1)
Radius NAS-Identifier 	Идентификатор сервера (можно не вписывать)
Опис	 		Описание сервера (Произв)
Type 			pppd:pppd + Radius plugin (linux)
Authorization 		SQL
Alive 			60 
Disable 		
IP:PORT 		Необходимо указать для хенгапа, если NAS находится на другом хосте 
User
Password
RADIUS Parameters 	Acct-Interim-Interval=60

Значение Alive и значение параметра Acct-Interim-Interval нужно выбирать одинаковым. Осталось создать тарифные планы и завести юзеров..

Начиная с версии от 16.02.07 в биллинге появилась возможность хенгапа пользователя на удаленном NAS. Для этого надо в параметрах NAS указать IP:PORT. На хост, где располагается NAS, нужно положить файл /usr/abills/misc/pppd_kill из дистрибутива ABillS и выполнить следующие настройки: в /etc/services добавить:

 hangup        30000/tcp # выберите произвольный свободный порт в своей системе

если используете inetd, то в /etc/inetd.conf добавить:

 hangup    stream  tcp     nowait  root    /usr/abills/misc/pppd_kill pppd_kill server

если используете xinetd, то в каталоге /etc/xinetd.d добавить файл hangup, следующего содержания:

 # default: off
 # description: Hangup ppp interfaces 
 #
 service hangup
 {
      socket_type             = stream
      wait                    = no
      user                    = root
      server                  = /usr/abills/misc/pppd_kill
      only_from               = 192.168.144.1 # здесь укажите IP хоста на котором ABillS
      server_args             = server
      log_on_success          += USERID
      log_on_failure          += USERID
      disable                 = no
 }

Ну вот и все. Если у вас есть предложения или замечания - в личку пользователю axl на здешнем форуме..

Что в планах:

  1. модернизация шейпера с использованием IFB (требуется ядро 2.6.последнее )
  2. описание работы с модулем IPN