PPTP Server - Legacy VPN (Deprecated)

КРИТИЧНОЕ ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ

PPTP (Point-to-Point Tunneling Protocol) является устаревшей и небезопасной VPN технологией с множеством известных критических уязвимостей. VyOS реализует PPTP только для обратной совместимости с legacy системами.

КАТЕГОРИЧЕСКИ НЕ РЕКОМЕНДУЕТСЯ использовать PPTP для новых развертываний или любых приложений, требующих реальной безопасности.

Используйте вместо этого:

  • WireGuard - современный, быстрый, безопасный VPN протокол
  • OpenVPN - проверенный, гибкий, широко поддерживаемый
  • IPsec/IKEv2 - стандартизированный, enterprise-grade VPN
  • L2TP/IPsec - лучше чем PPTP, но тоже устаревает

Обзор

Что такое PPTP

PPTP (Point-to-Point Tunneling Protocol):

  • Разработан Microsoft в 1999 году
  • Один из первых VPN протоколов
  • Инкапсулирует PPP (Point-to-Point Protocol) фреймы в GRE (Generic Routing Encapsulation) туннеле
  • Использует TCP 1723 для control channel и GRE (IP Protocol 47) для data channel
  • MPPE (Microsoft Point-to-Point Encryption) для шифрования

Известные уязвимости PPTP

Критические проблемы безопасности:

  1. Слабое шифрование:

    • MPPE основан на RC4 cipher (устаревший)
    • Ключи шифрования выводятся из MS-CHAPv2 хэшей (слабые)
    • Эффективная длина ключа всего 128 бит (для MPPE-128)
  2. Уязвимости MS-CHAPv2:

    • MS-CHAPv2 аутентификация взламывается за секунды с современными GPU
    • DES encryption (использованная в MS-CHAPv2) считается полностью скомпрометированной
    • Dictionary и rainbow table атаки очень эффективны
  3. Отсутствие Perfect Forward Secrecy (PFS):

    • Компрометация одного ключа раскрывает весь трафик
    • Невозможность защиты прошлых сессий
  4. Bit-flipping атаки:

    • RC4 подвержен bit-flipping атакам
    • Возможность модификации encrypted data без обнаружения
  5. Проблемы с NAT traversal:

    • GRE не работает хорошо через NAT
    • Требуется специальная поддержка на роутерах (PPTP passthrough)

Публичные уязвимости:

  • 2012: Moxie Marlinspike и CloudCracker продемонстрировали взлом MS-CHAPv2 за 23 часа
  • 2012: Microsoft признала, что PPTP “больше не может считаться безопасным”
  • NSA: Документы Сноудена показали, что NSA может расшифровывать PPTP трафик

Почему VyOS все еще поддерживает PPTP

Единственные валидные причины:

  1. Legacy hardware - старое оборудование с PPTP-only клиентами
  2. Backwards compatibility - миграция со старых систем
  3. Non-security scenarios - тестирование, лабораторные среды без sensitive data
  4. Temporary bridge - временное решение во время миграции на современные VPN

НЕ используйте PPTP если:

  • Передаются sensitive данные
  • Требуется реальная безопасность
  • Есть альтернативы (почти всегда есть)
  • Compliance regulations применимы (PCI DSS, HIPAA, GDPR запрещают PPTP)

Архитектура PPTP

Компоненты

  1. PPTP Server (PNS - PPTP Network Server) - VyOS
  2. PPTP Client (PAC - PPTP Access Concentrator)
  3. Control Connection - TCP 1723
  4. Data Tunnel - GRE (IP Protocol 47)
  5. PPP Session - аутентификация и IP assignment

Процесс подключения

  1. TCP Connection - клиент подключается к серверу на TCP 1723
  2. Control Channel - устанавливается PPTP control connection
  3. GRE Tunnel - создается GRE туннель для data
  4. PPP Negotiation - LCP (Link Control Protocol) negotiation
  5. Authentication - PAP/CHAP/MSCHAP/MSCHAP-v2
  6. IPCP - IP Control Protocol assigns IP address
  7. MPPE Negotiation - если включено шифрование
  8. Data Transfer - начинается передача данных

Используемые порты и протоколы

  • TCP 1723 - PPTP control channel (обязательно)
  • GRE (IP Protocol 47) - PPTP data tunnel (обязательно)
  • UDP 500/4500 - НЕ используется (это IPsec)
  • UDP 1701 - НЕ используется (это L2TP)

Важно: PPTP требует оба - TCP 1723 И GRE (protocol 47).

Миграция с PPTP

План миграции

Шаг 1: Оценка

# Посмотреть текущих PPTP пользователей
show pptp-server sessions

# Посмотреть конфигурацию
show configuration vpn pptp remote-access

Шаг 2: Выбор альтернативы

СценарийРекомендацияПричина
Windows/iOS/Android клиентыL2TP/IPsecВстроенные клиенты
Максимальная производительностьWireGuardСовременный, быстрый
Legacy compatibilityOpenVPNШирокая поддержка
Enterprise deploymentIPsec/IKEv2Стандартизирован
Mobile usersWireGuard/IKEv2Лучший roaming

Шаг 3: Параллельное развертывание

# Держать PPTP работающим
# Добавить новый VPN метод (например, WireGuard)
set interfaces wireguard wg0 address '10.10.10.1/24'
set interfaces wireguard wg0 port '51820'
set interfaces wireguard wg0 private-key 'XXXXXXXX'

# Peer configuration
set interfaces wireguard wg0 peer CLIENT1 public-key 'YYYYYYYY'
set interfaces wireguard wg0 peer CLIENT1 allowed-ips '10.10.10.2/32'

commit
save

# Уведомить пользователей о миграции

Шаг 4: Тестирование

  • Проверить новый VPN с небольшой группой пользователей
  • Убедиться что все функции работают
  • Документировать процесс подключения для пользователей

Шаг 5: Миграция пользователей

  • Переводить пользователей постепенно (batches)
  • Держать PPTP активным для fallback
  • Мониторить использование обоих VPN

Шаг 6: Отключение PPTP

# Когда все мигрированы
delete vpn pptp remote-access

# Удалить firewall правила
delete firewall ipv4 input filter rule XXX  # PPTP rules

commit
save

Таблица сравнения VPN протоколов

КритерийPPTPL2TP/IPsecOpenVPNWireGuardIPsec/IKEv2
БезопасностьОчень слабаяХорошаяОтличнаяОтличнаяОтличная
ПроизводительностьСредняяСредняяХорошаяОтличнаяХорошая
Встроенные клиентыДа (устарело)ДаНетЧастичноДа (iOS/macOS)
Обход NATПлохоХорошо (NAT-T)ОтличноОтличноХорошо
Сложность настройкиПростаяСредняяСредняяПростаяСложная
Mobile roamingПлохоСреднееХорошоОтличноОтлично
Firewall friendlyПлохо (GRE)СреднееОтличноХорошоСреднее
Рекомендация 2025НЕТLegacy onlyДаДА (топ)Да

Базовая конфигурация (НЕ для production)

Минимальный PPTP сервер

ВНИМАНИЕ: Следующая конфигурация НЕ БЕЗОПАСНА и предоставлена только для справки.

# PPTP сервер с local authentication
set vpn pptp remote-access authentication mode 'local'

# Пользователи (слабо защищено!)
set vpn pptp remote-access authentication local-users username testuser password 'testpass'
set vpn pptp remote-access authentication local-users username alice password 'AlicePass123!'
set vpn pptp remote-access authentication local-users username bob password 'BobPass456!'

# Client IP pool
set vpn pptp remote-access client-ip-pool start '192.168.250.10'
set vpn pptp remote-access client-ip-pool stop '192.168.250.50'

# Gateway IP (VyOS)
set vpn pptp remote-access gateway-address '192.168.250.1'

# Outside address (WAN IP VyOS)
set vpn pptp remote-access outside-address '203.0.113.1'

# DNS для клиентов
set vpn pptp remote-access name-server '8.8.8.8'
set vpn pptp remote-access name-server '1.1.1.1'

# Firewall для PPTP
set firewall ipv4 input filter rule 150 action accept
set firewall ipv4 input filter rule 150 destination port 1723
set firewall ipv4 input filter rule 150 protocol tcp
set firewall ipv4 input filter rule 150 description 'PPTP control channel'

set firewall ipv4 input filter rule 151 action accept
set firewall ipv4 input filter rule 151 protocol gre
set firewall ipv4 input filter rule 151 description 'PPTP data tunnel (GRE)'

# NAT для PPTP клиентов
set nat source rule 150 outbound-interface name eth0
set nat source rule 150 source address 192.168.250.0/24
set nat source rule 150 translation address masquerade

commit
save

Проверка PPTP сервера

# Активные сессии
show pptp-server sessions

# Статистика
show pptp-server statistics

# Логи accel-ppp (PPTP backend)
sudo journalctl -u accel-ppp@pptp -b 0

# Live log monitoring
sudo journalctl -u accel-ppp@pptp -f

# Проверить что PPTP слушает на 1723
sudo netstat -tlnp | grep 1723

Пример вывода show pptp-server sessions:

Interface | Username  | IP Address      | Calling Station | Uptime    | RX/TX
----------+-----------+-----------------+-----------------+-----------+-------------
pptp0     | alice     | 192.168.250.10  | 198.51.100.50   | 00:15:32  | 1.2M/3.4M
pptp1     | bob       | 192.168.250.11  | 198.51.100.51   | 01:23:45  | 5.6M/12.1M

Аутентификация

Local authentication

Пользователи хранятся в конфигурации VyOS (plaintext пароли в config!):

set vpn pptp remote-access authentication mode 'local'

# Добавить пользователей
set vpn pptp remote-access authentication local-users username user1 password 'Pass1!'
set vpn pptp remote-access authentication local-users username user2 password 'Pass2!'

# Статические IP адреса для specific пользователей
set vpn pptp remote-access authentication local-users username user1 static-ip '192.168.250.10'

# Отключить пользователя (удалить)
delete vpn pptp remote-access authentication local-users username user1

commit

Проблемы local authentication:

  • Пароли видны в show configuration (база64, легко декодировать)
  • Нет централизованного управления
  • Нет audit trail
  • Масштабирование проблематично

RADIUS authentication

Централизованная аутентификация (рекомендуется для production, хотя сам PPTP не рекомендуется):

set vpn pptp remote-access authentication mode 'radius'

# Primary RADIUS server
set vpn pptp remote-access authentication radius server 192.168.1.10 key 'RadiusSecret123!'

# Secondary RADIUS server (failover)
set vpn pptp remote-access authentication radius server 192.168.1.11 key 'RadiusSecret123!'

# RADIUS настройки
set vpn pptp remote-access authentication radius timeout 5
set vpn pptp remote-access authentication radius acct-timeout 5

# Source address для RADIUS requests
set vpn pptp remote-access authentication radius source-address '192.168.1.1'

# RADIUS accounting
set vpn pptp remote-access authentication radius acct-timeout 3

# NAS Identifier для RADIUS
set vpn pptp remote-access authentication radius nas-identifier 'vyos-pptp'

commit

RADIUS VSA (Vendor-Specific Attributes) для dynamic IP:

  • Framed-IP-Address - статический IP для пользователя
  • Framed-Route - push routes для клиента

Протоколы аутентификации

Иерархия безопасности (от наименее к наиболее безопасному):

  1. PAP (Password Authentication Protocol) - plaintext пароли
  2. CHAP (Challenge-Handshake Authentication Protocol) - challenge-response
  3. MSCHAP (Microsoft CHAP) - улучшенный CHAP
  4. MSCHAP-v2 - улучшенный MSCHAP (но все равно взламываемый)
# Требовать только MSCHAP-v2 (наименее плохой вариант)
set vpn pptp remote-access authentication protocols pap disable
set vpn pptp remote-access authentication protocols chap disable
set vpn pptp remote-access authentication protocols mschap disable
set vpn pptp remote-access authentication protocols mschap-v2 enable

# Или через require (alternative syntax)
set vpn pptp remote-access authentication require 'mschap-v2'

commit

Важно: Даже MSCHAP-v2 считается небезопасным в 2025 году. Это лишь “наименее плохой” вариант для PPTP.

Настройка по протоколам

# Разрешить все (наименее безопасно)
set vpn pptp remote-access authentication protocols pap enable
set vpn pptp remote-access authentication protocols chap enable
set vpn pptp remote-access authentication protocols mschap enable
set vpn pptp remote-access authentication protocols mschap-v2 enable

# Только CHAP и MSCHAP-v2
set vpn pptp remote-access authentication protocols pap disable
set vpn pptp remote-access authentication protocols chap enable
set vpn pptp remote-access authentication protocols mschap disable
set vpn pptp remote-access authentication protocols mschap-v2 enable

# Только MSCHAP-v2 (рекомендуется для PPTP, но PPTP сам не рекомендуется)
set vpn pptp remote-access authentication protocols pap disable
set vpn pptp remote-access authentication protocols chap disable
set vpn pptp remote-access authentication protocols mschap disable
set vpn pptp remote-access authentication protocols mschap-v2 enable

commit

MPPE шифрование

Что такое MPPE

MPPE (Microsoft Point-to-Point Encryption):

  • Разработан Microsoft для PPTP
  • Основан на RC4 stream cipher (устаревший, небезопасный)
  • Ключи выводятся из MS-CHAP authentication
  • Длина ключа: 40-bit, 56-bit, или 128-bit

Проблемы безопасности:

  • RC4 имеет известные уязвимости (bias в keystream)
  • 40-bit и 56-bit легко взламываются brute force
  • Даже 128-bit MPPE недостаточно безопасен по современным стандартам
  • Нет аутентификации данных (authentication)
  • Подвержен bit-flipping атакам

Настройка MPPE

# Требовать 128-bit encryption (наименее плохой вариант)
set vpn pptp remote-access authentication mppe 'require-128'

# Другие опции (НЕ рекомендуются)
set vpn pptp remote-access authentication mppe 'require'     # Любое MPPE (40/56/128)
set vpn pptp remote-access authentication mppe 'prefer'      # Предпочитать MPPE
set vpn pptp remote-access authentication mppe 'deny'        # Отключить MPPE (plaintext!)

commit

Опции MPPE:

ЗначениеОписаниеБезопасность
require-128Требовать 128-bit MPPEНаименее плохо
requireТребовать любое MPPE (40/56/128)Очень плохо
preferПредпочитать MPPE, но разрешать plaintextКритично плохо
denyОтключить MPPE (plaintext)НИКОГДА не используйте

Рекомендация: Если вы ВЫНУЖДЕНЫ использовать PPTP, используйте require-128. Но лучше - не используйте PPTP вообще.

MPPE key rotation

MPPE автоматически меняет ключи:

  • Новый ключ каждые 256 пакетов (по умолчанию)
  • Mitigation для некоторых RC4 атак
  • НЕ решает фундаментальные проблемы RC4

Client IP Pool конфигурация

Базовый IP pool

# Простой диапазон
set vpn pptp remote-access client-ip-pool start '192.168.250.10'
set vpn pptp remote-access client-ip-pool stop '192.168.250.100'

# Gateway IP (VyOS IP в PPTP сети)
set vpn pptp remote-access gateway-address '192.168.250.1'

commit

Расчет размера pool:

  • Start: 192.168.250.10
  • Stop: 192.168.250.100
  • Количество IP: 100 - 10 + 1 = 91 адрес
  • Максимум одновременных клиентов: 91

Subnet для PPTP клиентов

# Выделенная /24 сеть для PPTP
# Network: 192.168.250.0/24
# Gateway: 192.168.250.1 (VyOS)
# Pool: 192.168.250.10-192.168.250.254

set vpn pptp remote-access client-ip-pool start '192.168.250.10'
set vpn pptp remote-access client-ip-pool stop '192.168.250.254'
set vpn pptp remote-access gateway-address '192.168.250.1'

# Firewall для PPTP subnet
set firewall ipv4 forward filter rule 200 action accept
set firewall ipv4 forward filter rule 200 source address 192.168.250.0/24
set firewall ipv4 forward filter rule 200 description 'PPTP clients to LAN'

# NAT
set nat source rule 150 source address 192.168.250.0/24
set nat source rule 150 outbound-interface name eth0
set nat source rule 150 translation address masquerade

commit

Статические IP для пользователей

# Пользователь с fixed IP
set vpn pptp remote-access authentication local-users username admin password 'AdminPass!'
set vpn pptp remote-access authentication local-users username admin static-ip '192.168.250.5'

# Другой пользователь с fixed IP
set vpn pptp remote-access authentication local-users username monitor password 'MonitorPass!'
set vpn pptp remote-access authentication local-users username monitor static-ip '192.168.250.6'

# Остальные пользователи получают IP из pool
set vpn pptp remote-access client-ip-pool start '192.168.250.10'
set vpn pptp remote-access client-ip-pool stop '192.168.250.100'

commit

Важно: Статические IP не должны пересекаться с pool range.

Outside address

# IP адрес на котором PPTP слушает (обычно WAN IP)
set vpn pptp remote-access outside-address '203.0.113.1'

# Или listen на specific interface
set vpn pptp remote-access outside-address '192.0.2.1'

commit

IPv6 поддержка

PPTP поддерживает IPv6 через PPP, но это редко используется и еще менее безопасно.

IPv6 конфигурация

# Включить IPv6 для PPTP клиентов
set vpn pptp remote-access ppp-options ipv6 'allow'

# IPv6 pool для клиентов
set vpn pptp remote-access client-ipv6-pool prefix '2001:db8:pptp::/64'
set vpn pptp remote-access client-ipv6-pool mask '96'

# IPv6 prefix delegation (если нужно)
set vpn pptp remote-access client-ipv6-pool delegate '2001:db8:pptp-delegated::/56'

commit

IPv6 интерфейс идентификаторы

# Interface ID для IPv6
set vpn pptp remote-access ppp-options ipv6-interface-id '::1'
set vpn pptp remote-access ppp-options ipv6-peer-interface-id '::2'

commit

Важно: IPv6 поддержка в PPTP экспериментальная и не рекомендуется для production.

Rate limiting

Per-user bandwidth ограничения

# Bandwidth shaping для пользователя
set vpn pptp remote-access authentication local-users username user1 password 'Pass1!'
set vpn pptp remote-access authentication local-users username user1 rate-limit download '10000'
set vpn pptp remote-access authentication local-users username user1 rate-limit upload '5000'

# user2 без ограничений
set vpn pptp remote-access authentication local-users username user2 password 'Pass2!'

commit

Единицы:

  • Download/upload в Kbit/s
  • 10000 = 10 Mbit/s download
  • 5000 = 5 Mbit/s upload

RADIUS-based rate limiting

RADIUS может возвращать VSA (Vendor-Specific Attributes) для rate limiting:

FreeRADIUS пример (radreply table):

username | attribute          | op | value
---------+--------------------+----+-------
alice    | Filter-Id          | := | 10000/5000
bob      | Filter-Id          | := | 50000/25000

VyOS автоматически применяет rate limits из RADIUS.

Session management

Максимум сессий

# Ограничить количество одновременных подключений
set vpn pptp remote-access max-concurrent-sessions 50

commit

Важно: Установите в соответствии с размером IP pool и CPU ресурсами.

Session timeout

# Idle timeout (disconnect при неактивности)
set vpn pptp remote-access idle 1800  # 1800 секунд = 30 минут

# Session timeout (максимальное время сессии)
set vpn pptp remote-access session-timeout 28800  # 28800 секунд = 8 часов

commit

Connection limits per user

# RADIUS может ограничивать количество одновременных сессий per user
# Настраивается на RADIUS сервере, не на VyOS

# FreeRADIUS пример (radgroupcheck):
# groupname | attribute              | op | value
# ----------+------------------------+----+-------
# users     | Simultaneous-Use       | := | 1

Продвинутая конфигурация

MTU и MRU

# MTU (Maximum Transmission Unit)
set vpn pptp remote-access mtu 1400

# MRU (Maximum Receive Unit) - обычно равен MTU
set vpn pptp remote-access mru 1400

commit

Рекомендация: MTU 1400 или меньше для PPTP (overhead GRE + PPP).

Расчет MTU:

  • Ethernet MTU: 1500 bytes
  • IP header: 20 bytes
  • GRE header: 24 bytes
  • PPP header: 8 bytes
  • MPPE overhead: 4-8 bytes
  • Оптимальный PPTP MTU: 1400-1430 bytes

PPP options

# LCP echo для keepalive
set vpn pptp remote-access ppp-options lcp-echo-failure 3
set vpn pptp remote-access ppp-options lcp-echo-interval 30

# LCP echo-timeout
set vpn pptp remote-access ppp-options lcp-echo-timeout 30

commit

LCP keepalive:

  • Interval: интервал между echo requests (секунды)
  • Failure: количество неотвеченных echo после которого disconnect
  • Timeout: время ожидания ответа

DNS и WINS

# DNS серверы для PPTP клиентов
set vpn pptp remote-access name-server '192.168.1.1'
set vpn pptp remote-access name-server '8.8.8.8'
set vpn pptp remote-access name-server '1.1.1.1'

# WINS серверы (для Windows клиентов)
set vpn pptp remote-access wins-server '192.168.1.100'
set vpn pptp remote-access wins-server '192.168.1.101'

commit

Client-to-client routing

По умолчанию PPTP клиенты могут общаться друг с другом через VyOS:

# Запретить client-to-client (если нужно изоляция)
# Firewall правило для блокировки
set firewall ipv4 forward filter rule 201 action drop
set firewall ipv4 forward filter rule 201 source address 192.168.250.0/24
set firewall ipv4 forward filter rule 201 destination address 192.168.250.0/24
set firewall ipv4 forward filter rule 201 description 'Block PPTP client-to-client'

commit

Logging

# Включить подробное логирование
set vpn pptp remote-access ppp-options logging level debug

# Логировать specific events
set vpn pptp remote-access ppp-options logging level info

commit

Log levels:

  • debug - максимум деталей
  • info - стандартная информация
  • warning - только предупреждения и ошибки
  • error - только ошибки

Просмотр логов:

sudo journalctl -u accel-ppp@pptp -n 100    # последние 100 строк
sudo journalctl -u accel-ppp@pptp -f         # follow (live)
sudo journalctl -u accel-ppp@pptp --since "1 hour ago"

Firewall конфигурация

Минимальные firewall правила

# Разрешить PPTP control channel (TCP 1723)
set firewall ipv4 input filter rule 150 action accept
set firewall ipv4 input filter rule 150 destination port 1723
set firewall ipv4 input filter rule 150 protocol tcp
set firewall ipv4 input filter rule 150 description 'PPTP control'

# Разрешить GRE (IP protocol 47) для PPTP data
set firewall ipv4 input filter rule 151 action accept
set firewall ipv4 input filter rule 151 protocol gre
set firewall ipv4 input filter rule 151 description 'PPTP data (GRE)'

commit

Ограничение source IP

# Разрешить PPTP только с specific networks
set firewall ipv4 input filter rule 150 action accept
set firewall ipv4 input filter rule 150 source address 198.51.100.0/24
set firewall ipv4 input filter rule 150 destination port 1723
set firewall ipv4 input filter rule 150 protocol tcp

set firewall ipv4 input filter rule 151 action accept
set firewall ipv4 input filter rule 151 source address 198.51.100.0/24
set firewall ipv4 input filter rule 151 protocol gre

commit

Rate limiting connections

# Rate limit на PPTP connections (защита от brute force)
set firewall ipv4 input filter rule 150 action accept
set firewall ipv4 input filter rule 150 destination port 1723
set firewall ipv4 input filter rule 150 protocol tcp
set firewall ipv4 input filter rule 150 recent count 5
set firewall ipv4 input filter rule 150 recent time minute 1

# Drop если превышен limit
set firewall ipv4 input filter rule 149 action drop
set firewall ipv4 input filter rule 149 destination port 1723
set firewall ipv4 input filter rule 149 protocol tcp
set firewall ipv4 input filter rule 149 recent count 6
set firewall ipv4 input filter rule 149 recent time minute 1
set firewall ipv4 input filter rule 149 log enable

commit

NAT конфигурация

Source NAT для PPTP клиентов

# Masquerade для PPTP клиентов выходящих в интернет
set nat source rule 150 outbound-interface name eth0
set nat source rule 150 source address 192.168.250.0/24
set nat source rule 150 translation address masquerade

commit

Destination NAT (port forward для внешних PPTP клиентов)

Если VyOS за другим NAT роутером:

# На внешнем роутере:
# Forward TCP 1723 и GRE (IP protocol 47) к VyOS

# VyOS конфигурация не требуется (PPTP слушает на outside-address)

Важно: Многие NAT роутеры имеют проблемы с GRE passthrough. Может потребоваться “PPTP passthrough” в настройках роутера.

Клиентская конфигурация

Windows клиент

Windows 10/11:

  1. Settings → Network & Internet → VPN
  2. Add a VPN connection
  3. VPN provider: Windows (built-in)
  4. Connection name: Company PPTP
  5. Server name or address: vpn.company.com или 203.0.113.1
  6. VPN type: Point to Point Tunneling Protocol (PPTP)
  7. Type of sign-in info: User name and password
  8. User name: testuser
  9. Password: testpass
  10. Save → Connect

PowerShell:

Add-VpnConnection -Name "Company PPTP" `
  -ServerAddress "vpn.company.com" `
  -TunnelType Pptp `
  -EncryptionLevel Required `
  -AuthenticationMethod MSChapv2 `
  -Force `
  -RememberCredential `
  -PassThru

# Подключение
rasdial "Company PPTP" testuser testpass

# Отключение
rasdial "Company PPTP" /disconnect

Linux клиент

Ubuntu/Debian:

# Установка
sudo apt-get install pptp-linux

# Конфигурация /etc/ppp/peers/company-pptp
pty "pptp vpn.company.com --nolaunchpppd"
name testuser
password testpass
remotename PPTP
require-mppe-128
file /etc/ppp/options.pptp
ipparam company-pptp

# /etc/ppp/options.pptp
lock
noauth
refuse-eap
refuse-pap
refuse-chap
refuse-mschap
nobsdcomp
nodeflate

# Подключение
sudo pon company-pptp

# Проверка
ip addr show ppp0
ip route

# Отключение
sudo poff company-pptp

macOS клиент

  1. System Preferences → Network
  2. Click “+” to add connection
  3. Interface: VPN
  4. VPN Type: PPTP
  5. Service Name: Company PPTP
  6. Server Address: vpn.company.com
  7. Account Name: testuser
  8. Authentication Settings:
    • Password
    • Encryption: Maximum (128-bit)
  9. Advanced:
    • Send all traffic over VPN (optional)
  10. Apply → Connect

Android клиент

Предупреждение: Android 12+ удалил встроенную поддержку PPTP из-за проблем безопасности.

Android 11 и ранее:

  1. Settings → Network & Internet → VPN
  2. Add VPN
  3. Name: Company PPTP
  4. Type: PPTP
  5. Server address: vpn.company.com
  6. Username: testuser
  7. Password: testpass
  8. Save → Connect

Android 12+: PPTP не поддерживается. Используйте OpenVPN или WireGuard.

iOS клиент

Предупреждение: iOS 10+ удалил встроенную поддержку PPTP.

Используйте альтернативные VPN протоколы для iOS.

Примеры конфигураций

Пример 1: Базовый PPTP для legacy устройств

# PPTP remote access с local auth
set vpn pptp remote-access authentication mode 'local'
set vpn pptp remote-access authentication local-users username testuser password 'TestPass123!'
set vpn pptp remote-access authentication local-users username admin password 'AdminPass456!'
set vpn pptp remote-access authentication local-users username admin static-ip '192.168.250.5'

# Требовать MSCHAP-v2 и MPPE-128
set vpn pptp remote-access authentication protocols pap disable
set vpn pptp remote-access authentication protocols chap disable
set vpn pptp remote-access authentication protocols mschap disable
set vpn pptp remote-access authentication protocols mschap-v2 enable
set vpn pptp remote-access authentication mppe 'require-128'

# IP pool
set vpn pptp remote-access client-ip-pool start '192.168.250.10'
set vpn pptp remote-access client-ip-pool stop '192.168.250.100'
set vpn pptp remote-access gateway-address '192.168.250.1'
set vpn pptp remote-access outside-address '203.0.113.1'

# DNS
set vpn pptp remote-access name-server '192.168.1.1'
set vpn pptp remote-access name-server '8.8.8.8'

# MTU optimization
set vpn pptp remote-access mtu 1400
set vpn pptp remote-access mru 1400

# Session management
set vpn pptp remote-access max-concurrent-sessions 20
set vpn pptp remote-access idle 1800

# PPP options
set vpn pptp remote-access ppp-options lcp-echo-failure 3
set vpn pptp remote-access ppp-options lcp-echo-interval 30

# Firewall
set firewall ipv4 input filter rule 150 action accept
set firewall ipv4 input filter rule 150 destination port 1723
set firewall ipv4 input filter rule 150 protocol tcp
set firewall ipv4 input filter rule 150 description 'PPTP control'

set firewall ipv4 input filter rule 151 action accept
set firewall ipv4 input filter rule 151 protocol gre
set firewall ipv4 input filter rule 151 description 'PPTP data'

set firewall ipv4 forward filter rule 200 action accept
set firewall ipv4 forward filter rule 200 source address 192.168.250.0/24

# NAT
set nat source rule 150 outbound-interface name eth0
set nat source rule 150 source address 192.168.250.0/24
set nat source rule 150 translation address masquerade

commit
save

Пример 2: PPTP с RADIUS authentication

# PPTP с RADIUS
set vpn pptp remote-access authentication mode 'radius'
set vpn pptp remote-access authentication radius server 192.168.1.10 key 'RadiusSecret123!'
set vpn pptp remote-access authentication radius server 192.168.1.11 key 'RadiusSecret123!'
set vpn pptp remote-access authentication radius timeout 5
set vpn pptp remote-access authentication radius acct-timeout 3
set vpn pptp remote-access authentication radius nas-identifier 'vyos-pptp-gw'
set vpn pptp remote-access authentication radius source-address '192.168.1.1'

# MSCHAP-v2 only
set vpn pptp remote-access authentication require 'mschap-v2'
set vpn pptp remote-access authentication mppe 'require-128'

# IP pool
set vpn pptp remote-access client-ip-pool start '10.99.0.10'
set vpn pptp remote-access client-ip-pool stop '10.99.0.250'
set vpn pptp remote-access gateway-address '10.99.0.1'
set vpn pptp remote-access outside-address '203.0.113.1'

# DNS и WINS
set vpn pptp remote-access name-server '192.168.1.1'
set vpn pptp remote-access name-server '8.8.8.8'
set vpn pptp remote-access wins-server '192.168.1.100'

# Session limits
set vpn pptp remote-access max-concurrent-sessions 100
set vpn pptp remote-access idle 3600
set vpn pptp remote-access session-timeout 28800

# PPP options
set vpn pptp remote-access mtu 1400
set vpn pptp remote-access ppp-options lcp-echo-failure 3
set vpn pptp remote-access ppp-options lcp-echo-interval 30

# Logging
set vpn pptp remote-access ppp-options logging level info

# Firewall (same as before)
# ...

commit
save

Пример 3: PPTP с rate limiting

# PPTP с per-user bandwidth limits
set vpn pptp remote-access authentication mode 'local'

# User tier 1: 5 Mbit/s down, 2 Mbit/s up
set vpn pptp remote-access authentication local-users username user1 password 'Pass1!'
set vpn pptp remote-access authentication local-users username user1 rate-limit download '5000'
set vpn pptp remote-access authentication local-users username user1 rate-limit upload '2000'

# User tier 2: 10 Mbit/s down, 5 Mbit/s up
set vpn pptp remote-access authentication local-users username user2 password 'Pass2!'
set vpn pptp remote-access authentication local-users username user2 rate-limit download '10000'
set vpn pptp remote-access authentication local-users username user2 rate-limit upload '5000'

# Admin: unlimited
set vpn pptp remote-access authentication local-users username admin password 'AdminPass!'
set vpn pptp remote-access authentication local-users username admin static-ip '192.168.250.5'

# IP pool
set vpn pptp remote-access client-ip-pool start '192.168.250.10'
set vpn pptp remote-access client-ip-pool stop '192.168.250.50'
set vpn pptp remote-access gateway-address '192.168.250.1'
set vpn pptp remote-access outside-address '203.0.113.1'

# Standard settings
set vpn pptp remote-access authentication mppe 'require-128'
set vpn pptp remote-access name-server '8.8.8.8'
set vpn pptp remote-access mtu 1400

commit
save

Мониторинг и диагностика

Проверка активных сессий

# Показать активные PPTP сессии
show pptp-server sessions

# Пример вывода:
# Interface | Username | IP Address      | Calling Station | Uptime    | RX/TX
# ----------+----------+-----------------+-----------------+-----------+-------------
# pptp0     | testuser | 192.168.250.10  | 198.51.100.50   | 00:15:32  | 1.2M/3.4M
# pptp1     | admin    | 192.168.250.5   | 198.51.100.51   | 01:23:45  | 5.6M/12.1M

# Подробная статистика
show pptp-server statistics

Мониторинг логов

# PPTP логи (accel-ppp backend)
sudo journalctl -u accel-ppp@pptp -b 0

# Последние 50 строк
sudo journalctl -u accel-ppp@pptp -n 50

# Live log monitoring
sudo journalctl -u accel-ppp@pptp -f

# За последний час
sudo journalctl -u accel-ppp@pptp --since "1 hour ago"

# Grep для specific пользователя
sudo journalctl -u accel-ppp@pptp | grep "testuser"

# Только ошибки
sudo journalctl -u accel-ppp@pptp -p err

Проверка connectivity

# На VyOS: ping PPTP клиента
ping 192.168.250.10

# Проверить routing
show ip route

# Traceroute к клиенту
traceroute 192.168.250.10

# Netstat для PPTP connections
sudo netstat -tlnp | grep 1723

# Показать GRE туннели
sudo ip tunnel show

tcpdump для PPTP

# Capture PPTP control channel (TCP 1723)
sudo tcpdump -i eth0 port 1723 -n -vv

# Capture GRE traffic (PPTP data)
sudo tcpdump -i eth0 proto gre -n

# Capture на PPTP интерфейсе (decrypted data)
sudo tcpdump -i pptp0 -n

# Save to pcap для анализа в Wireshark
sudo tcpdump -i eth0 port 1723 or proto gre -w /tmp/pptp-capture.pcap

Performance testing

# На клиенте: iperf3 через PPTP
iperf3 -c 192.168.1.10 -t 30

# На VyOS проверить CPU usage
top
htop

# Network statistics
show interfaces pptp pptp0

Troubleshooting

Проблема: Клиент не может подключиться

Симптомы:

  • Connection timeout
  • “Unable to establish connection”

Причины:

  1. Firewall блокирует TCP 1723 или GRE
  2. NAT роутер блокирует GRE
  3. PPTP сервис не запущен

Диагностика:

# Проверить что PPTP слушает
sudo netstat -tlnp | grep 1723

# Проверить firewall
show firewall ipv4 input filter

# Логи
sudo journalctl -u accel-ppp@pptp -n 50

# Тест с клиента: telnet к TCP 1723
telnet vpn.company.com 1723

Решение:

# Firewall правила
set firewall ipv4 input filter rule 150 action accept
set firewall ipv4 input filter rule 150 destination port 1723
set firewall ipv4 input filter rule 150 protocol tcp

set firewall ipv4 input filter rule 151 action accept
set firewall ipv4 input filter rule 151 protocol gre

# Перезапустить PPTP
restart pptp

commit

Проблема: Аутентификация не проходит

Симптомы:

  • “Authentication failed”
  • “Invalid username or password”

Причины:

  1. Неправильный username/password
  2. Требуется другой auth protocol
  3. RADIUS недоступен

Диагностика:

# Проверить пользователей
show configuration vpn pptp remote-access authentication

# Логи с деталями auth
sudo journalctl -u accel-ppp@pptp | grep -i "auth"

# RADIUS test (если используется)
# На RADIUS сервере: tail -f /var/log/freeradius/radius.log

Решение:

# Проверить password
show configuration vpn pptp remote-access authentication local-users username testuser

# Разрешить все auth protocols (для диагностики)
set vpn pptp remote-access authentication protocols pap enable
set vpn pptp remote-access authentication protocols chap enable
set vpn pptp remote-access authentication protocols mschap enable
set vpn pptp remote-access authentication protocols mschap-v2 enable

# Отключить MPPE (для диагностики, НЕ для production)
delete vpn pptp remote-access authentication mppe

commit

Проблема: Подключено, но нет доступа к сети

Симптомы:

  • PPTP туннель UP
  • Ping gateway работает
  • Ping LAN ресурсов не работает

Причины:

  1. Firewall блокирует forward
  2. NAT не настроен
  3. Routing проблемы

Диагностика:

# На VyOS: ping клиента
ping 192.168.250.10

# На клиенте: ping gateway
ping 192.168.250.1

# Проверить routing на клиенте
ip route  # Linux
route print  # Windows

# Firewall forward rules
show firewall ipv4 forward filter

Решение:

# Firewall для forward
set firewall ipv4 forward filter rule 200 action accept
set firewall ipv4 forward filter rule 200 source address 192.168.250.0/24

# NAT для PPTP клиентов
set nat source rule 150 source address 192.168.250.0/24
set nat source rule 150 outbound-interface name eth0
set nat source rule 150 translation address masquerade

commit

Проблема: GRE не проходит через NAT

Симптомы:

  • PPTP control connection устанавливается (TCP 1723)
  • GRE туннель не создается
  • “GRE timeout” в логах

Причины:

  • NAT роутер не поддерживает GRE passthrough
  • Multiple PPTP клиентов за одним NAT (GRE не имеет портов!)

Решение:

  1. Включить “PPTP passthrough” на NAT роутере
  2. Использовать только один PPTP клиент за NAT
  3. Лучше: Мигрировать на L2TP/IPsec (работает через NAT с NAT-T)

Проблема: Медленная производительность

Симптомы:

  • Низкая пропускная способность
  • Высокая latency
  • Packet loss

Причины:

  1. MTU проблемы (fragmentation)
  2. CPU overhead от MPPE encryption
  3. Network congestion

Диагностика:

# На клиенте: MTU test
ping -M do -s 1400 192.168.250.1  # Linux
ping -f -l 1400 192.168.250.1     # Windows

# iperf3 test
iperf3 -c 192.168.1.10

# CPU usage на VyOS
top

Решение:

# MTU tuning
set vpn pptp remote-access mtu 1400
set vpn pptp remote-access mru 1400

# На клиенте (Windows):
# netsh interface ipv4 set subinterface "PPTP Connection" mtu=1400 store=persistent

# На клиенте (Linux):
# ip link set dev ppp0 mtu 1400

commit

Проблема: Session disconnects случайно

Симптомы:

  • PPTP подключается
  • Disconnect через некоторое время без видимой причины

Причины:

  1. Idle timeout слишком короткий
  2. LCP echo не отвечает (network issues)
  3. NAT session timeout

Решение:

# Увеличить idle timeout
set vpn pptp remote-access idle 7200  # 2 часа

# Настроить LCP keepalive
set vpn pptp remote-access ppp-options lcp-echo-failure 5
set vpn pptp remote-access ppp-options lcp-echo-interval 60

# Или отключить idle timeout (не рекомендуется)
delete vpn pptp remote-access idle

commit

Безопасность и best practices

Критичные рекомендации

  1. НЕ используйте PPTP для production

    • Используйте WireGuard, OpenVPN, или IPsec
    • PPTP только для временных legacy сценариев
  2. Если ВЫНУЖДЕНЫ использовать PPTP:

    # Требовать MSCHAP-v2 (наименее плохой)
    set vpn pptp remote-access authentication protocols pap disable
    set vpn pptp remote-access authentication protocols chap disable
    set vpn pptp remote-access authentication protocols mschap disable
    set vpn pptp remote-access authentication protocols mschap-v2 enable
    
    # Требовать 128-bit MPPE
    set vpn pptp remote-access authentication mppe 'require-128'
  3. Сильные пароли обязательны:

    • Минимум 16 символов
    • Uppercase, lowercase, numbers, symbols
    • Избегайте dictionary words
    • Используйте password manager
  4. RADIUS вместо local auth:

    set vpn pptp remote-access authentication mode 'radius'
    set vpn pptp remote-access authentication radius server 192.168.1.10 key 'LongRadiusSecret123!'
  5. Ограничить source IP:

    # Firewall для trusted networks только
    set firewall ipv4 input filter rule 150 source address 198.51.100.0/24
  6. Rate limiting:

    # Защита от brute force
    set firewall ipv4 input filter rule 150 recent count 5
    set firewall ipv4 input filter rule 150 recent time minute 1
  7. Мониторинг и alerting:

    # Регулярно проверять логи
    sudo journalctl -u accel-ppp@pptp | grep -i "failed"
    
    # Setup alerting для failed auth attempts
  8. Idle timeout:

    set vpn pptp remote-access idle 1800  # 30 минут
  9. Планируйте миграцию:

    • Документируйте план миграции на современный VPN
    • Установите дедлайн для отключения PPTP
    • Уведомите пользователей о deprecation

Compliance considerations

PPTP НЕ соответствует:

  • PCI DSS - запрещен для payment card data
  • HIPAA - недостаточно для healthcare data
  • GDPR - не подходит для personal data protection
  • SOX - не соответствует audit требованиям

Если ваша организация подпадает под compliance regulations - PPTP категорически запрещен.

Заключение

PPTP является устаревшей и небезопасной VPN технологией, которая НЕ должна использоваться для новых развертываний или любых сценариев, требующих реальной безопасности.

Когда PPTP допустим (крайне редко)

  1. Legacy hardware без альтернатив
  2. Temporary migration с четким планом отключения
  3. Test/lab environments без sensitive данных
  4. Non-security scenarios (например, простое туннелирование для bypass geo-restrictions на non-sensitive трафике)

Рекомендованные альтернативы

Для новых deployments:

  1. WireGuard - современный, быстрый, безопасный (топ выбор 2025)
  2. OpenVPN - проверенный, гибкий, широко поддерживаемый
  3. IPsec/IKEv2 - enterprise-grade, стандартизированный
  4. L2TP/IPsec - встроенные клиенты, лучше чем PPTP (но тоже устаревает)

Таблица миграции:

СценарийМигрируйте на
Remote access для всех OSWireGuard или OpenVPN
Windows/iOS/macOS встроенные клиентыL2TP/IPsec или IKEv2
Максимальная производительностьWireGuard
Enterprise с PKIOpenVPN или IPsec
Mobile users с roamingWireGuard или IKEv2
Legacy PPTP клиентыL2TP/IPsec (временно) → WireGuard (финал)

Финальное предупреждение

VyOS предоставляет PPTP только для backwards compatibility. Протокол имеет множество критических уязвимостей безопасности и не должен использоваться для защиты sensitive информации.

Начните планировать миграцию на современные VPN протоколы сегодня.

Для помощи с миграцией, смотрите документацию: