mpd5(pppoe)+radius+ng_car+Abills

Автор: | Июнь 3, 2019

Недавно устанавливал сервер для маленькой домашней сети. Сервер в основном используется для организования доступа в Интернет.
В начале думал взять свою связку (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-флагами

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

 

либо загрузить модулем:

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

И так, приступим.
1. Abills.

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

Создаем пользователя для абиллса:

Загружаем таблицы в базу.

Правим /usr/local/abills/libexec/config.pl

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

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

 

В /usr/local/abills/libexec/config.pl добавляем

2. mpd5
Настройка mpd5 уже не раз обсуждалась, но в кратце повторюсь, для полноты картины так сказать.
Для того, что бы собрать mpd с поддержкой ng_car рекомендуют, что бы модуль ng_car был уже загружен ядром.

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


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.

em0 — интерфейс, на котором слушает mpd5 (pppoe)

PASSWD — пароль для подключения к радиус-серверу.

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

3. FreeRadius. Пробовал freeradius2, но с ним у меня что-то не срослось. Интерфейс поднимался и через несколько секунд падал. Я не победил, по-этому переполз на 1-й.

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

 

файл users

файл acct_users


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

В файле radiusd.conf
Нужно создать функции для преавторизации и поставторизации в секции ‘modules’


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

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

 

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

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


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 добавляем строку:

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

5. Настриваем 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

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

 

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

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

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

Сюда для примера добавим:

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

Формулы расчета burst (Cisco like rate-limit):

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

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

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

Создаем файл, даем права и рестартуем syslog

7. Настроим ipfw и nat
Укажу минимальный набор правил для доступа пользователей в интернет:
rl1 — внешняя  сетевая карта
rl0 — внутреняя сетевая карта
192.168.1.0/24 — локальная сеть
${eip} — Внешний IP-адрес
table(1) — содержит созданные вами пулы адресов
Фаервол по-умолчанию закрытый.

Пробуем настроить соединение в 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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *