SSTP VPN на MikroTik — туннель через HTTPS
SSTP VPN на MikroTik — туннель через HTTPS (порт 443)
SSTP (Secure Socket Tunneling Protocol) — VPN-протокол от Microsoft, работающий поверх HTTPS на порту 443. Главное преимущество — возможность пройти через любой firewall или прокси-сервер, пропускающий HTTPS-трафик. В этом руководстве настроим SSTP-сервер на MikroTik RouterOS 7.20+, создадим SSL-сертификаты, подключим Windows-клиент и разберём ограничения протокола.
Описание
Когда использовать SSTP
SSTP оправдан в специфических сценариях:
- Жёсткие корпоративные firewall — порт 443 открыт практически везде, в отличие от UDP 51820 (WireGuard) или UDP 500/4500 (IPsec)
- Гостиничные и публичные сети — captive portal часто блокируют всё, кроме HTTP/HTTPS
- DPI-фильтрация — SSTP использует стандартный TLS, что затрудняет его блокировку (в отличие от WireGuard, чей протокол легко определяется)
- Windows-инфраструктура — SSTP встроен в Windows начиная с Vista SP1, настраивается через GPO
Как работает SSTP
SSTP создаёт PPP-туннель внутри TLS-соединения:
codeКлиент ←→ TLS (порт 443) ←→ SSTP ←→ PPP ←→ IP-трафик
Этапы подключения:
- Клиент устанавливает TCP-соединение на порт 443
- Происходит TLS handshake (проверка сертификата сервера)
- Внутри TLS устанавливается SSTP-сессия
- Внутри SSTP поднимается PPP (аутентификация, назначение IP)
- IP-трафик инкапсулируется в PPP → SSTP → TLS → TCP
Сравнение с другими VPN-протоколами
| Критерий | SSTP | WireGuard | L2TP/IPsec | OpenVPN (TCP) |
|---|---|---|---|---|
| Порт | 443 TCP | 51820 UDP | 500/4500 UDP | 443 TCP |
| Проход через firewall | Отлично | Плохо (UDP) | Средне (UDP) | Хорошо |
| Скорость | 50–150 Мбит/с | 300–900 Мбит/с | 100–300 Мбит/с | 50–200 Мбит/с |
| TCP-over-TCP проблема | Да | Нет | Нет | Да |
| Встроенный клиент Windows | Да (Vista SP1+) | Нет | Да | Нет |
| Встроенный клиент macOS | Нет | Нет | Да | Нет |
| Встроенный клиент Linux | Нет (нужен sstp-client) | Нет (нужен wg) | Да (NetworkManager) | Нет (нужен openvpn) |
| Поддержка в RouterOS | Сервер + клиент | Сервер + клиент | Сервер + клиент | Сервер + клиент |
TCP-over-TCP проблема — основной недостаток SSTP. Если внутри VPN идёт TCP-трафик (а это 90% всего трафика), получается TCP поверх TCP. При потере пакета оба уровня TCP начинают ретрансмиссию, что приводит к экспоненциальному росту задержек. На нестабильных каналах (Wi-Fi, мобильная сеть) SSTP заметно проигрывает WireGuard и IPsec.
Вывод: SSTP — не лучший VPN-протокол по производительности, но единственный вариант, когда всё кроме HTTPS заблокировано и нужен встроенный клиент Windows.
Требования
Для настройки SSTP-сервера на MikroTik необходимо:
- RouterOS 7.20+ (рекомендуется последняя stable)
- SSL-сертификат (self-signed для тестирования, Let's Encrypt или коммерческий для продакшена)
- Белый IP-адрес или доменное имя, указывающее на роутер
- Открытый порт 443 TCP на WAN-интерфейсе
- Если на роутере уже работает WebFig на 443 — перенести его на другой порт
Настройка
Шаг 1. Создание SSL-сертификатов
SSTP требует валидный SSL-сертификат. Клиент Windows проверяет сертификат и откажется подключаться, если он недоверенный (если не отключить проверку вручную).
Вариант A: Self-signed сертификат (для тестирования)
[admin@MikroTik] ># Создаём корневой CA /certificate/add name=sstp-ca common-name="SSTP CA" \ key-size=2048 days-valid=3650 key-usage=key-cert-sign,crl-sign /certificate/sign sstp-ca /certificate/set sstp-ca trusted=yes # Создаём серверный сертификат # ВАЖНО: common-name должен совпадать с адресом, который клиент использует для подключения /certificate/add name=sstp-server common-name=vpn.example.com \ subject-alt-name=DNS:vpn.example.com,IP:203.0.113.10 \ key-size=2048 days-valid=1825 \ key-usage=digital-signature,key-encipherment,tls-server /certificate/sign sstp-server ca=sstp-ca
При self-signed сертификате на клиенте Windows потребуется импортировать CA в «Доверенные корневые центры сертификации» или отключить проверку сертификата.
Вариант B: Let's Encrypt (для продакшена)
Если у вас есть доменное имя, указывающее на WAN-адрес роутера, используйте Let's Encrypt. Для RouterOS 7.20+ можно получить сертификат вручную через DNS challenge или HTTP challenge на другом сервере, а затем импортировать:
[admin@MikroTik] ># Импорт сертификата Let's Encrypt (предварительно загрузите файлы на роутер) /certificate/import file-name=fullchain.pem /certificate/import file-name=privkey.pem
Совет: Let's Encrypt сертификаты действуют 90 дней. Автоматизируйте обновление через скрипт на внешнем сервере или используйте RouterOS скрипт с ACME.
Шаг 2. Пул адресов и PPP-профиль
[admin@MikroTik] ># Пул для SSTP-клиентов /ip/pool/add name=pool-sstp ranges=10.10.20.10-10.10.20.254 # PPP-профиль /ppp/profile/add \ name=sstp-profile \ local-address=10.10.20.1 \ remote-address=pool-sstp \ dns-server=10.10.20.1 \ use-encryption=required \ use-compression=no \ change-tcp-mss=yes
Параметр use-compression=no — сжатие внутри TLS бесполезно (TLS уже не сжимается) и может создавать уязвимости (CRIME attack).
Шаг 3. Создание пользователей
[admin@MikroTik] >/ppp/secret/add \ name=user-sstp1 \ password="Str0ngP@ssw0rd!2026" \ service=sstp \ profile=sstp-profile \ comment="Иванов — ноутбук Windows" /ppp/secret/add \ name=user-sstp2 \ password="An0therS3cure#Key" \ service=sstp \ profile=sstp-profile \ comment="Петров — удалённый доступ"
Шаг 4. Включение SSTP-сервера
[admin@MikroTik] >/interface/sstp-server/server/set \ enabled=yes \ certificate=sstp-server \ default-profile=sstp-profile \ authentication=mschapv2 \ tls-version=only-1.2 \ pfs=yes \ port=443
Параметры:
certificate=sstp-server— созданный ранее SSL-сертификатauthentication=mschapv2— единственный безопасный метод для SSTP (не используйте pap или chap)tls-version=only-1.2— отключает TLS 1.0 и 1.1 (уязвимы)pfs=yes— Perfect Forward Secrecy, рекомендуетсяport=443— стандартный HTTPS-порт
Внимание: если на этом же роутере WebFig работает на порту 443, возникнет конфликт. Переместите WebFig на другой порт:
/ip/service/set www-ssl port=8443
Шаг 5. Правила Firewall
[admin@MikroTik] ># Разрешаем SSTP-подключения /ip/firewall/filter/add \ chain=input \ protocol=tcp \ dst-port=443 \ action=accept \ comment="Allow SSTP VPN" \ place-before=0 # Разрешаем трафик от SSTP-клиентов в LAN /ip/firewall/filter/add \ chain=forward \ src-address=10.10.20.0/24 \ dst-address=192.168.88.0/24 \ action=accept \ comment="SSTP clients to LAN" # Разрешаем ответный трафик из LAN к SSTP-клиентам /ip/firewall/filter/add \ chain=forward \ src-address=192.168.88.0/24 \ dst-address=10.10.20.0/24 \ action=accept \ comment="LAN to SSTP clients"
Если нужен доступ SSTP-клиентов в интернет через роутер — добавьте NAT:
[admin@MikroTik] >/ip/firewall/nat/add \ chain=srcnat \ src-address=10.10.20.0/24 \ out-interface-list=WAN \ action=masquerade \ comment="NAT for SSTP clients"
Настройка клиента Windows
Windows 10/11 имеет встроенный SSTP-клиент:
- Параметры → Сеть и Интернет → VPN → Добавить VPN-подключение
- Поставщик VPN: Windows (встроенные)
- Имя подключения: любое (например, «Офис MikroTik»)
- Имя или адрес сервера:
vpn.example.com(должно совпадать с common-name сертификата) - Тип VPN: SSTP (Secure Socket Tunneling Protocol)
- Тип данных для входа: Имя пользователя и пароль
- Введите логин и пароль из PPP Secrets
Для self-signed сертификата необходимо:
- Экспортировать CA с роутера:
/certificate/export-certificate sstp-ca - Скопировать файл
sstp-ca.crtна Windows - Открыть
sstp-ca.crt→ «Установить сертификат» → «Локальный компьютер» → «Доверенные корневые центры сертификации»
Или через PowerShell:
codeImport-Certificate -FilePath "C:\sstp-ca.crt" -CertStoreLocation "Cert:\LocalMachine\Root"
Через реестр (для отключения проверки сертификата — только для тестирования):
codereg add "HKLM\SYSTEM\CurrentControlSet\Services\SstpSvc\Parameters" /v NoCertRevocationCheck /t REG_DWORD /d 1 /f
Настройка через PowerShell (для массового развёртывания через GPO):
codeAdd-VpnConnection -Name "Офис MikroTik" ` -ServerAddress "vpn.example.com" ` -TunnelType "Sstp" ` -AuthenticationMethod "MsChapv2" ` -EncryptionLevel "Required" ` -RememberCredential
Этот скрипт можно распространить через Group Policy как logon-скрипт на все рабочие станции домена.
MikroTik как SSTP-клиент
MikroTik может подключаться к другому SSTP-серверу (другой MikroTik, Windows Server RRAS). Это полезно для site-to-site подключений, когда единственный открытый порт — 443:
[admin@MikroTik] >/interface/sstp-client/add \ name=sstp-to-hq \ connect-to=vpn.example.com:443 \ user=branch-router \ password="BranchP@ss2026!" \ profile=default-encryption \ tls-version=only-1.2 \ verify-server-certificate=yes \ certificate=sstp-ca \ disabled=no
Если используется self-signed сертификат, импортируйте CA-сертификат сервера и укажите его в параметре certificate. При verify-server-certificate=no проверка отключается (небезопасно, только для тестов).
После подключения добавьте маршрут к удалённой подсети:
[admin@MikroTik] >/ip/route/add dst-address=192.168.10.0/24 gateway=sstp-to-hq
Проверка
На MikroTik
[admin@MikroTik] ># Активные SSTP-подключения /interface/sstp-server/print # Подробная информация о подключённых пользователях /ppp/active/print detail # Ожидаемый вывод: # name=user-sstp1 service=sstp caller-id=198.51.100.50 # address=10.10.20.10 uptime=1h25m encoding=MPPE128stateless
[admin@MikroTik] ># Статистика интерфейса /interface/print stats where type=sstp-server # Проверка маршрутов к SSTP-клиентам /ip/route/print where routing-table=main dst-address~"10.10.20"
На Windows
В командной строке:
[admin@MikroTik] ># Проверка подключения ipconfig | findstr "10.10.20" # Ping шлюза VPN ping 10.10.20.1 # Ping устройства в локальной сети офиса ping 192.168.88.1 # Проверка маршрутов route print | findstr "10.10.20"
Логирование на MikroTik
[admin@MikroTik] ># Включить логирование PPP и SSTP /system/logging/add topics=sstp,ppp,info action=memory # Просмотр /log/print where topics~"sstp"
Ограничения SSTP на MikroTik
- TCP-over-TCP — главная проблема. На каналах с потерями (> 1%) производительность падает катастрофически. Для стабильных каналов (Ethernet, оптика) деградация минимальна
- Нет UDP-режима — в отличие от OpenVPN (который тоже TCP-only на MikroTik), SSTP по определению работает только через TCP
- Только клиент Windows встроенный — macOS, Linux и мобильные ОС требуют сторонних клиентов
- Производительность — на RB5009 ожидайте 80–150 Мбит/с при полной загрузке (TLS шифрование нагружает CPU)
- Нет split-tunneling «из коробки» — по умолчанию весь трафик клиента пойдёт через VPN. Для split-tunnel настройте маршруты на клиенте вручную или через DHCP options
Типичные ошибки
1. Клиент Windows не подключается — «сертификат не доверен»
Common-name сертификата не совпадает с адресом в настройках VPN-подключения. Если подключаетесь по IP 203.0.113.10, в сертификате должен быть subject-alt-name=IP:203.0.113.10. Если по домену vpn.example.com — то common-name=vpn.example.com.
[admin@MikroTik] ># Проверьте сертификат /certificate/print detail where name=sstp-server
2. Конфликт порта 443 с WebFig
SSTP и WebFig не могут работать на одном порту:
[admin@MikroTik] ># Переместите WebFig на другой порт /ip/service/set www-ssl port=8443 # Или отключите www-ssl если не используете /ip/service/set www-ssl disabled=yes
3. Подключение устанавливается, но нет доступа к сети
Проверьте firewall forward rules и NAT. Частая ошибка — правила forward для SSTP-подсети расположены после drop all:
[admin@MikroTik] >/ip/firewall/filter/print where chain=forward # Правила accept для 10.10.20.0/24 должны быть перед drop
4. Медленная скорость
TCP-over-TCP на нестабильном канале. Проверьте потери пакетов:
[admin@MikroTik] >/tool/flood-ping address=198.51.100.50 count=1000
Если потери > 1% — SSTP будет работать плохо. Рассмотрите WireGuard или IPsec (UDP-based) как альтернативу.
Клиент ←→ TLS (порт 443) ←→ SSTP ←→ PPP ←→ IP-трафик # Создаём корневой CA /certificate/add name=sstp-ca common-name="SSTP CA" \ key-size=2048 days-valid=3650 key-usage=key-cert-sign,crl-sign /certificate/sign sstp-ca /certificate/set sstp-ca trusted=yes # Создаём серверный сертификат # ВАЖНО: common-name должен совпадать с адресом, который клиент использует для подключения /certificate/add name=sstp-server common-name=vpn.example.com \ subject-alt-name=DNS:vpn.example.com,IP:203.0.113.10 \ key-size=2048 days-valid=1825 \ key-usage=digital-signature,key-encipherment,tls-server /certificate/sign sstp-server ca=sstp-ca # Импорт сертификата Let's Encrypt (предварительно загрузите файлы на роутер) /certificate/import file-name=fullchain.pem /certificate/import file-name=privkey.pem # Пул для SSTP-клиентов /ip/pool/add name=pool-sstp ranges=10.10.20.10-10.10.20.254 # PPP-профиль /ppp/profile/add \ name=sstp-profile \ local-address=10.10.20.1 \ remote-address=pool-sstp \ dns-server=10.10.20.1 \ use-encryption=required \ use-compression=no \ change-tcp-mss=yes /ppp/secret/add \ name=user-sstp1 \ password="Str0ngP@ssw0rd!2026" \ service=sstp \ profile=sstp-profile \ comment="Иванов — ноутбук Windows" /ppp/secret/add \ name=user-sstp2 \ password="An0therS3cure#Key" \ service=sstp \ profile=sstp-profile \ comment="Петров — удалённый доступ" /interface/sstp-server/server/set \ enabled=yes \ certificate=sstp-server \ default-profile=sstp-profile \ authentication=mschapv2 \ tls-version=only-1.2 \ pfs=yes \ port=443 # Разрешаем SSTP-подключения /ip/firewall/filter/add \ chain=input \ protocol=tcp \ dst-port=443 \ action=accept \ comment="Allow SSTP VPN" \ place-before=0 # Разрешаем трафик от SSTP-клиентов в LAN /ip/firewall/filter/add \ chain=forward \ src-address=10.10.20.0/24 \ dst-address=192.168.88.0/24 \ action=accept \ comment="SSTP clients to LAN" # Разрешаем ответный трафик из LAN к SSTP-клиентам /ip/firewall/filter/add \ chain=forward \ src-address=192.168.88.0/24 \ dst-address=10.10.20.0/24 \ action=accept \ comment="LAN to SSTP clients" /ip/firewall/nat/add \ chain=srcnat \ src-address=10.10.20.0/24 \ out-interface-list=WAN \ action=masquerade \ comment="NAT for SSTP clients" Import-Certificate -FilePath "C:\sstp-ca.crt" -CertStoreLocation "Cert:\LocalMachine\Root" reg add "HKLM\SYSTEM\CurrentControlSet\Services\SstpSvc\Parameters" /v NoCertRevocationCheck /t REG_DWORD /d 1 /f Add-VpnConnection -Name "Офис MikroTik" ` -ServerAddress "vpn.example.com" ` -TunnelType "Sstp" ` -AuthenticationMethod "MsChapv2" ` -EncryptionLevel "Required" ` -RememberCredential /interface/sstp-client/add \ name=sstp-to-hq \ connect-to=vpn.example.com:443 \ user=branch-router \ password="BranchP@ss2026!" \ profile=default-encryption \ tls-version=only-1.2 \ verify-server-certificate=yes \ certificate=sstp-ca \ disabled=no /ip/route/add dst-address=192.168.10.0/24 gateway=sstp-to-hq # Активные SSTP-подключения /interface/sstp-server/print # Подробная информация о подключённых пользователях /ppp/active/print detail # Ожидаемый вывод: # name=user-sstp1 service=sstp caller-id=198.51.100.50 # address=10.10.20.10 uptime=1h25m encoding=MPPE128stateless # Статистика интерфейса /interface/print stats where type=sstp-server # Проверка маршрутов к SSTP-клиентам /ip/route/print where routing-table=main dst-address~"10.10.20" # Проверка подключения ipconfig | findstr "10.10.20" # Ping шлюза VPN ping 10.10.20.1 # Ping устройства в локальной сети офиса ping 192.168.88.1 # Проверка маршрутов route print | findstr "10.10.20" # Включить логирование PPP и SSTP /system/logging/add topics=sstp,ppp,info action=memory # Просмотр /log/print where topics~"sstp" # Проверьте сертификат /certificate/print detail where name=sstp-server # Переместите WebFig на другой порт /ip/service/set www-ssl port=8443 # Или отключите www-ssl если не используете /ip/service/set www-ssl disabled=yes /ip/firewall/filter/print where chain=forward # Правила accept для 10.10.20.0/24 должны быть перед drop /tool/flood-ping address=198.51.100.50 count=1000