mikrotik-wiki.ru
Главная
Загрузка...

SSTP VPN на MikroTik — туннель через HTTPS

RouterOS 7.xVPN8 мин130 мар. 2026 г.
TelegramVK

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-трафик

Этапы подключения:

  1. Клиент устанавливает TCP-соединение на порт 443
  2. Происходит TLS handshake (проверка сертификата сервера)
  3. Внутри TLS устанавливается SSTP-сессия
  4. Внутри SSTP поднимается PPP (аутентификация, назначение IP)
  5. IP-трафик инкапсулируется в PPP → SSTP → TLS → TCP

Сравнение с другими VPN-протоколами

КритерийSSTPWireGuardL2TP/IPsecOpenVPN (TCP)
Порт443 TCP51820 UDP500/4500 UDP443 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-клиент:

  1. Параметры → Сеть и Интернет → VPN → Добавить VPN-подключение
  2. Поставщик VPN: Windows (встроенные)
  3. Имя подключения: любое (например, «Офис MikroTik»)
  4. Имя или адрес сервера: vpn.example.com (должно совпадать с common-name сертификата)
  5. Тип VPN: SSTP (Secure Socket Tunneling Protocol)
  6. Тип данных для входа: Имя пользователя и пароль
  7. Введите логин и пароль из PPP Secrets

Для self-signed сертификата необходимо:

  • Экспортировать CA с роутера: /certificate/export-certificate sstp-ca
  • Скопировать файл sstp-ca.crt на Windows
  • Открыть sstp-ca.crt → «Установить сертификат» → «Локальный компьютер» → «Доверенные корневые центры сертификации»

Или через PowerShell:

code
Import-Certificate -FilePath "C:\sstp-ca.crt" -CertStoreLocation "Cert:\LocalMachine\Root"

Через реестр (для отключения проверки сертификата — только для тестирования):

code
reg add "HKLM\SYSTEM\CurrentControlSet\Services\SstpSvc\Parameters" /v NoCertRevocationCheck /t REG_DWORD /d 1 /f

Настройка через PowerShell (для массового развёртывания через GPO):

code
Add-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

  1. TCP-over-TCP — главная проблема. На каналах с потерями (> 1%) производительность падает катастрофически. Для стабильных каналов (Ethernet, оптика) деградация минимальна
  2. Нет UDP-режима — в отличие от OpenVPN (который тоже TCP-only на MikroTik), SSTP по определению работает только через TCP
  3. Только клиент Windows встроенный — macOS, Linux и мобильные ОС требуют сторонних клиентов
  4. Производительность — на RB5009 ожидайте 80–150 Мбит/с при полной загрузке (TLS шифрование нагружает CPU)
  5. Нет 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) как альтернативу.

[admin@MikroTik] >
Клиент ←→ 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
VPN / SSTP VPN на MikroTik — туннель через HTTPS