avatar Debian Установка VPN сервера Debian/Ubuntu с использованием протокола PPTP (шифрование по алгоритму MS-CHAP v2 )

Иногда возникает необходимость, зайти в локальную сеть, чтобы пользоваться ее внутренними ресурсами, это могут быть файловые, почтовые, сервера баз данных, VoIP и многое другое на что хватает фантазии и знаний. Для этого мы воспользуемся VPN, а конкретно протоколом PPTP. Он представляет, из себя, соединение точка-точка и помогает организовать защищенное соединение поверх не защищенного. В настоящее время поддерживается, большинством современных операционных систем и не требует сложной настройки.
Данное руководство актуально для Dedian/Ubuntu 10.х, а при небольшой адаптации и для других дистрибутивов.
Схема работы:



Но также можно соединять сервера в удаленных филиалах.

Вводная:
У нас есть внутренняя сеть с IP адресами в диапазоне 192.168.1.1-192.168.1.200 c Маской подсети 255.255.255.0, которые раздаются в локальной сети с помощью DHCP севера, о способе его настройки можно прочитать в статье опубликованной ранее. У нас есть шлюз, на котором установлено 2 сетевых интерфейса eth0 имеет статический IP 192.168.1.1 и, как не сложно догадаться, смотрит в локальную сеть, eth1-имеет внешний IP к которому привязано доменное имя vpn.example.org. Доменное имя использовано исключительно для простоты запоминания, если его нет-не беда, можно подключаться по IP. В нутрии локальной сети работают DNS, WINS сервера. Это все, что нам понадобится для нормальной работоспособности соединения.

Установку операционной системы я опущу.
Ставим необходимые пакеты.
sudo apt-get install pptpd


Нам придется отредактировать 3 конфигурационных файла:
sudo nano /etc/pptpd.conf


Нас интересуют следующие пункты:
bcrelay eth0

этот параметр указывает на то откуда перенаправлять широковещательные сообщения, локальной сети, в нашей ситуации eht0, смотрит в локальную сеть, оттуда мы и будем перенапрявлять эти пакеты.

localip 192.168.1.1


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

remoteip 192.168.1.240-254


Этот пункт отвечает за то, какие IP адреса будут выданы клиентам подключенным по VPN, в данном случае – IP адреса будут выдаваться из диапазона начиная с192.168.1.240 по 192.168.1.254 из этого становиться ясно что в текущей конфигурации, к серверу могут подключиться 14 клиентов, зачастую больше и не требуется. Естественно эту группу IP адресов необходимо исключить из выдачи нашего DHCP сервера, который работает в нутри локалки, чтобы не возникало конфликтов между повторяющимися адресами внутри сети.
Также в этот файл можно добавить параметр listen и указать в нем IP адрес нашего внешнего сетевого интерфейса, который будет принимать внешние подключения, должно выгладеть
Listen 000.000.000.000

Где: 000.000.00.000 необходимо заменить на свой внешний, реальный IP.

Сохраняем изменения, выходим.

Далее нам необходимо отредактировать
sudo nano /etc/ppp/pptpd-options


В пункте –Encryption привести к виду указанному ниже.

# Encryption
# Debian: on systems with a kernel built with the package
# kernel-patch-mppe >= 2.4.2 and using ppp >= 2.4.2, ...
# {{{
refuse-pap
refuse-chap
refuse-mschap
# Require the peer to authenticate itself using MS-CHAPv2 [Microsoft
# Challenge Handshake Authentication Protocol, Version 2] authentication.
require-mschap-v2
# Require MPPE 128-bit encryption
# (note that MPPE requires the use of MSCHAP-V2 during authentication)


Этим пунктом мы запрещаем использовать протоколы, которые давно и успешно взломаны и по рекомендации Microsoft, не должны использоваться: pap, chap, mschap, а также жестко указываем что можно использовать только mschap версии 2.

В разделе Network and Routing, можно указать
ms-dns 192.168.1.20

Если в сети работает DNS сервер, например в ОС сервества Windows 2003/2008, который работает совместно с Active Directory, то можно указать его IP и тогда клиенты смогут увидеть все компьютеры и прочие сетевые ресурсы, присутствующие в нашей сети, обращаясь к ним по именам, а не по IP.

ms-wins 192.168.1.20

Из названия данного пункта, можно догадаться, что он отвечает за адрес сервера WINS, если конечно он используется, в нашем случае, служба WINS работает на одном сервере с DNS, его IP мы и указываем. Данная служба существенно снижает нагрузку на сеть. Если она не используется, то данный параметр, можно оставить закомментированным.

На этом все, сохраняем изменения и выходим.

Теперь самое главное, нам необходимо добавить клиентов которые будут подключатся к нашему серверу из вне. Для этого отредактируем:

sudo nano /etc/ppp/chap-secrets


Можно добавлять в него записи вида
Username * secretpassword -тогда пользователю будет выдан IP из диапазона который мы установили в файле pptpd.conf

Но бывает и так, что за определенным пользователем необходимо закрепить определенный IP например 192.168.1.250, тогда запись приобретает вид
Username * secretpassword 192.168.1.250

Где: Username-имя пользователя, secretpassword-пароль

На этом настройку сервера можно считать завершенной, его необходимо перезагрузить

sudo /etc/init.d/pptpd restart


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

Все работает нормально, теперь нам необходимо настроить клиентов, рассмотрим эту ситуацию на примере windows 7.
Настройка VPN происходит стандартно и в большинстве случае сложности не вызывает, но все-таки рассмотрим ее подробнее.

Настройка самого соединения проходит штатно




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


Указываем имя пользователя и пароль и жмем кнопку создать


Теперь находим наше свежесозданное подключение и настраиваем его-перейдя в его свойства


Переходим во вкладку Безопасность
В тип VPN указываем PPTP переходим в меню-Разрешить следующие протоколы и оставляем галочку на против MSCHAP v2


Переходим во вкладку Сеть:
Необходимость этого пункта зависти от того для чего мы используем этот сервер!
Если планируем соединить удаленные офисы в единую сеть, при этом офисы подключаются к нам через WLAN, и не имеют местного доступа в интернет, будут выходить в глобальную сеть через головой офис или через тот где интернет обходится дешевле, то необходимость того что написано ниже, отпадает, нажимаем OK и пробуем подключиться, мы сразу получим доступ в Интернет, а шлюзом будет выступать сервер головного офиса.

Если сервер VPN будет использоваться для подключения удаленных сотрудников для работы с ресурсами локальной сети, то им нет необходимости выходить в интернет через наш сервер-он и так у них есть на месте и в этой ситуации этот пункт нам понадобится. По умолчанию VPN соединение получает более высокий приоритет, а VPN сервер становится шлюзом по умолчанию, данный параметр регулируется сетевой метрикой, чем число в метрике меньше-тем приоритет этого соединения выше. В этой ситуации, нам необходимо, сказать системе не использовать это соединение для доступа в интернет, а только для работы в локальной сети.

Выбираем протокол TCP/IP v4 и переходим в его свойства


В свойствах выбираем Дополнительно


В дополнительных параметрах нам необходимо снять галочку с пункта: Использовать основной шлюз удаленной сети
Теперь это соединение не будет использоваться как основное, для подключения к интернет, но работоспособность локальной сети сохранится.


На этом можно и закончить. В результате проделанной работы у нас получился первоклассный VPN шлюз, который обеспечивает передачу данных по шифрованному каналу между двумя точками, что позволит защитить их от третьих лиц. На его настройку уйдет примерно 15 мин.
Теперь можно смело подключать сетевые диски файловых серверов и подключаться к сетевым принтерам или непосредственно к серверу печати если такой имеется.

28 комментариев

avatar
«Можно соединять сервера в удаленных филиалах.» Какие отличия будут (со стороны клиентской сети) ??? Там тоже надо ставить vpn сервер???? Я если честно вот это никак догнать не могу. Сервер — клиент ет понятно, а как сети соединить. сервер-сервер???
avatar
VPN Сервер стоит в центральном офисе, к нему подключаются клиенты из удаленных офисов.
Разница только в том, что если к вашему серверу подключается сотрудник с ноутбуком, то он гоняет трафик только для себя, а если подключается сервер(шлюз) то через него идет еще и трафик клиентов локальной сети (которые находятся за ним).
Но со стороны VPN сервера, все они выглядят одинаково!
avatar
ошибка 619. Не удаетсяя подключиться к удаленному компьютеру, поэтому порт подключения закрыт. И 809 ошибка типа брендмауер и NAT. Что делать…
avatar
вроде все сделал по статье. На Маршрутизаторе, за которым находится сервер сделал и проброс портов и в файрволе разрешение создал. Удаленно к серверу через SSH подключается (удаленное управление через терминал). Для pptp разрешил все подключения (протоколы pptp с портом 1723 и GRE с портами как указанно 0 и 47) и проброс портов настроил тоже для них. Где ошибка… блин((
avatar
Подключаетесь к VPN серверу из-за NAT?
avatar
VPN сервер стоит за NAT
avatar
Когда сервак выключил и пытался подключиться, то 807 ошибку выдает, причем долго старается подключиться)). Это значит, что проброс портов работает и правило в файрволе тоже правильно по ходу настроено. Значит касяк где-то на сервере… Мб порт 1723 закрыт???? или касяк из за того что 2 протокола используется(для аутентификации и GRE)&&
avatar
Как проверяется 1723 порт открыт или нет на ubuntu,??? спасибо что терпите меня =|
avatar
Нужно копать в направлении маршрутизации, но мое мнение-ставить VPN сервер за NAT это чрезвычайно «фееричная» система получается…
VPN сервер должен торчать наружу.
Если нет возможности выставить сервер в интернет т.к. он находится за роутером, то лучше его вынести сервер в DMZ.
avatar
уже и порт открыл
/sbin/iptables -A INPUT -i интерфейс -p tcp -s IP_VPN_сервера --sport 1723 -j ACCEPT
/sbin/iptables -A OUTPUT -o интерфейс -d IP_VPN_сервера -j ACCEPT
/sbin/iptables -A INPUT -i интерфейс -p gre -s IP_VPN_сервера -j ACCEPT
avatar
Если нет возможности выставить сервер в интернет т.к. он находится за роутером, то лучше его вынести сервер в DMZ. Он имеет прямой доступ в инет, на ZyWall 35 прописано что этот ip имеет прямой выход в инет, но NAT конечноже есть- кудаж без него. В зоне DMZ (на ZyWAll-е) значит адрес прописать… Буду пробывать. Спасибо за ответ =). А OpenVPN server случаем не ставили??? там просто 1 протокол же используется
avatar
Ставил, но это отдельная история.
Чтобы добавить сервер в DMZ достаточно добавить в список IP сервера и жизнь сразу становится легче… :)
avatar
Для проверки работоспособности VPN соединения, попробуйте подключиться к серверу из локальной сети, все должно пройти без проблем.
Если проходит ковыряйте роутер, если нет-то VPN сервер, где-то напортачили с конфигурацией…
avatar
а можно ли по сертификатам аутентификацию??? и сколько максимальное число VPN туннелей одновременно????
avatar
насколько я помню, аутентификация по сертификатам в PPTP не поддерживается, только начиная с L2TP ну и DirectAccess-он исключительно на сертификатах( но это майкрософтовская штука, ее свободной реализации мне видеть пока не удавалось+она требует наличие Центра сертификации+ActiveDirectory+Windows 7 в редакции Ultimate/Interprise)

По поводу количества коннектов-у меня на данной схеме, подключается к головному офису-4 удаленных, а это файловый сервер, печать VoIP, ну и для себя 1 оставил, все это на 50 Мбит канале, так вот клиенты быстрее забьют канал, железо на сервере им еще ни разу нагнуть не удалось, нагрузка держится в районе 8-10% по ЦПУ, так что я не парюсь.

Я рад что у вас все получилось-АМИНЬ! :)
avatar
СПАСИБО БОЛЛЬШОЕ)))) все заработала, ехууу))
avatar
а как пропускную способность канала узнать можно???? надо просто 10-20 одновременных туннелей организовать
avatar
У провайдера
avatar
У вас пропускная способность 50 Мбит оОООО. Это как я понимаю «скорость интернета» же? Сколькож такой тариф стоит то
avatar
Почти 50 000 руб.
avatar
это скорость входящего трафика, исходящий же скоростью не ограничен — максимум возможного. При организации VPN туннеля, трафик получается тоже будет учитываться?? прально я понял? =)
avatar
Это стоимость канала, с ограничением скорости в 50 Мбит.
Да трафик будет учитываться, ведь данные идет через канал, хоть провайдер и не видит его содержимое т.к. оно зашифровано, но объем переданных данных он узнает, они ведь идут через его оборудование!
avatar
Спасибо за статью. Единственное, что меня пока вгоняет в ступор, так это то, что при установке галки «Использовать основной шлюз в удаленной сети» перестал работать аудиоплеер ВКонтакта, плюс не открываются некоторые странички на подключенной через pptp машине. Куда думать не знаю. Грешу на iptables шлюза, с его одиноким
iptables -A POSTROUTING -t nat -s 192.168.0.0/24 -o eth0 -j MASQUERADE

На машинах локальной сети все работает без проблем. Всяких SQUID'ов и проксей нет, только iptables и bind9.
avatar
Думаю что причина именно в маршрутизации.
avatar
Долго пытался запустить pptpd постоянно была ошибка 619, после долгих ковыряний выяснил
В ФАЙЛЕ /etc/ppp/chap-secrets
в записи вида
Username * secretpassword
secretpassword ДОЛЖЕН БЫТЬ В КАВЫЧКАХ
у меня заработало только с записью такого вида:
Username * «secretpassword»
avatar
Очень может быть, но на момент написания статьи работало так как указано в мануале.
Нужно будет проверить, если проблема подтвердится, поправлю статью
avatar
debian 7.0,
Package: pptpd
Version: 1.3.4-5.2

Плюс pptpd не пускал в локальную сеть, пока не запустил форвардинг:
Установив параметр net.ipv4.ip_forward=1 в /etc/sysctl.conf
avatar
ну это понятно
Есть что добавить? Регистрируйся и оставляй комментарии!