SSTP-сервер через SoftEther на Ubuntu 24.04: установка
Если на работе или в отеле режут UDP и любые протоколы, кроме HTTPS, обычный WireGuard или OpenVPN просто не поднимется — DPI видит характерный трафик и рвёт соединение. SSTP решает эту проблему иначе: он целиком заворачивается в TLS на 443-м порту и снаружи выглядит как обычный HTTPS-сеанс к сайту. Плюс он встроен в Windows начиная с Vista SP1 — клиенту не нужно ничего ставить, только штатный «Добавить VPN-подключение». Дальше — как включить SSTP-листенер в SoftEther на чистом Ubuntu 24.04, выпустить под него сертификат и не упереться в типичные грабли.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое SSTP и почему это удобно для обхода firewall
SSTP (Secure Socket Tunneling Protocol) — протокол Microsoft, который инкапсулирует PPP-кадры внутри HTTPS-соединения на TCP 443. С точки зрения любого firewall или прокси на пути это просто TLS-сессия к серверу — тот же порт и тот же паттерн, что у обычного сайта. В отличие от WireGuard (UDP, легко детектируется и блокируется по паттерну пакетов) или OpenVPN на нестандартном порту, SSTP почти никогда не попадает под правила блокировки корпоративных и публичных сетей, которые режут «всё, кроме 443».
Второй плюс — нулевые требования к клиенту. В Windows 10/11 SSTP поддерживается на уровне ОС: rasdial, PowerShell-командлеты Add-VpnConnection, GUI в «Параметры → Сеть → VPN». Это критично там, где у пользователя нет прав ставить сторонний софт (корпоративные ноутбуки с ограничениями групповых политик), но встроенный VPN-клиент Windows разрешён.
Минусы тоже есть: SSTP — протокол только для Windows-клиентов (macOS/Linux/iOS/Android его нативно не поддерживают, нужен сторонний клиент вроде stunnel+PPP, что неудобно), и он требует доверенного TLS-сертификата — с самоподписанным сертификатом штатный клиент Windows подключаться откажется без танцев с бубном. Если нужен кросс-платформенный вариант поверх 443, посмотрите на OpenVPN на VPS с TCP-режимом или сравните протоколы в статье WireGuard или OpenVPN — что выбрать для сервера. SoftEther же берём потому, что он реализует SSTP «из коробки» — не нужно городить отдельный демон, только включить функцию на уже поднятом сервере.
Быстрая установка SoftEther VPN Server на Ubuntu 24.04
Если SoftEther уже стоит — переходите к следующему разделу. Если с нуля — вот минимальный путь для Ubuntu 24.04. Подробный разбор всех веток установки и SecureNAT есть в отдельной статье SoftEther VPN на Ubuntu 24.04: пошаговая установка, здесь — сжатая версия под наш сценарий.
sudo apt update && sudo apt install -y build-essential libssl-dev libreadline-dev \
zlib1g-dev libncurses5-dev cmake wget
cd /usr/local/src
sudo wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.44-9807-rtm/softether-vpnserver-v4.44-9807-rtm-2024.02.16-linux-x64-64bit.tar.gz
sudo tar xzf softether-vpnserver-*.tar.gz
cd vpnserver
sudo make
Точную ссылку на актуальный релиз сверьте на странице softether-download.com — версии там меняются, ниже указана лишь для примера. После сборки — установка как systemd-сервиса:
sudo mv /usr/local/src/vpnserver /usr/local/vpnserver
sudo chmod 600 /usr/local/vpnserver/*
sudo chmod 700 /usr/local/vpnserver/vpnserver /usr/local/vpnserver/vpncmd
# /etc/systemd/system/vpnserver.service
[Unit]
Description=SoftEther VPN Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now vpnserver
Сразу задайте пароль администратора и зайдите в консоль управления:
cd /usr/local/vpnserver
sudo ./vpncmd localhost /SERVER
При первом запуске выберите пункт для команды ServerPasswordSet и задайте пароль — без него любой в локальной сети сможет получить полный доступ к серверу.
Арендуйте сервер под свои задачи!
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверБазовая настройка: HUB, пользователь, SecureNAT
Дальше работаем внутри интерактивной сессии vpncmd (запуск как выше, Enter на запрос имени хаба — это переводит в режим администрирования сервера).
ServerPasswordSet
HubCreate SSTP_HUB
Введите пароль хаба, затем переключитесь в его контекст и создайте пользователя с паролем:
Hub SSTP_HUB
UserCreate vpnuser /GROUP:none /REALNAME:none /NOTE:none
UserPasswordSet vpnuser
SecureNatEnable
SecureNatEnable включает встроенный NAT/DHCP хаба — клиенты после подключения сразу получают адрес и выход в интернет без настройки отдельного роутинга на хосте. Для продакшена стоит ограничить, кому разрешён коннект: посмотрите UserList, UserSet и списки доступа хаба, если пользователей несколько.
Домен и TLS-сертификат для SSTP
SSTP жёстко завязан на доверенный сертификат: штатный клиент Windows проверяет цепочку до корневого CA и при самоподписанном сертификате просто откажется подключаться (можно обойти реестром, но это плохая практика для продакшн-сервера). Поэтому нужен домен, указывающий A-записью на IP сервера, и сертификат Let's Encrypt.
Порт 80 на сервере обычно свободен (SoftEther его не занимает), поэтому проще всего standalone-режимом certbot:
sudo apt install -y certbot
sudo systemctl stop vpnserver # если 443 уже занят SoftEther — на всякий случай
sudo certbot certonly --standalone -d vpn.example.com
sudo systemctl start vpnserver
Сертификат и ключ окажутся в /etc/letsencrypt/live/vpn.example.com/fullchain.pem и privkey.pem — SoftEther принимает их в формате PEM напрямую. Загружаем в vpncmd (снова корневой контекст сервера, не хаба):
ServerCertSet /LOADCERT:/etc/letsencrypt/live/vpn.example.com/fullchain.pem /LOADKEY:/etc/letsencrypt/live/vpn.example.com/privkey.pem
Если у вашей сборки vpncmd команда запускается в интерактивном режиме без параметров — просто выполните ServerCertSet и по очереди введите пути к файлу сертификата и файлу ключа, когда попросит.
Продление certbot по крону не остановит SoftEther и сам сертификат в него не перезальёт — нужен hook, который после renew заново выполняет ServerCertSet и, при необходимости, перезапускает сервис:
sudo tee /etc/letsencrypt/renewal-hooks/deploy/softether-cert.sh << 'EOF'
#!/bin/bash
/usr/local/vpnserver/vpncmd localhost /SERVER /PASSWORD:ваш_пароль /CMD ServerCertSet /LOADCERT:/etc/letsencrypt/live/vpn.example.com/fullchain.pem /LOADKEY:/etc/letsencrypt/live/vpn.example.com/privkey.pem
EOF
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/softether-cert.sh
Пароль в открытом виде в скрипте — не идеально, но для одиночного сервера обычно приемлемо; если хотите строже — заведите отдельного пользователя vpncmd с правами только на сертификат, либо храните пароль в файле с правами 600 и подставляйте через cat.
Включение SSTP-листенера
Сама функция SSTP и её порты включаются одной командой в контексте сервера (не хаба) — она же управляет клоном OpenVPN-сервера, поэтому у неё два независимых флага:
OpenVpnSstpEnable /OPENVPN:no /SSTP:yes /PORTS:1194
/OPENVPN:no отключает встроенный клон OpenVPN, если он не нужен — оставьте yes, если хотите поднять оба варианта параллельно. /PORTS относится только к OpenVPN-клону (UDP), на SSTP не влияет — он всегда слушает через уже открытые HTTPS-порты сервера.
Проверьте, что порт 443 действительно в списке слушателей:
ListenerList
Если 443 отсутствует — добавьте:
ListenerCreate 443
На уровне ОС откройте порт в firewall и убедитесь, что его больше никто не занимает (частая ошибка — на том же сервере крутится nginx или другая панель на 443):
sudo ufw allow 443/tcp
sudo ss -tlnp | grep 443
В выводе ss на 443 должен быть только процесс vpnserver. Если там же виден nginx или apache2 — SSTP слушатель не поднимется, нужно либо освободить порт, либо развести сервисы по разным IP.
Подключение с Windows штатным клиентом
На стороне клиента дополнительный софт не нужен — только штатные средства Windows 10/11.
Через GUI: «Параметры → Сеть и Интернет → VPN → Добавить VPN-подключение». Поставщик — «Windows (встроенные)», тип VPN — «Secure Socket Tunneling Protocol (SSTP)», адрес сервера — ваш домен (vpn.example.com), тип входа — имя пользователя и пароль, которые вы создали командой UserCreate/UserPasswordSet.
Через PowerShell — быстрее для повторного разворачивания на нескольких машинах:
Add-VpnConnection -Name "SSTP-Work" -ServerAddress "vpn.example.com" `
-TunnelType Sstp -EncryptionLevel Required `
-AuthenticationMethod MSChapv2 -RememberCredential -AllUserConnection
rasdial "SSTP-Work" vpnuser ваш_пароль
Первое подключение может занять на несколько секунд дольше обычного — Windows проверяет цепочку сертификата целиком, включая OCSP-запрос к CA Let's Encrypt. Если сеть, из которой подключается клиент, сама блокирует исходящий доступ к серверам проверки отзыва сертификатов, коннект может подвисать — это стоит иметь в виду при диагностике, а не сразу списывать на сам SoftEther.
Диагностика типичных проблем
| Симптом | Вероятная причина | Что проверить | |
|---|---|---|---|
| Windows пишет «Не удалось проверить удостоверение сервера» | Сертификат не от доверенного CA или не совпадает домен | openssl s_client -connect vpn.example.com:443 -servername vpn.example.com, сверить CN/SAN | |
| Подключение виснет на «Проверка учётных данных» | Неверный логин/пароль, либо пользователь не в том хабе | UserList в контексте Hub SSTP_HUB, пересоздать пароль UserPasswordSet | |
| Порт 443 недоступен снаружи | Firewall на сервере или у провайдера, конфликт с другим сервисом | `ss -tlnp \ | grep 443, ufw status, проверка с другого хоста nc -zv vpn.example.com 443` |
| Ошибка 0x800704C9 / «Учётная запись отключена» | Аккаунт заблокирован политикой или истёк | UserGet vpnuser — проверить срок действия и флаги | |
| Подключается, но нет интернета у клиента | SecureNAT не включён или упал | SecureNatStatusGet в контексте хаба, при необходимости SecureNatEnable заново | |
После certbot renew клиенты перестали подключаться | Hook не перезалил сертификат в SoftEther | Проверить /var/log/letsencrypt/letsencrypt.log, вручную выполнить ServerCertSet |
Логи самого SoftEther лежат в /usr/local/vpnserver/server_log/ — по одному файлу на день, туда пишутся и неудачные попытки подключения с указанием причины отказа, это обычно быстрее, чем гадать по клиентской ошибке в Windows.
Арендуйте сервер под свои задачи!
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Можно ли подключиться к SSTP с macOS или Linux?
Нативной поддержки нет — Windows реализует протокол на уровне ОС, остальные системы требуют сторонних клиентов (например, связки stunnel + pppd), что заметно менее удобно, чем WireGuard или OpenVPN на этих платформах.
Обязательно ли покупать домен ради Let's Encrypt?
Практически да — без валидного домена, указывающего на сервер, получить бесплатный доверенный сертификат не получится, а без него штатный клиент Windows будет ругаться на каждое подключение.
SSTP медленнее WireGuard?
Возможно, за счёт накладных расходов TLS и PPP-инкапсуляции, но на канале в десятки–сотни Мбит/с разница обычно не критична для повседневной работы; точные цифры зависят от железа сервера и канала, ориентируйтесь на собственный тест, а не на чужие бенчмарки.
Что будет, если сертификат Let's Encrypt истечёт?
Клиенты не смогут установить TLS-сессию и получат ошибку проверки сертификата ещё до ввода пароля — поэтому автопродление с деплой-хуком, который перезаливает сертификат в SoftEther, обязательно для продакшена.
Нужно ли отдельно открывать порты для L2TP или OpenVPN, если нужен только SSTP?
Нет, для чистого SSTP-сценария достаточно порта 443 — остальные функции (IPsecEnable, отдельные UDP-порты OpenVPN) можно не включать вовсе, это снизит и площадь атаки на сервер.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →