Debian Etch + pppoe + abills

Установка, настройка, поддержка
Greg007
Сообщения: 6
Зарегистрирован: Чт янв 31, 2008 11:15 pm

Debian Etch + pppoe + abills

Сообщение Greg007 »

Выкладываю описание установки abills + pppoe на Debian etch.
В процессе установки ничего не компилировал и не собирал из исходников, старался использовать стандартные пакеты.

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=
2. Устанавливаем необходимые пакеты. В действительности пакеты ставились на разных этапах установки/настройки системы, но для удобства я вынес их установку в самое начало. Итак:

Код: Выделить всё

# apt-get install freeradius radiusclient1 pppoe mysql-server libmd5-perl libdigest-md4-perl libcrypt-des-perl libdigest-sha1-perl apache2 libapache2-mod-php4 
3. Подключим к ядру модуль pppoe:

Код: Выделить всё

# modprobe pppoe
# lsmod |grep ppp
pppoe                  13152  0
pppox                   3688  1 pppoe
ppp_generic            25908  2 pppoe,pppox
slhc                    6528  1 ppp_generic
4. Добавим строчку в /etc/ppp/options:

Код: Выделить всё

plugin rp-pppoe.so
5. Создадим файл /etc/ppp/pppoe-server-options:

Код: Выделить всё

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
6. Запуск pppoe-сервера (Здесь 192.168.1.222 - это ip той машины, на которой я все настраивал, в дальнейшем он еще будет встречаться):

Код: Выделить всё

# /usr/sbin/pppoe-server -I eth0 -L 192.168.1.222
7. Добавил в /etc/ppp/chap-secrets строчку "test * 111 192.168.100.9" и затем успешно подключился из Windows с этими учетными данными (логин test, пароль 111, 192.168.100.9 - ip для клиента). Вывод - pppoe работает, идем дальше.

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
9. Настройка freeradius:

Добавить в НАЧАЛО файла /etc/freeradius/users:

Код: Выделить всё

DEFAULT Auth-Type = Accept
    Exec-Program-Wait = "/usr/abills/libexec/rauth.pl"
Добавить в файл /etc/freeradius/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"
В файле /etc/freeradius/clients.conf:

Код: Выделить всё

client 127.0.0.1 {
		secret          = testing123
		shortname       = localhost
		# nastype обязательно комментировать?
		# nastype     = other
}
Что бы проще было редактировать /etc/freeradius/radiusd.conf уберем из него комментарии:

Код: Выделить всё

# mv radiusd.conf radiusd.conf.orig
# egrep -v '#|^ *$' radiusd.conf.orig > radiusd.conf
Секцию authorize делаем согласно /usr/abills/docs/INSTALL:
Кстати в INSTALL.ru строчка suffix закомментирована, она вообще играет роль?

Код: Выделить всё

authorize {
	preprocess
	#chap
	#mschap
	suffix
	#eap
	files
}
Перезапустим freeradius:

Код: Выделить всё

# /etc/init.d/freeradius restart
10. Настройка radiusclient:
Добавить в файл /etc/radiusclient/servers

Код: Выделить всё

localhost       testing123
11. Настройка mysql (в этой статье подразумевается, что к БД мы будем подключаться с localhost пользователем root без пароля, в противном случае понадобится завести отдельного юзера и дать ему права на доступ к базе):

Код: Выделить всё

# cd /usr/abills
# mysql
> create database abills;
> use abills;
> source abills.sql;
> \q
12. Настройка Apache2

!!! Обязательно подключить mod_rewrite:

Код: Выделить всё

# a2enmod rewrite
Создадим файл /etc/apache2/conf.d/abills:

Код: Выделить всё

#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>
Перезапустим Apache:

Код: Выделить всё

# /etc/init.d/apache2 restart
13. Настройка Abills:

Код: Выделить всё

# cd /usr/abills
# cp libexec/config.pl.default libexec/config.pl
Правим в файле libexec/config.pl (также см. п.11):

Код: Выделить всё

$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';
В файл /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
Корректриуем права на файлы:

Код: Выделить всё

# chown -Rf www-data /usr/abills/cgi-bin/
# chown -R freerad /usr/abills/var
Заходим браузером в веб-интерфейс (подставьте свой ip-адрес) http://192.168.1.222/abills/admin
Логин/пароль: 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, значит аутнетификация и авторизация прошли успешно и можно пробовать подключаться через pppoe.
Я столкнулся с проблемой, что несмотря на Access-Accept в Windows все равно выходила 691 ошибка. При этом в логах ppp (/var/log/pppoe.log в нашем случае) можно заметить строки:
rc_avpair_new: unknown attribute 11
rc_avpair_new: unknown attribute 25
Peer <имя_пользователя> failed CHAP authentication
Не хватало словаря microsoft. Ищем в интернете dictionary.microsoft (http://vladmin.ru/download/dictionary.microsoft) и кладем в /etc/radiusclient/. В самом конце файла /etc/radiusclient/dictionary добавляем строчку:

Код: Выделить всё

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
Последний раз редактировалось Greg007 Ср апр 16, 2008 8:09 am, всего редактировалось 4 раза.

chtito
Сообщения: 313
Зарегистрирован: Чт дек 13, 2007 11:03 am

Сообщение chtito »

Потрясающе! Вместо Debian у меня будет FreeBSD, а PPPoE сервер будет на Cisco, но теперь однозначно не буду задавать вопросов типа "а как и для чего создать логин". Вы тщательно обрисовали общую картину работы. Спасибо.

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

а у меня опенсюзя10.3 ... ну и что? АБСОЛЮТНО ВСЁ я ставлю из рпм (если нет рпм под меня - Я ЕГО ДЕЛАЮ ПОД ЭТУ ОСЬ! и выкладываю на BuildService... уже... готовое отлаженное

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

чтито, если ты собственник фирмы, найми себе серьёзных админов и плати им серьёзные бабки. неважно какая биллинговая система будет стоять. если ты сам админ? ну... изучай матчасть...

Greg007
Сообщения: 6
Зарегистрирован: Чт янв 31, 2008 11:15 pm

Сообщение Greg007 »

Сегодня попытался все настроить через rlm_perl и в результате вижу ошибку:
rlm_perl: perl_embed:: module = /usr/abills/libexec/rlm_perl.pl , func = accounting exit status= DBD::mysql::db do failed: handle 2 is owned by thread 81450e0 not current thread 89d1170 (handles can't be shared between threads and your driver may need a CLONE method added) at /usr/abills/libexec/../Abills/mysql/main.pm line 114.
Здесь (viewtopic.php?t=3778) написано, что такое бывает когда перл собран с потоками.
Выходит что со стандартным perl'ом из пакетов rlm_perl не запустится и перл надо вручную собирать с нужными опциями? Кто-нибудь делал rlm_perl на Debian?

chtito
Сообщения: 313
Зарегистрирован: Чт дек 13, 2007 11:03 am

Сообщение chtito »

ran писал(а):чтито, если ты собственник фирмы, найми себе серьёзных админов и плати им серьёзные бабки. неважно какая биллинговая система будет стоять. если ты сам админ? ну... изучай матчасть...
Я сам админ, а копаться нет времени: много другой работы и биллинг нужен не то что сегодня, а вчера... Поэтому с радостью становлюсь на плечи гигантов - ваши, дорогие мои форумчане :)

Dmitriy
Сообщения: 28
Зарегистрирован: Пн фев 18, 2008 12:16 pm

Сообщение Dmitriy »

Прошу помощи благородных донов.

При попытке проверить авторизацию, получаю:

Код: Выделить всё

# radtest tester 123123 127.0.0.1:1812 0 radsecret 0 192.168.3.250
Sending Access-Request of id 247 to 127.0.0.1 port 1812
        User-Name = "tester"
        User-Password = "123123"
        NAS-IP-Address = 192.168.3.250
        NAS-Port = 0
        Framed-Protocol = PPP
Re-sending Access-Request of id 247 to 127.0.0.1 port 1812
        User-Name = "tester"
        User-Password = "123123"
        NAS-IP-Address = 192.168.3.250
        NAS-Port = 0
        Framed-Protocol = PPP
rad_recv: Access-Reject packet from host 127.0.0.1:1812, id=247, length=51
        Reply-Message = "Unknow server '192.168.3.250'"
Где 192.168.3.250 - адрес моего сервера.

При этом в abills.log вижу:

Код: Выделить всё

2008-03-06 11:41:44 LOG_WARNING: ACCT [tester] NAS: 0 Unknow server '192.168.3.250'
2008-03-06 11:41:44 LOG_WARNING: AUTH [tester] NAS: 0 Unknow server '192.168.3.250' [2] ERROR_NOT_EXIST
NAS сервер с таким адресом в систему заведен.

Куда копать?

P.S. Конфиги и другую отладочную информацию предоставлю по первому требованию.

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

поэкспериментируй с / Система/ Сервер доступа/IP там помнится у меня он захотел признавать только адрес моего внешнего изернета уж ненаю почему

кстати этот же адрес у меня на моей стороне клиентских ппп туннелей мож поэтому

Dmitriy
Сообщения: 28
Зарегистрирован: Пн фев 18, 2008 12:16 pm

Сообщение Dmitriy »

ran писал(а):поэкспериментируй с / Система/ Сервер доступа/IP
Рекомендация
Посему, в этих файлах (строка примерно 89 для rauth.pl) грубо и цинично меняем строку:

Код: Выделить всё

 $NAS_PARAMS{NAS_IDENTIFIER}=$RAD->{NAS_IDENTIFIER} if (defined($RAD->{NAS_IDENTIFIER}));
на:

Код: Выделить всё

$NAS_PARAMS{NAS_IDENTIFIER}="PPPD";
и все теперь тип топ)))
Немного прояснила ситуацию.
Теперь дальше копаем ...

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

да ну его етот гемор... менять... потом при каждом обновлении патчить... работает и ладна :)

Автор пусь меняет (если захочет) :)

Dmitriy
Сообщения: 28
Зарегистрирован: Пн фев 18, 2008 12:16 pm

Сообщение Dmitriy »

ran писал(а):да ну его етот гемор... менять... потом при каждом обновлении патчить... работает и ладна :)

Автор пусь меняет (если захочет) :)
Оно-то, конечно ...
Но мне нужно систему запустить в работу ....
И оно уже почти работает ...
Только текущая сессия не считает трафик,
и не снимает деньги с депозита ....

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

Но мне нужно систему запустить в работу ....
дык у меня ж и без этого работает...
и не снимает деньги с депозита ....
а $conf{IPN_DEPOSIT_OPERATION}=1; стоит?

Dmitriy
Сообщения: 28
Зарегистрирован: Пн фев 18, 2008 12:16 pm

Сообщение Dmitriy »

ran писал(а):а $conf{IPN_DEPOSIT_OPERATION}=1; стоит?
А то ? ;)

Dmitriy
Сообщения: 28
Зарегистрирован: Пн фев 18, 2008 12:16 pm

Сообщение Dmitriy »

Dmitriy писал(а):
ran писал(а):а $conf{IPN_DEPOSIT_OPERATION}=1; стоит?
А то ? ;)
Сижу вот, и думаю .... А не ошибся ли я ?
Если у меня PPTP+Radius, то нужен ли мне IPN ?
Если я включу IPN и он у меня будет считать активную сессию,
(если таки будет...)
то после остановки сессии не будет ли добавлен трафик,
который насчитают PPTP+Radius ?
И еще, почему при установленном CID == MAC,
авторизация с этого MAC не проходит?

И так, начнем с начала:
В позитиве:
1) ALT Linux, PPTPD, Radius.
2) Авторизация проходит, скорость ограничивается согласно тарифного плана.
3) Сессия пингуется и сбрасывается по "HangUp".
4) Трафик сессии учитывается после ее окончания.
В негативе:
5) Не вижу трафика активной сессии, и денег, соответственно.
6) Не работает ограничение для логина по MAC.

Осталось совсем немного проплыть в этой серной кислоте....

2 RAN
Может быть как-то в оперативном режиме можем пообщаться?
ICQ, Jabber ?

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

Если у меня PPTP+Radius, то нужен ли мне IPN ?
Если не надо классифицировать трафик и снимать деньги в реальном времени, а не по завершению сессии, то может и не нужен.
Если я включу IPN и он у меня будет считать активную сессию,
(если таки будет...)
то после остановки сессии не будет ли добавлен трафик,
который насчитают PPTP+Radius ?
Если $conf{IPN_DEPOSIT_OPERATION}=1, то деньги будет снимать ипн, а Dv не будет.
И еще, почему при установленном CID == MAC,
авторизация с этого MAC не проходит?
Не пробовал - у меня авторизация через pppoe и клиенты ваще не имеют IP адресов в локалке.
4) Трафик сессии учитывается после ее окончания.
Уменя без проблем считается в реальном времени. Вот здесь / Отчёт/ IP Net/ Пользователи/ видно. Или здесь / Клиенты/ Логины/ Информация/ Сервисы/ IP Net/ Статистика/

Ответить