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

Настройка mpd5 L2TP

Автор: Le1.


Значит так, у моего друга на работе появилась нужда настроить VPN сервер, но с условием, что в качестве шлюза служит машина с Windows ХРень а сам сервак VPN должен быть настроен в виртуальной среде VMWare под FreeBSD :) Нужен был VPN сервер который поддерживает стандартное подключение Windows VPN клиента (PPTP или L2TP IPSec), и требовалось все настроить таким образом, чтобы подключенные юзеры, никому не мешая, поподали в свою выделенную подсеть, и могли бы общатся друг с другом как бы локально.

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

Идея настройки OpenVPN в качестве сервера сразу отпала, так как нужно было подключать клиентов стандартным соединением винды. Выбрали все тот-же mpd5.

По началу начали заморачиватся с соединением PPTP, нужно было редиректить tcp порт 1723 который прослушивает mpd при соединении типа PPTP, и порт 22 - SSH для удаленного коннекта к FreeBSD.

Редирект порта в Windows XP стандартными средствами не осуществить, так что пришлост качнуть PortTunnel и с помощу него пробросить 22 порт на виртуальную машину с FreeBSD.

Как известно - PPTP работает устанавливая обычную PPP сессию с противоположной стороной с помощью протокола
GRE (Generic Routing Encapsulation, тот-же Protocol-47). Второе соединение на TCP-порту 1723 используется для инициации и управления GRE-соединением.

Вот тут то и был облом, нарыть информацию о том, как перебросить GRE с помощу XP не получилось, да и врятли возможно такое осуществить, так что пришлось идти по другому пути, настраивть сервер mpd с использованием протокола L2TP (Layer Two Tunneling Protocol)

L2TP использует UDP port 1701, пришлось искть программу для переброса UDP порта, нашел универсальную - PortMapper которая умеет работать и с TCP и UDP портами, она и заменила выше описанный PortTunnel.

Далее все просто, устанавливаем все по порядку:
cd /usr/ports/net/mpd5; make && make install && make clean


Создаем конфиги:
/usr/local/etc/mpd5# touch mpd.conf; touch mpd.secret


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


И вставляем наш рабочий конфиг для работы по протоколу L2TP:
startup:
        set user foo bar admin
        set user foo1 bar1
        set console self 127.0.0.1 5005
        set console open
        set web self 0.0.0.0 5006
        set web open
default:
        load l2tp_server
l2tp_server:
# Создаем диапазон присваиваемых IP адрессов.
# Define dynamic IP address pool.
        set ippool add pool1 10.10.0.5 10.10.0.100

# 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 10.10.0.1/24 ippool pool1
        set ipcp dns 10.10.0.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 l2tp
# 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 l2tp
# IP адресс нашего VPN сервера. (Собственно адресс машины с фряхой)
        set l2tp self 192.168.1.10
# Allow to accept calls
        set link enable incoming


Далее нужно править конфиг mpd.secret где и прописываем Username, Password, IP:
test    testpass    10.10.0.5
test1   test1pass   10.10.0.6

Эсли IP не прописать, то mpd сам выдаст машине произвольный IP заданого пула в конфиге mpd.conf

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


Чтобы у нас были логи нашего MPD, в файле /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 


Дальше нужно пересобрать ядро с поддержкой файрвола PF, ну или в худшем случая подгрузить модулем.
Опишу оба варианта - 1) Сборка ядра с поддержкой PF, 2) Подгрузка Модуля.

1) Сборка ядра с поддержкой PF
Для начала нужно обновить сорсы системы, но тут речь пойдет не об этом, про обновление поднобно можно прочитать здесь.

Если машина с архитектуры i386, как в моем случае с виртуалкой VMWare, то идем в /usr/src/sys/i386/conf
И копируем ядро GENERIC с новым именем нашего ядра.
/# cp GENERIC VPN_Server


Чтобы собрать ядро с поддержкой фарвола PF, нужно в наш конфиг файл ядра - VPN_Server, добавть опции
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


Ну и собственно собираем все по быстрому:
/# cd /usr/src/
/# rm -rf /usr/obj
/# make clean && make cleandir
/# make buildkernel KERNCONF=VPN_Server
/# make installkernel KERNCONF=VPN_Server && shutdown -r now



2) Подгрузка Модуля.
Для подгрузки файрвола модулем:
/# kldload pf.ko

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


--------------------------------------------------------------------------

Теперь продолжаем - если вы пересобрали ядро то после перазагрузки надо править конфиг файрвола, если подгрузили модулем то перезагрузка необязательня и сразуже приступаем к правке /etc/pf.conf:
nat on nfe0 from 10.10.0.0/24 to any -> 192.168.1.10
pass in all
pass out all

Где 10.10.0.0/24 диапазон IP присваеваемых VPN клиентам. А 192.168.1.10 IP сервера.

И запускаем наши правила:
pfctl -f /etc/pf.conf


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


Чтобы создать VPN соединение в Windows XP:
Control Panel -> Network Connections -> Create a New Connection -> 
Next -> Connect to the network at my workplace -> 
Next -> Virtual Private Network connection -> 
Next -> "Имя Соединения (Любое) " -> 
Next -> "Имя хоста или IP VPN сервера" 
-> Finish


Чтобы подключится к нашему серверу, нужно убрать IPSec в Windows VPN клиенте, для этого нужно добавить в ветке реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters

ключь:
ProhibitIpSec dword 1


Нам нужно подключится по средствам L2TP, для этого, в свойствах нами созданного VPN соединения идем на вкладку Networking и меняем Type of VPN - "Automatic" на "L2TP IPSec VPN".

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

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





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



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


arksu, 2009-01-15 в 22:28:45

насколько я понимаю L2TP использует и TCP и UDP порт 1701 (IANA), сам не заморачивался за глаза хватает функционала OpenVPN, имхо идеал для работы удаленных пользователей...
ну да посмотрим на законченную статью =) и там уже будем делать выводы

Lexa, 2009-01-26 в 20:01:41

Прекрасная статья. А зачем уберать ipsec, или его никак под win заставить работать нельзя?

Le1, 2009-01-27 в 0:49:57

Спасибо Lexa, рад что комуто понравилась статья...
Да если не убрать IPSec, то клиент не хочет коннектится, или есть другой выход, настроить IPSec на сервере, что было бы лишним в моем случае.

Arch, 2009-01-29 в 18:45:52

> насколько я понимаю L2TP использует и TCP и UDP
Оно еще и какой-то не-TCP и не-UDP протокол использует, GRE кажется.И провайдеры обожают это давить, так что ничего потом не работает.В этом плане openvpn просто спасение в плане его пролезаемости.

MultidoS, 2009-01-30 в 3:01:35

Из багов в статье могу ток придраться к: Эсли IP не прописать, то . . . На Е исправить нуно =)) А так статья просто супер... разжевал и по полочкам все... всё доступно... Респект те Le1!!!

eugene210682, 2009-05-27 в 18:28:21

Понимаю, что камент мимо кассы, но все же...
2Arch - GRE инкапсулируется в UDP, поэтому, если открыт UDP (только UDP, без TCP) порт 1701, то фаерволом L2TP не давится. Более того, благодаря тому, что используется UDP, L2TP умеет пролазить через NAT. Если кому-то будет интересно, у меня есть заметка на эту тему (а также и по остальным протоколам туннелирования):
http://eugene210682.livejournal.com/5324.html
Рассматривается минимальная рабочая конфигурация. от которой можно оттолкнуться и в сторону IPSec и в сторону RADIUS и прочего...

eugene210682, 2009-05-27 в 19:26:27

2Arch: в L2TP не используется GRE (TCP, кстати, тоже не используется, по-крайней мере для инкапсуляции PPP) - только UDP порт 1701, следовательно, если этот UDP порт открыт в фаерволе, то L2TP не только через него пройдет, но и через NAT.

eugene210682, 2009-05-27 в 19:27:42

за позапрошлый пост - пардон, сплоховал насчет GRE

karagodov, 2009-06-09 в 1:09:17

с не-виндовыми l2tp клиентами это не работает :(
им нужен IPSec (мак ос например)

Lexa, 2009-09-19 в 10:46:07

Если кому интересно то вот продолжение по ipsec
http://simasimapants.blog79.fc2.com/blog-entry-268.html
Японский знать не обезательно))) конфиг рабочий, только подогнать под себя.

Может кому понравится, напишете статейку. Или добавьте к этой.

Dima, 2010-01-17 в 20:19:12

>>Редирект порта в Windows XP стандартными средствами не осуществить - полный бред, есть такая нтатная возможность сам лично пробрасывал на 25 порт внутри локальной сети.

Dog, 2010-01-18 в 17:08:35

2Dima: Самый умный? Ну так укажи, какими именно штатными средствами это делается в винде. "Cам лично пробрасывал" по информативности равнозначно "Рабинович по телефону напел". Или конкретику давай, или промолчи, а то "полный бред" в данном случае - твой комментарий.

bilcic, 2010-02-07 в 19:27:59

Редирект порта в Windows XP стандартными средствами
http://split.nm.ru/scr/portforward.png

dj_max_demon, 2010-07-06 в 15:00:51

и я камушек в огород брошу) можно было пробросить "GRE тобишь 47 по UDP " и завёлся бы pptp ))

prgr, 2010-12-23 в 13:51:38

Я вот не понял, зачем форвардить порты, если можно было прокинуть сетевую карту в vmware. ;)
ps. Статья отличная.

Anonymous, 2011-01-29 в 17:20:04

Статья отличная, спасибо, но немного позанудствую - "Нам нужно подключится по средствам" в этой фразе нужно поправить на "посредством"
И вопрос второй, про часть с pf . Непонятно откуда берется интерфейс nfe0.

Alex Keda, 2011-01-29 в 17:42:45

ну почему же =)

Anonymous, 2011-01-30 в 11:54:12

Ну вот так. Из статьи непонятно ; )

Lexa, 2011-03-16 в 11:16:30

Хорошая статья
Есть 2 замечания.
1 Если бы не был до ээтого знаком с pf - ничего бы не понял из приведенного конфига.
2 Важное. Свзяь не устанавливается никак.
Если делать все по статье То получаем ошибку 781(т.е. просит сетификат)
Если снять чекбокс "требуется шифрование данных" то имеем ошибку 789.
Возможно просто ключ реестра никак не подействовал на XP'шную машину?

Gaziz, 2012-07-05 в 12:22:50

Как организовать на 1 машине что бы MDP5 работал и с L2TP и с PPTP .ксто знает как это сделать?

vAsya, 2012-07-06 в 11:30:20

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

default:
       load pptp_server
       load l2tp_server

pptp_server:
# Create clonable bundle template named B1
       create bundle template B1
# Create clonable link template named L1
       create link template L1 pptp2
   ......

l2tp_server:
# Create clonable bundle template named B2
       create bundle template B2
# Create clonable link template named L2
       create link template L2 l2tp
   ......

Gaziz, 2012-07-06 в 11:43:19

Следует ли выделять отдельный пул адресов?
вот тут
#Define dynamic IP address pool.
set ippool add pool1 10.10.0.5 10.10.0.100
и вот тут
# Specify IP address pool for dynamic assigment.
       set ipcp ranges 10.10.0.1/24 ippool pool1
       set ipcp dns 10.10.0.1
Или они будут мирно сосуществовать в одном пуле?

90h, 2012-09-30 в 16:50:13

что-то не пойму большой разницы между pptp и l2tp если для соединения необходимо отключать шифрование. помогите разобраться. или \"доктор, что я делаю не так?\" под вин7 реестр можно не править. и андроид не соединяется.

MYXA, 2012-10-06 в 17:19:05

И в статье не сказано, что для windows клиентов, после внесения параметра "ProhibitIpSec"=dword:00000001 нужно ОБЯЗАТЕЛЬНО перегрузить компьютер. Иначе не соединяется с ошибкой 789.

>>90h,
А где сказано что шифрование отключается? Отключается функционал IPsec.
Для l2tp нужен UDP, pptp - TCP:1723 (+gre)

90h, 2012-10-13 в 21:50:28

MYXA,ну вот что-то не вышло соединяться при включенном шифровании. про порты и протоколы ясно. а вот по безопасности несовсем.

Антон, 2014-05-21 в 22:37:44

Есть просьба обновить статью, т.к. на FreeBSD начиная с 9.2 не актуально.

Ставил 9.2 сверху мпд 5 и все фалы копировал, соединение не поднялось.

Тоже самое проделал на версии 9.0 все отлично.
От сюда и просьба.



 

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

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0603 секунд
Из них PHP: 29%; SQL: 71%; Число SQL-запросов: 89 шт.
У Вас отключено GZIP-сжатие в браузере. Размер страницы 58815