SSTP Server - SSL VPN over Port 443
SSTP Server - SSL VPN over Port 443
Overview
SSTP (Secure Socket Tunneling Protocol) is a proprietary VPN protocol developed by Microsoft that carries PPP traffic over a secured SSL/TLS channel. SSTP is an excellent choice for organizations with strict firewall restrictions, because it uses the standard HTTPS port (TCP 443).
Key advantages of SSTP
- Firewall traversal - uses TCP port 443 (HTTPS), which lets it pass through virtually any corporate firewall and NAT
- Strong security - uses SSL/TLS for authentication and encryption, providing protection at the transport layer
- Windows compatibility - built-in support in Windows Vista and later without the need to install additional software
- Stable connection - uses TCP, ensuring reliable packet delivery
- Simple setup - relatively simple configuration on both the server and the client
Technical characteristics
- Transport protocol: TCP port 443
- Tunneling: PPP over SSL/TLS
- Encryption: SSL/TLS (typically TLS 1.2 or higher)
- Authentication: PAP, CHAP, MSCHAP, MSCHAPv2
- IPv6 support: Yes
- Backend in VyOS: accel-ppp
SSTP architecture
┌─────────────────┐ ┌─────────────────┐
│ SSTP Client │ │ SSTP Server │
│ │ │ │
│ ┌───────────┐ │ SSL/TLS Handshake (TCP 443) │ ┌───────────┐ │
│ │ PPP │ │ ────────────────────────────────> │ PPP │ │
│ │ Session │ │ │ Session │ │
│ └─────┬─────┘ │ Encrypted PPP over HTTPS │ └─────┬─────┘ │
│ │ │ <───────────────────────────────> │ │ │
│ ┌─────▼─────┐ │ │ ┌─────▼─────┐ │
│ │ SSL/TLS │ │ Certificate Validation │ │ SSL/TLS │ │
│ │ Transport │ │ ────────────────────────────────> │ Transport │ │
│ └─────┬─────┘ │ │ └─────┬─────┘ │
│ │ │ │ │ │
│ ┌─────▼─────┐ │ TCP Connection (port 443) │ ┌─────▼─────┐ │
│ │ TCP │ │ <───────────────────────────────> │ TCP │ │
│ │ 443 │ │ │ 443 │ │
│ └───────────┘ │ │ └───────────┘ │
└─────────────────┘ └─────────────────┘Use cases
SSTP is recommended when:
- Access is needed through strict corporate firewalls that block all ports except 80 and 443
- Clients are predominantly Windows
- A stable VPN connection is required without additional software on Windows clients
- Integration with an existing PKI infrastructure is needed
- Compatibility with RADIUS for centralized authentication is critical
SSTP is NOT recommended when:
- Maximum performance is required (UDP-based protocols are faster)
- Most clients run Linux/macOS (OpenVPN or WireGuard is a better fit)
- Protocol openness and auditability are critical (SSTP is proprietary)
- Support for mobile platforms iOS/Android is needed (IKEv2 or OpenVPN is better)
System requirements
VyOS server requirements
- VyOS 1.3 or higher (1.4 or 1.5 recommended)
- At least 512 MB RAM (1 GB recommended for 50+ concurrent connections)
- Access to TCP port 443 from the external network
- A configured PKI infrastructure or the ability to generate self-signed certificates
Client requirements
- Windows: Vista SP1 and later (built-in client)
- Linux: sstp-client (requires installation)
- macOS: no built-in support (third-party software required)
- Android/iOS: limited support through third-party apps
Network requirements
- Inbound traffic allowed on TCP port 443
- NAT transparency (SSTP works through NAT)
- A sufficient pool of IP addresses for VPN clients
- Configured routing for access to internal resources
Configuring SSL/TLS certificates
SSTP requires an SSL/TLS certificate to secure the connection. VyOS supports both using its own PKI infrastructure and importing external certificates.
Option 1: Using the built-in VyOS PKI
Step 1: Creating your own Certificate Authority (CA)
# Generate the CA private key and certificate
generate pki ca install VPN-CA
# Optional: view the created CA
show pki ca VPN-CAThis command creates:
- The CA private key (2048-bit RSA by default)
- A self-signed CA certificate
- Installs them into the VyOS configuration
Step 2: Generating the server certificate
# Generate a certificate for the SSTP server signed by our CA
generate pki certificate sign VPN-CA install SSTP-Server
# Optional: view the created certificate
show pki certificate SSTP-ServerThis command creates a server certificate signed by your CA.
Step 3: Generating a certificate with additional parameters
For a production environment, it is recommended to specify additional parameters:
# Generate a CA with specified parameters
generate pki ca install VPN-CA \
common-name "OpenNix VPN CA" \
country "RU" \
state "Moscow" \
locality "Moscow" \
organization "OpenNix" \
organizational-unit "IT Security"
# Generate a server certificate with Subject Alternative Names
generate pki certificate sign VPN-CA install SSTP-Server \
common-name "vpn.example.com" \
country "RU" \
state "Moscow" \
locality "Moscow" \
organization "OpenNix" \
organizational-unit "IT Security" \
subject-alt-name "vpn.example.com" \
subject-alt-name "sstp.example.com"Important: Subject Alternative Names (SAN) are critically important for modern clients that verify that the server name matches the certificate.
Option 2: Importing existing certificates
If you already have certificates from a commercial CA (Let’s Encrypt, Sectigo, DigiCert, etc.):
# Enter configuration mode
configure
# Import the CA certificate
set pki ca Public-CA certificate "-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKL0UG+mRkmUMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
...
-----END CERTIFICATE-----"
# Import the server certificate
set pki certificate SSTP-Server certificate "-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKL0UG+mRkmUMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
...
-----END CERTIFICATE-----"
# Import the certificate private key
set pki certificate SSTP-Server private key "-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDH...
...
-----END PRIVATE KEY-----"
# Save the configuration
commit
saveOption 3: Using Let’s Encrypt
For public VPN servers, you can use free Let’s Encrypt certificates:
# On VyOS, install certbot (in operational mode)
sudo apt update
sudo apt install certbot
# Obtain a certificate (make sure port 80 is available)
sudo certbot certonly --standalone -d vpn.example.com
# Certificates will be saved to:
# /etc/letsencrypt/live/vpn.example.com/fullchain.pem
# /etc/letsencrypt/live/vpn.example.com/privkey.pem
# /etc/letsencrypt/live/vpn.example.com/chain.pem
# Import into the VyOS PKI
configure
# Import the CA chain
set pki ca LetsEncrypt certificate "$(cat /etc/letsencrypt/live/vpn.example.com/chain.pem)"
# Import the server certificate
set pki certificate SSTP-Server certificate "$(cat /etc/letsencrypt/live/vpn.example.com/cert.pem)"
# Import the private key
set pki certificate SSTP-Server private key "$(cat /etc/letsencrypt/live/vpn.example.com/privkey.pem)"
commit
saveImportant: Let’s Encrypt certificates are valid for 90 days and require automatic renewal.
Verifying installed certificates
# Show all installed CAs
show pki ca
# Show all installed certificates
show pki certificate
# Show the details of a specific certificate
show pki certificate SSTP-Server
# Check the certificate validity period
show pki certificate SSTP-Server | grep "Valid"Exporting the CA certificate for clients
Clients must trust your CA (if you are using your own PKI):
# Show the CA certificate in PEM format
show pki ca VPN-CA certificate pem
# Save to a file (in operational mode)
show pki ca VPN-CA certificate pem | sudo tee /tmp/vpn-ca.crtThen distribute the /tmp/vpn-ca.crt file to clients so they can import it into their trusted certificate stores.
Basic SSTP server configuration
Minimal working configuration
configure
# Configure SSL certificates
set vpn sstp ssl ca-certificate 'VPN-CA'
set vpn sstp ssl certificate 'SSTP-Server'
# Configure authentication
set vpn sstp authentication mode 'local'
set vpn sstp authentication local-users username 'testuser' password 'SecurePass123!'
# Configure IP addressing for clients
set vpn sstp client-ip-pool SSTP-POOL range '10.100.0.10-10.100.0.100'
set vpn sstp gateway-address '10.100.0.1'
# Configure DNS servers for clients
set vpn sstp name-server '8.8.8.8'
set vpn sstp name-server '8.8.4.4'
# Apply the configuration
commit
save
exitOnce the configuration is applied, the SSTP server will listen on port 443 and be ready to accept connections.
Verifying server operation
# Check that the service is running
show vpn sstp-server sessions
# Check the status of the system service
sudo systemctl status accel-ppp@sstp
# Check that the port is being listened on
sudo netstat -tlnp | grep 443Authentication methods
Local authentication
Local authentication stores user credentials directly in the VyOS configuration.
Basic setup with local users
configure
# Enable local authentication mode
set vpn sstp authentication mode 'local'
# Add users
set vpn sstp authentication local-users username 'john' password 'JohnPass123!'
set vpn sstp authentication local-users username 'mary' password 'MarySecure456!'
set vpn sstp authentication local-users username 'admin' password 'AdminP@ssw0rd!'
# Optional: assign a static IP to a specific user
set vpn sstp authentication local-users username 'admin' static-ip '10.100.0.10'
# Optional: rate-limit a user
set vpn sstp authentication local-users username 'john' rate-limit download '10000'
set vpn sstp authentication local-users username 'john' rate-limit upload '5000'
commit
savePPP authentication protocols
SSTP supports several PPP authentication protocols:
configure
# Allow only MSCHAPv2 (recommended, the most secure)
set vpn sstp authentication protocols 'mschap-v2'
# Allow MSCHAP and MSCHAPv2
set vpn sstp authentication protocols 'mschap'
set vpn sstp authentication protocols 'mschap-v2'
# Allow CHAP (less secure)
set vpn sstp authentication protocols 'chap'
# Allow PAP (insecure, for testing only)
set vpn sstp authentication protocols 'pap'
commit
saveSecurity recommendations:
- Use only
mschap-v2for production environments - Avoid
pap- passwords are transmitted in plaintext chapis acceptable but less secure thanmschap-v2
RADIUS authentication
RADIUS allows you to centrally manage users and access policies.
Basic RADIUS setup
configure
# Enable RADIUS authentication
set vpn sstp authentication mode 'radius'
# Configure the primary RADIUS server
set vpn sstp authentication radius server 192.168.1.10 key 'RadiusSecret123'
set vpn sstp authentication radius server 192.168.1.10 port '1812'
# Configure the backup RADIUS server
set vpn sstp authentication radius server 192.168.1.11 key 'RadiusSecret123'
set vpn sstp authentication radius server 192.168.1.11 port '1812'
# Optional: configure timeouts
set vpn sstp authentication radius timeout '5'
set vpn sstp authentication radius acct-timeout '3'
# Optional: configure the number of retries
set vpn sstp authentication radius max-try '3'
# Optional: enable RADIUS accounting
set vpn sstp authentication radius acct-port '1813'
commit
saveRADIUS with dynamic attributes
RADIUS can pass additional parameters for users:
configure
# Allow the RADIUS server to assign IP addresses
set vpn sstp authentication radius dynamic-author server '192.168.1.10'
set vpn sstp authentication radius dynamic-author key 'DynAuthSecret'
# Configure the source IP for RADIUS requests
set vpn sstp authentication radius source-address '192.168.1.1'
commit
saveRADIUS attributes supported by accel-ppp:
Framed-IP-Address- static IP for the clientFramed-Route- routes for the clientFramed-IP-Netmask- subnet maskSession-Timeout- maximum session durationIdle-Timeout- inactivity timeoutAcct-Interim-Interval- accounting update interval
Example FreeRADIUS configuration
On the FreeRADIUS server side (/etc/freeradius/3.0/clients.conf):
client vyos-sstp {
ipaddr = 192.168.1.1
secret = RadiusSecret123
shortname = vyos-sstp-server
nas_type = other
}Users file (/etc/freeradius/3.0/users):
john Cleartext-Password := "JohnPass123!"
Framed-IP-Address = 10.100.0.50,
Session-Timeout = 28800
mary Cleartext-Password := "MarySecure456!"
Framed-IP-Address = 10.100.0.51,
Acct-Interim-Interval = 300Combined authentication
VyOS supports fallback from RADIUS to local authentication:
configure
# Primary method - RADIUS
set vpn sstp authentication mode 'radius'
set vpn sstp authentication radius server 192.168.1.10 key 'RadiusSecret123'
# Fall back to local authentication if RADIUS is unavailable
set vpn sstp authentication local-users username 'emergency' password 'EmergencyAccess!'
commit
saveConfiguring IP address pools
IPv4 addressing
Simple address range
configure
# Define an address pool for clients
set vpn sstp client-ip-pool SSTP-POOL range '10.100.0.10-10.100.0.100'
# Specify the gateway address (the server's address on the VPN network)
set vpn sstp gateway-address '10.100.0.1'
commit
saveMultiple address pools
configure
# Pool for regular users
set vpn sstp client-ip-pool USERS range '10.100.1.10-10.100.1.100'
# Pool for administrators
set vpn sstp client-ip-pool ADMINS range '10.100.2.10-10.100.2.20'
# Pool for guest access
set vpn sstp client-ip-pool GUESTS range '10.100.3.10-10.100.3.50'
# Gateway address
set vpn sstp gateway-address '10.100.0.1'
commit
saveWhen using RADIUS, pools can be assigned dynamically through the Framed-Pool attribute.
Using subnets instead of ranges
configure
# Define a pool via a subnet
set vpn sstp client-ip-pool SUBNET subnet '10.100.10.0/24'
# Gateway address
set vpn sstp gateway-address '10.100.10.1'
commit
saveIPv6 addressing
SSTP fully supports IPv6 for VPN clients.
Basic IPv6 setup
configure
# Enable IPv6 support
set vpn sstp ppp-options ipv6 'allow'
# Define an IPv6 pool for clients
set vpn sstp client-ipv6-pool IPv6-POOL prefix '2001:db8:1000::/48' mask '64'
# Optional: delegate prefixes to clients
set vpn sstp client-ipv6-pool IPv6-POOL delegate '2001:db8:2000::/48' delegation-prefix '56'
commit
saveThis configuration:
- Assigns each client an IPv6 address from the
2001:db8:1000::/48prefix with a/64mask - Optionally delegates a
/56prefix to the client from the2001:db8:2000::/48range
Dual-stack (IPv4 + IPv6)
configure
# IPv4 configuration
set vpn sstp client-ip-pool SSTP-V4 range '10.100.0.10-10.100.0.100'
set vpn sstp gateway-address '10.100.0.1'
# IPv6 configuration
set vpn sstp ppp-options ipv6 'allow'
set vpn sstp client-ipv6-pool SSTP-V6 prefix '2001:db8:1000::/48' mask '64'
# DNS servers for both protocols
set vpn sstp name-server '8.8.8.8'
set vpn sstp name-server '2001:4860:4860::8888'
commit
saveForcing the use of IPv6
configure
# Require IPv6 (reject clients without IPv6 support)
set vpn sstp ppp-options ipv6 'require'
# Alternatively: prefer IPv6 but allow IPv4
set vpn sstp ppp-options ipv6 'prefer'
commit
saveDNS and WINS servers
Configuring DNS servers
configure
# Assign DNS servers to clients
set vpn sstp name-server '8.8.8.8'
set vpn sstp name-server '8.8.4.4'
# Or use internal DNS servers
set vpn sstp name-server '192.168.1.10'
set vpn sstp name-server '192.168.1.11'
# IPv6 DNS servers
set vpn sstp name-server '2001:4860:4860::8888'
set vpn sstp name-server '2001:4860:4860::8844'
commit
saveConfiguring WINS servers
For networks with a Windows infrastructure:
configure
# Assign WINS servers for NetBIOS name resolution
set vpn sstp wins-server '192.168.1.100'
set vpn sstp wins-server '192.168.1.101'
commit
saveAdditional PPP parameters
MTU and MRU
configure
# Set the MTU for PPP interfaces
set vpn sstp ppp-options mtu '1400'
# Set the MRU (Maximum Receive Unit)
set vpn sstp ppp-options mru '1400'
commit
saveRecommendations:
- Standard MTU for Ethernet: 1500
- Recommended for SSTP: 1400-1420 (accounting for SSL/TLS and PPP overhead)
- If you experience fragmentation issues, try lowering it to 1380
LCP parameters
configure
# Configure the interval of LCP echo requests (seconds)
set vpn sstp ppp-options lcp-echo-interval '30'
# Number of missed echo replies before the connection is dropped
set vpn sstp ppp-options lcp-echo-failure '3'
# LCP request timeout
set vpn sstp ppp-options lcp-echo-timeout '5'
commit
saveLCP (Link Control Protocol) echo is used to detect “dead” connections:
lcp-echo-interval: how often to send echo requestslcp-echo-failure: how many missed replies are tolerated- The connection will be dropped after
interval × failureseconds without replies
Disable CCP (Compression Control Protocol)
configure
# Disable compression at the PPP level (recommended, since SSL/TLS already compresses)
set vpn sstp ppp-options disable-ccp
commit
saveIPv6 PPP parameters
configure
# Allow IPv6CP (IPv6 Control Protocol)
set vpn sstp ppp-options ipv6 'allow'
# Force IPv6 to be required
set vpn sstp ppp-options ipv6 'require'
# Prefer IPv6 but allow IPv4-only clients
set vpn sstp ppp-options ipv6 'prefer'
# Assign a specific IPv6 interface identifier to the server
set vpn sstp ppp-options ipv6-intf-id '::1'
# Assign a specific IPv6 interface identifier to clients
set vpn sstp ppp-options ipv6-peer-intf-id '::2'
# Accept any interface identifier from the client
set vpn sstp ppp-options ipv6-accept-peer-intf-id
commit
saveRate limiting
Rate limiting for specific users
configure
# Rate-limit a local user
set vpn sstp authentication local-users username 'john' rate-limit download '20000'
set vpn sstp authentication local-users username 'john' rate-limit upload '10000'
# Values are specified in Kbps (kilobits per second)
# 20000 Kbps = 20 Mbps download
# 10000 Kbps = 10 Mbps upload
commit
saveRate limiting via RADIUS
The RADIUS server can pass attributes to limit the rate. Example FreeRADIUS configuration:
john Cleartext-Password := "password"
Filter-Id = "rate-limit=20000/10000"Where the format is: rate-limit=download_kbps/upload_kbps
Global rate limiting
To apply limits to all users, use scripts or settings at the accel-ppp level.
Advanced settings
Changing the listening port
By default, SSTP uses port 443. To change it:
configure
# Use a non-standard port (for example, 8443)
set vpn sstp port '8443'
commit
saveNote: Using a non-standard port reduces one of the main advantages of SSTP - its ability to traverse firewalls.
Maximum number of clients
configure
# Limit the maximum number of concurrent connections
set vpn sstp max-concurrent-sessions '100'
commit
saveSession timeouts
configure
# Set the inactive session timeout (seconds)
set vpn sstp ppp-options session-timeout '3600'
commit
saveLogging
configure
# Enable detailed logging
set vpn sstp log level '5'
# Logging levels:
# 0 - off
# 1 - critical errors
# 2 - errors
# 3 - warnings
# 4 - information
# 5 - debug (maximum verbosity)
commit
saveLogs are available through journalctl:
sudo journalctl -u accel-ppp@sstp -fExtended Scripts
VyOS allows you to run custom scripts on various events:
configure
# Script when the connection is established
set vpn sstp extended-scripts on-up '/config/scripts/sstp-up.sh'
# Script when the connection is dropped
set vpn sstp extended-scripts on-down '/config/scripts/sstp-down.sh'
# Script when the session changes
set vpn sstp extended-scripts on-change '/config/scripts/sstp-change.sh'
# Script on authentication
set vpn sstp extended-scripts on-pre-up '/config/scripts/sstp-pre-up.sh'
commit
saveExample on-up script
Create the file /config/scripts/sstp-up.sh:
#!/bin/bash
# SSTP on-up script
# Available variables:
# PEERNAME - username
# CALLING_SID - client IP address
# CALLED_SID - server IP address
# IFNAME - PPP interface (for example, ppp0)
# IPLOCAL - local VPN IP address
# IPREMOTE - remote VPN IP address
logger "SSTP: User $PEERNAME connected from $CALLING_SID via $IFNAME ($IPREMOTE)"
# Example: add a static route for a specific user
if [ "$PEERNAME" = "admin" ]; then
ip route add 192.168.100.0/24 via $IPREMOTE dev $IFNAME
fi
# Example: send a notification
curl -X POST https://monitoring.example.com/vpn-connect \
-d "user=$PEERNAME&ip=$CALLING_SID&vpn_ip=$IPREMOTE"Do not forget to make the script executable:
sudo chmod +x /config/scripts/sstp-up.shSNMP monitoring
configure
# Enable SNMP for SSTP monitoring
set vpn sstp snmp master-agent
commit
saveOnce SNMP is enabled, you can monitor:
- The number of active sessions
- Traffic statistics
- Information about connected users
Configuration examples for cloud providers
Example 1: SSTP VPN on Yandex Cloud to bypass strict firewalls
Scenario: A company has remote employees working from locations with very strict corporate firewalls that block all ports except 80 and 443. SSTP is the ideal solution because it uses the standard HTTPS port.
Topology
┌────────────────────────────────────────────────────────────────┐
│ Yandex Cloud │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ VPC: 10.128.0.0/16 │ │
│ │ │ │
│ │ ┌─────────────────────┐ ┌──────────────────────┐ │ │
│ │ │ VyOS SSTP Server │ │ Internal Resources │ │ │
│ │ │ eth0: 51.250.X.X │──────│ Web: 10.128.1.10 │ │ │
│ │ │ eth1: 10.128.0.10 │ │ DB: 10.128.1.20 │ │ │
│ │ │ SSTP: 10.100.0.1 │ │ App: 10.128.1.30 │ │ │
│ │ └─────────────────────┘ └──────────────────────┘ │ │
│ └──────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────┘
▲
│ SSTP (TCP 443)
│
┌──────────┴──────────┐
│ │
┌────▼──────┐ ┌──────▼────┐
│ Windows │ │ Windows │
│ Client 1 │ │ Client 2 │
│ (Office) │ │ (Home) │
└───────────┘ └───────────┘VyOS configuration
configure
# Interfaces
set interfaces ethernet eth0 address 'dhcp'
set interfaces ethernet eth0 description 'WAN - Yandex Cloud'
set interfaces ethernet eth1 address '10.128.0.10/24'
set interfaces ethernet eth1 description 'LAN - Internal Network'
# NAT for VPN clients
set nat source rule 100 outbound-interface 'eth1'
set nat source rule 100 source address '10.100.0.0/24'
set nat source rule 100 translation address 'masquerade'
# PKI - generating certificates
# (run before configure)
# generate pki ca install SSTP-CA common-name "Yandex Cloud VPN CA"
# generate pki certificate sign SSTP-CA install SSTP-Server common-name "vpn.company.ru"
# SSTP configuration
set vpn sstp ssl ca-certificate 'SSTP-CA'
set vpn sstp ssl certificate 'SSTP-Server'
# Authentication via RADIUS (integration with Active Directory)
set vpn sstp authentication mode 'radius'
set vpn sstp authentication radius server 10.128.1.50 key 'YandexCloudRadiusSecret2025'
set vpn sstp authentication radius server 10.128.1.50 port '1812'
set vpn sstp authentication radius server 10.128.1.51 key 'YandexCloudRadiusSecret2025'
set vpn sstp authentication radius timeout '10'
# Backup local authentication
set vpn sstp authentication local-users username 'admin' password 'EmergencyAccess2025!'
set vpn sstp authentication local-users username 'admin' static-ip '10.100.0.5'
# IP pools
set vpn sstp client-ip-pool VPN-USERS range '10.100.0.10-10.100.0.100'
set vpn sstp gateway-address '10.100.0.1'
# DNS servers (internal corporate DNS)
set vpn sstp name-server '10.128.1.10'
set vpn sstp name-server '10.128.1.11'
# WINS for access to internal Windows resources
set vpn sstp wins-server '10.128.1.50'
# PPP parameters optimized for SSTP
set vpn sstp ppp-options mtu '1400'
set vpn sstp ppp-options lcp-echo-interval '30'
set vpn sstp ppp-options lcp-echo-failure '3'
set vpn sstp ppp-options disable-ccp
# Authentication protocols (secure only)
set vpn sstp authentication protocols 'mschap-v2'
# Logging
set vpn sstp log level '4'
# Firewall for SSTP
set firewall name WAN_LOCAL rule 100 action 'accept'
set firewall name WAN_LOCAL rule 100 protocol 'tcp'
set firewall name WAN_LOCAL rule 100 destination port '443'
set firewall name WAN_LOCAL rule 100 description 'Allow SSTP VPN'
set firewall interface eth0 local name 'WAN_LOCAL'
# Routing for VPN clients
set protocols static route 10.128.1.0/24 next-hop 10.128.0.1
# SNMP for monitoring
set vpn sstp snmp master-agent
commit
save
exitConfiguring the Windows client
On the user’s computer (Windows 10/11):
Importing the CA certificate:
- Copy the
vpn-ca.crtfile to the computer - Double-click → “Install Certificate”
- “Local Machine” → “Place all certificates in the following store”
- “Trusted Root Certification Authorities”
- Copy the
Creating the VPN connection:
- Settings → Network & Internet → VPN → “Add a VPN connection”
- VPN provider: Windows (built-in)
- Connection name: “Yandex Cloud Office VPN”
- Server name or address:
vpn.company.ru(or51.250.X.X) - VPN type: “Secure Socket Tunneling Protocol (SSTP)”
- Type of sign-in info: “User name and password”
- Save
Connecting:
- Click on the created VPN connection
- Enter the RADIUS credentials (AD username/password)
- Click “Connect”
Automatic monitoring script
Create /config/scripts/sstp-monitor.sh:
#!/bin/bash
# SSTP monitoring script for Yandex Cloud
WEBHOOK_URL="https://monitoring.company.ru/api/vpn/events"
# Function to send metrics
send_metric() {
local metric_name=$1
local metric_value=$2
curl -s -X POST "$WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d "{\"metric\":\"$metric_name\",\"value\":$metric_value,\"timestamp\":$(date +%s)}"
}
# Get the number of active sessions
active_sessions=$(cli-shell-api showCfg | grep -c "ppp")
# Send the metric
send_metric "sstp_active_sessions" "$active_sessions"Add to cron:
set system task-scheduler task monitor-sstp executable path '/config/scripts/sstp-monitor.sh'
set system task-scheduler task monitor-sstp interval '5m'Example 2: SSTP VPN on VK Cloud for corporate access
Scenario: A mid-sized business hosts its infrastructure on VK Cloud and needs secure remote access for employees. It uses integration with a corporate FreeRADIUS and dynamic resource assignment.
Topology
┌─────────────────────────────────────────────────────────────────┐
│ VK Cloud │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Private Network: 192.168.0.0/16 │ │
│ │ │ │
│ │ ┌──────────────────┐ ┌──────────────────────────┐ │ │
│ │ │ VyOS Gateway │ │ FreeRADIUS Server │ │ │
│ │ │ Ext: 95.X.X.X │────│ 192.168.0.50 │ │ │
│ │ │ Int: 192.168.0.1│ │ (AD integration) │ │ │
│ │ │ VPN: 10.50.0.1 │ └──────────────────────────┘ │ │
│ │ └──────────────────┘ │ │
│ │ │ │ │
│ │ │ │ │
│ │ ┌──────▼───────────────────────────────────────────┐ │ │
│ │ │ Corporate Network Segments │ │ │
│ │ │ - Management: 192.168.10.0/24 │ │ │
│ │ │ - Servers: 192.168.20.0/24 │ │ │
│ │ │ - Workstations: 192.168.30.0/24 │ │ │
│ │ │ - DMZ: 192.168.100.0/24 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘VyOS configuration on VK Cloud
configure
# Interfaces
set interfaces ethernet eth0 address 'dhcp'
set interfaces ethernet eth0 description 'WAN - VK Cloud External'
set interfaces ethernet eth1 address '192.168.0.1/16'
set interfaces ethernet eth1 description 'LAN - Corporate Network'
# PKI - using Let's Encrypt for a public domain
# (certificate obtained in advance via certbot)
set pki ca LetsEncrypt certificate "-----BEGIN CERTIFICATE-----
[Let's Encrypt Chain Certificate]
-----END CERTIFICATE-----"
set pki certificate SSTP-VKCloud certificate "-----BEGIN CERTIFICATE-----
[Server Certificate for vpn.company.cloud]
-----END CERTIFICATE-----"
set pki certificate SSTP-VKCloud private key "-----BEGIN PRIVATE KEY-----
[Private Key]
-----END PRIVATE KEY-----"
# SSTP server
set vpn sstp ssl ca-certificate 'LetsEncrypt'
set vpn sstp ssl certificate 'SSTP-VKCloud'
# RADIUS authentication with FreeRADIUS
set vpn sstp authentication mode 'radius'
set vpn sstp authentication radius server 192.168.0.50 key 'VKCloudRadius2025Secret'
set vpn sstp authentication radius server 192.168.0.50 port '1812'
set vpn sstp authentication radius server 192.168.0.50 acct-port '1813'
set vpn sstp authentication radius timeout '5'
set vpn sstp authentication radius acct-timeout '3'
set vpn sstp authentication radius max-try '3'
# Dynamic authorization for changing session parameters
set vpn sstp authentication radius dynamic-author server '192.168.0.50'
set vpn sstp authentication radius dynamic-author key 'DynamicAuthKey2025'
# IP pools for different user groups
set vpn sstp client-ip-pool ADMINS range '10.50.1.10-10.50.1.30'
set vpn sstp client-ip-pool EMPLOYEES range '10.50.2.10-10.50.2.100'
set vpn sstp client-ip-pool CONTRACTORS range '10.50.3.10-10.50.3.50'
set vpn sstp gateway-address '10.50.0.1'
# DNS servers (internal)
set vpn sstp name-server '192.168.0.10'
set vpn sstp name-server '192.168.0.11'
# PPP parameters
set vpn sstp ppp-options mtu '1420'
set vpn sstp ppp-options lcp-echo-interval '30'
set vpn sstp ppp-options lcp-echo-failure '4'
set vpn sstp ppp-options disable-ccp
# Secure authentication
set vpn sstp authentication protocols 'mschap-v2'
# Extended scripts for logging and integration
set vpn sstp extended-scripts on-up '/config/scripts/sstp-on-up.sh'
set vpn sstp extended-scripts on-down '/config/scripts/sstp-on-down.sh'
# Firewall
set firewall name WAN_LOCAL rule 110 action 'accept'
set firewall name WAN_LOCAL rule 110 protocol 'tcp'
set firewall name WAN_LOCAL rule 110 destination port '443'
set firewall name WAN_LOCAL rule 110 description 'SSTP VPN'
set firewall name WAN_LOCAL rule 110 recent count '4'
set firewall name WAN_LOCAL rule 110 recent time 'minute'
set firewall name WAN_LOCAL rule 110 state new 'enable'
set firewall interface eth0 local name 'WAN_LOCAL'
# NAT for VPN clients
set nat source rule 200 outbound-interface 'eth1'
set nat source rule 200 source address '10.50.0.0/16'
set nat source rule 200 translation address 'masquerade'
# Routing
set protocols static route 192.168.0.0/16 next-hop 192.168.0.1
# SNMP
set vpn sstp snmp master-agent
# System logging
set system syslog global facility all level 'info'
set system syslog host 192.168.0.60 facility all level 'info'
set system syslog host 192.168.0.60 port '514'
commit
save
exitFreeRADIUS configuration for group policy
File /etc/freeradius/3.0/mods-config/files/authorize:
# Administrators - full access, high speed
DEFAULT Group == "VPN-Admins", Auth-Type := LDAP
Framed-Pool = "ADMINS",
Framed-IP-Netmask = 255.255.255.0,
Framed-Route = "192.168.0.0/16 192.168.0.1",
Session-Timeout = 43200,
Idle-Timeout = 1800
# Employees - standard access, medium speed
DEFAULT Group == "VPN-Employees", Auth-Type := LDAP
Framed-Pool = "EMPLOYEES",
Framed-IP-Netmask = 255.255.255.0,
Framed-Route = "192.168.20.0/24 192.168.0.1",
Framed-Route = "192.168.30.0/24 192.168.0.1",
Session-Timeout = 28800,
Idle-Timeout = 900,
Filter-Id = "rate-limit=50000/25000"
# Contractors - limited access, low speed
DEFAULT Group == "VPN-Contractors", Auth-Type := LDAP
Framed-Pool = "CONTRACTORS",
Framed-IP-Netmask = 255.255.255.0,
Framed-Route = "192.168.100.0/24 192.168.0.1",
Session-Timeout = 14400,
Idle-Timeout = 600,
Filter-Id = "rate-limit=10000/5000"on-up script for integration with monitoring systems
Create /config/scripts/sstp-on-up.sh:
#!/bin/bash
# SSTP on-up integration script for VK Cloud
# Environment variables from accel-ppp:
# PEERNAME, CALLING_SID, IFNAME, IPLOCAL, IPREMOTE
# Log to syslog
logger -t sstp-auth "User $PEERNAME connected from $CALLING_SID, assigned IP $IPREMOTE via $IFNAME"
# Send the event to the monitoring system
curl -s -X POST "http://192.168.0.60:9200/vpn-events/_doc" \
-H "Content-Type: application/json" \
-d "{
\"timestamp\": \"$(date -Iseconds)\",
\"event_type\": \"vpn_connect\",
\"username\": \"$PEERNAME\",
\"source_ip\": \"$CALLING_SID\",
\"vpn_ip\": \"$IPREMOTE\",
\"interface\": \"$IFNAME\"
}"
# Update the active VPN sessions table in the database
psql -h 192.168.0.70 -U vpnmonitor -d monitoring -c \
"INSERT INTO active_vpn_sessions (username, source_ip, vpn_ip, interface, connected_at)
VALUES ('$PEERNAME', '$CALLING_SID', '$IPREMOTE', '$IFNAME', NOW())"
# Check the user against the whitelist and apply additional policies
if grep -q "^$PEERNAME$" /config/scripts/vpn-privileged-users.txt; then
# Grant access to the management subnet for privileged users
ip route add 192.168.10.0/24 via $IPREMOTE dev $IFNAME
logger -t sstp-auth "Privileged access granted to $PEERNAME"
fion-down script for cleanup
Create /config/scripts/sstp-on-down.sh:
#!/bin/bash
# SSTP on-down cleanup script
logger -t sstp-auth "User $PEERNAME disconnected from $CALLING_SID, IP $IPREMOTE"
# Remove from the active sessions database
psql -h 192.168.0.70 -U vpnmonitor -d monitoring -c \
"DELETE FROM active_vpn_sessions WHERE username='$PEERNAME' AND vpn_ip='$IPREMOTE'"
# Send the event to monitoring
curl -s -X POST "http://192.168.0.60:9200/vpn-events/_doc" \
-H "Content-Type: application/json" \
-d "{
\"timestamp\": \"$(date -Iseconds)\",
\"event_type\": \"vpn_disconnect\",
\"username\": \"$PEERNAME\",
\"source_ip\": \"$CALLING_SID\",
\"vpn_ip\": \"$IPREMOTE\"
}"Make the scripts executable:
sudo chmod +x /config/scripts/sstp-on-up.sh
sudo chmod +x /config/scripts/sstp-on-down.shMonitoring and management
Viewing active sessions
# Show all active SSTP sessions
show vpn sstp-server sessions
# Example output:
# ifname | username | ip | calling-sid | rate-limit | type | comp | state | uptime
# -------+----------+---------------+-----------------+------------+------+------+----------+----------
# ppp0 | john | 10.100.0.10 | 203.0.113.45 | | sstp | | active | 00:15:32
# ppp1 | mary | 10.100.0.11 | 198.51.100.22 | 20000/10000| sstp | | active | 01:05:18
# ppp2 | admin | 10.100.0.5 | 192.0.2.100 | | sstp | | active | 02:30:45Server statistics
# Show overall SSTP server statistics
show vpn sstp-server statistics
# Example output:
# uptime: 5d 12h 30m
# cpu: 2%
# mem(rss/virt): 45M/120M
# core:
# mempool_allocated: 512Kb
# mempool_available: 256Kb
# thread_count: 4
# thread_active: 1
# context_count: 3
# context_sleeping: 0
# context_pending: 0
# md_handler_count: 3
# md_handler_pending: 0
# sessions:
# starting: 0
# active: 3
# finishing: 0Forcibly disconnecting a user
# Disconnect a specific session by interface
sudo pkill -f "ppp0"
# Or use accel-cmd (if available)
sudo accel-cmd terminate if ppp0
# Disconnect by username
sudo accel-cmd terminate username johnViewing detailed session information
# Information about PPP interfaces
show interfaces ppp
# Details of a specific interface
show interfaces ppp ppp0
# Traffic statistics
show interfaces ppp ppp0 statisticsDiagnostics and troubleshooting
Checking the service status
# Check the accel-ppp SSTP status
sudo systemctl status accel-ppp@sstp
# Restart the service
sudo systemctl restart accel-ppp@sstp
# Stop/start
sudo systemctl stop accel-ppp@sstp
sudo systemctl start accel-ppp@sstpViewing logs
# SSTP server logs in real time
sudo journalctl -u accel-ppp@sstp -f
# Last 100 lines of logs
sudo journalctl -u accel-ppp@sstp -n 100
# Logs for the current boot
sudo journalctl -u accel-ppp@sstp -b 0
# Logs from a specific time
sudo journalctl -u accel-ppp@sstp --since "2025-01-15 10:00:00"
# Logs for a specific period
sudo journalctl -u accel-ppp@sstp --since "2025-01-15 10:00:00" --until "2025-01-15 12:00:00"
# Filter by severity level
sudo journalctl -u accel-ppp@sstp -p err
# Export logs to a file
sudo journalctl -u accel-ppp@sstp > /tmp/sstp-logs.txtCommon problems and solutions
Problem 1: Client cannot connect - certificate error
Symptoms:
- The Windows client returns the error “The remote connection was not made because the attempted VPN tunnels failed”
- In the logs: “SSL handshake failed”
Solution:
# 1. Check that the certificate is installed correctly
show pki certificate SSTP-Server
# 2. Make sure the Common Name or SAN matches the server address
# 3. Check the certificate validity period
show pki certificate SSTP-Server | grep Valid
# 4. Export the CA certificate for the client
show pki ca VPN-CA certificate pem
# 5. The client must install the CA certificate as trustedProblem 2: The connection is established but there is no access to internal resources
Symptoms:
- The VPN connection shows “Connected”
- Ping to the gateway (10.100.0.1) works
- Ping to internal resources does not work
Solution:
# 1. Check the NAT rules
show nat source rules
# 2. Check the routing
show ip route
# 3. Check the firewall rules
show firewall
# 4. Make sure IP forwarding is enabled (should be enabled by default)
sysctl net.ipv4.ip_forward
# Should be: net.ipv4.ip_forward = 1
# 5. Check that the correct routes are assigned to the client
# On a Windows client: route printProblem 3: RADIUS authentication does not work
Symptoms:
- In the logs: “RADIUS server not responding” or “RADIUS authentication failed”
- Local users connect normally
Solution:
# 1. Check the RADIUS server availability
ping 192.168.1.10
# 2. Check the RADIUS ports
sudo nmap -p 1812,1813 192.168.1.10
# 3. Test RADIUS via radtest (install freeradius-utils)
sudo apt install freeradius-utils
radtest john password123 192.168.1.10 1812 RadiusSecret123
# 4. Check the RADIUS configuration in VyOS
show vpn sstp authentication radius
# 5. Check the RADIUS server logs
# On the FreeRADIUS server:
sudo journalctl -u freeradius -f
# 6. Enable debug mode on RADIUS (temporarily)
# On FreeRADIUS: sudo freeradius -XProblem 4: Poor VPN performance
Symptoms:
- Slow data transfer speed
- High latency
Solution:
# 1. Check the MTU settings
show vpn sstp ppp-options
# 2. Try different MTU values
configure
set vpn sstp ppp-options mtu 1380
commit
save
# 3. Disable compression (if enabled)
set vpn sstp ppp-options disable-ccp
commit
# 4. Check the server load
show system resources
# 5. Check bandwidth limits
show vpn sstp authentication local-users
# 6. Check the network interfaces
show interfaces ethernet
show interfaces ethernet eth0 statistics
# 7. Test throughput (on the client)
# Windows: Test-NetConnection -ComputerName 10.100.0.1 -DiagnoseRoutingProblem 5: Sessions hang (stale sessions)
Symptoms:
- The user shows as connected but cannot transfer data
- Reconnection is impossible because of the existing session
Solution:
# 1. Check the LCP echo parameters
show vpn sstp ppp-options
# 2. Configure more aggressive dead-session detection
configure
set vpn sstp ppp-options lcp-echo-interval 15
set vpn sstp ppp-options lcp-echo-failure 3
commit
save
# 3. Forcibly terminate hung sessions
sudo accel-cmd terminate username john
# 4. Restart the service (last resort)
sudo systemctl restart accel-ppp@sstpProblem 6: Port 443 is already in use
Symptoms:
- The accel-ppp@sstp service does not start
- In the logs: “bind: Address already in use”
Solution:
# 1. Check what is listening on port 443
sudo netstat -tlnp | grep :443
# or
sudo lsof -i :443
# 2. If it is a web server (nginx, apache), move HTTPS to another port
# Or configure SSTP on another port
configure
set vpn sstp port 8443
commit
save
# 3. Update the firewall for the new port
set firewall name WAN_LOCAL rule 110 destination port '8443'
commit
# IMPORTANT: Clients will have to specify vpn.example.com:8443Diagnostic tools
Checking the SSL/TLS connection
# Test the SSL connection from the server
openssl s_client -connect localhost:443 -showcerts
# Test the SSL connection from outside
openssl s_client -connect vpn.example.com:443 -showcerts
# Check the certificate
echo | openssl s_client -connect vpn.example.com:443 2>/dev/null | openssl x509 -noout -textCapturing traffic for analysis
# Capture SSTP traffic on the WAN interface
sudo tcpdump -i eth0 -w /tmp/sstp-traffic.pcap port 443
# Capture PPP traffic
sudo tcpdump -i ppp0 -w /tmp/ppp-traffic.pcap
# Real-time analysis
sudo tcpdump -i eth0 -n port 443 -vMonitoring system resources
# accel-ppp CPU and memory usage
ps aux | grep accel-ppp
# Detailed process statistics
top -p $(pidof accel-ppp)
# VyOS system resources
show system resourcesSecurity recommendations
1. Using trusted certificates
# Always use certificates from trusted CAs for production
# Avoid self-signed certificates for public VPNs
# Renew certificates regularly (Let's Encrypt - every 60 days)
# Use strong keys (at least 2048-bit RSA or ECC)
generate pki ca install VPN-CA key-size 4096
# Add Subject Alternative Names
generate pki certificate sign VPN-CA install SSTP-Server \
subject-alt-name "vpn.example.com" \
subject-alt-name "sstp.example.com"2. Secure authentication
configure
# Use only MSCHAPv2
set vpn sstp authentication protocols 'mschap-v2'
# Avoid PAP and CHAP
delete vpn sstp authentication protocols 'pap'
delete vpn sstp authentication protocols 'chap'
# Integrate with RADIUS/AD for centralized management
set vpn sstp authentication mode 'radius'
# Enable accounting for auditing
set vpn sstp authentication radius acct-port '1813'
commit
save3. Restricting access
configure
# Limit the number of concurrent connections
set vpn sstp max-concurrent-sessions '50'
# Use session timeouts
set vpn sstp ppp-options session-timeout '28800' # 8 hours
# Firewall with rate limiting against brute-force
set firewall name WAN_LOCAL rule 110 recent count '5'
set firewall name WAN_LOCAL rule 110 recent time 'minute'
# Geographic filtering (if applicable)
# set firewall name WAN_LOCAL rule 110 source geoip country-code 'RU'
commit
save4. Network segmentation
configure
# Use separate IP subnets for the VPN
set vpn sstp client-ip-pool VPN range '10.100.0.0-10.100.255.254'
# Apply firewall rules for VPN traffic
set firewall name VPN_TO_LAN default-action 'drop'
set firewall name VPN_TO_LAN rule 10 action 'accept'
set firewall name VPN_TO_LAN rule 10 state established 'enable'
set firewall name VPN_TO_LAN rule 10 state related 'enable'
set firewall name VPN_TO_LAN rule 20 action 'accept'
set firewall name VPN_TO_LAN rule 20 destination address '192.168.1.0/24'
set firewall name VPN_TO_LAN rule 20 protocol 'tcp'
set firewall name VPN_TO_LAN rule 20 destination port '80,443'
# Deny access to the management subnet
set firewall name VPN_TO_LAN rule 100 action 'drop'
set firewall name VPN_TO_LAN rule 100 destination address '192.168.0.0/24'
set firewall name VPN_TO_LAN rule 100 log 'enable'
commit
save5. Monitoring and logging
configure
# Enable verbose logging
set vpn sstp log level '4'
# Send logs to a centralized syslog server
set system syslog host 192.168.1.100 facility all level 'info'
set system syslog host 192.168.1.100 port '514'
# Enable SNMP for monitoring
set vpn sstp snmp master-agent
# Use extended scripts for auditing
set vpn sstp extended-scripts on-up '/config/scripts/sstp-audit.sh'
commit
save6. Regular updates
# Update VyOS regularly
add system image <new-version-url>
show system image
set system image default-boot <new-version>
reboot
# Monitor accel-ppp vulnerabilities
# https://github.com/accel-ppp/accel-ppp/security/advisories
# Automatically renew Let's Encrypt certificates
# Create a cron job for certbot renew7. Disaster Recovery
# Create configuration backups regularly
save /config/backup-$(date +%Y%m%d).config
# Export the PKI certificates
show pki ca VPN-CA certificate pem > /tmp/ca-backup.pem
show pki certificate SSTP-Server certificate pem > /tmp/cert-backup.pem
# Document the configuration
show configuration commands > /tmp/vyos-config-backup.txt8. DDoS protection
configure
# SYN flood protection at the system level
set firewall syn-flood protection enable
# Limiting new connections
set firewall name WAN_LOCAL rule 110 protocol 'tcp'
set firewall name WAN_LOCAL rule 110 destination port '443'
set firewall name WAN_LOCAL rule 110 connection-limit limit '20'
set firewall name WAN_LOCAL rule 110 connection-limit rate 'minute'
# Connection tracking
set system conntrack expect-table-size '2048'
set system conntrack hash-size '32768'
set system conntrack table-size '262144'
commit
saveBest Practices
Capacity planning
Calculating the required resources:
- RAM: 100-200 MB per 100 concurrent connections
- CPU: 1 core per 50-100 connections (depends on traffic)
- Bandwidth: plan with a 30-50% margin
- IP addresses: number of users + 20% reserve
Scaling:
- Up to 100 users: a single VyOS VM (2 vCPU, 2GB RAM)
- 100-500 users: a VyOS VM (4 vCPU, 4-8GB RAM)
- 500+ users: consider load balancing
Documentation
# Always add descriptions to the configuration
configure
set vpn sstp description 'SSTP VPN Server for remote employees'
set vpn sstp client-ip-pool EMPLOYEES description 'IP pool for regular employees'
set firewall name WAN_LOCAL rule 110 description 'Allow SSTP VPN from Internet'
commitTesting
Before deploying to production:
- Test with different types of clients (Windows 10, 11, Server)
- Verify operation through various firewalls
- Load test with the expected number of users
- Failover scenarios (RADIUS failure, IP pool exhaustion)
Regular checks:
- Check the logs for errors weekly
- Test recovery procedures monthly
- Update certificates and patches quarterly
Change Management
# Always create a backup before making changes
configure
save /config/backup-before-change-$(date +%Y%m%d-%H%M).config
# Make the changes
# ... your changes ...
commit
# Verify that everything works
# If there are problems:
rollback 1
# If everything is fine:
saveConclusion
SSTP VPN on VyOS provides a reliable and secure remote access solution, especially in environments with restrictive firewalls. Using the standard HTTPS port (443) ensures maximum compatibility and traversal through NAT and firewalls.
Key advantages
- Simplicity of deployment and management
- Built-in Windows support without additional software
- Strong security through SSL/TLS
- Flexible integration with RADIUS and Active Directory
- Suitable for corporate and cloud deployments
When to use SSTP
- Remote employees behind strict corporate firewalls
- Windows-oriented organizations
- When simple client-side setup is needed
- When compatibility with existing PKI infrastructure is required
Alternatives
Consider other VPN protocols if:
- WireGuard: you need maximum performance and a modern protocol
- OpenVPN: you need support for all platforms and an open protocol
- IKEv2/IPsec: you need built-in support for mobile devices (iOS/Android)
- L2TP/IPsec: you need compatibility with legacy systems
Additional resources
- Official VyOS documentation: https://docs.vyos.io/
- accel-ppp documentation: https://accel-ppp.org/
- SSTP specification: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-sstp/
- VyOS Community: https://forum.vyos.io/
Document prepared: 2025-01-15 Version: 1.0 Compatibility: VyOS 1.3.x, 1.4.x, 1.5.x Author: OpenNix Team