SSTP-сервер
SSTP требует публичное имя хоста, TCP 443 или другой доступный TCP-порт, TLS-сертификат, PPP-аутентификацию и IPv4-конфигурацию на сервере. Подойдут развёртывания в стиле RouterOS, SoftEther и Windows RRAS, если они предоставляют совместимый SSTP-сервис.
Пример в стиле RouterOS
/ip pool
add name=your-pool ranges=10.20.30.10-10.20.30.200
/ppp profile
add name=sstp-profile \
local-address=10.20.30.1 \
remote-address=your-pool \
dns-server=1.1.1.1,8.8.8.8 \
use-encryption=yes
/ppp secret
add name=username password="strong-password" service=sstp profile=sstp-profile
/interface sstp-server server
set enabled=yes \
port=443 \
certificate=your-certificate-name \
authentication=mschap2 \
default-profile=sstp-profile
Ссылка подключения
sstp://username:strong-password@yourdomain.com:443?name=Office&cc=DE&label=Work
- По возможности используйте действительный публичный TLS-сертификат.
- Откройте SSTP TCP-порт в firewall.
- Создавайте уникальные учётные данные для каждого пользователя или устройства.
- Пусть PPP-сервер выдаёт IP и DNS-параметры, если это поддерживает ваша схема.
- Используйте RADIUS или штатные ограничения сервера для срока действия, учёта и лимита одновременных сессий.
Чек-лист диагностики SSTP
| Симптом | Что проверить |
|---|---|
| TLS закрывается сразу | Цепочку сертификата, SNI/имя хоста, firewall, неподдерживаемую TLS-политику или прокси перед SSTP. |
| Ошибка аутентификации | Логин и пароль, метод PPP-аутентификации, статус аккаунта, срок действия секрета и ответ RADIUS. |
| Подключено, но трафика нет | Маршруты, NAT/masquerade, DNS, правила forward в firewall и серверный IP-пул. |
| Разрыв при смене сети | Политику таймаутов сервера и поведение переподключения клиента: при переходе Wi-Fi/мобильная сеть на iOS путь может создаваться заново. |
NaiveProxy с Caddy
Распространённая схема NaiveProxy использует Caddy со сборкой, в которую добавлен forward-proxy. Важная часть — аутентифицированный HTTP CONNECT поверх TLS. Точная сборка Caddy и синтаксис плагина могут отличаться, поэтому ниже показан паттерн развёртывания, а не гарантированный copy-paste.
yourdomain.com {
tls admin@yourdomain.com
route {
forward_proxy {
basic_auth username strong-password
hide_ip
hide_via
probe_resistance
}
respond 204
}
}
naive+https://username:strong-password@yourdomain.com:443?sni=yourdomain.com&name=Office&cc=DE&label=Work
Этот вариант часто выбирают за обычное TLS-завершение на прокси, автоматические сертификаты и простую basic-аутентификацию.
NaiveProxy с sing-box
Другой вариант — запускать sing-box напрямую с Naive inbound. Это удобно, когда один бинарник должен владеть и proxy-listener, и логикой маршрутизации.
{
"log": { "level": "warn" },
"inbounds": [
{
"type": "naive",
"tag": "naive-in",
"listen": "0.0.0.0",
"listen_port": 443,
"users": [
{ "username": "username", "password": "strong-password" }
],
"tls": {
"enabled": true,
"server_name": "yourdomain.com",
"certificate_path": "/etc/letsencrypt/live/yourdomain.com/fullchain.pem",
"key_path": "/etc/letsencrypt/live/yourdomain.com/privkey.pem"
}
}
],
"outbounds": [
{ "type": "direct", "tag": "direct" }
],
"route": { "final": "direct" }
}
[Unit]
Description=sing-box naive proxy
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/sing-box run -c /etc/sing-box/config.json
Restart=on-failure
RestartSec=3
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
UDP-over-TCP для NaiveProxy
NaiveProxy в основном ориентирован на TCP. Если пользователям нужен UDP-подобный трафик через Naive-профиль, MONO VPN может направлять UDP-потоки на отдельный Naive TCP-listener. Добавьте uot в ссылку и запустите совместимый listener на этом порту.
naive+https://username:strong-password@yourdomain.com:443?sni=yourdomain.com&uot=8443
{
"log": { "level": "warn" },
"inbounds": [
{
"type": "naive",
"tag": "naive-uot-in",
"listen": "0.0.0.0",
"listen_port": 8443,
"users": [
{ "username": "username", "password": "strong-password" }
],
"tls": {
"enabled": true,
"server_name": "yourdomain.com",
"certificate_path": "/etc/letsencrypt/live/yourdomain.com/fullchain.pem",
"key_path": "/etc/letsencrypt/live/yourdomain.com/privkey.pem"
}
}
],
"outbounds": [
{ "type": "direct", "tag": "direct" }
],
"route": { "final": "direct" }
}
Открывайте UoT TCP-порт только при использовании этого режима. Если uot отсутствует, MONO VPN использует обычную NaiveProxy-ветку для TCP-трафика и дополнительный listener не нужен.
Безопасность и эксплуатация
- Не публикуйте реальные пароли, root-учётные данные и долгоживущие общие ключи.
- Выдавайте уникальные учётные данные каждому пользователю или устройству.
- Отзывайте и ротируйте данные, когда пользователь уходит, ссылка утекла или срок доступа закончился.
- Обновляйте Caddy, sing-box, RouterOS, SoftEther или выбранный стек VPN.
- Ограничивайте management-порты по IP-источникам и отделяйте администрирование от VPN/proxy-портов.
ufw allow 443/tcp
ufw allow 443/udp
ufw allow 8443/tcp
Открывайте только порты, которые соответствуют вашей схеме. UDP 443 опционален и зависит от использования QUIC/HTTP3. TCP 8443 нужен только для примера с UDP-over-TCP.