Это старая версия документа.


MPD

[http://sourceforge.net/projects/mpd]
Multi-link PPP Daemon, использующий технологию netgraph.

Установка

# cd /usr/ports/net/mpd[5] && make && make install

Создать конфигурационный файл для подключения к радиусу /etc/radius.conf

auth    127.0.0.1:1812      radsecret   4    4
acct    127.0.0.1:1813      radsecret   4    4

127.0.0.1 - адрес Radius сервера

Функции шейпера осуществляет программа:

/usr/abills/libexec/linkupdown 

Обязательно включите следующие опции в ядро

options         IPFIREWALL
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         DUMMYNET

options         NETGRAPH
options         NETGRAPH_PPPOE

конфигурация сервера freeradius. Добавить дополнительные RADIUS пары в словарь raddb/dictionary

VENDOR          mpd             12341                                                              
                                                                                                   
BEGIN-VENDOR	mpd

ATTRIBUTE	mpd-rule	1	string
ATTRIBUTE	mpd-pipe	2	string
ATTRIBUTE	mpd-queue	3	string
ATTRIBUTE	mpd-table	4	string
ATTRIBUTE	mpd-table-static	5	string
ATTRIBUTE	mpd-filter	6	string
ATTRIBUTE	mpd-limit	7	string
ATTRIBUTE	mpd-input-octets	8	string
ATTRIBUTE	mpd-input-packets	9	string
ATTRIBUTE	mpd-output-octets	10	string
ATTRIBUTE	mpd-output-packets	11	string
ATTRIBUTE	mpd-link	12	string
ATTRIBUTE	mpd-bundle	13	string
ATTRIBUTE	mpd-iface	14	string
ATTRIBUTE	mpd-iface-index	15	integer
ATTRIBUTE	mpd-input-acct	16	string
ATTRIBUTE	mpd-output-acct	17	string
ATTRIBUTE	mpd-action	18	string
ATTRIBUTE	mpd-peer-ident	19	string
ATTRIBUTE	mpd-iface-name	20	string
ATTRIBUTE	mpd-iface-descr	21	string
ATTRIBUTE	mpd-iface-group	22	string
ATTRIBUTE	mpd-drop-user	154	integer

END-VENDOR	mpd

Добавляем нового клиента для RADIUS в raddb/clients.conf:

client 127.0.0.1 {
 secret = radsecret
 shortname = shortname
}

Ведение логов:

/etc/syslog.conf

!mpd
*.* /var/log/mpd.log

/etc/newsyslog.conf

/var/log/mpd.log 600 5 100 * JC

Создаём файл логов

# touch /var/log/mpd.log
# killall -1 syslogd

Старые версии MPD (не используються):

MPD5

Конфигурация демона

PPTP

/usr/local/etc/mpd5/mpd.conf

startup:
        # enable TCP-Wrapper (hosts_access(5)) to block unfriendly clients
        set global enable tcp-wrapper
        # configure the console old way
        #set console self %MPD_CONSOLE_IP% %MPD_CONSOLE_PORT%
        #set user %MPD_CONSOLE_USER% %MPD_CONSOLE_PASSWORD% admin
        #set console open
        # Radius CoA/PoD
        set radsrv peer %BILLING_IP%  %POD_PASSWORD%
        # set radsrv self %NAS_IP% %POD_PORT%
        set radsrv open
        #WEB managment
        #set web self 0.0.0.0 5006
        #set web open
        #Netflow options
        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
#       Calling-Station-Id = "10.0.4.16 / 00:18:f3:5a:9f:6a / em0"
        set link enable report-mac
        #set netflow node netflow


default:
  load pptp_server
  # load pppoe_server

Для сервере PPTP следующая секция

pptp_server:
  # Define dynamic IP address pool.
  # Диапазон IP адрессов, 
  # который присвоется VPN девайсу.
  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
  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%
  # The five lines below enable Microsoft Point-to-Point encryption
  # (MPPE) using the ng_mppc(8) netgraph node type.
  set bundle enable compression
  set ccp yes mppc
  set mppc yes e40
  set mppc yes e128
  set mppc yes stateless
  # Create clonable link template named L
  create link template L pptp
  set link enable peer-as-calling
  # Set bundle template to use
  set link action bundle B
  # Multilink adds some overhead, but gives full 1500 MTU.
  set link enable multilink
  set link yes acfcomp protocomp
  set link no pap chap
  set link enable chap
  set link keep-alive 10 60
  # We reducing link mtu to avoid GRE packet fragmentation
  set link mtu 1460
  # Configure PPTP
  # Внешний IP на котором будет прослушиватся соединение
  set pptp self %VPN_SERVER_IP%
  load server_common  

PPPOE

Для сервере PPTP следующая секция:

 pppoe_server:
      create bundle template B
      set iface idle 0
      set iface enable tcpmssfix proxy-arp
      set ipcp no vjcomp
      set iface up-script   "/usr/abills/libexec/linkupdown mpd up"
      set iface down-script "/usr/abills/libexec/linkupdown mpd down"
      set ipcp ranges 10.10.0.1 ippool pool1
      set ipcp dns %DNS%

      create link template L pppoe
      set link action bundle B
      set pppoe acname "bras1"
      set pppoe iface %PPPOE_INTERFACE%
      set pppoe service "*"
      load server_common

# Секции server_common, radius

server_common:
      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


      load radius

radius:
     #IP, пароль и порты RADIUS-сервера
     #set radius server 127.0.0.1 radsecret 1812 1813
     set radius config /etc/radius.conf
     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

Dial-In

использую два последних порта мультипортовки cuada и cuadb.
mpd.script - стандартный

mpd.conf

startup:
        set console self 127.0.0.1 5005
        set console user foo bar
        set console open

default:
        load modem0
        load modem1


modem0:
        create bundle static B1
        set ipcp dns 192.168.1.1
        set iface idle 900
        create link static L1 modem
        set link action bundle B1
        set link max-redial -1
        set modem device /dev/cuadb
        load standart

modem1:
        create bundle static B2
        set ipcp dns 192.168.1.1
        set iface idle 900
        create link static L2 modem
        set link action bundle B2
        set link max-redial -1
        set modem device /dev/cuad1
        load standart

standart:

        set link enable chap pap eap
        set modem var $DialPrefix "DT"
        set modem idle-script AnswerCall
        set link enable incoming
        load radius

radius:
        #set radius config /etc/radius.conf
        set radius server localhost radsecret 1812 1813
        set radius retries 3
        set radius timeout 3
        set radius me 127.0.0.1
        set auth acct-update 300
        set auth enable radius-auth
        set auth enable radius-acct
        set radius enable message-authentic
  

ABillS

config.pl

$conf{mpd_filters}=1; Использовать MPD фильтры для создания RADIUS атрибутов шейпера и учёта пирингового трафика.
При использовании данного параметра обязательно выбирайте сети класса трафика.
Внимание если сетей больше чем 1000 использование фильтров становиться не эффективным, так как все сети RADIUS не успевает передать MPD. По этому более правильно при большом количестве сетей использовать схему Dv+IPN
проверка скорости выполняется на сервере доступа:
/usr/abills/libexec/billd checkspeed NAS_IDS=12 MPD_FILTER=1

/ System configuration/ NAS/

Type: mpd5
Alive Время обновления статистики. Рекомендуемое значение 300
:Manage:
IP:PORT:
IP:POD/COA PORT:TELNET PORT:
Пример
127.0.0.1:3799:5005

IP-адрес и порт контроля NAS-сервера через Radius CoA/PoD и телнет
IP:RADIUS POD PORT:TELNET PORT
User: Логин для управления по Telnet
Password: secretpass
пароль для RADIUS POD/COA и Telnet

В системе специально настраивается два типа управления Telpnet и RADIUS POD/COA. Удалённо с биллинга абоненты сбрасываются используя RADIUS POD/COA локальные же процессы (checkmpd - синхронизация активных сессий) используют telnet соединение

ng_car

Также можно использовать внутренние параметры шейпера mpd вместо шейпера ABillS (linkupdown). Для включения шейпера используя технологию ng_car нужно прописать в RADIUS pairs:

mpd-limit+=in#1=all shape 128000 4000,
mpd-limit+=out#1=all shape 128000 4000

Системные настройки сервера

Есть некоторые моменты, которые следует учесть, если ваш сервер имеет большое количество соединений. Например, можно столкнуться с ситуацией, когда при выводе команды ngctl list будет выдаваться No buffer space available. Чтобы этого избежать следует добавить в /boot/loader.conf:

#Freebsd 7.2
kern.ipc.nmbclusters=262144
kern.ipc.maxsockets=262144
net.graph.maxalloc=4096
kern.maxusers=2048
# maximize if ngctl not enough space) (amd64)
#kern.ipc.maxpipekva=536870912
# maximize if ngctl not enough space) (i386)
kern.ipc.maxpipekva=256000009

kern.maxfiles=204800
kern.maxfilesperproc=200000
kern.ipc.maxsockbuf=524288

в /etc/sysctl.conf:

net.graph.maxdgram=128000
net.graph.recvspace=128000

Будьте предельно внимательны при изменении этих значений для разных версий ОС они могут отличаться. Если система не загружается следует вернуть значения обратно. Самый критичный параметр kern.ipc.maxpipekva.

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

Контроль активных сессий MPD. Программа сравнивает поднятые mpd интерфейсы и те которые прописаны в биллинге. Данную программу следует запускать на сервере доступа.

 # /usr/abills/libexec/billd checkmpd NAS_IDS=...

Ошибки настройки