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
Критические проблемы безопасности:
Слабое шифрование:
- MPPE основан на RC4 cipher (устаревший)
- Ключи шифрования выводятся из MS-CHAPv2 хэшей (слабые)
- Эффективная длина ключа всего 128 бит (для MPPE-128)
Уязвимости MS-CHAPv2:
- MS-CHAPv2 аутентификация взламывается за секунды с современными GPU
- DES encryption (использованная в MS-CHAPv2) считается полностью скомпрометированной
- Dictionary и rainbow table атаки очень эффективны
Отсутствие Perfect Forward Secrecy (PFS):
- Компрометация одного ключа раскрывает весь трафик
- Невозможность защиты прошлых сессий
Bit-flipping атаки:
- RC4 подвержен bit-flipping атакам
- Возможность модификации encrypted data без обнаружения
Проблемы с NAT traversal:
- GRE не работает хорошо через NAT
- Требуется специальная поддержка на роутерах (PPTP passthrough)
Публичные уязвимости:
- 2012: Moxie Marlinspike и CloudCracker продемонстрировали взлом MS-CHAPv2 за 23 часа
- 2012: Microsoft признала, что PPTP “больше не может считаться безопасным”
- NSA: Документы Сноудена показали, что NSA может расшифровывать PPTP трафик
Почему VyOS все еще поддерживает PPTP
Единственные валидные причины:
- Legacy hardware - старое оборудование с PPTP-only клиентами
- Backwards compatibility - миграция со старых систем
- Non-security scenarios - тестирование, лабораторные среды без sensitive data
- Temporary bridge - временное решение во время миграции на современные VPN
НЕ используйте PPTP если:
- Передаются sensitive данные
- Требуется реальная безопасность
- Есть альтернативы (почти всегда есть)
- Compliance regulations применимы (PCI DSS, HIPAA, GDPR запрещают PPTP)
Архитектура PPTP
Компоненты
- PPTP Server (PNS - PPTP Network Server) - VyOS
- PPTP Client (PAC - PPTP Access Concentrator)
- Control Connection - TCP 1723
- Data Tunnel - GRE (IP Protocol 47)
- PPP Session - аутентификация и IP assignment
Процесс подключения
- TCP Connection - клиент подключается к серверу на TCP 1723
- Control Channel - устанавливается PPTP control connection
- GRE Tunnel - создается GRE туннель для data
- PPP Negotiation - LCP (Link Control Protocol) negotiation
- Authentication - PAP/CHAP/MSCHAP/MSCHAP-v2
- IPCP - IP Control Protocol assigns IP address
- MPPE Negotiation - если включено шифрование
- 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 compatibility | OpenVPN | Широкая поддержка |
Enterprise deployment | IPsec/IKEv2 | Стандартизирован |
Mobile users | WireGuard/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 протоколов
Критерий | PPTP | L2TP/IPsec | OpenVPN | WireGuard | IPsec/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 для клиента
Протоколы аутентификации
Иерархия безопасности (от наименее к наиболее безопасному):
- PAP (Password Authentication Protocol) - plaintext пароли
- CHAP (Challenge-Handshake Authentication Protocol) - challenge-response
- MSCHAP (Microsoft CHAP) - улучшенный CHAP
- 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:
- Settings → Network & Internet → VPN
- Add a VPN connection
- VPN provider: Windows (built-in)
- Connection name: Company PPTP
- Server name or address:
vpn.company.com
или203.0.113.1
- VPN type: Point to Point Tunneling Protocol (PPTP)
- Type of sign-in info: User name and password
- User name:
testuser
- Password:
testpass
- 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 клиент
- System Preferences → Network
- Click “+” to add connection
- Interface: VPN
- VPN Type: PPTP
- Service Name: Company PPTP
- Server Address:
vpn.company.com
- Account Name:
testuser
- Authentication Settings:
- Password
- Encryption: Maximum (128-bit)
- Advanced:
- Send all traffic over VPN (optional)
- Apply → Connect
Android клиент
Предупреждение: Android 12+ удалил встроенную поддержку PPTP из-за проблем безопасности.
Android 11 и ранее:
- Settings → Network & Internet → VPN
- Add VPN
- Name: Company PPTP
- Type: PPTP
- Server address:
vpn.company.com
- Username:
testuser
- Password:
testpass
- 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”
Причины:
- Firewall блокирует TCP 1723 или GRE
- NAT роутер блокирует GRE
- 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”
Причины:
- Неправильный username/password
- Требуется другой auth protocol
- 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 ресурсов не работает
Причины:
- Firewall блокирует forward
- NAT не настроен
- 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 не имеет портов!)
Решение:
- Включить “PPTP passthrough” на NAT роутере
- Использовать только один PPTP клиент за NAT
- Лучше: Мигрировать на L2TP/IPsec (работает через NAT с NAT-T)
Проблема: Медленная производительность
Симптомы:
- Низкая пропускная способность
- Высокая latency
- Packet loss
Причины:
- MTU проблемы (fragmentation)
- CPU overhead от MPPE encryption
- 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 через некоторое время без видимой причины
Причины:
- Idle timeout слишком короткий
- LCP echo не отвечает (network issues)
- 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
Критичные рекомендации
НЕ используйте PPTP для production
- Используйте WireGuard, OpenVPN, или IPsec
- PPTP только для временных legacy сценариев
Если ВЫНУЖДЕНЫ использовать 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'
Сильные пароли обязательны:
- Минимум 16 символов
- Uppercase, lowercase, numbers, symbols
- Избегайте dictionary words
- Используйте password manager
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!'
Ограничить source IP:
# Firewall для trusted networks только set firewall ipv4 input filter rule 150 source address 198.51.100.0/24
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
Мониторинг и alerting:
# Регулярно проверять логи sudo journalctl -u accel-ppp@pptp | grep -i "failed" # Setup alerting для failed auth attempts
Idle timeout:
set vpn pptp remote-access idle 1800 # 30 минут
Планируйте миграцию:
- Документируйте план миграции на современный 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 допустим (крайне редко)
- Legacy hardware без альтернатив
- Temporary migration с четким планом отключения
- Test/lab environments без sensitive данных
- Non-security scenarios (например, простое туннелирование для bypass geo-restrictions на non-sensitive трафике)
Рекомендованные альтернативы
Для новых deployments:
- WireGuard - современный, быстрый, безопасный (топ выбор 2025)
- OpenVPN - проверенный, гибкий, широко поддерживаемый
- IPsec/IKEv2 - enterprise-grade, стандартизированный
- L2TP/IPsec - встроенные клиенты, лучше чем PPTP (но тоже устаревает)
Таблица миграции:
Сценарий | Мигрируйте на |
---|---|
Remote access для всех OS | WireGuard или OpenVPN |
Windows/iOS/macOS встроенные клиенты | L2TP/IPsec или IKEv2 |
Максимальная производительность | WireGuard |
Enterprise с PKI | OpenVPN или IPsec |
Mobile users с roaming | WireGuard или IKEv2 |
Legacy PPTP клиенты | L2TP/IPsec (временно) → WireGuard (финал) |
Финальное предупреждение
VyOS предоставляет PPTP только для backwards compatibility. Протокол имеет множество критических уязвимостей безопасности и не должен использоваться для защиты sensitive информации.
Начните планировать миграцию на современные VPN протоколы сегодня.
Для помощи с миграцией, смотрите документацию: