MPD - настройка собственного VPN-сервера

Версия для печатиОтправить другуPDF version

В связи с просьбой одного из сотрудников в реализации доступа к серверам офисной сети из дома (согласно требованиям безопасности, доступ к ним из сети Internet ограничен), возникла необходимость в настройке VPN-сервера. Реализовывать будем на базе MPD - основанная на netgraph реализация ppp-протокола мультисвязи для FreeBSD. Еще одним плюсом в сторону MPD есть то, что он совместим с Microsoft,  тоесть подключиться к нашему серверу пользователи ОС Windows смогут пользуясь стандартными средствами ОС.

В более ранних версиях, для работы MPD необходима была поддержка ядром NETGRAPH, однако, начиная с FreeBSD6.0, это необязательно. Поскольку офисный маршрутизатор работает под FreeBSD 8.0, пересобирать ядро с поддержкой NETGRAPH не будем:

# uname -a
FreeBSD office.company.net 8.0-STABLE FreeBSD 8.0-STABLE #1: Thu Jan 14 17:33:25 EET 2010 muff [at] office [dot] company [dot] net:/usr/obj/usr/src/sys/Office i386
 

Исходные данные:

  • Адресация локальной сети - 192.168.192.0/24
  • IP-адресс VPN-сервера, "смотрящий" в локальную сеть - 192.168.192.55
  • IP-адресс VPN-сервера, "смотрящий" в Internet - 193.227.206.45
  • IP-адреса клиентам выдавать из этой же подсети - 192.168.192.0/24
  • Разрешить доступ в Internet

Приступаем к установке:

# cd /usr/ports/net/mpd5/ && make install clean && rehash

Итак, после установки переходим в каталог /usr/local/etc/mpd5/, поскольку все конфигурационные файлы MPD находятся в этом каталоге:

# cd /usr/local/etc/mpd5 && ls -la

total 58
drwxr-xr-x 2 root wheel 512 25 май 02:01 .
drwxr-xr-x 7 root wheel 512 25 май 02:01 ..
-r--r--r-- 1 root wheel 11856 25 май 02:01 mpd.conf.sample
-r--r--r-- 1 root wheel 39541 25 май 02:01 mpd.script.sample
-r--r--r-- 1 root wheel 834 25 май 02:01 mpd.secret.sample

А теперь приступаем непосредственно к настройке. Я буду настраивать сервер на поддержку 3 одновременных подключений (количество пользователей). Думаю, что настройка на большее количество подключениий проблем не вызовет - просто добавляем еще одну строку с логином и паролем пользователя в mpd.secret. Первый конфигурационный файл - mpd.conf. С примерами разнообразных настроек можно ознакомиться в mpd.conf.sample. Забыл в начале описать, что настраивать будем по протоколу PPTP. В результате нехитрых манипуляций получаем следующий mpd.conf:

# cat mpd.conf

startup:
        # Определяем пользователей
        set user username username_pass admin
        set user username1 userpass1
        # Конфигурация консоли
        set console self 127.0.0.1 5005
        set console open
        # Конфигурация веб-сервера
        set web self 0.0.0.0 5006
        set web open

default:
        load pptp_server

pptp_server:
# Определяем, какой адресный пул использовать
        set ippool add pool1 192.168.192.150 192.168.192.175
# Создаем клонируемый шаблон B
        create bundle template B
# Разрешаем на интерфейсе проксирование МАС-адресов
        set iface enable proxy-arp
# Задаем время простоя
        set iface idle 1800
# Исправлять ошибки с определением MSS
        set iface enable tcpmssfix
# Включаем сжатие данных
        set ipcp yes vjcomp
# Конкретизируем адресный пул для динамического присвоения параметров
        set ipcp ranges 192.168.192.55/32 ippool pool1
# Указываем, какие адреса DNS-серверов присваивать клиентам
        set ipcp dns 8.8.8.8 8.8.4.4
# Эти строки необходимы для поддрежки Microsoft Point-to-Point шифрования
        set bundle enable compression
        set ccp yes mppc
        set mppc yes e40
        set mppc yes e128
        set mppc yes stateless
# Создаем клонируемый шаблон L
        create link template L pptp
# Указываем, какой шаблон использовать
        set link action bundle B
# Запрещаем режим мультилинк
        set link disable multilink
        set link yes acfcomp protocomp
# Требуем chap авторизацию
        set link no pap chap eap
        set link enable chap
# Уменьшение размера mtu для избежания фрагментации
        set link mtu 1400
# Задаем адрес для входящих сообщений
        set pptp self 193.227.206.45
# Разрешаем входящие подключения
        set link enable incoming

Дальше необходимо создать файл mpd.secret, где будем хранить логины и пароли (при необходимости указываем и IP-адрес, который нужно присвоить клиенту, иначе берется из пула заданных адресов) VPN-пользователей. Пример mpd.secret:

# cat mpd.secret
muff muffpasswd 192.168.192.150
user1 user1pass 192.168.192.151
user2 user2pass 192.168.192.152

Добавляем загрузку MPD при старте системы:

# echo '# VPN PPTP Server' >> /etc/rc.conf
# echo 'mpd_enable="YES"' >> /etc/rc.conf

Даем команду запуска:

# sh /usr/local/etc/rc.d/mpd5 start
Starting mpd5.

Как оговаривалось раньше, поддержка NETGRAPH на уровне ядра не обязательна, NETGRAPH подгружается в виде модулей:

# kldstat

Id Refs Address Size Name
1 26 0xc0400000 4992e8 kernel
2 1 0xc1b5a000 35000 ipl.ko
3 1 0xc1c65000 2000 warp_saver.ko
4 1 0xc2b57000 4000 ng_socket.ko
5 8 0xc2c3a000 b000 netgraph.ko
6 1 0xc2bd2000 4000 ng_mppc.ko
7 1 0xc2bdd000 2000 rc4.ko
8 1 0xc2be3000 3000 ng_tee.ko
9 1 0xc2be9000 4000 ng_pptpgre.ko
10 1 0xc2c45000 5000 ng_ksocket.ko
11 1 0xc2bf9000 3000 ng_iface.ko
12 1 0xc2c4a000 7000 ng_ppp.ko
13 1 0xc2c35000 3000 ng_tcpmss.ko

Теперь попробуем настроить VPN-клиента под Windows XP. В "Панели управления" переходим в "Сетевые подключения" и жмем "Создание нового подключения". В результате запускается мастер новых подключений:

Настройка ВПН

После нажатия "Далее" выбираем тип сетевого подключения "Подключить к сети на рабочем месте":

ВПН

Потом уточняем, что это будет подключение к виртуальной частной сети:

ВПН

Далее задаем название подключения, чтобы идентифицировать его среди других подключений:

Настройка ВПН

При необходимости указываем, набирать предварительное подключение, или нет:

ВПН

Следующим шагом указываем адрес сервера, к которому будем подключаться:

Настройка ВПН

Потом остается только нажать кнопку "Готово". Ну а дальше заполняем поля логина и пароля и жмем "Подключиться":

ВПН подключение

В результате подключения на сервере автоматически создается интерфейс ng0:

ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1396
inet 192.168.192.55 --> 192.168.192.150 netmask 0xffffffff

И на стороне клиента тоже:

Company Name - PPP адаптер:
DNS-суффикс этого подключения . . : Описание . . . . . . . . . . . . : WAN (PPP/SLIP) Interface Физический адрес. . . . . . . . . : 00-53-45-00-00-00 Dhcp включен. . . . . . . . . . . : нет IP-адрес . . . . . . . . . . . . : 192.168.192.150 Маска подсети . . . . . . . . . . : 255.255.255.255 Основной шлюз . . . . . . . . . . : 192.168.192.150 DNS-серверы . . . . . . . . . . . : 8.8.8.8 8.8.4.4

После подключения стали доступна локальная сеть офиса. На этом статью можно заканчивать. Опишу еще несколько полезных моментов.

Настройка логирования и ротации логов

# echo '\!mpd' >> /etc/syslog.conf
# echo '*.* /var/log/mpd.log' >> /etc/syslog.conf
# touch /var/log/mpd.log
# sh /etc/rc.d/syslogd restart
# echo '/var/log/mpd.log 640 7 * $W6D0 JC' >> /etc/newsyslog.conf

 Подключение к командной строке

# telnet 127.0.0.1 5005

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Multi-link PPP daemon for FreeBSD
Username: muff
Password:
Welcome!
Mpd pid 58159, version 5.5 (root [at] office [dot] company [dot] net 01:59 25-May-2010)

[] help
Available commands:
authname : Choose link by auth name   bundle : Choose/list bundles
close : Close a layer                 create : Create new item
destroy : Destroy item                exit : Exit console
iface : Choose bundle by iface        help : Help on any command
link : Choose link                    load : Read from config file
log : Set/view log options            msession : Ch. bundle by msession-id
open : Open a layer                   quit : Quit program
repeater : Choose/list repeaters      session : Choose link by session-id
set : Set parameters                  show : Show status

[] show sessions
ng0 192.168.192.150 B-1 4755068-B-1 L-1 1 4755068-L-1 muff 195.3.159.250

Подключение к web-интерфейсу

MPD Web-интерфейс

 

Ваша оценка: Нет Средняя: 5 (2 голоса)

Отличная статья.Не могли бы

Отличная статья.Не могли бы вы написать что добавить в IP фаервол.Спасибо !

MPD ожидает подключений на

MPD ожидает подключений на tcp-порту 1723. После установки соединения трафик инкапсулируется в gre-пакеты. Соответственно, чтобы в ipfw корректно "бегал" впн-трафик, добавляем следующие правила:

allow gre from any to any

allow tcp from any to me 1723

 

Спасибо я уже нашёл

Спасибо я уже нашёл решение.Можно задать с Вашего разрешения вопрос ...

 

Всё сделал точно по вашему ману.УРА коннект есть.НО ! С первого раза ничё не пингуется из той сетки куда я коннекчусь.Переподключаюсь - доступны все ресурсы.КОсяк в чём если знаете ? Логи ничего не дают могу опубликовать при надобности.

Нет, еще не встречал

Нет, еще не встречал такого.

Нужно tcpdump-ом смотреть, что с пакетами происходит.

Многоуважаемый.С Вашего

Многоуважаемый.С Вашего разрешения 1 вопрос.Напишите пожалуйста правило для фаервола что бы коннектить по РДП

 

моё правило

 

${FwCMD} add 4850 allow tcp from ${NetIn} to any 3389 in via ${LanIn}
${FwCMD} add 4850 allow tcp from any 3389 to ${IpOut} in via ${LanOut}

 

Не канает ...

Это уже зависит от

Это уже зависит от того, какие еще правила есть. К тому же не указали, куда нужно коннектиться: внутрь сети, или из нее..

подключение к командной

подключение к командной строке проходит без проблем, а вот с винды подключится не могу, подскажите, пожалуйста, на что следует обратить внимание

Какой код

Какой код завершения?

Возможно дело в файрволе?

Дело, действительно было в

Дело, действительно было в файерволе, я некоректно пропускал gre протокол, теперь VPN у меня работает.

 Запустилось с пол-пинка...

 Запустилось с пол-пинка... респект muff 

 А что делать если у меня в

 А что делать если у меня в винде после подключения "Основной шлюз: 0.0.0.0" (

конфиг вот



        load pptp_server

 

pptp_server:

 

        set ippool add pool1 192.168.71.50 192.168.71.100

        create bundle template B

        set iface enable proxy-arp

#       set iface route 192.168.70.0/24

        set iface route 192.168.71.0/24

        set iface idle 0

        set iface enable tcpmssfix

        set ipcp yes vjcomp

        set ipcp ranges 192.168.70.226/32 ippool pool1

        set ipcp dns 192.168.71.49

        set bundle enable compression

        set ccp yes mppc

        set mppc yes e40

        set mppc yes e128

        set mppc yes stateless

        create link template L pptp

        set link action bundle B

        set link enable multilink

        set link yes acfcomp protocomp

        set link no pap chap eap

        set link enable chap

        set link enable chap-msv1

        set link enable chap-msv2

        set link keep-alive 10 60

        set link mtu 1460

 

на интерфейсе у меня две сети 192.168.70.226 и алиас 192.168.71.49

дефолтный шлюз 192.168.70.230

 

соединяюсь .49 пингую, 70.226 пингую, 70.230 не пингую... соответсвенно косяк не пойму где

 

маршруты в rc.conf есть





mpd_flags="-b"

gateway_enabale="YES"

static_routes="mpd2 asterisk"

route_mpd2="-net 192.168.71.0/24 192.168.71.49"

 

 

Как на меня, то косяк с

Как на меня, то косяк с маршрутизацией. Открывайте тему на форуме и решим вопрос.

 

Re:  Запустилось с пол-пинка...

 Спасибо! С первого раза решил кучу проблем! 

Re: MPD - настройка собственного VPN-сервера

Подскажите пожалуйста, как ограничить IP пользователей которым разрешено подключатся с определённым логином?

Re: MPD - настройка собственного VPN-сервера

Никогда не ставил перед собой такой задачи, соответственно не предоставлю готового решения.

Смотрите в сторону "External authentication", подключая внешние скрипты.

Re: MPD - настройка собственного VPN-сервера

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

Re: MPD - настройка собственного VPN-сервера

Что?...

Конкретизируйте вопрос.. Непонятно, что именно Вы хотите получить в результате... И лучше будет, если вопрос подымете на форуме.

Re: MPD - настройка собственного VPN-сервера

нужно рыться в исходниках, это долго( 

нужен расширенный web интерфейс для mpd5

 

Re: MPD - настройка собственного VPN-сервера

Как выпустить все в интернет? Необходима возможность подключенному по VPN работать в интернет, интересует так же работа в инете за счет канала сети в которой установлен VPN.

 

Re: MPD - настройка собственного VPN-сервера

По умолчанию, в Интернет будете "бегать" по VPN-каналу, используя канал сери, к которой установлен VPN.

Тоесть, обмен трафиком у вас будет только с VPN-сервером.

 

Re: MPD - настройка собственного VPN-сервера

Есть поднятый сервер VPN на одной сетевой карте- на виртуалке, при подключении с win7 на машине где крутится виртуалка- подключение происходит, но в текущих подключениях надпись "Без доступа к сети", на серве пинги в интернет уходят. Думаю в сторону NAT. Интернета нет, подскажите варианты...

Re: MPD - настройка собственного VPN-сервера

Может быть и NAT, может быть и файрвол. Вариантов много, в зависимости от системы...

Смотрите маршрутизацию. Ну и tcpdump вам в помощь... Например, на vpn-клиенте ставите ping на 8.8.4.4, a tcpdump-ом "слушаете" на интерфейсах маршрутизатора, "отлавливая эти пакеты...

Например, на интерфейсе ng:

# tcpdump -ni ng0 proto ICMP and host 8.8.4.4

Если пакеты "прилетают", слушаем на "внешнем интерфейсе (условно считаем, что у нас это em0):

tcpdump -ni em0 proto ICMP and host 8.8.4.4

Если пакеты отсутствуют, смотрите маршрутизацию/файрвол.

Если "прилетают", смотрите src IP. Если "серая" сеть - значит NAT

Re: MPD - настройка собственного VPN-сервера

# tcpdump -ni ng0 proto ICMP and host 8.8.4.4
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ng0, link-type NULL (BSD loopback), capture size 262144 bytes
14:46:23.999982 IP 192.168.1.50 > 8.8.4.4: ICMP echo request, id 1, seq 1093, length 40
14:46:28.847864 IP 192.168.1.50 > 8.8.4.4: ICMP echo request, id 1, seq 1094, length 40
14:46:33.859588 IP 192.168.1.50 > 8.8.4.4: ICMP echo request, id 1, seq 1095, length 40
14:46:38.847761 IP 192.168.1.50 > 8.8.4.4: ICMP echo request, id 1, seq 1096, length 40
^C
4 packets captured
16 packets received by filter
0 packets dropped by kernel

 

 

# tcpdump -ni em0 proto ICMP and host 8.8.4.4
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on em0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:47:14.028256 IP 192.168.1.50 > 8.8.4.4: ICMP echo request, id 1, seq 1097, length 40
14:47:18.841920 IP 192.168.1.50 > 8.8.4.4: ICMP echo request, id 1, seq 1098, length 40
14:47:23.842104 IP 192.168.1.50 > 8.8.4.4: ICMP echo request, id 1, seq 1099, length 40
14:47:28.841200 IP 192.168.1.50 > 8.8.4.4: ICMP echo request, id 1, seq 1100, length 40
^C
4 packets captured
164 packets received by filter
0 packets dropped by kernel

Re: MPD - настройка собственного VPN-сервера

Просьба не флудить в коментариях. Для решения вопросов есть форум.

P.S. Да, у вас проблема в реализации NAT. На внешнем интерфейсе не должно быть "серой" адресации (192.168.1.50 в вашем случае).

Re: MPD - настройка собственного VPN-сервера

Доброе время. Хочу добавить скрипт при соединении разсоединении, чтобы на почту для root писалось письмо с именем пользователя, его IP и временем. Это возможно?
 

Re: MPD - настройка собственного VPN-сервера

create bundle template B
        set iface up-script /usr/local/etc/mpd5/up
        set iface down-script /usr/local/etc/mpd5/down

 

/usr/local/etc/mpd5/up

#!/bin/sh
NOWDATETIME=`date +%Y-%m-%d' '%H:%M:%S`
echo "$NOWDATETIME - $5 - $8" |  mail -s "VPN user $5 from $8 to VOLZ connected" root

 

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература