Настройка 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)

Нарезка скорости

В системе реализовано три вида механизмов нарезки скорости (Шейпер)

  1. Внутренний механизм mpd использующий для обрезки скорости механизм ng_car
  2. Внешний шейпер биллинга использующий механизм ipfw + ng_car
  3. Внешний шейпер биллинга использующий механизм 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:"

Дополнительно