24
11月
2021
VPN по протоколу PPTP за 5 минут
16:46

VPN по протоколу PPTP за 5 минут

Чтобы получить доступ к домашнему серверу, на котором работает приёмник, создал виртуальную частную сеть (VPN).
Наиболее простой способ (но не самый защищённый) — VPN по протоколу PPTP.

Дома у меня установлен интернет-маршрутизатор Zyxel Keenetic Lite III с последней актуальной версией программного обеспечения
2.15.C.6.0-1.

Роутер позволяет организовывать для доступа к "домашней" сети виртуальные частные сети (VPN) следующих видов:

  1. PPTP VPN server
  2. SSTP VPN server
  3. L2TP/IPSEC VPN server,
  4. IPsec VPN server

Выбрал PPTP по причине быстроты настройки.
Рассматриваю настройку PPTP с шифрованием 40 бит, которое защищает трафик от просмотра третьими лицами и разрешено законодательством, действующем на территории Таможенного союза России, Белоруссии и Казахстана.

1. Добавление модуля "PPTP server" на роутер Zyxel

Зайти на панель управления — Общие настройки :
router1

Изменить набор модулей системы, нажав на кнопку "Изменить набор компонентов"
router2

Прокрутить список вниз и в разделе "Сетевые функции" включить модуль "PPTP VPN-сервер"
После сохранения конфигурации модулей роутер отправится на перезагрузку.

2. Изменение диапазона динамических IP-адресов роутера (DHCP)

Подключаемся к панели управления роутером и в разделе "Домашняя сеть" смотрим IP-адрес для домашней сети.
Например, 192.168.88.1 - можно сменить на любой из диапазона "Частных сетей", в данном примере такой как указан.
router3
Нажимаем кнопку "Показать настройки DHCP".
router4
Указываем 10 клиентов начиная с адреса 192.168.88.1 - это адреса устройств внутри сети (смартфоны, телевизоры).
Обращаем внимание, что DHCP в данном случае могут быть заняты адреса с 1 по 10.

(Для виртуальной частной сети ниже будет будет использована та же подсеть класса "С", но выдача адресов начиная с цифры 100).

3. Добавление пользователя для VPN

Роутер для подключения пользователей использует логины / пароли указанные на закладке "Пользователи и доступ".

На закладке "Пользователи и доступ" добавляем нового пользователя и придумываем сложный пароль (записываем на бумажку).
Сохраняем изменения.
router5

Надо не забыть прокрутить вниз и установить галочку VPN server. Сохраняем изменения.
router55

4. Включение PPTP VPN и разрешение подключения пользователя

Включил компонент PPTP на закладке dashboard под названием "Приложения" в левой нижней части окна.
router6
Нажатием на ссылку "VPN-сервер PPTP" переходим в меню настройки сервера VPN.

Исправляем адрес на внутреннюю сеть, но начальный адрес для VPN-клиентов пусть будет начинаться с цифры 100.
router7
Там же проверяем, что включен пользователь vpnuser, которого добавили ранее. Он сможет подключаться к серверу.
router8
Сохраняем. Настройка сервера завершена.

5. Первое подключение к VPN PPTP со смартфона Android

В "Настройки" - "Сеть и Интернет" - "Дополнительно" - VPN нажать "+"
В профиле VPN на смартфоне:

  • наименование
  • тип - PPTP
  • адрес сервера - ввести внешний (белый) IP адрес маршрутизатора домашней сети
  • вкл. Шифрование PPP (MPPE)
  • Имя пользователя - vpnuser
  • Пароль - пароль пользователя vpnuser
  • Сохранить
    vpn

Подключиться к VPN - коснуться названия VPN-подключения на соединение и нажать кнопку "Подключиться"^
vpn2

Настройка завершена.

Замечание: Если подключение через Wi-Fi не проходит, причина кроется в настройках маршрутизатора организации, который не пропускает сообщения от сервера PPTP к клиенту за NAT. В этом случает нужно переключить смартфон с Wi-Fi на мобильный интернет.

Последующие шаги нужны для подключения с клиента Linux (не обязательные).

6. Установка клиента PPTP VPN на компьютере-клиенте под ОС Linux

sudo apt-get update
sudo apt-get install pptp-linux

7. Настройка клиента PPTP VPN

Создал и отредактировал файл как указано ниже. Из командной строки выполняем команду:

sudo nano /etc/ppp/peers/test-vpn

Содержимое файла "/etc/ppp/peers/test-vpn", где в первой строчке указан 56.78.90.12 - "белый" IP-адрес роутера, за которым установлен домашний сервер:

pty "pptp 56.78.90.12 --nolaunchpppd"
name vpnuser #логин
remotename TEST #имя соединения
require-mppe-40 #включаем поддержку MPPE
defaultroute #создавать маршрут по умолчанию
replacedefaultroute #принудительно изменять маршрут по умолчанию
unit 12 #номер ppp интерфейса
persist #восстанавливать подключение при обрыве связи
maxfail 10 #количество попыток переподключения
holdoff 2 #интервал между подключениями
file /etc/ppp/options.pptp
ipparam $TUNNEL

Сохранение: Ctrl+O, Enter, Ctrl+X.

Если у абонента нет фиксированного "белого" IP-адреса, его нужно подключить (заказать, оплатить) у провайдера. Такая услуга часто называется "Прямой IP адрес" или "Статический выделенный IP или "Фиксированный IP-адрес". На моём тарифном плане, Прямой "белый" IP адрес оказался бесплатным (включить и отключить его можно в "Личном кабинете"). Если у роутера доступен лишь динамический внешний IP-адрес, подключение по PPTP не возможно. В такое случае можно попробовать использовать способ SSTP через "облако" Zyxel.

Дополнение: содержимое файла /etc/ppp/options.pptp на клиенте:

lock
noauth
refuse-pap
refuse-eap
refuse-chap
refuse-mschap
require-mppe
asyncmap 0
debug
crtscts
hide-password
modem
mtu 1500
noipx
persist


8. Указание на клиенте имени и пароля пользователя в файле "secrets"

sudo nano /etc/ppp/chap-secrets

Вставил следующий текст, где первый параметр - имя пользователя, второй - имя подключения, третий - пароль:

"vpnuser" TEST "mypassword"

mypassword должен совпадать с паролем того же пользователя на сервер (см. п.3).

9. Включение модулей ядра Linux и настройка брандмауэра на клиенте

В большинстве дистрибутивов Linux нужно разрешить запуск модуля ядра "nf_conntrack_pptp":

sudo modprobe ip_gre
sudo modprobe nf_nat_pptp
sudo modprobe nf_conntrack_pptp

В брандмауэре нужно разрешить подключение со стороны сервера к клиенту:

sudo ufw allow proto gre from внешний_IP_адрес_сервера
sudo service ufw restart

10. Первое подключение с клиента Linux к домашней сети по VPN

С клиента (другого ПК) выполнить команду:

sudo pon test-vpn nodetach

При этом произойдет подключение к VPN и домашней сети. Вывод на экран программы "pon" следующий:

Using interface ppp12
Connect: ppp12 <--> /dev/pts/1
CHAP authentication succeeded
MPPE 40-bit stateless compression enabled
replacing old default route to enp2s0 [192.168.0.1]
local IP address 192.168.88.100
remote IP address 192.168.88.1

Таким образом, установлено подключение клиента под адресом 192.168.88.100
и доступны все устройства в сети, где 192.168.88.0 — домашняя сеть,
1-10 - сетевые устройства в домашней сети, 100-110 подключенные по VPN клиенты.

Внешний IP-адрес клиента изменится на IP-адрес домашней сети в Интернет, см. 2ip.ru. С помощью NAT доступны все веб сайты.
Настройка VPN заняла около 5 минут. 😀

Для разрыва подключения к VPN нажать Ctrl+C.

12. Диагностика (при необходимости)

Вывод системного журнала со слежением.

tail -f /var/log/syslog

13. Дополнение. Разрешение запуска подключения от обычного (непривилегированного) пользователя

Необходимо устранить недостаток - запуск pon при помощи команды sudo.

Sudo была необходима, т.к. при подключении без root-прав будет возникать ошибка:

"anon warn[pptp_gre_bind:pptp_gre.c:102]: socket: Operation not permitted
anon fatal[main:pptp.c:360]: Cannot bind GRE socket, aborting.
Modem hangup
Connection terminated."

Устранение ошибки простое (если знать как) - выполнить в терминале две команды:

Первая команда — даём право выполнения "pptp" от имени суперпользователя.
Где "chmod u+s" - установка setuid bit, который влияет на запуск программы: вместо использования привилегий текущего пользователя, программа запускается с привилегиями владельца (а владельцем исполнимого файла /usr/sbin/pptp является root):

sudo chmod u+s /usr/sbin/pptp

Вторая команда добавляет пользователя в группу "dip" пользователя "username", который запускает клиента pptp на данном компьютере (можно узнать командой whoami). Здесь "dip" - группа с правом запуска тоннеля pptp.

sudo usermod -aG dip username

После этой дополнительной настройки, запуск подключение с клиента производится командой, которую можно добавить в командный файл "vpn.sh":

pon test-vpn nodetach

14. Решение проблемы с завершением работы тоннеля PPTP, повышение надёжности

В моём случае подключение PPTP после 5-10 секунд зависал с ошибкой rcvd [LCP TermAck id=0xb].

  1. Ошибка вызвана главным образом некачественным патч-кордом. После замены кабеля проблема решена. Скорость "от точки к точке" возросла с 26 до 46 Мбит/с. Таким образом, PPP протокол чувствителен к качеству линии.

  2. При плохой линии помогает добавление в файл "/etc/ppp/options" следующего параметра

noauth

(Соединение держится на доверии клиента и сервера).

  1. Также желательно выполнить настройку канала - уменьшить размер MTU. Подобрал его следующим образом: вначале в файле "/etc/ppp/options" указал максимальный размер 1500. При установленном тоннеле, с помощью команды ping имя_севера -M do -s 1400 и уменьшая число нашёл размер MTU - в моём случае 1318.

Вписал найденное значение MTU в файл "/etc/ppp/options"

mtu 1318

При некачественном внешнем канале (потери пакетов, разрывы соединения и повторные подключения), помогает сильное уменьшение MTU вплоть до 500:

mtu 500

Файл options для сложных условий:

noauth
asyncmap 0
crtscts
lock
hide-password
modem
-mn
debug
mtu 500
lcp-echo-interval 2
lcp-echo-failure 5
lcp-restart 3
lcp-max-configure 2
noipx
persist

После чего выполнить команду подключения

pon test-vpn nodetach

Зависимость скорости передачи от размера блока MTU

Измеренная iPerf скорость между двумя ПК, соединенных VPN приведена в таблице:

Значение MTU,
байт
Скорость VPN PPTP,
Мбит/с
500 25.6
768 32.5
1000 35.5...40.7
1056 42.1...47.9
1256 43.3...53.0
1280 48...49.1
MTU auto (=1500) 42.5...53.6

15. Проверка доступности

Снаружи на маршрутизаторе открыт порт 1723/TCP:

sudo nmap IP_адрес_сервера -p 1723

PORT STATE SERVICE
1723/tcp open pptp

Внутри, после подключения к локальной сети по VPN PPTP, доступны локальные IP-адреса:

ping внутренний_ip_адрес_сервера_или_роутера

где внутренний_ip_адрес_сервера_или_роутера — адрес компьютера или роутера во внутренней сети, к которому подключаемся.

В маршрутизаторе в разделе сервера DHCP нужно зарегистрировать ПК, к которому подключаемся, чтобы у него был статический IP адрес.

16. Подключение к серверу по RDP с использованием remmina

Для RDP использую клиент remmina:

sudo apt-get install remmina

запуск:

remmina

В remmina создал соединение к удалённому ПК. Отображение информации экрана и управление ПК работает отлично.

17. Решение проблемы "sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x86451d9c> ]"

1) Подгрузить в память модули ядра:

sudo modprobe ip_gre
sudo modprobe nf_nat_pptp
sudo modprobe nf_conntrack_pptp
sudo modprobe nf_conntrack_proto_gre

2) Попробуйте временно выполнить подключение от имени root:

sudo pon test-vpn nodetach

18. Настройка PPTP VPN с помощью графического интерфейса Network Manager

В системном лотке нажал на иконку сети _левой_ кнопкой мыши 

Начало добавления VPN PPTP
Выбрал тип VPN соединения для добавления - PPTP:
Выбор типа VPN - PPTP
И нажал кнопку "Создать...".

В верхней части окна задал имя соединения, например, "PPTP".

На второй слева закладке VPN указал параметры сервера
Настройка параметров PPTP (часть 1) - закладка VPN

  • Шлюз - указывется IP адрес или FQDN домашнего роутера
  • Имя пользователя - это имя пользователя в домашнем роутере, который имеет доступ к VPN PPTP
  • Пароль - это пароль пользователя с именем, указанным в предыдущем поле ввода

Примечание: для ввода пароля нажать в правой части поля ввода кнопку с ромбиком и вопросительным знаком и выбрать - сохранять ли пароль для всех пользователей компьютера или только для данного пользователя или запрашивать каждый раз при подключении.

Нужно задать дополнительные свойства подклчения — кнопка «Дополнительно»:
Настройка параметров PPTP (часть 2) - кнопка «Дополнительно»

  • Галочка "Использовать шифрование MPPE".

Нажатие кнопок Применить - Сохранить для завершения создания подключения.

Подключение к домашней сети — в системном лотке щелкнуть по значку сети и выбрать ранее созданное подключение VPN.
Если подключение успешно, значок сети в системном лотке изменит свой вид:
vpn подключен

Если при подключении ничего не произошло, значок сети покрутился и вернулся к исходному виду — смотрим sudo tail -n 30 /var/log/syslog со строны клиента, и на роутере "Системный журнал" на предмет ошибок со стороны сервера.

19. Решение проблемы в syslog на роутере "mppe encryption required, but rejected, terminate", на клиенте "LCP terminated by peer" при подключении с помощью NetworkManager

В настройках подключения NetworkManager нажмите "Дополнительно" и включите шифрование MPPE, как на рисунке выше. (Галочка "Использовать шифрование MPPE").


Источники:

Примечание:
После включения PPTP-сервера, на роутере во внешнюю сеть открывается порт TCP 1723.
Проверить удалённо доступность порта (а значит, включение роутера с поддержкой PPTP) можно командой

sudo nmap внешний_белый_ip_адрес -p 1723


Последнее изменение: 03.06.2024 - добавлен параграф №9 "9. Включение модулей ядра Linux и настройка брандмауэра на клиенте" и последний параграф №19 (если ошибка подключения с помощью NetworkManager), изменена нумерация параграфов.



相关出版物