В связи с просьбой одного из сотрудников в реализации доступа к серверам офисной сети из дома (согласно требованиям безопасности, доступ к ним из сети Internet ограничен), возникла необходимость в настройке VPN-сервера. Реализовывать будем на базе MPD - основанная на netgraph реализация ppp-протокола мультисвязи для FreeBSD. Еще одним плюсом в сторону MPD есть то, что он совместим с Microsoft, тоесть подключиться к нашему серверу пользователи ОС Windows смогут пользуясь стандартными средствами ОС.
В более ранних версиях, для работы MPD необходима была поддержка ядром NETGRAPH, однако, начиная с FreeBSD6.0, это необязательно. Поскольку офисный маршрутизатор работает под FreeBSD 8.0, пересобирать ядро с поддержкой NETGRAPH не будем:
# uname -a |
Исходные данные:
Приступаем к установке:
# 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: default: pptp_server: |
Дальше необходимо создать файл mpd.secret, где будем хранить логины и пароли (при необходимости указываем и IP-адрес, который нужно присвоить клиенту, иначе берется из пула заданных адресов) VPN-пользователей. Пример mpd.secret:
# cat mpd.secret |
Добавляем загрузку MPD при старте системы:
# echo '# VPN PPTP Server' >> /etc/rc.conf |
Даем команду запуска:
# sh /usr/local/etc/rc.d/mpd5 start |
Как оговаривалось раньше, поддержка 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 |
Подключение к командной строке
# 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-интерфейсу
Отличная статья.Не могли бы
Отличная статья.Не могли бы вы написать что добавить в 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:
Если пакеты "прилетают", слушаем на "внешнем интерфейсе (условно считаем, что у нас это em0):
Если пакеты отсутствуют, смотрите маршрутизацию/файрвол.
Если "прилетают", смотрите 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