Configure VPN
Both Virtual Private Network (VPN) types are configured in the host's YAML configuration. For the difference between them and how to choose, see What is a VPN on TurboStack?.
Important
VPN settings are only available in the Source (YAML) view of the host - there are no fields for them in the platform interface yet. Open the host, switch to the Source view, add the configuration below, then Save and publish to apply it. Plan the change with Support: the settings must match what the remote side uses, and a wrong value leaves the tunnel down.
IPsec VPN (site-to-site)
An IPsec tunnel is defined as a list under ipsecvpn_connections. Each entry is one tunnel to one
remote gateway, and each tunnel carries one or more subnet pairs.
ipsecvpn_connections:
- name: cloud-to-office
keyexchange: ikev2
local_gw: 94.237.45.100 # public IP of this TurboStack host
remote_gw: 84.198.149.130 # public IP of the remote gateway
psk: "<shared secret>"
phase1_proposal: "aes256-sha1-modp1536!"
phase1_lifetime: 86400s
phase2_proposal: "aes256-sha1"
phase2_lifetime: 3600s
dpd: hold
dpd_delay: 30s
dpd_timeout: 120s
pfs: "no"
subnets:
- local: 192.168.205.0/24
remote: 192.168.1.0/24
Connection fields
Warning
The psk is a shared secret. Treat it like a password: agree on it over a secure channel and do not
reuse it between tunnels. Ask Support if you prefer not to place it in
the host configuration yourself.
Matching both sides
An IPsec tunnel only comes up when both gateways propose the same parameters. keyexchange,
phase1_proposal, phase2_proposal, the lifetimes, pfs and the psk must be agreed with whoever
manages the remote gateway. The subnet pairs must mirror each other: what is local here is remote
there.
The tunnel is established on demand: as soon as traffic matches one of the configured subnet pairs, the connection is set up. Only the listed subnet pairs are routed through the tunnel - traffic to any other destination keeps its normal route.
Several subnets or several tunnels
Add more entries under subnets to reach more networks over the same tunnel, and more entries under
ipsecvpn_connections to build tunnels to more locations:
ipsecvpn_connections:
- name: cloud-to-office
keyexchange: ikev2
local_gw: 94.237.45.100
remote_gw: 84.198.149.130
psk: "<shared secret>"
phase1_proposal: "aes256-sha256-modp2048!"
phase1_lifetime: 28800s
phase2_proposal: "aes256-sha256-ecp521!"
phase2_lifetime: 3600s
dpd: hold
dpd_delay: 30s
dpd_timeout: 120s
pfs: "yes"
subnets:
- local: 192.168.205.0/24
remote: 192.168.1.0/24
- local: 192.168.205.0/24
remote: 192.168.254.0/24
- name: cloud-to-datacenter
keyexchange: ikev2
local_gw: 94.237.45.100
remote_gw: 203.0.113.10
psk: "<other shared secret>"
phase1_proposal: "aes256-sha1-modp1536!"
phase1_lifetime: 86400s
phase2_proposal: "aes256-sha1"
phase2_lifetime: 3600s
dpd: hold
dpd_delay: 30s
dpd_timeout: 120s
pfs: "no"
subnets:
- local: 192.168.205.0/24
remote: 10.20.0.0/16
SSL VPN (remote access)
The Secure Sockets Layer (SSL) VPN is configured as a single sslvpn block. Only the values you set are overridden; the
rest keeps its platform default. A working setup needs three things: switch it on, give it a hostname,
and list the users.
sslvpn:
enabled: true
hostname: vpn.example.com # FQDN that points to this host
users:
- alice
- bob
Split tunnel or full tunnel
This is the most important choice for an SSL VPN: which of the user's traffic goes through the
tunnel. It is controlled by split_tunnel together with networks.
Split tunnel (split_tunnel: true) sends only the networks you list through the VPN. Everything
else - the user's browsing, video calls, cloud tools - keeps going out over their own internet
connection.
sslvpn:
enabled: true
hostname: vpn.example.com
users: [alice, bob]
split_tunnel: true
networks:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
The networks list is pushed to the client as routes, and it is also what the host allows between
the VPN pool and those networks. The default list covers the private address ranges, which is a safe
starting point; narrow it to the subnets you actually want reachable.
Full tunnel (split_tunnel: false) sends all of the user's traffic through the VPN, including
their normal internet traffic. The host then also needs an outbound interface for that traffic, which
is set with nat_interface (the platform fills in the host's main interface when you leave it empty).
sslvpn:
enabled: true
hostname: vpn.example.com
users: [alice, bob]
split_tunnel: false
How to choose:
Tip
The usual reason to pick a full tunnel is IP allow-listing: everyone connected leaves the internet from the host's address, so you can allow that single address on the Firewall or in a third-party service, instead of chasing the changing home addresses of every user. If you do not need that, a split tunnel is lighter and faster.
Warning
With a full tunnel, all of the user's internet traffic runs over your server. Check that this is acceptable for your users and that the host has the bandwidth for it, and be aware that a VPN outage then takes the user fully offline instead of only losing access to internal services.
Timeouts, limits and protection
These have sensible defaults. Change them only for a specific reason.
Certificate
By default the platform requests and renews a Let's Encrypt certificate for hostname
(tls_manage: true). For this to work, hostname must point to the host and a web server must be
running on it, because the certificate is validated over HTTP.
To use your own certificate instead, switch off the automatic handling and point to the files:
sslvpn:
enabled: true
hostname: vpn.example.com
users: [alice]
tls_manage: false
server_cert: /etc/ssl/certs/vpn.example.com.crt
server_key: /etc/ssl/private/vpn.example.com.key
Connecting
Users connect to https://<hostname>:4443 with a VPN client that supports the OpenConnect protocol,
using their user name and the password Hosted Power set for them. Clients are available for Windows,
macOS, Linux, Android and iOS.
Apply the changes
VPN settings are applied when the host is published. Save the YAML, then Save and publish the host - see Publishing. Ask Support to confirm the tunnel is up, or to check the far side when it is not.