=====MPD===== [http://sourceforge.net/projects/mpd]\\ Multi-link PPP Daemon, использующий технологию netgraph.\\ Установка # cd /usr/ports/net/mpd[4-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 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 Добавляем нового клиента для 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 3.18===== Конфигурация ====Установка==== ===Патч, расширяющий возможности MPD=== Лучше всего использовать исходники [[http://abills.asmodeus.com.ua/soft/mpd- 3.18.tar.gz|отсюда]]. При использовании MPD с дистрибутивов выше FreeBSD 5.1 патч не применяется корректно. **soft/kha0s-mpd.tar.gz** (''Входит в Abills, каталог soft'') Патч ставится после патча boco@ufanet.ru - mpd-3.18-drop-user-1.diff, хотя и полностью независим от него. Предназначен для тех случаев, когда пользователю необходимо предоставить предоплаченный объем трафика. Для удобства и универсальности лимит выставляется по аналогии с exppp:\\ VENDOR Exppp 1976 ATTRIBUTE Exppp-Traffic-Limit 2 integer Exppp Максимально возможное значение трафика за сессию - 2147483647 байт. Проверка счетчиков происходит раз в секунду, что вносит небольшую погрешность. Этот интервал можно поменять в самом патче согласно своих предпочтений и ресурсов. При завершении сессии по превышению лимита трафика выставляется Acct-Terminate-Cause со значением Session-Timeout для удобства анализа статистики по сессиям. ''kha0s(at)ukr.net'' tar zxvf kha0s-mpd.tar.gz -C /usr/ports/net/mpd cd /usr/ports/net/mpd make make install mpd -b -c 10001 Конфигурационный файл для подключения к радиусу\\ **/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 сервера\\ **mpd.conf** default: load pptp0 load pptp1 load pptp2 pptp0: new -i ng0 pptp0 pptp0 load pptp_standart pptp1: new -i ng1 pptp1 pptp1 load pptp_standart pptp2: new -i ng2 pptp2 pptp2 load pptp_standart pptp_standart: set bundle disable multilink set bundle max-logins 1 set iface disable on-demand set iface idle 0 set iface enable tcpmssfix set iface up-script "/usr/local/abills/libexec/linkupdown mpd up" set iface down-script "/usr/local/abills/libexec/linkupdown mpd down" set link no pap chap set link enable chap set link keep-alive 10 60 set link max-redial -1 set ipcp ranges 192.168.168.1/32 192.168.168.128/25 set ipcp dns 192.168.168.1 192.168.168.2 set bundle enable compression set ccp yes mppc set ccp yes mpp-e40 set ccp yes mpp-e128 set ccp yes mpp-stateless set pptp self 192.168.168.1 set pptp enable incoming set pptp disable originate set radius config /etc/radius.conf set radius me 192.168.168.1 set radius acct-update 300 set ipcp enable radius-ip set bundle enable radius-auth set bundle enable radius-acct set iface enable radius-idle radius-session radius-mtu radius-route set ccp enable radius **mpd.links**\\ pptp0: set link type pptp pptp1: set link type pptp pptp2: set link type pptp ====ABillS==== **/ System configuration/ NAS/** ^Type: | mpd | ^:Manage: | ^IP:PORT: | xxx.xxx.xxx.xxx:10001\\ IP-адрес NAS сервера и порт объявленный ''-c 10001'' | **Если Вы используете не пропатченый MPD, тогда тип сервера устанавливайте - other и задайте параметр Session-Timeout=65000 в поле RADIUS Parameters (,)**. =====MPD 4.xx===== [http://sourceforge.net/projects/mpd] перед началом конфигурации MPD соберите ядро системы со следующими параметрами # Поддержка netgraph options NETGRAPH options NETGRAPH_PPPOE # Поддержка шейпера options IPFIREWALL options IPFIREWALL_DEFAULT_TO_ACCEPT options DUMMYNET options IPFIREWALL_FORWARD - Для перенаправление на страницу авторизаци options IPFIREWALL_NAT - Поддержка НАТ options LIBALIAS Конфигурационный файл для подключения к радиусу\\ **/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 сервера\\ Общие настройки для MPD:\\ **mpd.conf** startup: # enable TCP-Wrapper (hosts_access(5)) to block unfriendly clients set global enable tcp-wrapper # configure the console set console port 5005 set console ip 127.0.0.1 set console user admin secretpass set console open #Netflow options set netflow export 127.0.0.1 9996 set netflow source 127.0.0.1 9990 #set netflow timeouts inactive active #set netflow node nodename #Radius Config radius: set radius config /etc/radius.conf set radius retries 3 set radius timeout 3 set radius me 192.168.202.15 set auth acct-update 300 set auth enable radius-auth set auth enable radius-acct set bundle enable compression set ccp yes mppc set auth enable mppc-pol set radius enable message-authentic ====PPTP==== Для поднятия сервиса дописываем в **mpd.conf** default: load pptp0 load pptp1 pptp0: new -n -i ng0 pptp0 pptp0 load pptp pptp1: new -i ng1 pptp1 pptp1 load pptp #Incoming PPTP link config pptp: # new -i ng0 pptp pptp set iface disable on-demand set iface enable proxy-arp set iface idle 1800 set iface enable tcpmssfix set bundle enable multilink # use RADIUS servers load radius set link yes acfcomp protocomp set link no pap chap set link enable chap set link keep-alive 10 60 set link mtu 1460 set ipcp yes vjcomp set ipcp ranges 10.0.0.1/32 10.0.0.50/32 set ipcp dns 192.168.1.3 set ipcp nbns 192.168.1.4 # # 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 ccp yes mpp-e40 set ccp yes mpp-e128 set ccp yes mpp-stateless set pptp self %VPN_SERVER_IP% set pptp enable incoming set pptp disable originate и в **mpd.links** pptp0: set link type pptp pptp1: set link type pptp ====L2TP==== Для запуска сервиса дописываем в **mpd.conf** default: load l2tp0 load l2tp1 l2tp0: new -i ng0 l2tp0 l2tp0 load l2tp_server l2tp1: new -i ng1 l2tp1 l2tp1 load l2tp_server l2tp_server: set bundle disable multilink set bundle enable compression set bundle yes crypt-reqd set ipcp yes vjcomp # set ipcp ranges 131.188.69.161/32 131.188.69.170/28 set ipcp dns %DNS_SERVER% set ccp yes mppc set iface disable on-demand set iface enable proxy-arp set link yes acfcomp protocomp set link no pap chap set link enable chap set link keep-alive 10 180 load radius set iface up-script "/usr/abills/libexec/linkupdown mpd up" set iface down-script "/usr/abills/libexec/linkupdown mpd down" set l2tp self 192.168.202.15 set l2tp enable incoming set l2tp disable originate и в **mpd.links** l2tp0: set link type l2tp l2tp1: set link type l2tp ====Dial-In==== Для запуска сервиса дописываем в **mpd.conf** startup: # configure the console set console port 5005 set console ip 127.0.0.1 set console user admin gbgtw set console open default: load dialin dialin: new dialin modema set iface idle 900 set iface session 0 set bundle enable noretry set ipcp yes vjcomp set link enable chap # set link enable chap pap set link yes acfcomp protocomp set ipcp dns 195.95.171.2 set modem idle-script AnswerCall load radius radius: set radius config /etc/radius.conf 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 bundle enable compression set ccp yes mppc set ccp enable mppe-policy set radius enable message-authentic и в **mpd.links** modema: set phys type modem set modem device /dev/cuad1 set modem speed 115200 set modem var $DialPrefix "DT" bitsurfr: set phys type modem set modem device /dev/cuad2 set link latency 1000 set link bandwidth 92160 set modem speed 115200 set modem watch +cd set modem var $TA_SwitchType "NI-1" set modem var $TA_Dirno1 "2125551212" set modem var $TA_Dirno2 "2125551212" set modem var $TA_SPID1 "212555121201" set modem var $TA_SPID2 "212555121202" set modem var $TA_Bonding "yes" ====ABillS==== **/ System configuration/ NAS/** ^Type: | mpd4 | ^:Manage: | ^IP:PORT: | 127.0.0.1:5005\\ IP-дрес и порт контроля NAS-сервера | ^User: | admin | ^Password:| secretpass | =====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 set console self %MPD_CONSOLE_IP% %MPD_CONSOLE_PORT% set user %MPD_CONSOLE_USER% %MPD_CONSOLE_PASSWORD% admin set console 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 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 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 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 фильтры для учёта пирингового трафика. \\ **Внимание если сетей больше чем 1000 использование фильтров становиться не эффективным, так как все сети RADIUS не успевает передать MPD. По этому более правильно при большом количестве сетей использовать схему Dv+IPN ** | **/ System configuration/ NAS/** ^Type: | mpd5 | ^:Manage: | ^IP:PORT: | 127.0.0.1:5005\\ IP-адрес и порт контроля NAS-сервера | ^User: | admin | ^Password:| secretpass | =====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=...