Поднимаем vpn (pptp) сервер
Внимание! Данный пост был опубликован более года назад и, возможно, уже утратил свою былую актуальность. Но это не точно.

О том что такое VPN и для чего он используется - рассказано неоднократно. Но если вкратце - то VPN это технология, которая позволяет создавать сетевые соединения поверх уже имеющихся с использованием средств защиты передаваемых данных. Её используют для объединения географически разбросанных сетей в одну целую, для соединения рабочего места (сети) с домашней (клиентской), а так же - для обеспечения безопасности передаваемых данных по общественным сетям.

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

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

Выбор VPN сервера

Передо мной стоял выбор между openvpn и pptpd. Первый - хардкорный, мощный, расширяемый, с кучей всего. Но как следствие - более требовательный к ресурсам, и не позволяющий подключаться к нему бОльшому количеству гаджетов “из коробки”. Второй - менее секьюрный, имеет уязвимости, но аскетичен к ресурсам и работает почти везде “из коробки”.

Так как подключать к серверу планирую в первую очередь - мобильные гаджеты, а способы защиты данных у pptp избыточны для не секретной информации - выбор пал на pptpd.

iOS Android

Установка и настройка pptpd

Ставим при помощи yum:

$ yum install pptpd

Разрешаем IP-forwarding. Для этого в файл /etc/sysctl.conf добавляем следующую строку:

net.ipv4.ip_forward = 1

После этого изменяем файл /etc/pptpd.conf поправив в нем 2 опции (указываем адрес сервера и диапазон адресов для vpn-клиентов):

# Не нужно прописывать сюда внешний IP сервера, или IP других сетевых интерфейсов сервера
localip 10.0.0.1
# Диапазон или через запятую
remoteip 10.0.0.10-50

Переходим к файлу /etc/ppp/options.pptpd (он был указан в pptpd.conf в опции option):

name pptpd
# Запрещаем откровенно не безопасные
refuse-pap
refuse-chap
refuse-mschap
# Требуем значительно более безопасные
require-mschap-v2
require-mppe-128
# DNS от Google
#ms-dns 8.8.8.8
#ms-dns 8.8.4.4
# DNS от Yandex
ms-dns 77.88.8.8
ms-dns 77.88.8.1
proxyarp
nodefaultroute
lock
nobsdcomp
novj
novjccomp
nologfd
noipx

Теперь создадим учетки для VPN-клиентов, добавив в файл /etc/ppp/chap-secrets следующие строки (пароли и логины, разумеется, меняем на свои):

# Secrets for authentication using CHAP
# client / server / password / IP addresses
client1 pptpd 5R2T0w7r *
client2 pptpd jy17JTzh *

После чего применяем настройки, перезапускаем демона, и проверяем чтоб в выводе netstat наличие открытого порта 1723 от pptpd:

$ sysctl -p
$ service pptpd restart
$ netstat -alpn | grep :1723
tcp        0      0 0.0.0.0:1723            0.0.0.0:*               LISTEN      25215/pptpd

Если всё так как на примере выше - то создаем правила для iptables и сохраняем их:

$ iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$ iptables-save
$ service iptables save

На этот моменте необходимо протестировать работу сервера подключением клиента, например, на Windows 7 (в качестве имени сервера указываем его DNS имя или IP адрес):

Соединение должно успешно установиться, а состояние подключения иметь вид:

Если всё работает - добавляем pptpd в автозапуск:

$ systemctl enable pptpd.service

И прописываем указанные в /etc/ppp/chap-secrets на самих гаджетах под управлением iOS и Android. Всё должно успешно заработать и на них.

Ссылки по теме: