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 сервера. Это все, что нам понадобится для нормальной работоспособности соединения.
Установку операционной системы я опущу.
Ставим необходимые пакеты.
Нам придется отредактировать 3 конфигурационных файла:
Нас интересуют следующие пункты:
этот параметр указывает на то откуда перенаправлять широковещательные сообщения, локальной сети, в нашей ситуации eht0, смотрит в локальную сеть, оттуда мы и будем перенапрявлять эти пакеты.
Вообще при установке VPN соединения имя шлюза не выдается, а шлюзом по умолчанию становится тот сетевой интерфейс, который принимает соединения от пользователей локальной сети и отправляет их в интеренет, в нашем случае это eth0, его IP мы и указываем, но если необходимо блокировать доступ в Интернет пользователям использующим подключающимся удаленно, то можно указать другой IP и в интеренет они через наш сервер выйти не смогут.
Этот пункт отвечает за то, какие IP адреса будут выданы клиентам подключенным по VPN, в данном случае – IP адреса будут выдаваться из диапазона начиная с192.168.1.240 по 192.168.1.254 из этого становиться ясно что в текущей конфигурации, к серверу могут подключиться 14 клиентов, зачастую больше и не требуется. Естественно эту группу IP адресов необходимо исключить из выдачи нашего DHCP сервера, который работает в нутри локалки, чтобы не возникало конфликтов между повторяющимися адресами внутри сети.
Также в этот файл можно добавить параметр listen и указать в нем IP адрес нашего внешнего сетевого интерфейса, который будет принимать внешние подключения, должно выгладеть
Где: 000.000.00.000 необходимо заменить на свой внешний, реальный IP.
Сохраняем изменения, выходим.
Далее нам необходимо отредактировать
В пункте –Encryption привести к виду указанному ниже.
Этим пунктом мы запрещаем использовать протоколы, которые давно и успешно взломаны и по рекомендации 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 мы и указываем. Данная служба существенно снижает нагрузку на сеть. Если она не используется, то данный параметр, можно оставить закомментированным.
На этом все, сохраняем изменения и выходим.
Теперь самое главное, нам необходимо добавить клиентов которые будут подключатся к нашему серверу из вне. Для этого отредактируем:
Можно добавлять в него записи вида
Username * secretpassword -тогда пользователю будет выдан IP из диапазона который мы установили в файле pptpd.conf
Но бывает и так, что за определенным пользователем необходимо закрепить определенный IP например 192.168.1.250, тогда запись приобретает вид
Username * secretpassword 192.168.1.250
Где: Username-имя пользователя, secretpassword-пароль
На этом настройку сервера можно считать завершенной, его необходимо перезагрузить
(Небольшое, но важное дополнение: Если после завершения настроек при попытке перезапустить pptpd-зависает, то необходимо, убедиться что во всех конфигурационных файлах, а особенно в pptpd.conf, после последней строки необходимо нажать Enter, чтобы курсор перешел на новую строку!)
Все работает нормально, теперь нам необходимо настроить клиентов, рассмотрим эту ситуацию на примере windows 7.
Настройка VPN происходит стандартно и в большинстве случае сложности не вызывает, но все-таки рассмотрим ее подробнее.
Настройка самого соединения проходит штатно


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

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

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

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

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

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

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

На этом можно и закончить. В результате проделанной работы у нас получился первоклассный VPN шлюз, который обеспечивает передачу данных по шифрованному каналу между двумя точками, что позволит защитить их от третьих лиц. На его настройку уйдет примерно 15 мин.
Теперь можно смело подключать сетевые диски файловых серверов и подключаться к сетевым принтерам или непосредственно к серверу печати если такой имеется.
Данное руководство актуально для 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 комментариев
Разница только в том, что если к вашему серверу подключается сотрудник с ноутбуком, то он гоняет трафик только для себя, а если подключается сервер(шлюз) то через него идет еще и трафик клиентов локальной сети (которые находятся за ним).
Но со стороны VPN сервера, все они выглядят одинаково!
VPN сервер должен торчать наружу.
Если нет возможности выставить сервер в интернет т.к. он находится за роутером, то лучше его вынести сервер в DMZ.
/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
Чтобы добавить сервер в DMZ достаточно добавить в список IP сервера и жизнь сразу становится легче… :)
Если проходит ковыряйте роутер, если нет-то VPN сервер, где-то напортачили с конфигурацией…
По поводу количества коннектов-у меня на данной схеме, подключается к головному офису-4 удаленных, а это файловый сервер, печать VoIP, ну и для себя 1 оставил, все это на 50 Мбит канале, так вот клиенты быстрее забьют канал, железо на сервере им еще ни разу нагнуть не удалось, нагрузка держится в районе 8-10% по ЦПУ, так что я не парюсь.
Я рад что у вас все получилось-АМИНЬ! :)
Да трафик будет учитываться, ведь данные идет через канал, хоть провайдер и не видит его содержимое т.к. оно зашифровано, но объем переданных данных он узнает, они ведь идут через его оборудование!
На машинах локальной сети все работает без проблем. Всяких SQUID'ов и проксей нет, только iptables и bind9.
В ФАЙЛЕ /etc/ppp/chap-secrets
в записи вида
Username * secretpassword
secretpassword ДОЛЖЕН БЫТЬ В КАВЫЧКАХ
у меня заработало только с записью такого вида:
Username * «secretpassword»
Нужно будет проверить, если проблема подтвердится, поправлю статью
Package: pptpd
Version: 1.3.4-5.2
Плюс pptpd не пускал в локальную сеть, пока не запустил форвардинг:
Установив параметр net.ipv4.ip_forward=1 в /etc/sysctl.conf