FreeBSD : Пример построения VPN на базе PPTP сервера mpd

Вступление

Частная Виртуальная Сеть (она же ЧВС или VPN) является наиболее удобным способом подключения удаленных пользователей или офисов к компьютерной сети через Интернет. Технология VPN позволяет пользователю, подключенному к Интернет в любой точке мира получить защищенное соединение с корпоративной сетью, где бы она не находилась.

Если кратко, то технология VPN состоит в следующем:


  • Пользователь, подключенный к Интернет через любого провайдера, коннектится с специальным Интернет сервером, подключенным к корпоративной сети.
  • Сервер устанавливает защищенный шифрованный виртуальный канал между пользователем и корпоративной сетью.
  • При этом, для пользователя создается полное впечатления "присутствия" в корпоративной сети.
m

Решения по построению VPN

Существуют различные решения по построению VPN. Самым распространенным, по понятным причинам, является реализация, встроенная в Windows системы. Она позволяет строить VPN на основе протокола PPTP (Point To Point Protocol) и L2TP. Причем, VPN позволяет шифровать канал 128 или 40-битным ключом, передает пароли в шифрованном виде по протоколу MS CHAP (v1 и v2).

Хотя считается, что у Microsoft не самая лучшая реализация VPN (кроме того, она основанна на закрытых протоколах), но благодаря тому, что решение встроено во все Windows-системы, то оно получило достаточно широкое распространение. Логично, что в локальной корпоративной сети на основе Windows-систем и сервер устанавливают под управлением Windows.

Однако, многие администраторы справедливо не любят "держать" Windows-серверы, подключенные к Интернет, да еще и соединенные с корпоративной сетью. Зачастую такая установка пробивает брешь в безопасности сети и это привносит администраторам, ответственным за безопасность корпоративной сети большие сложности.

Заслуженно считается , что наиболее защищенным с точки зрения безопасности и наиболее функциональным решением для вывода корпоративных сетей в Интернет являются UNIX-серверы. Причем, многие администраторы предпочитают "прятать" Windows-серверы "внутрь" корпоративной сети, за защищенный UNIX-сервер.

Реализация же VPN от Microsoft "заставляет" держать Windows-сервер подключенный и к Интернету и к корпоративной сети. К счастью, разработчики UNIX-систем нашли решение по построению VPN-сервера на основе UNIX, совместимого с клиентами Microsoft.

Построение VPN на основе UNIX сервера.


Введение

Итак, для того чтобы не устанавливать дополнительный Windows-сервер, необходимо установить VPN-сервер на UNIX-сервере. Как уже отмечалось, в последнее время для популярных UNIX систем появились программные продукты, совместимые с VPN "от Microsoft". В частности для очень популярной платформы, на которой строят большинство UNIX-серверов "FreeBSD" имеется продукт mpd (Multi-link PPP daemon), в котором реализован VPN сервер, совместимый с Microsoft (более подрбне о mpd можно почитать из документации на продукт после установки или на страничке описания порта http://www.freebsd.org/cgi/url.cgi?ports/net/mpd/pkg-descr ) . А для Linux имеется аналогично решение PoPToP (http://www.poptop.org). Далее в данной статье будет рассмотрена платформа FreeBSD и сервер mpd.

Решение

Перед нами стояла задача построить VPN сервер, совместимый с Microsoft на основе ОС FreeBSD. Точнее сказать - избавиться от "лишнего" Windows сервера, осуществляющего функцию VPN-сервера.

Выводом в Итернет локальной сети (около 300 компьютеров), защитой сети, сбором статистики по трафику у нас занимается сервер под управлением FreeBSD 4.4.

В ОС FreeBSD, начиная с версии 4.0 реализована технология NETGRAPH, которая позволяет разделить логику работы сетевого интерфейса от физического устройства, прикрепленного к этому Интерфейсу, а также последовательно применять различные алгоритмы для пакетов, идущих через интерфейс. Описание технологии NETGRAPH на английском языке можно прочитать по адресу: http://www.daemonnews.org/200003/netgraph.html. Для установки PPTP-сервера глубокое знание этой технологии не нужно - достаточно знать, что она применяется пакетом mpd.

Шаг 1. Компилируем mpd

Компилируем mpd из дерева FreeBSD-портов (можно установить его и из packages).

PS. Желательно перед компиляцие пакета mpd обновить дерево портов через cvsup, для того, чтобы установить последнюю версию.

Компилируем и инсталлируем mpd:

cd /usr/ports/net/mpd
make
make install

 

Шаг 2. Конфигурируем mpd

В принципе, рекомендуется перед конфигурацией mpd включить опции FreeBSD-ядра для работы с NETGRAPH. Однако компоненты NETGRAPH загружаются как модули ядра и ядро впринципе пересобирать необязательно. Как показала практика, все компоненты работают без пересборуки ядра.

Для того, чтобы настроить mpd нужно создать 3 файла (все файлы должны по умолчанию находиться в каталоге /usr/local/etc/mpd):


  1. mpd.conf - файл описывающий конфигурацию интерфейсов
  2. mpd.links - файл, описывающий конфигурацию соединений
  3. mpd.secret - файл с паролями поьзоватлей.

Для краткости и конкретики ниже приводяться все 3 файла, взятые с работающей системы. Конфигурация написана для семи одновременно входящих соединений (сетевые устройства ng0-ng2).


Mpd.conf:

default:
   load pptp0
   load pptp1
   load pptp2

pptp0:
  #так создается новый интерфейс,
  #воторой параметр - название соединения,
  #который этот интерфейс будет использовать (из файла mpd.links)
  new -i ng0 pptp0 pptp0

  #Задается локальный и удаленный ip адреса
  set ipcp ranges 172.10.1.1/32 172.10.100.200/32

  #Загружаются паремтры, одинаковые для всех интерфейсов
  load pptp_standart

pptp1:
  new -i ng1 pptp1 pptp1
  set ipcp ranges 172.10.1.1/32 172.10.100.201/32
  load pptp_standart


pptp2:
  new -i ng2 pptp2 pptp2
  set ipcp ranges 172.10.1.1/32 172.10.100.202/32
  load pptp_standart


pptp_standart:
  set iface disable on-demand
  set bundle disable multilink
  set link yes acfcomp protocomp

  #Требуем chap авторизации
  set link no pap chap
  set link enable chap

  set link keep-alive 60 180
  set ipcp yes vjcomp

  #Устанавливаем DNS и Wins
  set ipcp dns 172.10.1.1
  set ipcp nbns 172.10.1.1

  #Включаем proxy-arp, чтобы компьютер "видел" без маршрутизации корпоративную сеть (по протоколу arp)
  set iface enable proxy-arp

  #Включаем компрессию данных
  set bundle enable compression

  #Включаем компрессию данных, совсестимую с Microsoft-клиентами
  set ccp yes mppc

  #Включаем шифрование, совместимое с Microsoft-клиентами
  set ccp yes mpp-e40
  set ccp yes mpp-e128
  set ccp yes mpp-stateless

  set bundle yes crypt-reqd

  #Задаем адрес для входящих соединений
  set pptp self 10.10.10.10

  #Разрешаем входящие соединения
  set pptp enable incoming
  set pptp disable originate

Как видно, создается 3 "бандла" (pptp0-pptp2), которые обслуживают 3 интерфейса. На каждый "бандл" накладываются определенные парамтры работы на интерфейс. Кроме того к каждому "бандлу" прикрепляется "линк" (второй (pptpX) параметр в команде new -i ng2 pptp2 pptp2), который должен быть описан в файле mpd.links.


mpd.links

pptp0:
  set link type pptp

pptp1:
  set link type pptp

pptp2:
  set link type pptp


Т.к. все параметры уже были установлены в файле mpd.conf, то для "линков" достаточно обозначить их тип (pptp).
Авторизация пользователей осуществляется на основе данных из файла mpd.secret.
Он имеет простой формат:

"логин" "пароль" IP-пользователя(необязательно)


Например, наш mpd.secret:

login1 pass1 172.10.100.103
login2 pass2 *
login3 pass3 172.10.100.105

Логин и пароль могут совпадать с доменными именами, а могут и не совпадать. Если указано поле IP-пользователя, то пользователю будет выдан персональный IP-адрес.

 

Шаг 3. Запускаем mpd

По умолчанию mpd работает в интерактивном режиме. Т.е. он загружает конфигурацию из файлов и предоставляет оболочку для изменения параметров. Первый раз его можно пустить именно в таком режиме:

/usr/local/sbin/mpd

При этом должны загрузиться все "бандлы", и создаться интерфейсы ng0-ng2 (проверить можно командой ifconfig -a).


mpd.log:

Oct 14 14:13:15 gateway mpd: mpd: pid xxx
Oct 14 14:13:16 gateway mpd: [pptp0] ppp node is "mpd291-pptp0"
Oct 14 14:13:16 gateway mpd: [pptp0] using interface ng0
Oct 14 14:13:16 gateway mpd: mpd: local IP address for PPTP is 10.10.10.10
Oct 14 14:13:16 gateway mpd: [pptp1] ppp node is "mpd291-pptp1"
Oct 14 14:13:16 gateway mpd: [pptp1] using interface ng1
Oct 14 14:13:16 gateway mpd: [pptp2] ppp node is "mpd291-pptp2"
Oct 14 14:13:16 gateway mpd: [pptp2] using interface ng2



ifconfig -a

ng0: flags=8890 mtu 1500
ng1: flags=8890 mtu 1500
ng2: flags=8890 mtu 1500




После провероки правильности работы в дальнейшем mpd можно запускать как демон: /usr/local/sbin/mpd -b, а результаты работы смотреть через лог-файл.

PS. Во время тестирования mpd в системе часто оставались интерфейсы ngXX после принудительной выгрузки mpd. При этом команда ifconfig ng0 down delete не удаляла интерфейс. Опытным путем выяснилось, что для того чтобы удалить интерфейс нужно набрать команду ngctl и в появившейся оболочке написать "shutdown ngX:" (двоеточние в конце обязательно).

PPS. Для создания Лог-файла нужно:

- добавить строчки в /etc/syslog.conf:

!mpd

*.* /var/log/mpd.log


- создать файл /var/log/mpd.log
- перепустить syslogd (killall -1 syslogd)


Шаг 4. Настраиваем клиента

После этого нужно настроить какого-нибудь Windows-клиента для работы с VPN. Все установки можно оставить по умолчанию, а адрес VPN-сервера нужно поставить такой же как в параметре set pptp self 195.31.12.122. Более подробную инструкцию по конфигурированию Windows-клиента можно получить из документации по Windows.

 

Шаг 5. Проверяем в работе

Теперь нужно "зайти" с любого Windows клиента на PPTP-сервер и проверить правильность работы. Если все было установлено правильно, то в Windows должна пройти авторизация и вход в сеть и как минимум стать доступной корпоративная сеть.

После соединения должен появиться сетевой интерфейс, обслуживающий соединение:

ng0: flags=88d1 mtu 1496
inet 172.10.1.1 --> 172.10.100.200 netmask 0xffffffff


Шаг 6. Финито.

Детальная и оригинальная документация к MPD

Вы только посетили наш сайт, КОММЕНТИРОВАНИЕ будет доступно через несколько минут.
возможно у Вас отключен javascript, если включен - просто обновите страницу