Инструменты пользователя

Инструменты сайта


Боковая панель

Связь

mpd

MPD

Homepage: MPD - Multi-link PPP daemon for FreeBSD

MPD - это основанная на netgraph реализация ppp-протокола мультисвязи для FreeBSD. MPD спроектирован быть быстрым и гибким, обрабатывая конфигурацию и обращения в режиме пользователя, направляя пакеты данных напрямую в ядро.

Поддержка типов связи

MPD имеет унифицированную поддержку следующих типов связи:

  • modem — для использования различных асинхронных последовательных соединений, включая модемы, терминальные адаптеры ISDN а также нуль-модемное соединение. MPD включает событийно-управляемый скриптовый язык для идентификации модема, установки, ручного логина и т. д.
  • PPTP — для подключения через интернет, используя Point-to-Point Tunnelling Protocol (PPTP). Этот протокол поддерживается большинством Операционных систем и производителей оборудования.
  • L2TP — для подключения через интернет, используя Layer Two Tunnelling Protocol (L2TP). L2TP — это преемник PPTP, поддерживаемый современными клиентами и серверами.
  • PPPoE — для подключения через порт Ethernet, используя протокол PPP-over-Ethernet (PPPoE). Этот протокол часто используется DSL-провайдерами.
  • TCP — для туннеллирования PPP сессии по TCP соединению. Кадры закодированы так же, как при асинхронном последовательном соединении
  • UDP — для туннеллирования PPP сессии по UDP соединению. Каждый кадр инкапсулирован в пакет UDP-датаграммы
  • ng — для подключения, используя различные устройства, поддерживаемые netgraph-ом. netgraph — это модульная сетевая подсистема ядра, поддерживающая синхронные последовательные соединения, Cisco HDLC, Frame Relay и другие протоколы

Поддержка PPP

MPD поддерживает некоторые типы подпротоколов PPP и его расширения, такие как:

  • PPP с множественными подключениями
  • PAP, CHAP, MS-CHAP and EAP аутентификацию
  • сжатие трафика (MPPC, Deflate, Predictor-1)
  • шифрование трафика (MPPE, DESE, DESE-bis)
  • обмен параметрами IPCP и IPV6CP

В зависимости от конфигурационных правил и параметров подключения MPD может работать как обычный PPP клиент/сервер или перенаправлять подключение без модификации на другой хост, используя любой поддерживаемый тип подключения, предоставляя функциональность LAC/PAC/TSA для построения сетей с распределенным управлением доступом.

Дополнительные возможности

MPD также включает множество дополнительных особенностей (фич):

  • поддержка IPv4 и IPv6
  • управление через интерфейсы Telnet и HTTP
  • различные методы аутентификации и учета (RADIUS, PAM, script, file, …)
  • учет трафика посредством ng_netflow
  • NAT
  • дозвон по запросу с тайм-аутом простоя
  • динамическое управление подключением, основанное на требованиях (также известное как «rubber bandwidth» — «резиновый канал», «резиновая пропускная способность»)
  • мощный скриптовый язык чата для асинхронных последовательных портов
  • оттестированные скрипты для некоторых общих модемов и ISDN TA
  • чистый аппаратно-независимый дизайн
  • всестороннее протоколирование

Установка MPD 5.5

FreeBSD 7.2-RELEASE-p4 mpd-5.5

  • Установка
    > cd /usr/ports/net/mpd5
    > make install clean
    > echo 'mpd_enable="YES"' >> /etc/rc.conf
    > cd /usr/local/etc/mpd5/
    > cp mpd.conf.sample mpd.conf
    > cp mpd.secret.sample mpd.secret
    > chmod 440 mpd.conf
    > chmod 440 mpd.secret
  • Настройка mpd.secret. В этом файле хранятся логины и пароли пользователей VPN. Выдаваемый пользователю IP может быть динамическим.
    > ee mpd.secret
    #Пользователь              Пароль             Выдаваемый пользователю IP
    test1                    "test1"              192.168.1.201
  • Настройка и ротация log файлов mpd. В конце файла syslog.conf добавляем строки:
    > ee /etc/syslog.conf
    !mpd
    *.*     /var/log/mpd.log
    > touch /var/log/mpd.log
    > ee /etc/newsyslog.conf
    ...
    /var/log/mpd.log                        600  5     100  *     JC
    ...
    > /etc/rc.d/syslogd reload
mpd.conf переделать
  * Настройка mpd.conf - конфигурационного файла VPN сервера
> ee /usr/local/etc/mpd5/mpd.conf
#################################################################
#
#       MPD configuration file
#
#################################################################

startup:
        # configure mpd users
        # Пользователь с правами админа Логин: foo, Пароль: bar
        set user foo bar admin
        # configure the console
        # Нужно чтобы подключится по телнету через 5005 порт
        set console self 127.0.0.1 5005
        set console open                                                     
        # configure the web server
        # Web интрефейс MPD. Для подключения в браузере набрать: http://91.x.x.x:5006/
        set web self 91.x.x.x 5006
        set web open

default:
        load pptp_server

pptp_server:
# Define dynamic IP address pool.
# который присвоется VPN девайсу.
        set ippool add pool1 192.168.86.100 192.168.86.150

# Create clonable bundle template named B
        create bundle template B
        set iface enable proxy-arp
        set iface idle 1800
        set iface enable tcpmssfix
        set ipcp yes vjcomp
# Specify IP address pool for dynamic assigment.
        # IP адрес сервера, который мы будем показывать клиентам (можно не реальный IP)
        set ipcp ranges 192.168.1.101/32 ippool pool1
        set ipcp dns 192.168.1.254 - DNS сервер
        set ipcp nbns 192.168.1.254 - WINS сервер
# The five lines below enable Microsoft Point-to-Point encryption
# (MPPE) using the ng_mppc(8) netgraph node type.
        set ipcp ranges 192.168.1.101/32 ippool pool1
        set ipcp dns 192.168.1.254
        set bundle enable compression
        set ccp yes mppc
        set mppc yes compress
        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 eap
        set link enable chap
# We can use use RADIUS authentication/accounting by including
# another config section with label 'radius'.
#       load radius
        set link keep-alive 10 60
# We reducing link mtu to avoid GRE packet fragmentation.
        set link mtu 1460
# Configure PPTP
        set pptp self 91.x.x.x - указываем здесь ip сетевого интерфейса для подключения vpn, если стоят нули то подключается со всех интерфейсов
# Allow to accept calls
        set link enable incoming

> /usr/local/etc/rc.d/mpd5 start
  • Проверяем работу mpd
    > telnet localhost 5005
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    Multi-link PPP daemon for FreeBSD
    
    Username: foo
    Password: 
    
    Welcome!
    Mpd pid 66643, version 5.5 (root@ 17:37 30-Mar-2010)
    [] 
  • Настройка PF нужно открыть порт 1723
    # pptp
    pass in quick on $ext_if_a proto { tcp, udp } from any to self port 1723

Включение компрессии MPPC в mpd

Основной источник: Установка VPN сервера mpd5 + сжатие и шифрование

По умолчанию загружаемый модуль ng_mppc.ko в FreeBSD собран без поддержки компрессии. Для того чтобы строка set mppc yes compress в файле mpd.conf заработала ядро нужно пересобрать с параметрами:

options         NETGRAPH
# MPPC compression requires proprietary files (not included)
options        NETGRAPH_MPPC_COMPRESSION
options         NETGRAPH_MPPC_ENCRYPTION
> make buildkernel KERNCONF=PFVLANVPNNG
cc: /usr/src/sys/net/mppcc.c: No such file or directory
cc: /usr/src/sys/net/mppcd.c: No such file or directory
/usr/src/sys/netgraph/ng_mppc.c:83:22: error: net/mppc.h: No such file or directory
mkdep: compile failed
*** Error code 1

Stop in /usr/obj/usr/src/sys/PFVLANVPNNG.
*** Error code 1

Stop in /usr/src.
*** Error code 1

Stop in /usr/src.

Качаем недостающие файлы с сайта Alternative MPPC compression/decompression library или здесь mppc-1.0.tgz

> fetch http://mavhome.dp.ua/MPPC/mppc-1.0.tgz
> tar -xvf mppc-1.0.tgz -C /usr/src/sys/net/

Правим Makefile для того что бы активировать сжатие

> ee /usr/src/sys/modules/netgraph/mppc/Makefile
# поменять
NETGRAPH_MPPC_COMPRESSION?=     0
# на
NETGRAPH_MPPC_COMPRESSION?=     1

Переходим в директорию и устанавливаем

> cd /usr/src/sys/modules/netgraph/mppc
> make && make install && make clean

Проверяем есть ли строки. Если нет добавляем. Начиная с версии FreeBSD 6.3 они должны быть. В FreeBSD 7.2 есть точно.

# grep net/mppc /usr/src/sys/conf/files
net/mppcc.c			optional netgraph_mppc_compression
net/mppcd.c			optional netgraph_mppc_compression

Собираем ядро с поддержкой сжатия

> cd /usr/src/
> make buildkernel KERNCONF=PFVLANVPNNG
> make installkernel KERNCONF=PFVLANVPNNG && shutdown -r now

После сборки ядра сервер перезагрузится.После перезагрузки сжатие работает, остается настроить клиента и подключаться.

Подключение клиентов к VPN серверу MPD

  • Встроенный клиент Windows
    Control Panel -> Network Connections -> Create a New Connection -> 
    Next -> Connect to the network at my workplace -> 
    Next -> Virtual Private Network connection -> 
    Next -> "Имя Соединения (Любое) " -> 
    Next -> "Имя хоста или IP ADSL роутера" 
    -> Finish
    
    
  • FreeBSD mpd в роли клиента VPN
    
    

tcpdump GRE и 1723

tcpdump -i tun0 -p proto 47 or port 1723

Ссылки


mpd.txt · Последние изменения: 2011/09/07 09:23 (внешнее изменение)