Top.Mail.Ru
Загрузка

Как настроить SSTP VPN-сервер на Linux с помощью SoftEther

SSTP остаётся востребованным вариантом VPN-подключения, особенно когда требуется обеспечить стабильный доступ из сетей с жёсткими ограничениями на трафик. В этой инструкции разберём, как установить и настроить SSTP VPN-сервер на Linux с помощью SoftEther — от установки серверного ПО и подготовки сертификата до запуска службы и подключения клиента. Отдельное внимание уделим настройкам systemd, поскольку именно они могут влиять на корректный запуск SoftEther в Linux.

1. Что такое SSTP и зачем он нужен

SSTP (Secure Socket Tunneling Protocol) — протокол виртуальной частной сети (VPN), предназначенный для безопасной передачи данных между удалённым клиентом и сервером. Для защиты соединения он использует TLS, то есть тот же криптографический механизм, который применяется при работе защищённых HTTPS-соединений.

Протокол SSTP был разработан компанией Microsoft как более безопасная и удобная альтернатива PPTP, а также некоторым сценариям использования L2TP/IPSec. Одно из главных практических преимуществ SSTP заключается в том, что он работает поверх TCP-порта 443. Этот порт обычно разрешён в корпоративных сетях, прокси и межсетевых экранах, поскольку широко используется HTTPS.

Для Linux существует несколько VPN-решений, однако поддержка SSTP на серверной стороне встречается значительно реже, чем поддержка OpenVPN, WireGuard или IPsec. Один из проектов, позволяющих организовать SSTP-сервер непосредственно на Linux, — SoftEther VPN Server.

В этом руководстве разберём полный процесс: от установки и компиляции SoftEther до создания виртуального хаба, пользователя, сертификата и включения SSTP.

2. SoftEther VPN: особенности решения

SoftEther VPN — свободно распространяемый кроссплатформенный VPN-сервер с открытым исходным кодом. Проект поддерживает сразу несколько VPN-протоколов и может работать на Windows, macOS и Linux.

Важное отличие SoftEther от специализированных VPN-серверов заключается именно в его мультипротокольности. Один сервер способен обслуживать разные типы VPN-подключений, в том числе SSTP.

Для рассматриваемого сценария SoftEther особенно интересен тем, что позволяет поднять SSTP-сервис на Linux, несмотря на то, что сам протокол исторически тесно связан с экосистемой Microsoft.

3. Подготовка Linux-сервера

SoftEther VPN Server распространяется в виде исходного кода, поэтому перед установкой потребуется собрать программу непосредственно на целевой системе.

На сервере должны присутствовать базовые инструменты компиляции и загрузки файлов:

  • wget — для скачивания исходного архива;
  • make — система сборки;
  • gcc — компилятор C;
  • binutils — набор инструментов для работы с бинарными файлами.

Для систем Debian и Ubuntu установим необходимые пакеты следующим образом:

sudo apt-get update
sudo apt-get install wget make gcc binutils

В системах Red Hat, Fedora, AlmaLinux и других RHEL-совместимых дистрибутивах используется yum:

sudo yum install wget make gcc binutils

После установки зависимостей сервер готов к загрузке и сборке SoftEther VPN Server.

4. Установка SoftEther VPN Server

Приведённая процедура проверялась на AlmaLinux 8 и Ubuntu 24.04. На других Linux-дистрибутивах последовательность действий в целом остаётся такой же, хотя названия пакетов и расположение некоторых системных файлов могут отличаться.

4.1. Загрузка исходного кода

SoftEther распространяется через официальный сайт проекта. На странице загрузки необходимо выбрать:

  1. компонент SoftEther VPN Server;
  2. операционную систему Linux;
  3. архитектуру процессора, соответствующую серверу.

После выбора подходящего зеркала можно получить прямую ссылку на архив с исходным кодом и загрузить его на сервер с помощью wget.

Например:

wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.44-9807-rtm/softether-vpnserver-v4.44-9807-rtm-2025.04.16-linux-x64-64bit.tar.gz

После загрузки распакуем архив командой tar:

tar xzvf softether-vpnserver-v4.44-9807-rtm-2025.04.16-linux-x64-64bit.tar.gz

Название архива зависит от выбранной версии SoftEther и архитектуры системы.

После распаковки появится каталог vpnserver, содержащий исходный код VPN-сервера.

4.2. Компиляция и установка

Переходим в каталог с исходными файлами:

cd vpnserver/

Запускаем процесс сборки:

make

Во время выполнения команды make необходимо внимательно следить за выводом в терминале. Если компилятор сообщит об отсутствии каких-либо зависимостей, соответствующие пакеты необходимо установить, после чего повторить сборку.

После успешной компиляции возвращаемся на уровень выше:

cd ..

Переместим готовый каталог SoftEther в стандартное место для локально устанавливаемого программного обеспечения:

sudo mv vpnserver /usr/local/

Теперь ограничим права доступа к файлам сервера:

sudo chmod -R 600 /usr/local/vpnserver/*
sudo chmod 700 /usr/local/vpnserver/vpnserver
sudo chmod 700 /usr/local/vpnserver/vpncmd

Такой набор разрешений не позволяет обычным пользователям свободно читать файлы конфигурации и одновременно оставляет исполняемыми основные бинарные файлы SoftEther.

4.3. Настройка SELinux

Если на RHEL-подобной системе SELinux работает в режиме Enforcing, контекст основного исполняемого файла может потребовать дополнительной настройки:

sudo chcon -Rv -u system_u -t bin_t /usr/local/vpnserver/vpnserver

После этого можно настроить автоматический запуск VPN-сервера вместе с системой.

4.4. Создание systemd-службы

Чтобы не запускать SoftEther вручную после каждой перезагрузки сервера, создадим unit-файл для systemd:

sudo nano /usr/lib/systemd/system/softether.service

Содержимое файла должно быть таким:

[Unit]
Description=SoftEther VPN Server
After=network.target auditd.service
ConditionPathExists=!/usr/local/vpnserver/do_not_run

[Service]
Type=forking
WorkingDirectory=/usr/local/vpnserver
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
KillMode=process
Restart=on-failure

# Hardening
PrivateTmp=yes
ProtectHome=yes
ProtectSystem=full
ReadOnlyDirectories=/
ReadWriteDirectories=-/usr/local/vpnserver
#CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SYS_NICE CAP_SYSLOG CAP_SETUID

[Install]
WantedBy=multi-user.target

Опцию "CapabilityBoundingSet" мне пришлось закомментировать, так как из-за неё служба не хотела запускаться.

После создания unit-файла необходимо сообщить systemd о новой службе:


sudo systemctl daemon-reload

Добавим SoftEther в автоматический запуск:

sudo systemctl enable softether

Запустим сервер:

sudo systemctl start softether

Проверим его состояние:

systemctl status softether

Если служба имеет статус active (running), SoftEther успешно запущен.

Если же systemctl status показывает ошибку, сначала необходимо найти и устранить её причину. Продолжать настройку VPN до исправления проблем со службой не рекомендуется.

5. Проверка установленного SoftEther

В комплект SoftEther VPN Server входит консольная утилита vpncmd. Она предназначена для администрирования сервера и позволяет выполнять различные диагностические операции.

В частности, существует команда check, которая проверяет, может ли SoftEther корректно работать в текущем окружении.

Запустим проверку:

/usr/local/vpnserver/vpncmd /TOOLS /CMD check

Если все необходимые проверки завершились успешно, можно переходить непосредственно к настройке VPN-сервера.

6. Первичная настройка SoftEther

После установки необходимо выполнить несколько базовых операций:

  1. задать пароль администратора;
  2. создать виртуальный хаб;
  3. включить механизм сетевой трансляции SecureNAT;
  4. создать пользователя;
  5. установить сертификат;
  6. испытать SSTP.

6.1. Подключение к серверу управления

Для перехода в режим администрирования VPN-сервера используем:

/usr/local/vpnserver/vpncmd /SERVER

Программа запросит: "Hostname or IP Address of Destination"

Поскольку настройка выполняется непосредственно на этом же сервере, поле можно оставить пустым и нажать Enter.

Затем попросит указать имя виртуального хаба: "Specify Virtual Hub Name"

Пока пользовательский хаб ещё не создан, это поле также можно оставить пустым.

При успешном подключении появится приглашение вида:

Connection has been established with VPN Server "localhost" (port 443).
You have administrator privileges for the entire VPN Server.
VPN Server>

Это означает, что консоль подключилась к локальному экземпляру SoftEther и получила права администратора всего VPN-сервера.

6.2. Установка пароля администратора

Первым делом защитим административную учётную запись:

VPN Server> ServerPasswordSet

Далее вам будет предложено ввести новый пароль и повторить его для подтверждения.

Пароль администратора следует сделать уникальным и достаточно сложным: он предоставляет полный контроль над конфигурацией SoftEther.

6.3. Создание виртуального хаба

Прежде чем создавать новый виртуальный хаб, надо убедиться что его ещё нет:

VPN Server> HubList

И только убедившись в его отсутствии создадим отдельный виртуальный хаб, который будет использоваться для SSTP-подключений:

VPN Server> HubCreate mysstphub

После выполнения команды система попросит задать пароль для созданного хаба. Удалить виртуальный хаб можно командой:

VPN Server> HubDelete

В ответ сервер запросит ввести имя виртуального хаба, который надо удалить.

В SoftEther виртуальный хаб можно связать с физической сетью несколькими способами. В простом сценарии удобно использовать SecureNAT. Этот механизм позволяет организовать сетевой доступ VPN-клиентов без отдельной настройки программного моста и одновременно предоставляет встроенный DHCP-сервис.

Перейдём в созданный хаб и включим SecureNAT:

VPN Server> Hub mysstphub n/
VPN Server/mysstphub> SecureNatEnable

После этого VPN-клиенты смогут получать сетевые параметры через встроенный механизм SecureNAT.

7. Создание VPN-пользователя

Пользователей можно добавлять в созданном виртуальном хабе следующей командой:

VPN Server/mysstphub> UserCreate username

Затем назначим ему пароль:

VPN Server/mysstphub> UserPasswordSet username

В ответ на вторую команду вас попросят ввести пароль пользователя и его подтверждение.

В дальнейшем именно эти учётные данные будут использоваться VPN-клиентом для авторизации к нашему SSTP серверу.

8. Настройка TLS-сертификата

SSTP использует TLS для защиты соединения, поэтому серверу необходим сертификат.

Если у администратора уже есть подходящий SSL/TLS-сертификат, его можно установить с помощью команды ServerCertSet.

Но будем откровенны и сразу же скажем, что для наших целей будет достаточно самоподписанного сертификата и поэтому сертификат будем генерировать средствами SoftEther.

VPN Server/SSTP> MakeCert2048 /CN= /O= /OU= /C= /ST= /L=

В ответ вам потребуется ввести серийный номер, к примеру 000

Serial Number of Certificate to Create (Hexadecimal): 000

Далее срок действия сертификата в днях (можно не жадничать):

Expiration Date of Certificate to Create (Days): 7300

Придумать имя для сертификата и приватного ключа:

File Name to Save Certificate to Create: myserver.cer
File Name to Save Private Key to Create: myserver.key


Полученный сертификат можно сохранить в локальный файл:

VPN Server/mysstphub> ServerCertGet ~/myserver.cer

Именно этот сертификат в дальнейшем понадобиться для установки на клиентские устройства и подключения их к серверу.

Для рабочего сервера предпочтительнее использовать корректный сертификат для доменного имени, выданный доверенным центром сертификации.

10. Проверка конфигурации

Перед завершением настройки полезно убедиться, что виртуальный хаб работает корректно.

Для этого выполним:

VPN Server/mysstphub> StatusGet

Команда выводит текущее состояние хаба и позволяет проверить, что конфигурация была применена. Для выхода из оболочки сервера можно использовать команду:

exit

либо сочетание клавиш:

Ctrl-C

Выполненные изменения сохраняются и применяются автоматически.

11. Настройка межсетевого экрана

По умолчанию SSTP использует TCP-порт 443. Поэтому недостаточно запустить SoftEther - входящие подключения на этот порт должны разрешаться сетевым экраном сервера и, если сервер находится за маршрутизатором или NAT, соответствующий порт должен быть доступен извне.

Для файрвола правило можно добавить следующей командой:

sudo ufw allow 443

После этого TCP-подключения к порту 443 не будут блокироваться правилами UFW.

Если сервер находится за внешним маршрутизатором, дополнительно потребуется настроить проброс **TCP 443** на IP-адрес Linux-сервера.

12. Подключение.

Для подключения к созданному серверу необходимо получить на устройство клиента сгенерированный сертификат. Самый простой способ - это использовать утилиту *scp*:

scp user@:/home/user/myserver.cer .

Дальше в зависимости от устройства. Для Windows:

  1. Кликаем по нему и устанавливаем его
  2. В Мастере импорта сертификатов отмечаем "Локальный компьютер", на следующем шаге "Поместить все сертификаты в следующее хранилище" и жмём "Обзор". Выбираем "Доверенные корневые сертификаты" - ОК. Готово.
  3. Открываем "Параметры сети и интернет" - VPN - Добавить VPN-подключение.
  4. В окне
    • Поставщик услуг VPN - Windows (встроенные)
    • Имя подключения - MyServer
    • Имя или адрес сервера -
    • Тип VPN - Протокол SSTP
    • Тип данных для входа - Имя пользователя и пароль
    • Имя - созданный пользователь
    • Пароль - пароль

Для Android:

  1. настройка телефона - поиск - ищем "Сертификат центра сертификации" - выбираем и устанавливаем скачанный сертификат
  2. с маркета устанавливаем Open SSTP Client
  3. на вкладке HOME
    • hostname
    • Username - созданный пользователь
    • Password - пароль
  4. на вкладке SETTINGS
    • Port Number 443,
    • Убираем галочку со строки Verify Hostname
    • DNS Server - Use Custom DNS Server прописать 8.8.8.8,
    • Routing - поставить галочку на Add Default Route

Для Linux:

  1. Установить networkmanager-vpn-plugin-sstp
  2. В настройках указать имя, пароль и сертификат.

13. Итог

Настройка SSTP на Linux с помощью SoftEther VPN Server состоит из нескольких последовательных этапов: установки необходимых инструментов, загрузки и компиляции SoftEther, регистрации сервиса в systemd, проверки работоспособности, создания виртуального хаба и пользователей, настройки SecureNAT и TLS-сертификата, а затем включения SSTP.

Ключевое преимущество SSTP в таком сценарии — использование TLS поверх TCP 443. Поскольку порт 443 является стандартным портом HTTPS, SSTP зачастую проще провести через корпоративные межсетевые экраны и сети с ограниченным набором разрешённых соединений.

При этом важно учитывать, что SoftEther не ограничивается одним SSTP: это мультипротокольная VPN-платформа, поэтому в дальнейшем тот же сервер можно использовать для других типов VPN-подключений.

Для тестовой среды достаточно самоподписанного сертификата. Для публичного VPN-сервиса целесообразно использовать сертификат, соответствующий реальному DNS-имени сервера, а также отдельно проверить настройки firewall, маршрутизации и SecureNAT.

В результате Linux-сервер превращается в полноценную точку доступа SSTP VPN, к которой удалённые пользователи могут подключаться по защищённому TLS-соединению через стандартный TCP-порт 443.

svg

Что вы думаете?

Показать комментарии / Оставить комментарий

Комментировать

svg
Быстрая навигация
  • 01

    Как настроить SSTP VPN-сервер на Linux с помощью SoftEther