Подключение к SSTP-серверу из под Linux

()

SSTP (Secure Socket Tunneling Protocol) это VPN протокол, использующий PPP поверх HTTPS. Впервые представлен в Windows Server 2008. В альтернативных операционных системах SSTP формально не поддерживается, однако на SourceForge есть проект реализации Linux клиента для SSTP. О нём и пойдёт речь далее.

Начиная с этого абзаца должна была идти инструкция по компиляции из исходных текстов, но автор проекта кроме собственно SSTP-клиента развивает так же модуль для NetworkManager и предоставляет PPA-репозиторий для Ubuntu с актуальными версиями обоих проектов. В итоге установка сводится к следующим командам:

sudo add-apt-repository ppa:eivnaes/network-manager-sstp
sudo apt update
sudo apt install sstp-client network-manager-sstp

На машине без графического интерфейса модуль для NetworkManager устанавливать не обязательно. На машине с графическим интерфейсом остаётся только штатными средствами NetworkManager создать SSTP-соединение и подключиться.

Окно настройки SSTP-соединения в KDE Network Manager

На машине без графического интерфейса настройка немного сложнее, но в целом похожа на настройку PPTP-соединения. Допустим нам надо соединиться с сервером "sstp.example.com", используя логин "bsimpson" и пароль "K4rambA".

Для начала придумаем имя соединению. Например "sstpcon1". Следующим шагом нужно добавить в файл "/etc/ppp/chap-secrets" строку:

bsimpson sstpcon1 K4rambA *

После этого создаём файл "/etc/ppp/peers/sstpcon1" следующего содержания:

# Команда запуска sstpc. За детальным описанием параметров стоит обратиться к документации.
# Здесь же отметим только самое важное:
# --cert-warn - не является обязательным, но нужен если сервер использует самоподписанный сертификат
# --save-server-route - не обязателен, но нужен если вы хотите завернуть весь трафик в тоннель
pty             "sstpc --cert-warn --save-server-route --ipparam sstpcon1 --nolaunchpppd sstp.example.com"

# Будем менять шлюз по умолчанию (заворачивать весь траффик в тоннель)
defaultroute
replacedefaultroute

# Будем использовать DNS-сервера, предложенные SSTP-сервером
usepeerdns

# Логин на сервере
name            bsimpson

# Явно указываем тип авторизации MS CHAP v2
require-mschap-v2
refuse-pap
refuse-eap
refuse-chap
refuse-mschap

# Имя соединения для поиска пароля в файле chap-secrets
remotename      sstpcon1

# Прочие параметры (см. man pppd)
ipparam         sstpcon1
plugin          sstp-pppd-plugin.so
sstp-sock       /var/run/sstpc/sstpc-sstpcon1
noauth
lock
nobsdcomp
nodeflate

После этого соединение можно поднять командой:

pon sstpcon1

Если возникли какие-то проблемы то стоит запустить соединение в режиме отладки командой:

pon sstpcon1 debug dump logfd 2 nodetach

И дальше анализировать полученную информацию. Разорвать соединение можно командой:

poff sstpcon1

Если необходимо проверять подлинность сервера с помощью сертификата то необходимо передать sstpc параметр "--ca-cert", а если необходимо использование прокси-сервера то его можно указать с помощью параметра "--proxy". Все подробности в документации SSTP Client.

На этом всё. Приятной работы!

Ключевые слова: sstp, pppd, vpn, networkmanager network manager.

Подписаться на обновления: RSS-лента Канал в TamTam Telegram канал Канал в ICQ

Комментарии:

Anonymous 2019-09-18 00:56:45 (#)

sstpc --user user --password password --tls-ext sstp.testserver.com noauth вполне достаточно

Anonymous 2021-11-08 16:06:46 (#)

Всем доброго дня!
Наконец настала необходимость поднять на Linux-машинке sstp-клиент, для связи с кинетиком на даче, который является сетеобразующим для системы видеонаблюдения.
Делал по инструкции в данной статье, на бунте и дебиане, но не поднимается сессия. Никак!
Соединение сбрасывается, вывод такой:
using channel 1
Using interface ppp0
Connect: ppp0 <--> /dev/pts/1
sent [LCP ConfReq id=0x1 <mru 1492> <asyncmap 0x0> <magic 0x78cb3e35> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <mru 1492> <asyncmap 0x0> <magic 0x78cb3e35> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <mru 1492> <asyncmap 0x0> <magic 0x78cb3e35> <pcomp> <accomp>]
Modem hangup
Connection terminated.
Script sstpc --cert-warn --save-server-route --ipparam myconnection --log-level 5 --nolaunchpppd xxxxxx.keenetic.xxxx finished (pid 679), status = 0xff

Как только не изгалялся, подсовывал в командную строку разные параметры, добавлял, удалял и т.п.
Поднять соединение получается только по способу автора предыдущего комментария:
sstpc --user user --password password --tls-ext sstp.testserver.com noauth &

Подскажите, чяднт? :)

Anonymous 2021-11-08 16:11:53 (#)

В дополнение:
Вроде получилось поднять соединение заменив в конфиге параметр name на user, и докинув в командную строку --tls-ext.

Anonymous 2021-11-26 07:30:56 (#)

Спасибо за статью! А как задать маршруты при подключении, если мы не используем defaultroute.

Anonymous 2021-12-12 18:19:16 (#)

>>Спасибо за статью! А как задать маршруты при подключении, если мы не используем defaultroute.
[ipv4]
dns-search=
ignore-auto-dns=true
ignore-auto-routes=true
method=auto
never-default=true
route1=ip_connect.xxx.xxx.xxx/32,ip_gateway.xxx.xxx.xxx,104
я свои настройки показал, замените на то что Вам надо
у меня прокинуто к одной машине внутри сети, а уже через неё делаю что нужно. Вам, возможно надо роут в сеть а не к конкретной машине

namratha seo 2022-09-09 20:01:09 (#)

thanks for sharing the info..

Konstantin Alexeev 2022-09-11 18:20:49 (#)

Благодарю за статью, долго искал вменяемый мануал ;)

Anonymous 2023-03-29 23:38:34 (#)

Спасибо. Работает!
Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2024 Вадим Калинников aka MooSE
Политика конфиденциальности