В связи с просьбой одного из сотрудников в реализации доступа к серверам офисной сети из дома (согласно требованиям безопасности, доступ к ним из сети Internet ограничен), возникла необходимость в настройке VPN-сервера. Реализовывать будем на базе MPD - основанная на netgraph реализация ppp-протокола мультисвязи для FreeBSD. Еще одним плюсом в сторону MPD есть то, что он совместим с Microsoft, тоесть подключиться к нашему серверу пользователи ОС Windows смогут пользуясь стандартными средствами ОС.
В более ранних версиях, для работы MPD необходима была поддержка ядром NETGRAPH, однако, начиная с FreeBSD6.0, это необязательно. Поскольку офисный маршрутизатор работает под FreeBSD 8.0, пересобирать ядро с поддержкой NETGRAPH не будем:
# uname -a |
Исходные данные:
- Адресация локальной сети - 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: 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-интерфейсу