Как стать автором
Обновить

Настройка mpd5 клиента в ОС FreeBSD

Одной из задач системного администратора является удаленное администрирование различных серверов. На Windows 2003 устанавлиавается и настраивается служба маршрутизации и к ней устанавливается клиентское vpn подключение. Так у меня и было настроено, но т.к. клиент у меня был мой рабочий сервер, то это вызывало некоторые неудбства, например вынос шлюза по умолчанию, в результате у моего dns сервера напрочь терялась способность к пересылке запросов на сервер провайдера :) Стоп, подумал я, у меня же есть моя рабочая лошадка — FreeBSD 8, которая по функционалу ничуть не хуже 2003го сервера. И решил я поднять клиента на ней.
Итак, поехали.

В качестве клиента я решил использовать mpd5, ибо разработчики его утверждают, что он полностью совместим с 2003м сервером. Для начала, немного теории — с чем нам придется иметь дело:
  • IPCP (англ. Internet Protocol Control Protocol — протокол управления IP)— протокол управления сетевым уровнем для установки, настройки и разрыва IP подключения поверх PPP (Point-to-Point Protocol) соединения. IPCP использует тот же механизм обмена пакетами, что и LCP (Link Control Protocol). Обмен пакетами IPCP не происходит до тех пор, пока PPP не начнёт фазу согласования протокола сетевого уровня. Любые пакеты IPCP, полученные до того, как начнётся эта фаза, должны быть отброшены.

  • СCP (англ. Compression Control Protocol — протокол управления сжатием) — протокол управления сжатием, входищий в протокол PPP (Point-to-Point Protocol) регламинтирует использование различных алгоритмов сжатия информации при ее передаче между оконечными узлами линий связи. Он непосредственно отвечает за выбор, настройку и управление процессами сжатия во время соединения

  • Метод сжатия заголовков TCP/IP Ван Якобсона — протокол сжатия данных, описанный в RFC 1144, специально был создан Ван Якобсоном для улучшения производительности TCP/IP при медленных последовательных соединениях. Метод сжатия Ван Якобсона уменьшает обычные 40-байтные заголовки TCP/IP-пакетов примерно до 3-4 байт (в лучшем случае). Это достигается за счет запоминания состояния TCP-соединений на обоих концах соединения, и отсылаются только изменения в полях заголовка, что приводит к довольно большой разнице с точки зрения интерактивной производительности на низкоскоростных соединениях, но при этом этот метод никак не борется с задержками при обработке, присущими большинству модемов для коммутируемой связи (dialup).
    Сжатие заголовков Ван Якобсона (Van Jacobson Header Compression) (также упоминается как «VJ-сжатие» (VJ compression) или просто как «Сжатие заголовков» (Header Compression)) — дополнительная возможность в большинстве версий PPP. Версии SLIP-протокола с поддержкой VJ-сжатия часто именуются «Сжатым SLIP» (Compressed SLIP).

  • Microsoft Point-to-Point Compression (MPPC) — протокол сжатия данных, первоначально разработанный для использования поверх соединений PPP. Использует алгоритм Lempel-Ziv со скользящим окном буфера истории размером 8192 байт.

  • Microsoft Point-to-Point Encryption (MPPE) — протокол шифрования данных, используемый поверх соединений PPP. Использует алгоритм RSA RC4. MPPE поддерживает 40-, 56- и 128-битные ключи, которые меняются в течение сессии (частота смены ключей устанавливается в процессе хэндшейка соединения PPP, в принципе возможно генерировать по новому ключу на каждый пакет. MPPE не сжимает данных, но часто используется совместно с Microsoft Point-to-Point Compression, предназначенным для этих целей.

Т.к. демон mpd5 использует в своей работе netgraph, то нам нужно пересобрать ядро FreeBSD. Как это делать написано в мане, я лишь приведу какие именно опции нужны:

#netgraph(4) system

options NETGRAPH

options NETGRAPH_ASYNC

options NETGRAPH_BPF

options NETGRAPH_BRIDGE

options NETGRAPH_CISCO

options NETGRAPH_ECHO

options NETGRAPH_ETHER

options NETGRAPH_FRAME_RELAY

options NETGRAPH_GIF

options NETGRAPH_GIF_DEMUX

options NETGRAPH_HOLE

options NETGRAPH_IFACE

options NETGRAPH_IP_INPUT

options NETGRAPH_KSOCKET

options NETGRAPH_L2TP

options NETGRAPH_LMI

# MPPC compression requires proprietary files (not included)

#options NETGRAPH_MPPC_COMPRESSION

options NETGRAPH_MPPC_ENCRYPTION

options NETGRAPH_ONE2MANY

options NETGRAPH_PPP

options NETGRAPH_PPPOE

options NETGRAPH_PPTPGRE

options NETGRAPH_RFC1490

options NETGRAPH_SOCKET

options NETGRAPH_TEE

options NETGRAPH_TTY

options NETGRAPH_UI

options NETGRAPH_VJC

После установки нового ядра можно приступить к установке mpd5. Ставим из портов (предварительно их обновив), без всяких опций. После установки можно приступить к конфигурированию. Все настройки хранятся в mpd.conf (находится по умолчанию в /usr/local/etc/mpd5).

Пару слов по оформлению конфига. Следует помнить, что mpd чувствителен к пробелам, все отступы должны быть оформлены в виде табуляции. Опции должны быть применены соответственно контекста, т.е. например, set ipcp yes vjcomp не может стоять в секции канального уровня (link), а должна быть только в пакетном (bundle).

Итак, вот, собственно, содержание файла конфигурации:

# cat mpd.conf

# Здесь мы настраиваем консоль, которой можно будет управлять демоном mpd5,

# веб-сервер для того же, но через браузер и параметры авторизации.

startup:

set user admin admin admin

set console self 127.0.0.1 5005

set console open

set web self 0.0.0.0 5006

set web open

# Загружаем секцию, устанавливающую туннель

default:

load vpn

vpn:

#

# PPTP client: only outgoing calls, auto reconnect,

# ipcp-negotiated address, one-sided authentication,

# default route points on ISP's end

#

create bundle static B1

set ipcp ranges 10.123.12.221/24 10.123.12.231/24

set iface up-script /usr/local/etc/mpd5/up.sh

set iface down-script /usr/local/etc/mpd5/down.sh

set iface enable tcpmssfix

set ipcp yes vjcomp

# The five lines below enable Microsoft Point-to-Point encryption

# (MPPE) using the ng_mppc(8) netgraph node type.

set bundle enable compression

set bundle enable crypt-reqd

set ccp yes mppc

set mppc yes compress e40 e56 e128 stateless

#

create link static L1 pptp

set link action bundle B1

set link enable multilink

#

set auth authname [LOGIN]

set auth password [PASSWORD]

set link max-redial 0

set link mtu 1460

set link keep-alive 20 75

set link no eap pap

set link accept chap-msv2

set link enable incoming

#

set pptp peer sample.host.ru

set pptp disable windowing

open


Запускающий и завершающий скрипты (up.sh и down.sh) нужны нам для установки правильных маршрутов до vpn сервера. Вот их содержимое:

# cat up.sh

#!/bin/sh

default_route_old=`route -n get default 2>&1 | grep gateway | awk '{print $2}'`

route_isp=`echo $8`

echo $route_isp > /var/tmp/route_isp

if [ $default_route_old ]; then

echo $default_route_old > /var/tmp/default_route_old

route -nq change default `echo $3 | cut -c1-13` -ifp $1

route -nq add $route_isp $default_route_old -ifp msk0

else

rm -f /var/tmp/default_route_old

route -nq change default `echo $3 | cut -c1-13` -ifp $1

route -nq add $route_isp $default_route_old -ifp msk0

fi


# cat down.sh

#!/bin/sh

# Возвращаем старый шлюз из файла /var/tmp/default_route_old

if [ -r /var/tmp/default_route_old ]; then

default_route_old=`cat /var/tmp/default_route_old`

route_isp=`cat /var/tmp/route_isp`

rm -f /var/tmp/default_route_old /var/tmp/route_isp

route -nq change default $default_route_old

route -nq delete $route_isp

fi

В скриптах, в принципе, все понятно, за исключением параметров $1-$8. Эти параметры передает в скрипт mpd во время его запуска, конкретно $1 — это название интерфейса vpn-подключения (обычно ng0), $3 — ip адрес, выдаваемый клиенту сервером и $8 — это ip интернет адрес vpn сервера.

Установка подключения выполняется командой

# mpd5 vpn

После чего этим подключеним можно управлять либо через консоль либо через веб-интерфейс, подключившись к localhost:5006.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.