Настройка MPD5
Описывается конфигурация сервиса MPD для приёма PPTP/PPPoE соединений, и конфигурации трёх видов шейперов доступных в ABillS
До начала конфигурации сервиса нужно настроить Freeradius версии 2 и ABillS
Содержание:
Установка
# cd /usr/ports/net/mpd5/ && make install clean
Настройка
/usr/local/etc/mpd5/mpd.conf
startup: set global enable tcp-wrapper # Настройка консоли управления через телнет #set console self %MPD_CONSOLE_IP% 5005 #set user %MPD_CONSOLE_USER% %MPD_CONSOLE_PASSWORD% admin #set console open # Управление (сброс сессии) через Radius POD set radsrv peer %BILLING_IP% %POD_PASSWORD% # set radsrv self %NAS_IP% 3799 set radsrv open #set web self 0.0.0.0 5006 #set web open # Опции отправки Netflow статистики на сервер билинга set netflow peer %MPD_NETFLOW_IP% %MPD_NETFLOW_PORT% set netflow self %MPD_NETFLOW_SOURCE_IP% %MPD_NETFLOW_SOURCE_PORT% set netflow timeouts 15 15 set netflow hook 9000 #set netflow node netflow log -echo -radius -rep default: load pptp_server load pppoe_server pptp_server: # Пул адресов с которого відавать если радиус не відал адрес set ippool add pool1 %MPD_IPPOOL_FIRST% %MPD_IPPOOL_LAST% # Create clonable bundle template named B create bundle template B set iface enable proxy-arp set iface idle 1800 set iface enable tcpmssfix # Включение внешнего шейпера, если используете внутренний mpd шейпер ($conf{mpd_filter}=1) данные строки стоит закоментировать set iface up-script "/usr/abills/libexec/linkupdown mpd up" set iface down-script "/usr/abills/libexec/linkupdown mpd down" set ipcp yes vjcomp # Specify IP address pool for dynamic assigment. set ipcp ranges 192.168.100.1/32 ippool pool1 set ipcp dns %DNS_SERVER% # Включение шифрование трафика set bundle enable compression set ccp yes mppc set mppc yes e40 set mppc yes e128 set mppc yes stateless create link template L pptp set link action bundle B set link enable peer-as-calling # Calling-Station-Id в формате "10.0.4.16 / 00:18:f3:5a:9f:6a / em0" # set link enable report-mac set link enable multilink set link yes acfcomp protocomp set link no pap chap set link enable chap set link keep-alive 10 60 set link mtu 1460 # настройка PPTP # IP адрес сервера pptp если не указан использовать любой из адресов # set pptp self %VPN_SERVER_IP% set link enable incoming load radius #Настрофка PPPoE сервиса pppoe_server: create link template P pppoe set link disable multilink set link disable pap eap chap set link enable chap-md5 load radius set pppoe service * set link enable peer-as-calling set ippool add pool12 192.168.16.2 192.168.19.254 #Включить PPPoE сервис на интерфейсе ##MULTI_SECTION:PPPOE_INTERFACES #%PPPOE_INTERFACE% %DESCRIBE% create bundle template %PPPOE_INTERFACE% set iface idle 1800 set iface enable tcpmssfix # Включение внешнего шейпера, если используете внутренний mpd шейпер ($conf{mpd_filter}=1) данные строки стоит закоментировать set iface up-script "/usr/abills/libexec/linkupdown mpd up" set iface down-script "/usr/abills/libexec/linkupdown mpd down" set ipcp dns %DNS_SERVER% set ipcp ranges 10.10.0.1 ippool pool1 create link template %PPPOE_INTERFACE% P set link action bundle %PPPOE_INTERFACE% set pppoe iface %PPPOE_INTERFACE% set link enable incoming ##END_MULTI_SECTION # Настройка параметров работы с Radius radius: #IP, пароль и порты RADIUS-сервера set radius server %RADIUS_AUTH_SERVER% %RADIUS_SECRET% %RADIUS_AUTH_PORT% %RADIUS_ACCT_PORT% set radius retries 3 set radius timeout 10 set auth acct-update 300 set auth enable radius-auth set auth enable radius-acct set auth disable internal
Переменные используеміе в конфигурационном файле. Данные переменные стоит заменить значениями конфигурации
Управление через Telnet
%MPD_CONSOLE_IP% | IP адресе для подключения к mpd |
%MPD_CONSOLE_PORT% | Консольный порт. по умочанию 5005 |
%MPD_CONSOLE_USER% | Консольный пользователь |
%MPD_CONSOLE_PASSWORD% | Пароль авторизации консоли |
Управление через RADIUS COA POD
%BILLING_IP% | IP адрес билинга с которого будет осуществлятся управление |
%POD_PASSWORD% | Пароль доступа |
%NAS_IP% | IP адрес MPD |
%POD_PORT% | Порт управления. По умолчанию 3799 |
Отправка статистики по Netflow
%MPD_NETFLOW_IP% | IP Netflow анализатора |
%MPD_NETFLOW_PORT% | порт Netflow анализатора |
%MPD_NETFLOW_SOURCE_IP% | IP от которого будет идти поток |
%MPD_NETFLOW_SOURCE_PORT% | порт от которого будет идти поток |
%MPD_IPPOOL_FIRST% | Первый аресс пула адресов по умолчанию |
%MPD_IPPOOL_LAST% | Последний аресс пула адресов по умолчанию |
%DNS_SERVER% | DNS сервер |
%VPN_SERVER_IP% | IP VPN (PPTP) сервера. Если адрес не укзан система слушает запросі на всех адресах |
%PPPOE_INTERFACE% | PPPoE интерфейс прослушки сервиса |
%RADIUS_AUTH_SERVER% | IP адреса радиус сервера |
%RADIUS_SECRET% | Секретный ключ радиус сервера |
%RADIUS_AUTH_PORT% | Порт авторизации. По умолчанию 1812 |
%RADIUS_ACCT_PORT% | Порт акаунтинга. По умолчанию 1813 |
Авто включение сервиса при старте системы
/etc/rc.conf
mpd_enable="YES"
Настройка Freeradius
Включить дополнительный словарь
# cat /usr/abills/misc/mpd/mpd.dictionary >> /usr/local/etc/raddb/dictionary
Для корректной авторизации MPD нужно в Freeradius прописать IP адрес и секретный ключ авторизации сервера доступа
Начиная с 0.7x используется sql
модуль Freeradius и отдельно прописывать ничего в clients.conf не нужно, достаточно добавить сервер доступа в ABillS.
адрес MPD 127.0.0.1
/usr/local/etc/raddb/clients.conf
client 127.0.0.1 { secret = radsecret shortname = short }
Перезагрузить RADIUS сервер
Настройка ABillS
Для авторизации сервиса MPD также нужно завести сервера доступа в системе ABillS.
/ Система/ Сервера доступа/
IP: | IP адрес авторизации |
---|---|
Тип: | Тип сервера доступа. mpd5 |
Alive: | Время обновления статистики. Рекомендуемое значение 300 |
Пользователь: | admin Используется для выполнения команд через telnet, и синхронизации сессий с удалённым сервером |
IP:PORT: | 127.0.0.1:3799:5005 127.0.0.1 - IP-адрес сервера доступа 3799 - порт контроля NAS-сервера через Radius CoA/PoD 5005 - Порт консольного управления (опционально). Разрешает управлять сервером через (консоль биллинга) |
Пароль: | Пароль управления и сброса с линии |
После заведения сервера доступа заводятся пулы адресов которые будут выдаваться клиентам при авторизации. На один сервер доступа можно завести несколько пулов адресов или использовать один пул на несколько серверов доступа. Также можно использовать последовательность пулов при выдаче адресов используя приоритет. Пули с самым низким приоритетом выдаются в первую очередь. Ни в коме случае нельзя использовать в статических адресах клиентов адреса которые попадают в динамический пул иначе будет конфликт адресов
Название | Название пула |
First IP | Первый IP пула |
Количество | количество адресов в пуле |
Приоритет | Приоритет. Пулы с самым маленьким приоритетом выдают адреса первыми |
Статический | Статический пул. Используется для выдачи адресов абонентам статически |
Скорость | Общая скорость все активных абонентов пула. (данная опция работает с модулем pool_speed) |
Нарезка скорости
В системе реализовано три вида механизмов нарезки скорости (Шейпер)
- Внутренний механизм mpd использующий для обрезки скорости механизм ng_car
- Внешний шейпер биллинга использующий механизм ipfw + ng_car
- Внешний шейпер биллинга использующий механизм ipfw + dummynet
Каждый из механизмов имеет свои особенности которые описаны ниже
Внутренний механизм mpd использующий для обрезки скорости механизм ng_car
Данный механизм является самым оптимальным по отношению к используемым ресурсам. его эффективно использовать если есть один класс трафика или несколько классов с небольшим количеством сетей (до 30).
Включается данный механизм опцией конфигурационного файла биллинга
/usr/abills/libexec/config.pl
$conf{mpd_filters}=1;
При включении данной опции параметры скорости при авторизации преобразуются и передаются через radius пары.
Для изменения скорости на «лету» без переподключения абонента нужно запускать программу billd с указанием сервера доступа на котором её запускаете
Пример:
# /usr/abills/libexec/billd checkspeed MPD_FILTERS=1 NAS_IDS=xxx
Программа просматривает поточную скорость соединения и при несоответствии со скоростью биллинга преобразует её в нужную.
Если стоит только задача просмотреть скорость без изменения нужно добавить в аргументы программы опцию SHOW_SPEED=1
Изменения скорости "на лету" (CoA):
Поскольку через механизм CoA получить значение скорости в текущей реализации MPD невозможно, данная схема предусматривает планирование смены скорости с помощью cron.
Пример:
9 1 * * * root /usr/abills/libexec/billd change_mpd_speed NAS_IDS='23;29' TP_IDS='26;27;28'
Внешний шейпер биллинга использующий механизм ipfw + ng_car
Данный механизм является более гибким в работе так как разрешает добавить или исключить определённые сети сети из шейпера, а также использовать неограниченное количество пиринговых сетей и направлений в этих сетях.
Принципы работы
При старте системы программой /usr/local/etc/rc.d/shaper_start.sh создаются ipfw правила перенаправления в ng_car ноду. При поднятии сессии программа /usr/abills/libexec/linkupdown заносит IP адрес абонента в 10 и 11 таблицу ipfw, если у абонента нет правил обрезки скорости он заносится в 9 таблицу. После старта системы правила пере направления должны выглядеть следующим образом.
# ipfw show # Пиринговые сети с ID 2 08000 0 0 pipe tablearg ip from table(14) to table(2,2) in recv ng* 08010 0 0 pipe tablearg ip from table(2,2) to table(15) out xmit ng* # Пиринговые сети с ID 1 09000 0 0 pipe tablearg ip from table(12) to table(2,1) in recv ng* 09010 0 0 pipe tablearg ip from table(2,1) to table(13) out xmit ng* # Глобальный трафик 10000 0 0 pipe tablearg ip from table(10) to any in recv ng* 10010 0 0 pipe tablearg ip from any to table(11) out xmit ng* # Авторизованные абоненты без заданной скорости (анлим) 10020 0 0 allow ip from table(9) to any in recv ng* 10025 0 0 allow ip from any to table(9) out xmit ng*
Настройка Включение режима в биллинге /usr/abills/libexec/config.pl
$conf{ng_car}=1;
Установка и настройка контролера шейпера в биллинге
# cp /usr/abills/misc/freebsd/shaper_start.sh /usr/local/etc/rc.d/
/etc/rc.conf
abills_shaper_enable="YES"
Проверка установленной скорости и изменении скорости на лету
Для изменения скорости на «лету» без переподключения абонента нужно запускать программу billd с указанием сервера доступа на котором её запускаете
Пример:
# /usr/abills/libexec/billd checkspeed NAS_ID=xxx
Программа просматривает поточную скорость соединения и при несоответствии со скоростью биллинга преобразует её в нужную.
Если стоит только задача просмотреть скорость без изменения нужно добавить в аргументы программы опцию SHOW_SPEED=1
Внешний шейпер биллинга использующий механизм ipfw + dummynet
Данная схема является альтернативой схемы «ipfw + ng_car» использующая для контроля скорости механизм ipfw + dummynet
Принципы работы
При старте системы программой /usr/local/etc/rc.d/shaper_start.sh создаются ipfw правила заворачивания трафика в pipe, а также создаются pipe правила для скоростей указанных в тарифных планах и индивидуальных скоростях пользователей. При поднятии сессии программа /usr/abills/libexec/linkupdown заносит IP адрес абонента в 10 и 11 таблицу ipfw, если у абонента нет правил обрезки скорости он заносится в 9 таблицу. После старта системы правила пере направления должны выглядеть следующим образом.
# ipfw show # Пиринговые сети с ID 2 08000 0 0 pipe tablearg ip from table(14) to table(2,2) in recv ng* 08010 0 0 pipe tablearg ip from table(2,2) to table(15) out xmit ng* # Пиринговые сети с ID 1 09000 0 0 pipe tablearg ip from table(12) to table(2,1) in recv ng* 09010 0 0 pipe tablearg ip from table(2,1) to table(13) out xmit ng* # Глобальный трафик 10000 0 0 pipe tablearg ip from table(10) to any in recv ng* 10010 0 0 pipe tablearg ip from any to table(11) out xmit ng* 10020 0 0 allow ip from table(9) to any in recv ng* 10025 0 0 allow ip from any to table(9) out xmit ng*
Настройка Включение режима в биллинге. При работе данной схеме в конфигурационном файле /usr/abills/libexec/config.pl не должно быть опций
$conf{ng_car}=1; $conf{mpd_filters}=1;
Установка и настройка контролера шейпера в биллинге
# cp /usr/abills/misc/ipfw/shaper_start.sh /usr/local/etc/rc.d/
/etc/rc.conf
abills_shaper_enable="YES"
Проверка установленной скорости и изменении скорости на лету
Для изменения скорости на «лету» без переподключения абонента нужно запускать программу billd с указанием сервера доступа на котором её запускаете
Пример:
# /usr/abills/libexec/billd checkspeed NAS_IDS=xxx
Программа просматривает поточную скорость соединения и при несоответствии со скоростью биллинга преобразует её в нужную.
Если стоит только задача просмотреть скорость без изменения нужно добавить в аргументы программы опцию SHOW_SPEED=1
Настройка NAT
Убедитесь что файл /usr/local/etc/rc.d/shaper_start.sh установлен.
Включение шейпера происходит в /etc/rc.conf
abills_nat=«EXTERNAL_IP:INTERNAL_IPS INTERNAL_IPS2:NAT_IF» | Включение NAT EXTERNAL_IP - IP адрес интерфейса смотрящего в интернет. Если параметр не указан система автоматически первый адрес с интерфейса маршрутизации по умолчанию INTERNAL_IPS - Пул адресов которым разрешён доступ в интернет INTERNAL_IPS2 - Второй пул адресов которым разрешён доступ в интернет NAT_IF - имя интерфейса смотрящего в интернет. Если параметр не указан система автоматически определяет интерфейс маршрутизации по умолчанию |
---|
Пример:
abills_nat="xxx.xxx.xxx.xxx:10.0.0.0/24,192.168.0.0/16:"