Документация по ОС FreeBSD Суббота, 18.05.2024, 18:07
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Net

mpd5(pppoe)+radius+ng_car+Abiils

Недавно устанавливал сервер для маленькой домашней сети. Сервер в основном используется для организования доступа в Интернет.
В начале думал взять свою связку (mpd + netams + ipfw + pipe + sh_scripts), но потом захотелось чего-то новенького, свеженького (да и намучено у меня там со скриптами и т.д., долго пришлось бы объяснять что к чему).
И вот остановился на связке:
mpd5 - в качестве pppoe-сервера (кому не нравится pppoe - ставьте pptp, думаю особой разницы в настройке не будет)
radius - как сервер AAA
Abills - в качестве биллинговой системы
ng_car - шейпинг (потому что раньше его не пробовал :) )

Основные настройки брал на официальном сайте Abills'a.
Предполагается, что система у вас уже установлена. В начале на тесте я ставил на FreeBSD 8.0-RC1 #0.
Затем переносил настройки на FreeBSD 7.2-RELEASE #0.
Также у вас должен быть установлен и настроен mysql-server. Я использовал mysql-server-5.0.86 с make-флагами
make WITH_CHARSET=cp1251 WITH_COLLATION=cp1251_bin

Также у вас должно быть собрано ядро с:

options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=1000
options IPFIREWALL_FORWARD
options NETGRAPH
options NETGRAPH_IPFW
options LIBALIAS
options NETGRAPH_NAT
options NETGRAPH_NETFLOW
options NETGRAPH_SPLIT
options NETGRAPH_ECHO
options NETGRAPH_ETHER
options NETGRAPH_TEE
options NETGRAPH_BPF
options NETGRAPH_IFACE
options NETGRAPH_KSOCKET
options NETGRAPH_MPPC_ENCRYPTION
options NETGRAPH_PPP
options NETGRAPH_PPTPGRE
options NETGRAPH_SOCKET
options NETGRAPH_TCPMSS
options NETGRAPH_VJC

либо загрузить модулем:
ipfw_nat.ko
ng_car.ko

Остальное, что нужно mpd он сам загрузит.

И так, приступим.
1. Abills.
# whereis abills
# cd /usr/ports/net/abills

В портах есть abills-0.41. На сайте сть 0.5-я версия. Я ставил из портов.
# make install clean

Создаем пользователя для абиллса:
# mysql -u root -p

use mysql;
INSERT INTO user (Host, User, Password) 
 VALUES ('localhost','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, 
 Lock_tables_priv, Create_tmp_table_priv) 
VALUES ('localhost', 'abills', 'abills', 'Y', 'Y', 'Y', 'Y', 'Y', 
 'Y', 'Y', 'Y', 'Y', 'Y');
CREATE DATABASE abills;
flush privileges;

Загружаем таблицы в базу.
# mysql -D abills < /usr/local/abills/abills.sql

Правим /usr/local/abills/libexec/config.pl
#DB configuration 
$conf{dbhost}='localhost';
$conf{dbname}='abills'; 
$conf{dbuser}='abills';
$conf{dbpasswd}='sqlpassword'; 
$conf{ADMIN_MAIL}='info@your.domain'; 
$conf{USERS_MAIL_DOMAIN}="your.domain";
# используется для шифрования паролей администраторов и пользователей.
$conf{secretkey}="test12345678901234567890";

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

Вносим в cron периодические процессы /etc/crontab

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

В /usr/local/abills/libexec/config.pl добавляем
$conf{mpd_filters}=1

2. mpd5
Настройка mpd5 уже не раз обсуждалась, но в кратце повторюсь, для полноты картины так сказать.
Для того, что бы собрать mpd с поддержкой ng_car рекомендуют, что бы модуль ng_car был уже загружен ядром.
# whereis mpd5
# cd /usr/ports/net/mpd5
# make install clean

 +--------------------------------------------------------------------+
 | Options for mpd 5.2 |
 | +----------------------------------------------------------------+ |
 | | [X] NG_CAR Use ng_car kernel module from port (< 7.0 only)| |
 | | [ ] NG_IPACCT Use ng_ipacct kernel module from port | |
 | | | |
 | | | |
 | | | |
 | | | |
 +-+------v(+)------------------------------------------------------+-+
 | [ OK ] Cancel |
 +--------------------------------------------------------------------+

# cd /usr/local/etc/mpd5
# cp mpd.conf.sample mpd.conf

После установки правим дефолтный конфиг до такого состояния:
startup:
 # configure mpd users
 set user admin PASSWD admin
# set user foo1 bar1
 # configure the console
 set console self 127.0.0.1 5005
 set console open
 # configure the web server
 set web self 0.0.0.0 5006
 set web open

default:
 load pppoe_server

pppoe_server:
 create bundle template B
 set ipcp ranges 10.10.10.254/32 10.10.10.0/24
 set iface idle 0
 set iface enable tcpmssfix
 set ipcp no vjcomp
 set iface up-script "/usr/local/abills/libexec/linkupdown mpd up"
 set iface down-script "/usr/local/abills/libexec/linkupdown mpd down"

 set bundle enable compression
 set ccp yes mppc
 set mppc yes e40
 set mppc yes e128
 set mppc yes stateless

 create link template common pppoe
 set link enable multilink
 set link action bundle B
 set link disable pap eap
 set link enable chap
 load radius
 set pppoe service "*"

 create link template em0 common
 set link max-children 1000
 set pppoe iface em0
 set link enable incoming

 set link no pap eap
 set link yes chap-md5
 set link keep-alive 20 60
 set link enable incoming
 set link no acfcomp protocomp

radius:
 set radius server 127.0.0.1 PASSWD 1812 1813
 set radius retries 3
 set auth acct-update 300
 set auth enable radius-auth
 set auth enable radius-acct
 set radius enable message-authentic

Обращаем внимание на слудющие строки:
Они понадобятся для настройки Abills'a.
 set user admin PASSWD admin
 set console self 127.0.0.1 5005

em0 - интерфейс, на котором слушает mpd5 (pppoe)
 create link template em0 common
 set link max-children 1000
 set pppoe iface em0
 set link enable incoming

PASSWD - пароль для подключения к радиус-серверу.
 set radius server 127.0.0.1 PASSWD 1812 1813

Не забываем также про ТАБуляцию, свойственную mpd.

3. FreeRadius. Пробовал freeradius2, но с ним у меня что-то не срослось. Интерфейс поднимался и через несколько секунд падал. Я не победил, по-этому переполз на 1-й.
# whereis freeradius
# cd /usr/ports/net/freeradius
# make install clean

+--------------------------------------------------------------------+
| Options for freeradius 1.1.7_4 |
| +----------------------------------------------------------------+ |
| |[ ] KERBEROS With Kerberos support | |
| |[ ] HEIMDAL With Heimdal Kerberos support | |
| |[ ] LDAP With LDAP database support | |
| |[X] MYSQL With MySQL database support | |
| |[ ] PGSQL With PostgreSQL database support | |
| |[ ] UNIXODBC With unixODBC database support | |
| |[ ] FIREBIRD With Firebird database support (EXPERIMENTAL) | |
| |[ ] SNMP With SNMP support | |
| |[ ] EDIR With Novell eDirectory support | |
| |[ ] NOPERL Do not require perl (use only if necessary) | |
| |[X] EXPERIMENTAL Build experimental modules | |
| +----------------------------------------------------------------+ |
| |
+--------------------------------------------------------------------+

После успешной установки правим конфиги радиуса:

# cd /usr/local/etc/raddb

файл users
DEFAULT Auth-Type = Accept
 Exec-Program-Wait = "/usr/local/abills/libexec/rauth.pl"

файл acct_users
DEFAULT Acct-Status-Type == Start
 Exec-Program = "/usr/local/abills/libexec/racct.pl"

DEFAULT Acct-Status-Type == Alive
 Exec-Program = "/usr/local/abills/libexec/racct.pl"

DEFAULT Acct-Status-Type == Stop
 Exec-Program = "/usr/local/abills/libexec/racct.pl"

в файл clients.conf прописываем пароль для доступа к радиус-серверу, тот что мы указывали в mpd.conf
client 127.0.0.1 {
 secret = PASSWD
}

В файле radiusd.conf
Нужно создать функции для преавторизации и поставторизации в секции 'modules'
exec pre_auth { 
 wait = yes 
 program = "/usr/local/abills/libexec/rauth.pl pre_auth" 
 input_pairs = request 
 output_pairs = config 
}

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

Комментируем использование модулей 'chap' и добавим 'pre_auth' в разделе 'authorize'

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

Для оповещения о неавторизированых пользователях. Внесите в секцию 'post-auth'
post-auth {
 Post-Auth-Type REJECT {
 post_auth
 }
 }

Создаем словарь для мпд dictionary.mpd:
VENDOR mpd 12341

ATTRIBUTE mpd-rule 1 string mpd

ATTRIBUTE mpd-pipe 2 string mpd

ATTRIBUTE mpd-queue 3 string mpd
ATTRIBUTE mpd-table 4 string mpd
ATTRIBUTE mpd-table-static 5 string mpd
ATTRIBUTE mpd-filter 6 string mpd
ATTRIBUTE mpd-limit 7 string mpd
ATTRIBUTE mpd-input-octets 8 string mpd
ATTRIBUTE mpd-input-packets 9 string mpd
ATTRIBUTE mpd-output-octets 10 string mpd
ATTRIBUTE mpd-output-packets 11 string mpd
ATTRIBUTE mpd-link 12 string mpd
ATTRIBUTE mpd-bundle 13 string mpd
ATTRIBUTE mpd-iface 14 string mpd
ATTRIBUTE mpd-iface-index 15 integer mpd
ATTRIBUTE mpd-input-acct 16 string mpd
ATTRIBUTE mpd-output-acct 17 string mpd
ATTRIBUTE mpd-drop-user 154 integer mpd

в файле dictionary добавляем строку:
$INCLUDE dictionary.mpd

4. Добавляем нужные модули perl. Также проверьте пусть к бинарнику перла. К примеру в 8-ке он лежит уже не в /usr/bin/perl , а в /usr/local/bin/perl. По-этому я делал симлинк:
# ln -s /usr/local/bin/perl /usr/bin/perl

# cd /root 
# perl -MCPAN -e shell 
o conf prerequisites_policy ask 
install DBI 
install DBD::mysql 
install Digest::MD5 
install Digest::MD4 
install Crypt::DES 
install Digest::SHA1 
install Bundle::libnet 
install Time::HiRes 
quit

5. Настриваем apache
Добавляем
Include /usr/local/abills/misc/apache/abills_httpd.conf

И сгенерим сертификаты:
# /usr/local/abills/misc/sslcerts.sh apache

Имейте ввиду, нужно что бы Common Name (eg, YOUR name) []: совпадал с именем вашего сервера (hostname).

Стартуем apache.
Если ставите apache22 и в логах ругань на
[warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter

то добавьте в /boot/loader.conf  
accf_http_load="YES"

6. Настраиваем Abbils.
Заходим на https://your.host:9443/admin/
Выбираем русский язык.
Теперь нужно сконфигурировать сервер доступа NAS
Идем в Система -> Сервер доступа

ID 1
IP 127.0.0.1
Название: NAS
Radius NAS-Identifier: 
Описание: 
Тип: mpd5:MPD 5.xx
Авторизация: SQL
External Accounting: 
Alive (sec.): 60
Отключено: 
:Управление:
IP:PORT: 127.0.0.1:5005 (тот, что настраивали в mpd.conf)
Пользователь: admin (тот, что настраивали в mpd.conf)
Пароль: PASSWD (тот, что настраивали в mpd.conf)
RADIUS Параметры (,)

Теперь добавляем ему пул адресов, которые будут выдаваться клиентам при подключении к ВПН-серверу.
Заходим в IP POOLs
Название: first
FIRST IP: 10.10.10.1
Количество: 253
Приоритет: 0

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

Теперь настроим хотя бы один тарифный план: Система -> Internet -> Тарифные планы -> Добавить
Тут настраиваем по вкусу, при этом указываем пул-адресов (IP Pool:) и RADIUS Parameters (,).
RADIUS Parameters (,) - это собственно и есть параметры передаваемые радиусом системе ng_car.

Сюда для примера добавим:
mpd-limit+="in#1=all rate-limit 1024000 192000 384000",
mpd-limit+="out#1=all rate-limit 1024000 192000 384000"

где первая цифра (rate-limit) собственно ограничение скорости при закачке
вторая - (normal burst) - какую полосу отдать за 1 секунду
третья - (extended burst) за первые полторы секунды

Формулы расчета burst (Cisco like rate-limit):
normal burst = configured rate * 3 / 16 
extended burst = 2 * normal burst

Теперь добавим пользователя Клиенты -> Логины -> Добавить
Затем привязываем к нему тарифный план. Далее исходя из тарифного плана (предоплата/постоплата) смотрим, нужно ли ему для успешной авторизации деньги на счету, и если нужны, то добавляем. Далее активируем пользователя.

Запускаем mpd, radius (предварительно добавив параметры запуска в rc.conf)
Проверяем, может ли пользователь авторизироваться в радиусе:
# radtest testuser testpassword 127.0.0.1:1812 0 PASSWD 0 127.0.0.1

если ему выдался ИП и т.д., то все ок.
Для логирования mpd, добавляем следующее в /etc/syslog.conf
!mpd
*.* /var/log/mpd.log

Создаем файл, даем права и рестартуем syslog
# touch /var/log/mpd.log
# chmod 600 /var/log/mpd.log
# /etc/rc.d/syslogd restart

7. Настроим ipfw и nat
Укажу минимальный набор правил для доступа пользователей в интернет:
rl1 - внешняя  сетевая карта
rl0 - внутреняя сетевая карта
192.168.1.0/24 - локальная сеть
${eip} - Внешний IP-адрес
table(1) - содержит созданные вами пулы адресов
Фаервол по-умолчанию закрытый.
ipfw nat 100 config if rl1
allow ip from any to any via lo0
ipfw add allow ip from 192.168.1.0/24 to 192.168.1.0/24 via rl0
ipfw add allow ip from 'table(1)' to 'table(1)'
ipfw add nat 100 ip from 'table(1)' to any
ipfw add nat 100 ip from any to ${eip}
ipfw table 1 add 10.10.10.0/24

Пробуем настроить соединение в Windows:

  • 1. На рабочем столе откройте Мой компьютер, в нем откройте Панель управления. Здесь открывайте Сетевые подключения.
  • 2. В пункте меню Файл выберете Новое подключение...
  • 3. Нажимайте Далее
  • 4. Выбирайте Подключится к Интернет и нажимайте Далее
  • 5. Выбирайте Установить подключение вручную и нажимайте Далее
  • 6. Выбирайте Через высокоскоростное соединение, запрашивающее имя пользователя и пароль и нажимайте Далее
  • 7. В поле Имя поставщика услуг введите название соединения, INET. Нажимайте Далее
  • 8. В поля Имя пользователя и Пароль вводите имя и пароль для входа в Интернет соответственно, и нажимайте Далее
  • 9. Установите пункт Добавить ярлык подключения на рабочий стол и нажимайте Готово
  • 10. Для подключения к интернет нажимайте Подключение.

    Дальше проверяем работу интернета, скорость закачки. Если что-то не так смотрим логи.

    Литература:
  • http://abills.net.ua/wiki/doku.php/abills:index
  • http://mpd.sourceforge.net/doc/mpd.html


  • Источник: http://www.lissyara.su/articles/freebsd/traffic_count/mpd5_pppoe+radius+ng_car+abiils/
    Категория: Net | Добавил: oleg (20.12.2009) | Автор: schizoid
    Просмотров: 1204 | Рейтинг: 0.0/0 |
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Форма входа

    Beastie

    Друзья сайта

    Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    links

    Copyright MyCorp © 2024