=====MPD===== [http://sourceforge.net/projects/mpd]\\ Multi-link PPP Daemon, использующий технологию netgraph.\\ Установка # cd /usr/ports/net/mpd5 && make && make install Функции шейпера осуществляет программа: /usr/abills/libexec/linkupdown [[abills:docs:manual:shaper_start|Дополнительная информация по шейперу]] Обязательно [[abills:docs:Freebsd_Core|включите следующие опции в ядро]] 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 = secretpass 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 Перезагружаем syslog # killall -1 syslogd =====MPD5===== Конфигурация демона ====PPTP/PPPoE==== **/usr/local/etc/mpd5/mpd.conf** startup: # enable TCP-Wrapper (hosts_access(5)) to block unfriend 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% admi #set console open set radsrv peer %BILLING_IP% %POD_PASSWORD% # set radsrv self %NAS_IP% %POD_PORT% set radsrv open #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_SO 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 следующая секция pptp_server: # Define dynamic IP address pool. 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 set iface down-script "/usr/abills/libexec/linkupdown mp 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 encryptio # (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 set link enable peer-as-calling # Calling-Station-Id = "10.0.4.16 / 00:18:f3:5a:9f:6a / em # set link enable report-mac # 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 # set pptp self %VPN_SERVER_IP% # Allow to accept calls set link enable incoming #load server_common load radius ===PPPOE=== Для сервере PPTP следующая секция: 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 ##MULTI_SECTION:PPPOE_INTERFACES #%PPPOE_INTERFACE% %DESCRIBE% create bundle template %PPPOE_INTERFACE% set iface idle 1800 set iface enable tcpmssfix set iface up-script "/usr/abills/libexec/linkupdown mpd set iface down-script "/usr/abills/libexec/linkupdown mpd 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 # Секции 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 %RADIUS_AUTH_SERVER% %RADIUS_SECRET% %RAD #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 127.0.0.1 secretpass 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=... * [[http://wiki.lissyara.su/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_mpd5|Перевод документации по mpd5]] * [[abills:docs:mpd:old_versions|Старые версии MPD (не используются)]] ====Ошибки настройки==== * [[abills:docs:faq:ru?&#kazhetsja_nastroil_no_nikto_ne_mozhet_podkljuchitsja|Настроил но никто не подключается]] * [[http://abills.net.ua/forum/viewforum.php?f=5|Форум]]