Ай Лайн
Связаться
Отдел продаж +7 (812) 385-74-84
Время работы пн-пт с 9:00 до 18:00

SSTP-сервер на Accel-ppp

Есть 3 популярных решения:

accel-ppp - https://accel-ppp.org/

Похож на sstp-server, но немного сложнее в настройке, работает стабильно, он и использовался по итогу как конечное решение.

softether - https://www.softether.org/

Довольно комплексный сервис, сложный и в плане конфигурирования и обслуживания, видно, что используется legacy-архитектура, неудобен в работе

sstp-server - https://github.com/sorz/sstp-server.git

Самый простой в настройке, но не запустился на ubuntu22, не обновляется с 21 года

Accel-ppp

Установка на разных дистрибутивах (офф. документация): https://accel-ppp.org/

После установки выполняем настройку конфигурации:

nano /etc/accel-ppp.conf

Пример рассчитан на использование сертификатов от letsencrypt

Нужно заменить домен example.ru на необходимый в полях (при условии, что сертификат выпущен и файлы лежат в необходимой папке):

  • ssl-ca-file=/etc/letsencrypt/live/example.ru/fullchain.pem
  • ssl-pemfile=/etc/letsencrypt/live/example.ru/cert.pem
  • ssl-keyfile=/etc/letsencrypt/live/example.ru/privkey.pem

Пример запускается на порту:

  • port = 5443

Пример использует файл с логинами паролями:

  • chap-secrets=/etc/ppp/chap-secrets

Конфигурационный файл

[modules]
log_file
#log_syslog
#log_tcp
#log_pgsql

#pptp
#l2tp
#pppoe
#ipoe
sstp

auth_mschap_v2
#auth_mschap_v1
#auth_chap_md5
#auth_pap

#radius
chap-secrets

ippool

#pppd_compat

#shaper
#net-snmp
#logwtmp
#connlimit

#ipv6_nd
#ipv6_dhcp
#ipv6pool

[core]
log-error=/var/log/accel-ppp/core.log
thread-count=1

[common]
#single-session=replace
#single-session-ignore-case=0
#sid-case=upper
#sid-source=seq
#max-sessions=1000
#max-starting=0
#check-ip=0
#nl-snd-buffer=32768
#nl-rcv-buffer=1048576

[ppp]
verbose=1
min-mtu=1280
mtu=1400
mru=1400
#accomp=deny
#pcomp=deny
#ccp=0
#mppe=require
ipv4=require
ipv6=deny
ipv6-intf-id=0:0:0:1
ipv6-peer-intf-id=0:0:0:2
ipv6-accept-peer-intf-id=1
lcp-echo-interval=20
#lcp-echo-failure=3
lcp-echo-timeout=120
unit-cache=1
#unit-preallocate=1

[auth]
#timeout=5
#interval=0
#max-failure=3
#any-login=0
#noauth=0
#challenge-name=accel-ppp

[sstp]
verbose=1
port = 5443
cert-hash-proto=sha1,sha256
#cert-hash-sha1=
#cert-hash-sha256=
accept=ssl
ssl-protocol=tls1,tls1.1,tls1.2,tls1.3
#ssl-dhparam=/etc/ssl/dhparam.pem
#ssl-ecdh-curve=prime256v1
#ssl-ciphers=DEFAULT
#ssl-prefer-server-ciphers=0
ssl-ca-file=/etc/letsencrypt/live/example.ru/fullchain.pem
ssl-pemfile=/etc/letsencrypt/live/example.ru/cert.pem
ssl-keyfile=/etc/letsencrypt/live/example.ru/privkey.pem
#host-name=example.ru
http-error=allow
#timeout=60
#hello-interval=60
#ip-pool=sstp
#ipv6-pool=sstp
#ipv6-pool-delegate=sstp
ifname=sstp%d

[dns]
dns1=8.8.8.8
dns2=1.1.1.1

[wins]
#wins1=172.16.0.1
#wins2=172.16.1.1

[radius]
#dictionary=/usr/local/share/accel-ppp/radius/dictionary
#nas-identifier=accel-ppp
#nas-ip-address=127.0.0.1
#gw-ip-address=192.168.100.1
#server=127.0.0.1,testing123,auth-port=1812,acct-port=1813,req-limit=50,fail-timeout=0,max-fail=10,weight=1
#dae-server=127.0.0.1:3799,testing123
verbose=1
#timeout=3
#max-try=3
#acct-timeout=120
#acct-delay-time=0
#acct-delay-start=0
#acct-on=0
#acct-interim-interval=0
#acct-interim-jitter=0
#default-realm=
#strip-realm=0
#attr-tunnel-type=My-Tunnel-Type
#nas-port-id-in-req=1

[client-ip-range]
0.0.0.0/0

[ip-pool]
gw-ip-address=10.4.175.254
10.4.175.1-253
#vendor=Cisco
#attr=Cisco-AVPair
#attr=Framed-Pool
#192.168.0.2-255
#192.168.1.1-255,name=pool1
#192.168.2.1-255,name=pool2
#192.168.3.1-255,name=pool3
#192.168.4.1-255,name=pool4,next=pool1
#192.168.4.0/24

[log]
log-file=/var/log/accel-ppp/accel-ppp.log
log-emerg=/var/log/accel-ppp/emerg.log
log-fail-file=/var/log/accel-ppp/auth-fail.log
#log-debug=/dev/stdout
#syslog=accel-pppd,daemon
#log-tcp=127.0.0.1:3000
copy=1
#color=1
#per-user-dir=per_user
#per-session-dir=per_session
#per-session=1
level=3

[log-pgsql]
conninfo=user=log
log-table=log

[pppd-compat]
verbose=1
#ip-pre-up=/etc/ppp/ip-pre-up
ip-up=/etc/ppp/ip-up
ip-down=/etc/ppp/ip-down
#ip-change=/etc/ppp/ip-change
radattr-prefix=/var/run/radattr
#fork-limit=16

[chap-secrets]
gw-ip-address=localhost
chap-secrets=/etc/ppp/chap-secrets
#encrypted=0
#username-hash=md5

[shaper]
#attr=Filter-Id
#down-burst-factor=0.1
#up-burst-factor=1.0
#latency=50
#mpu=0
#mtu=0
#r2q=10
#quantum=1500
#moderate-quantum=1
#cburst=1534
#ifb=ifb0
up-limiter=police
down-limiter=tbf
#leaf-qdisc=sfq perturb 10
#leaf-qdisc=fq_codel [limit PACKETS] [flows NUMBER] [target TIME] [interval TIME] [quantum BYTES] [[no]ecn]
#rate-multiplier=1
#fwmark=1
#rate-limit=2048/1024
verbose=1

[cli]
verbose=1
telnet=127.0.0.1:2000
tcp=127.0.0.1:2001
#password=123
#sessions-columns=ifname,username,ip,ip6,ip6-dp,type,state,uptime,uptime-raw,calling-sid,called-sid,sid,comp,rx-bytes,tx-bytes,rx-bytes-raw,tx-bytes-raw,rx-pkts,tx-pkts

[snmp]
master=0
agent-name=accel-ppp

[connlimit]
limit=10/min
burst=3
timeout=60

Создаём файл с логинами\паролями для клиентов и добавляем данные формата:

  • user1 * user1pass * — пользователь user1 | используемый сервер любой | пароль user1pass | адрес отдаётся из пула с сервера sstp
nano /etc/ppp/chap-secrets

Выпускаем сертификат

Устанавливаем certbot (офф. документация пункты 1-6) - https://certbot.eff.org/instructions

Выпускаем сертификат (если порт 80 использует другое приложение, нужно использовать pre_hook и post_hook):

  • --pre-hook "systemctl stop service" - опционально, останавливает службу, занимающую 80 порт
  • --renew-hook "systemctl restart accel-ppp" - перезапускает сервис после выпуска новых сертификатов
  • --post-hook "systemctl start service" - опционально, запускает обратно службу, занимающую 80 порт
sudo certbot certonly --standalone -d example.ru --renew-hook "systemctl restart accel-ppp"
Оставить заявку