Вы находитесь в режиме поиска по сайту.
24
ноября
2021
VPN по протоколу PPTP за 5 минут
16:46

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

24 ноября 2021 16:46

Чтобы получить доступ к домашнему серверу, на котором работает приёмник, создал виртуальную частную сеть (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. Установка клиента PPTP VPN на компьютере-клиенте под ОС Linux

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

6. Настрйка клиента 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:

noauth
asyncmap 0
crtscts
lock
hide-password
modem
debug
mtu 1500
noipx
persist


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

sudo nano /etc/ppp/chap-secrets

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

"vpnuser" TEST "mypassword"

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

8. Первое подключение к 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.


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

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

Sudo была необходима, т.к. при подключении без root-прав будет возникать ошибка
_"anon warn[pptp_gre_bind:pptpgre.c:102]: socket: Operation not permitted
anon fatal[main:pptp.c:360]: Cannot bind GRE socket, aborting.
Modem hangup
Connection terminated."

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

sudo chmod u+s which pptp

Другая проблема, на которую жалуется pon - необходимость добавить пользователя в группу dip:

sudo usermod -aG dip username

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

Первая команда chmod u+s .... устанавливает бит Set-user-ID, который делает владельцем файла каждого подключающегося пользователя.

Вторая команда добавляет пользователя в группу "dip".

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

pon test-vpn nodetach

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

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

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

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

  3. Также желательно выполнить настройку канала - уменьшить размер 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

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

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

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

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

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

sudo apt-get install remmina

запуск:

remmina

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

13. Решение проблемы "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


Источники:

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

Комментарии: 0


Похожие публикации