Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> настройка —> VPN сервер по средствам mpd5.

Настройка VPN сервера по средствам mpd5 если FreeBSD машина не шлюз а просто комп в локалке.

Автор: Le1.


Значит так, дело было летом, жара, на работе у нас обычная локалка, пров дал нам ADSL Router и он роутил на свич, свич же крутил сетку в диапазоне 192.168.1.1-192.168.1.254
На работе в углу лежал никому не нужный 64-х битный комп, жалко добро не используется, решили поставить его в виде сервака, но так как у нас не было выделенного айпи (он шел на железный ADSL Router), да и по чисто техническим причинам не хотелось переводит роутер в режим бриджа, ставить две сетевухи в машину с фрей и.т.д. пришлесь комп с новоустоновленной Фряхой поставить после свитча т.е. присвоеть ему IP из диапазона локалки.

Все было сделанно и комп с FreeBSD получил IP 192.168.1.254.

Для того чтобы с наруже я мог бы подключатся к компу по SSH юзать FTP и т.д. в железном ADSL роутере я сделал редирект всех портов на внутренний адрес (192.168.1.254).

Первым делом обновил сорсы, порты и все такое, настроил Apach+PHP+MySQL+pureFTPD (но в данной статье не об этом), все работало на ура, но встал вопрос - нам стало нужно из дома подключатся к нашей рабочей локальной сетке, и работать так же как будто бы мы просто физически находимся в той же сети, т.е. видеть шары, использовать Remote Desktop, следить с дома за своим компом и т.д.

Ясно, что нужно было настраивать VPN сервер, но проблема была в том что машина с фрей не была шлюзом, и имела IP 192.168.1.254 из диапазона локальной сетки. После настройки я долго не мог пинговать компы в сети и т.д. проблемы были с натом, я долго рылся, спрашивал на форумах и.т.д. пока смог исправить эту беду.

Вообщем начнем - для VPN-а решил использовать MPD5,
mpd (Multi-link PPP daemon) примечателен тем, что в нём реализован VPN-сервер совместимый с Microsoft. т.е. в подключение с Windows к нашему, FreeBSD-серверу не будет никаких проблем, не нужно устанавливать дополнительный софт в виде VPN клиента.

Значить так, начнем, устонавливаем его из портов:
/usr/ports# whereis mpd5
mpd5: /usr/local/sbin/mpd5 /usr/local/man/man8/mpd5.8.gz /usr/ports/net/mpd5
cd /usr/ports/net/mpd5; make && make install && make clean


После этого идем в /usr/local/etc/mpd5 создаем и правим конфиги:
/usr/local/etc/mpd5# touch mpd.conf; touch mpd.secret

(можно скопировать дефолтные mpd.conf.sample в mpd.conf и mpd.secret.sample в mpd.secret и довести до нужного сосотояния)

Далее правим конфиг mpd.conf:
/usr/local/etc/mpd5# ee mpd.conf


И вставляем в него конфиг, это рабочий конфиг для моей сети, вам может придется поменять несколько параметров:
startup:
        # Юзер с правами админа Логин: foo, Пароль: bar
        set user foo bar admin   
        set user foo1 bar1
        # Нужно чтобы подключится по телнету через 5005 порт
        set console self 127.0.0.1 5005
        set console open
        # Нужно чтобы подключится по http через 5006 порт
        set web self 127.0.0.1 5006
        set web open              
default:
        load pptp_server
pptp_server:
# Диапазон IP адрессов, 
# который присвоется VPN девайсу.
        set ippool add pool1 192.168.100.50 192.168.100.99  

# 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.
        set ipcp ranges 192.168.100.1/32 ippool pool1
        set ipcp dns 192.168.1.1
# The five lines below enable Microsoft Point-to-Point encryption
# (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
# 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
# Внешний IP на котором будет прослушиватся соединение
        set pptp self 192.168.1.254
# Allow to accept calls
        set link enable incoming

Примечание: конфиг mpd строго не любит пробелы, так что позоботтесь об этом, вместо этого пользуйтесь табуляцией <TAB>.

Теперь отредактируем /usr/local/etc/mpd5/mpd.secret:
User1     123123
User2     321321

Где User1 и User2 это логин для первого и второго юзера ну и рядом соответствующие пароли.

Можно так-же прописать IP тогда конкретному пользователю будет выдаватся один и тот-же IP адресс например:
User1     123123    192.168.100.90
User2     321321    192.168.100.91


Далее, чтобы MPD загружался автоматически при стартапе прописываем следующие строки в /etc/rc.conf:
echo 'mpd_enable="YES"' >> /etc/rc.conf 
echo 'mpd_flags="-b"' >> /etc/rc.conf
echo 'gateway_enable="YES"' >> /etc/rc.conf


Чтобы у нас были логи нашего MPD, в файле /etc/syslog.conf в конце добавляем следующие строки:
ee /etc/syslog.conf 
!mpd
*.*     /var/log/mpd.log


Создадим этот файл и зададим ему права только на чтение root:
/# touch /var/log/mpd.log
chmod 600 /var/log/mpd.log


Теперь перезагружаем syslog:
/# /etc/rc.d/syslogd reload 


Далее нам нужно NAT-ить в файрволе, чтобы с 192.168.100.0.видеть 192.168.1.0, для этого используем файрвол pf, вообщето правильно компилить ядро с поддержкой pf,у меня откомпилено, для этого нужно пересобрать ядро с опциями:
device          pf
device          pflog
device          pfsync
options         ALTQ
options         ALTQ_CBQ
options         ALTQ_RED
options         ALTQ_RIO
options         ALTQ_HFSC
options         ALTQ_CDNR
options         ALTQ_PRIQ
options         ALTQ_NOPCC
options         ALTQ_DEBUG

но если нет времени компилить для тестирования можно подгрузить его просто как модуль:
/# kldload pf.ko


Для того чтобы модуль подгружался при стартапе в /etc/rc.conf добавляем:
/# echo 'pf_enable="YES"' >> /etc/rc.conf


Теперь правим правила для файрвола /etc/pf.conf:
/# ee /etc/pf.conf
nat on nfe0 from 192.168.100.0/24 to any -> 192.168.1.254
pass in all
pass out all


Загружаем правила файрвола и стартуем mpd:
/# pfctl -f /etc/pf.conf
/# /usr/local/etc/rc.d/mpd5 start


Теперь можно наблюдать за логом и коннектится с винды:
tail -f /var/log/mpd.log


Для того чтобы настроить клиента с 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


Для того чтобы при коннекте к VPN-у ваша клиентская машина не меняла шлюз, и не выходила бы в инет через инет того сервера к которому приконнекчена (т.е. машина с Фрей) надо в настройках VPN подключения перейти в:
Networking -> Internet Protocol(TCP/IP) -> Properties -> Advanced

и убрать "галочку" с Use default gateway on remote network





В принципе все, можно подключатся и наблюдать за логом, если все правильно то вы сможете шарить в своей рабочей сетке, заходить через ремот десктоп и т.д.
На данный момент у меня пользователи прописаны не в mpd.secret а в БД mysql, и настроен radius сервер, если комуто интерестно, могу добавить к статье и этот пункт.



размещено: 2008-07-13,
последнее обновление: 2009-01-11,
автор: Le1


smg, 2008-07-17 в 22:15:09

Статья жизненная, весьма полезная ;) Такую конфигурацию не пробовал. В моём случае, всё-таки модем настроен как мост...
В качестве VPN-сервера пользую openvpn [url=http://openvpn.net]. Среди преимуществ - порт под все оси (и красивая инсталяха под винду) ;).

С другой стороны, наличие совместимости с pptp делает решение, предложенное автором проще для пользователей - всё-таки используются стандартные средства.


naehi8sh, 2008-07-18 в 20:07:20

1. как понимаю открыт доступ только с клиента до локальной сети. обратного доступа нет.
2. Сам делал. достаточно было конфигов по умолчанию с поправками) Но подключившимся клиентам выдаю ип локальной сети. больше никаких плясок. доступ как из сети до клиента так и от клиента в сеть. сервер на роутере, но почему то ощущение что это в данный момент не причем... вот

Гость, 2008-08-01 в 13:11:18

Ага, достаточно просто дать ип с диапазона локалки и не надо ничего натить... у меня так и работает. LAN ADSL модем - сеть. Все в инет ходят напрямую через модем. В эту же сеть воткнут freebsd c mpd5.

FIZIK, 2008-08-01 в 14:00:55

На днях тоже написал статейку на эту тему. :) Не сочтите за пиар - просто может комунибудть пригодится.
http://fizik.net.ru/index.php?option=com_content&task=view&id=13&Itemid=9

Гость, 2008-10-31 в 11:14:42

На сколько знаю "/usr/local/etc/mpd5/mpd.links" этого файла в пятом уже нет, или я ошибаюсь?

alex, 2008-11-05 в 10:53:40

как я понял это настройка не для mpd5

alex, 2008-11-05 в 10:55:17

как я понял это настройка не для mpd5!!! весь конфиг приведен для mpd4. автор видимо сам не пробовал то что написал а тупо откудато слизал

Le1, 2008-11-06 в 0:34:49

alex,хватит тупить, у меня все с таким конфигом работает уже очень давно, и давольно стабильно, версия мпд именно 5-я а не четвертая, я 4-ку от 5-ки отличаю, так что хватит тупо писать коменты, если не нравится статья ищи другую, а в остальном я описал все по порядку, как сам делал, так что в полне досконально...

Alteron, 2008-11-06 в 9:13:28

Статья неплохая, но ошибок... тьма, штук пятьдесят навскидку насчитал. Неужели автору не стыдно было выставлять такое?
Давайте я поправлю всё, и меня запишут в соавторы ;)

alex, 2008-11-09 в 19:53:04

с данным конфигом работать конечно будет... но в самом деле яб постыдился его где нибудь публиковать... mpd.links для 5-ой версии лишняя вещь и он его не использует т.к. в 5-ой в отличае от 4-ой "Внедрены шаблоны, основанные на динамическом создании линках/бандлах. Линк может автоматически создаваться входящим запросом (call request) от устройства или DoD/BoD запросом (Dial on Demand/Brake on Demand) из бандла. Бандл может автоматически создаваться при достижении сетевой стадии NETWORK phase."

Rastler, 2009-03-11 в 16:52:13

Статья для начинающих, как руководство к действию отлично, но как обобщающая о MPD ни о чем.
В любом случае спасибо автору за работу.

KampuH, 2009-03-12 в 16:59:59

Статья интересная пусть даже если кто-то считает что для начинающих, тем более хелпы как правило ищут именно они (например как я). Меня интересует настройка хранение списка пользователей в базе MySQL, можете поделится опытом?

Mox, 2009-04-17 в 19:16:18

галку use default gateway on remote network убирать очень часто не нужно.

Её не нужно убирать например в таком случае:
Например, если вы будете подключаться из дома, где у вашего домашнего провайдера сеть вида 192.168.X.X (или у вас дом.роутер, который по дефолту раздает такие адреса) и у вашей рабочей сетки тоже самое, то у вас пакеты будут роутиться через пень-колоду, подумайте сами! Уже проходил.

Но и из этой ситуации есть выход: в дом. сети если есть возможность (например дома стоит роутер) настроить сеть отличную от 192.168.x.x, например 172.16.254.X
Затем подключиться к VPN, убрать эту галку, а потом прописать маршрут до рабочей сети.
route -p add 192.168.0.0 mask 255.255.0.0 <IP-адрес pptp интерфейса>
тогда все пакеты адресованные в раб.сеть пойдут через VPN-ный интерфейс, а то что в локалку или к провайдеру, то через настоящий

Mox, 2009-04-17 в 19:17:29

Кстати, после добавления маршрута нужно переподключиться

Дмитрий, 2009-05-26 в 11:34:44

Баг не баг, но у меня на минимальном конфиге улетает
startup:
       set user admin [password] admin

       set console self 127.0.0.1 5005
       set console open

       set web self 127.0.0.1 5006
       set web open

default:
       load pptp_server

pptp_server:
       set ippool add pooll 192.168.2.140 192.168.2.150

       create bundle template B
       set iface enable proxy-arp
       set iface idle 1800
       set iface enable tcppssfix
       set ipcp yes vjcomp

       set ipcp ranges 192.168.2.140/32 ippool pooll
       set ipcp dns 192.168.2.254

       set bundle enable compress
       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
       set link enable chap
       set link keep-alive 10 60

       set link mtu 1460
       set pptp self 62.80.162.46
       set link enable incoming

вот собственно при попітке соединится - доходит до уровня "Регистрация компьютера в сети" и вілетает... 619

yurka6600, 2009-09-01 в 16:54:29

В случае если соединение устанавливается и ничего не бегает, т.е. нет пинга.. Попробуйте убить для проверки
все что относится к
# The five lines below enable Microsoft Point-to-Point encryption
# (MPPE) using the ng_mppc(8) netgraph node type.
ну и соответственно при создании подключения убрать галочку в security - require data encryption (disconnect if none)

как заработает, ставим недостающее (в статье не указано (( )))

yurka6600, 2009-09-20 в 15:35:16

Также, для тех кто не может с клиента (через VPN) тыкаться в сетевом окружении по компам, т.е. не набирая IPшник, а по имени - смотрим файлик \system32\drivers\etc\hosts и прописываем там соответствие имени и IP.

Алексей, 2009-09-24 в 12:39:13

Господа, есть один существенный баг у MPD, уже полгода ище решения и не могу найти!!! При включенном брандмауере Windows на клиентской тачке коннект устанавливются, но начинаются жуткие тормоза!!! Пингую какую-ниб тачку в локалке (в удаленной локале где находится сервак с поднятым MPD), пинги выпадают, от 30 до 50% потерь((( Прописывание исключение в брандмауер, дополнительных правил и т.п. НИ К ЧЕМУ НЕ ПРИВОДИТ!!! Выход один - откдючать брандмауер, что не удобно (ну попробуй левому чуваку, который работает удаленно с моей локалкой объяснить, что нужно выключать брандмауер!!!).... Как быть, что делать?? Как настроить MPD или єтот гребанній брандмауер на нормальную работу????

Алексей, 2009-09-24 в 12:41:58

P.S. Забыл указать, что использую MPD5

mirlas, 2009-10-04 в 17:08:25

В статье есть баг:
При выключенной галке "Use default gateway on remote network" пакеты с клиента не будут уходить в 192.168.1.0/24 сеть! Т.к. маршрута туда нет! NAT тут только пол-дела, надо заставить клиента лезть в впн.. Выход: либо добавлять руками маршрут на клиенте, либо ставить галку "Use default gateway on remote network".
Существенный недостаток мпд как раз в этом: клиенту нельзя протолкнуть маршрут...
Такие дела..

Mikhail, 2009-10-20 в 12:24:31

Нет решения, как передать клиенту роут в сеть, к которой подключаемся? (при снятой галке "Use default gateway on remote network")
Например, как это делается на Cisco в случае с Cisco VPN client.

Sergey, 2010-01-07 в 23:03:15

Lel! Спасибо за статью, помогла моей лени - маны не курить, новый сервак поставил, решил попробовать 5ку для доступа к локалке, в принцепе нормально работает.... всё устраивает.


P.S.
alex  в mpd 4 пишется конструкция типо
load pptp0
pptp0:
new -i ng0 pptp0 pptp0
set ipcp ranges 192.168.1.4/32 192.168.1.10/32
load pptp_standart
и файл link.mpd
pptp0:
set link type pptp
так что немного неправ извини.....

Corebug, 2010-06-06 в 15:44:05

Default route, default route...
"Use default gateway on remote network" означает "Использовать удаленный шлюз по умолчанию", то есть все пакеты не из нашей локалки слать туда. Если эту галку снять, то роут к VPN сети все равно будет добавлен при подключении.

Corebug, 2010-06-06 в 15:44:48

*не К нашей локалке

Сергей, 2010-06-26 в 19:30:43

Хочу добавить один момент. Если у кого к серверу подключение работает, сервер с клиента пингуется, а сеть нет, то используйте волшебную строчку в /etc/rc.conf:
arpproxy_all="YES"

Ваня, 2010-07-08 в 9:00:00

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

skeletor, 2010-08-27 в 17:50:58

При установке вылазит вот такое (mpd 5.5):

NG_CAR     Use ng_car kernel module from port (< 7.0 only)                                                                                  NG_IPACCT  Use ng_ipacct kernel module from port

Подскажите, что выбрать и для чего предназначена каждая опция?

Заранее спасибо.

skeletor, 2010-08-27 в 17:52:04

Что-то в предыдущем посте криво опции отобразились.

NG_CAR     Use ng_car kernel module from port (< 7.0 only)
NG_IPACCT  Use ng_ipacct kernel module from port

chpoqxie, 2010-10-08 в 10:34:09

поправьте таки название, пожалуйста, меня второй год плющит, как вижу это "по средствам" здесь.
учите русский уже, штоле, вместо этих ваших бсд :)

bammbr, 2010-11-20 в 11:22:22

2 chpoqxie
Ты зря не подсказал, НА ЧТО нужно исправить :)
В общем, в самом деле, не позорьтесь, исправьте \"по средствам\" на \"посредством\" (в одно слово).
Ну, и автору - учи русский, пусть не \"вместо\" БСД, но \"вместе\" с ней не помешало бы.

k0ma, 2010-12-07 в 11:51:09

Форум для вопросов, а у меня просьба, дайте конфиг для pptpd_client, а не для server

Сергей, 2011-09-16 в 17:06:26

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

vitya, 2012-06-30 в 12:32:36

Сергей низкий тебе поклон!!! тоже самое на pf!

German, 2013-06-21 в 13:55:18

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

alexxis, 2018-05-30 в 22:54:38

Когда уже исправите на "посредством"?

Eugene, 2020-04-24 в 22:36:29

Шли годы... "по средствам"- стало грамматической нормой.

Alex Keda, 2020-04-24 в 22:46:56

А что вам не так?
Вот джунипер, или циско - это дорого
а мопед - вполне себе по средствам =)



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0645 секунд
Из них PHP: 33%; SQL: 67%; Число SQL-запросов: 89 шт.
Исходный размер: 68008; Сжатая: 15245