Рассмотрим установку и настройки простейшего VPN сервера на Linux Debian 9. В качестве алгоритма шифрования будет использоваться MS-CHAP v2, наверно на сегодня самый минимальный допустимый алгоритм для шифрования. PPTPd, на мой взгляд самый простой сервер на Linux и также прост в настройке.
Большим плюсом является то, что нет необходимости установки и настройки клиентской части VPN сети. Для организации туннели для доступа к ресурсам маленькой/средней компаний вполне достаточен PPTPd сервер. Максимум длина ключа алгоритма 128.
Итак, рассмотрим ситуацию для разворачивания VPN:
- Внутренняя сеть IP 192.168.1.0/24
- DHCP Pool — 192.168.1.30 192.168.1.140
- DNS AD — IP 192.168.1.1
- Внутренний адрес IP VPN сервера — 192.168.1.200
- Диапазон адресов для VPN сервера- IP 192.168.1.141-192.168.1.150
- Сервер имеет белый (живой) внешний IP
- Сервер Linux Debian 9.x
Установка сервера:
Обновляем пакеты и систему
apt-get update && apt-get upgrade && apt-get dist-upgrade
Из сетевых инструментов, что не было в установке: Netstat и iptables-persistent, установим в процессе.
Установка сервера VPN
apt-get install pptpd
Создадим файл конфигурации, файл по умолчанию сохраним с .default
cp /etc/pptpd.conf /etc/pptpd.conf.default
nano /etc/pptpd.conf
Редактируем файл конфигурации
option /etc/ppp/pptpd-options
#Указывает демону pptpd на путь к файлу с остальными настройками PPTP-соединения, такими как используемое шифрование канала и способ авторизации PPTP-пользователей;
logwtmp
#Передача PPTP-серверу лог аутентификации пользователей через стандартную функцию logwtmp, что даст возможность автоматизировать процесс сбора информации по заходам клиентов;
localip 192.168.1.200
#наш локальный адрес VPN;
remoteip 192.168.1.141-150
#Диапазон адресов для клиентов PPTP-сервера;
Настройка файла с опциями pptp-сервера
cp /etc/ppp/pptpd-options /etc/ppp/pptpd-options.default
nano /etc/ppp/pptpd-options
name pptpd
#Название сервиса(имя) для аутентификации. Должно совпадать с именем во втором поле файла аутентификации /etc/ppp/chap-secrets entries;
refuse-pap
refuse-chap
refuse-mschap
#Запрет авторизации по старым протоколам аутентификации;
require-mschap-v2
#Аутентификация пользователей по протоколу MS-CHAP v2;
require-mppe-128
#Максимально возможный для PPTP механизм шифрования;
ms-dns 192.168.1.1
#Всего в конфигурационном файле может существовать две записи этой опции. С ее помощью можно указать первичный и вторичный DNS сервера для PPTP-клиентов. Я выбрал DNS сервер ActiveDirectory – это позволит обращаться к машинам и службам внутри VPN по dns именам;
#proxyarp
#Включение этого параметра позволяет PPTP-клиентам работать с локальной сетью без добавления правил маскарадинга (NAT) в цепочки брандмауэра iptables. Данная функция действует через средства ARP (Address Resolution Protocol) и его таблицы. Однако таким образом нельзя регулировать доступ в разные подсети клиентов и доступ конкретных клиентов. Чтобы эта функция работала, необходимо, чтобы осуществлялось перенаправление пакетов ядром (чтобы функция ip_forward была равна единице). Если используются цепочки iptables, этот параметр следует закомментировать. По умолчанию данная опция включена;
lock
#Блокировка соединения;
Nobsdcomp
#Отключаем компрессию;
nologfd
#Данная опция блокирует запись в системный журнал через системную функцию stderr. По умолчанию она активна. Для получения отладочной информации ее необходимо закомментировать;
Настройка файла для аутентификации пользователей
nano /etc/ppp/chap-secrets
user1 pptpd password_user1 *
# Если пользователь должен динамически получать IP-адрес из диапазона remoteip
user2 pptpd password_user2 192.168.1.149
# Если мы хотим привязать определённый IP к логину:
Перезапуск и проверка PPTPD-сервера
/etc/init.d/pptpd restart
Установим netstat
apt-get install net-tools
Проверка запущен ли pptp-сервер
ps ax | grep [p]ptpd
#должны увидеть что-то похожее
1114 ? Ss 0:00 /usr/sbin/pptpd --fg
на каком порту
netstat -nlptu | grep [p]ptp
#должны увидеть что-то похожее
tcp 0 0 0.0.0.0:1723 0.0.0.0:* LISTEN 1114/pptpd
Добавляем PPTPD-сервис в автозагрузку
systemctl enable pptpd.service
Настройка Iptables для корректной работы PPTP-подключения клиентов
Установим iptables-persistent
apt-get install iptables-persistent
Разрешим входящее подключения на порт PPTP-сервера (1723) по протоколу TCP
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
Разрешим входящее подключения по протоколу GRE, который используется для PPTP-туннеля
iptables -A INPUT -p gre -j ACCEPT
Для того, чтобы PPTP-клиенты смогли общаться между собой дополнительно настраиваем iptables – цепочку FORWARD в таблице filter (если политика по умолчанию для цепочки FORWARD установлена в DROP)
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -i ppp+ -j ACCEPT
Настраиваем маршрутизацию и NAT для внутренней сети на PPTP-сервере
nano /etc/sysctl.conf
добавим параметр:
net.ipv4.ip_forward=1
sysctl -p
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
eth0 — сеть смотрит в Интернет.
Сохраним изменения и перезапустим iptables.
service netfilter-persistent save && service netfilter-persistent restart
Наш сервер готов. Создаем подключение VPN на клиентской машине, вводим логин пароль из настроек файла /etc/ppp/chap-secrets. После успешного соединения нам доступны ресурсы внутри сети VPN.
Примечания:
- По умолчанию в настройках VPN-клиентов Windows указано автоматическое изменение основного шлюза на новый, который соответствует IP-адресу, выдаваемому PPTP-сервером. При подключении VPN весь трафик будет идти через PPTP-сервер. Для отключения этой функции необходимо зайти во вкладку Сеть, выбрать Интернет-протокол TCP/IP, нажать кнопку Свойства, а затем в новом окне — кнопку Дополнительно и отключить флажок “Использовать шлюз по умолчанию”.
- Логи pptp-сервера по умолчанию в Debian хранятся в /var/log/syslog. Если нужно отдельно вести логи, можно задать в /etc/ppp/pptpd-options параметр logfile /var/log/pptpd.log
Про pptp — https://wiki.debian.org/ru/pptp-linux