Настройка VPN во FreeBSD с помощью mpd5
Количество windows-терминальных лицензий в нашей конторе подходит к концу. На закупку дополнительных денег все равно не дадут, вот и возникла идея поднять VPN-сервер на FreeBSD шлюзе, для организации подключения к нашей частной сети из вне. Итак, имеем сервер под управлением FreeBSD 8.1-RELEASE (архитектура amd64), для реализации VPN-сервера был выбран порт mpd-5.5. |
Mpd5 – реализация multi-link PPP протокола для FreeBSD, основанная на netgraph(4). В его основе лежат скорость и гибкость как в ручных настройках, так и в организации соединений на пользовательском уровне. При этом маршрутизация данных происходит непосредственно в ядре. Mpd5 поддерживает множество типов соединений, мною было выбрано pptp – соединение точка-точка через интернет посредством PPTP (Point-to-Point Tunnelling Protocol) и поддерживается большинством производителей операционных систем и оборудования.
А вообще, PPTP мной был выбран из-за того, что для его настройки не надо пользоваться сторонними клиентскими программами. Соединение можно установить встроенными средствами операционных систем Microsoft (кстати, даже Android подключился без проблем).
Сперва нам необходимо установить порт:
# cd /usr/ports/net/mpd5 # make install clean
После установки у вас появится каталог /usr/local/etc/mpd5 с файлами конфигурации по-умолчанию:
# ls /usr/local/etc/mpd5 mpd.conf.sample mpd.script.sample mpd.secret.sample
Нам необходимо произвести собственные настройки, где файл mpd.conf будет содержать непосредственно конфигурацию, в файле mpd.secret будут храниться пары логин/паролей и выделяемые им ip-адреса, а в файле mpd.script будут храниться скрипты для модемных устройств (если они вам необходимы).
startup: #указываем пользователя "grom" и пароль "G7eN1gx0" с правами админа (измените) set user grom G7eN1gx0 admin #указываем ip-адрес vpn-сервера и консольный порт (внутренний для шлюза) set console self 192.168.100.3 5005 set console open #указываем ip-адрес vpn-сервера и порт для web доступа (внутренний для шлюза) set web self 192.168.100.3 5006 set web open default: #настраиваем и запускаем pptp-сервер load pptp_server pptp_server: #определяем пул "pool1" динамически выделяемых ip адресов set ippool add pool1 192.168.100.10 192.168.100.50 #создаем клонируемый шаблон пакетов "B" create bundle template B set iface enable proxy-arp set iface idle 1800 set iface enable tcpmssfix set ipcp yes vjcomp #определяем настройки для выделяемого пула "pool1" адресов #это будет для них роутером set ipcp ranges 192.168.100.3/32 ippool pool1 #указываем dns-сервер внутренней сети set ipcp dns 192.168.100.1 #указываем wins-сервер внутренней сети set ipcp nbns 192.168.100.1 #включаем шифрование Microsoft Point-to-Point (MPPE) с помощью ng_mppc (8) 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 #включаем Multi-link с Maximum Transmission Unit равным 1460 set link enable multilink set link yes acfcomp protocomp set link keep-alive 10 60 set link mtu 1460 #включаем CHAP (пароли будут храниться на серверной стороне) set link no pap chap set link enable chap #указываем внешний ip адрес шлюза, на котором будут ожидаться соединения set pptp self 12.34.56.78 #позволяем принимать соединения set link enable incoming
С настройкой mpd5 закончили. Нам осталось не забыть внести в файл /etc/rc.conf строку mpd_enable=“YES”, чтобы разрешить запускать демон, и флаг mpd_flags=”-b”, указывающий mpd5 работать в фоновом режиме.
# nano -w /etc/rc.conf ... mpd_enable="YES" mpd_flags="-b" ...
Создадим файл /usr/local/etc/mpd5/mpd.secret, в который пишем логины/пароли и выделяемые для них ip-адреса (измените на свои):
# nano -w /usr/local/etc/mpd5/mpd.secret user1 parol1 192.168.100.11 user2 parol2 192.168.100.12 ... user(n) parol(n) 192.168.100.50
И дадим права на его просмотр только root:
# chmod 600 /usr/local/etc/mpd5/mpd.secret
Чтобы организовать сбор логов работы mpd5 надо в файл конфигурации syslog – /etc/syslog.conf внести следующие строки:
# nano -w /etc/syslog.conf ... !mpd *.* /var/log/mpd.log ...
Создадим файл лога и дадим права на его просмотр только root:
# touch /var/log/mpd.log # chmod 600 /var/log/mpd.log
Так же для удобства вы можете организовать ротацию логов с помощью newsyslog. Для этого в конфигурационный файл /etc/newsyslog.conf внесите следующую строку:
# nano -w /etc/newsyslog.conf ... /var/log/mpd.log 600 7 1024 * JC ...
Которая организует ротацию лога работы mpd5 при достижении его размера в 1 мегабайт до 7 раз. Дальше ранние логи будут затираться.
Даем команду syslog перечитать свой конфигурационный файл и запустим mpd5:
# /etc/rc.d/syslogd reload # /usr/local/etc/rc.d/mpd5 start
Проверим работу mpd5 командами:
# netstat -tan | grep 50 | grep LIST tcp4 0 0 192.168.100.3.5006 *.* LISTEN tcp4 0 0 192.168.100.3.5005 *.* LISTEN # netstat -tan | grep 1723 tcp4 0 0 12.34.56.78.1723 *.* LISTEN
Web-сервер при заходе в него запросит у вас логин/пароль, который вы указали при настройке mpd5 (не забудьте вдобавок к ip-адресу указать протокол http и порт – 5006, т.е. адрес вашего web-сервера mpd5 будет выглядеть так: http://192.168.100.3:5006). В случае IE:
Сам web-сервер выглядит при простое так:
Теперь надо на клиентской машине настроить pptp соединение. Для этого кликните дважды левой кнопкой мыши в «Панели управления» на ярлыке «Сетевые подключения»:
В открывшемся окне «Сетевые подключения», дважды кликните мышкой по ярлыку «Мастер новых подключений»:
В открывшемся окне «Мастера новых подключений» кликните по кнопке «Далее»:
В следующем окне «Мастера новых подключений» выберите «Подключить к сети на рабочем месте» и кликните по кнопке «Далее»:
В следующем окне «Мастера новых подключений» выберите «Подключение к виртуальной частной сети» и кликните по кнопке «Далее»:
В следующем окне «Мастера новых подключений» введите наименование организации «Organization» и кликните по кнопке «Далее»:
В следующем окне «Мастера новых подключений» введите ip-адрес 12.34.56.78 и кликните по кнопке «Далее»:
В следующем окне «Мастера новых подключений» выберите, чтобы вновь создаваемое подключение было доступным за вашим компьютером только для вас и кликните по кнопке «Далее»:
В завершающем окне «Мастера новых подключений» поставьте галочку рядом с «Добавить ярлык подключения на рабочий стол» и кликните по кнопке «Готово»:
На рабочем столе у вас появится ярлык этого подключения – «Organization», а свойства этого подключения будут доступны через окно «Сетевые подключения»:
Дважды кликнув с помощью левой кнопки мыши по ярлыку подключения «Organization» на своем рабочем столе, вы откроете окно:
В котором в поле «Пользователь» и в поле «Пароль» вы должны будете ввести выданные вам логин и пароль на подключение. Для безопасности не рекомендуется ставить галочку напротив «Сохранять имя пользователя и пароль». Для установления соединения нажмите на кнопку «Подключение». В случае удачного подключения справа внизу в системном трее рядом с часами должна появиться соответствующая иконка.
Для того, чтобы вы могли пользоваться ресурсами сети «Organization», возможно вам понадобиться настроить роутинг. Делается это так. В командной строке windows наберите:
route add 192.168.100.0 mask 255.255.255.0 192.168.100.N
где N – последняя цифра выданного вам ip-адреса.
Вот и все, удачи!
P.S. возможно вам понадобиться еще настроить и firewall (брандмауэр), если он присутствует на вашем шлюзе. Не забудьте про этот момент!
Огромное спасибо за статью, но есть еще один может дилетантский вопрос, а есть ли возможность просматривать кто в данный момент подключен к серверу?
Конечно! Через веб-сервер (в статье показано, как его настроить) или непосредственно через лог.
Здравствуйте,а скажите пожалуйста можно ли сделать так чтоб пользователь мог подключаться только один раз с одной учетки,чтоб с одной и той же учетки нельзя было подключаться разным людям,а мог сидеть под этой учеткой только один человек,это как то привязкой по mac адресу делается или же как то по другому,если есть такая возможность то подскажите как,заранее спасибо)
Хотелось бы вот еще что узнать,у меня сейчас стоит windows server 2003 и на нем поднят vpn server к которому коннектятся юзеры и выходят в инет чз это vpn сервер,дак вот имеет смысл поднимать vpn сервер на freebsd или так и оставить на win server 2003 , просто вин сервер мне не нравится тем что он как то сильно режет скорость,не р
ежет ли скорость впн сервер во freebsd?
Android не соединяется. в логе мпд это.
Sep 30 00:28:43 alfa mpd: [L-1] ACFCOMP
Sep 30 00:28:43 alfa mpd: [L-1] PROTOCOMP
Sep 30 00:28:43 alfa mpd: [L-1] MRU 1500
Sep 30 00:28:43 alfa mpd: [L-1] MAGICNUM e59c477d
Sep 30 00:28:43 alfa mpd: [L-1] AUTHPROTO CHAP MSOFTv2
Sep 30 00:28:43 alfa mpd: [L-1] MP MRRU 2048
Sep 30 00:28:43 alfa mpd: [L-1] MP SHORTSEQ
Sep 30 00:28:43 alfa mpd: [L-1] ENDPOINTDISC [802.1] 00 14 d1 10 aa 8a
Sep 30 00:28:45 alfa mpd: [L-1] LCP: parameter negotiation failed
Sep 30 00:28:45 alfa mpd: [L-1] LCP: state change Req-Sent —> Stopped
Sep 30 00:28:45 alfa mpd: [L-1] LCP: LayerFinish
Sep 30 00:28:45 alfa mpd: [L-1] PPTP call terminated
Sep 30 00:28:45 alfa mpd: [L-1] Link: DOWN event
Sep 30 00:28:45 alfa mpd: [L-1] LCP: Close event
Sep 30 00:28:45 alfa mpd: [L-1] LCP: state change Stopped —> Closed
Sep 30 00:28:45 alfa mpd: [L-1] LCP: Down event
Sep 30 00:28:45 alfa mpd: [L-1] LCP: state change Closed —> Initial
Sep 30 00:28:45 alfa mpd: [L-1] Link: SHUTDOWN event
Sep 30 00:28:45 alfa mpd: [L-1] Link: Shutdown