VPN for Harness Cloud
Establish VPN connectivity from Harness Cloud builds to your private network using OpenVPN or WireGuard.
Harness Cloud VMs can establish VPN tunnels to securely access private resources during pipeline execution. Two VPN solutions are supported: OpenVPN and WireGuard.
Both solutions work by running a VPN client on the ephemeral Harness Cloud VM, which creates an encrypted tunnel through the internet to a VPN server on your private network.
OpenVPN
Architecture
The OpenVPN client runs on the Harness Cloud VM, establishes a TLS-encrypted tunnel over UDP (port 1194) to your OpenVPN server, and creates a tun0 virtual interface. Traffic destined for your private network is routed through this tunnel.
Connection flow:
TLS handshake and certificate exchange
Server validates client certificate
Session keys established via Diffie-Hellman
tun0interface created (client gets IP like10.8.0.2)Routes pushed from server to client
Encrypted data transfer begins
Prerequisites
An OpenVPN server accessible from the internet with a public IP or domain
A client configuration file (
.ovpn) with embedded certificatesThe
.ovpnconfig stored as a base64-encoded Harness file secret
Setup VPN client in pipeline
Store your .ovpn configuration file as a base64-encoded Harness secret:
Add the following steps to your pipeline stage to establish and verify the VPN connection:
Install and connect
Verify connectivity
Cleanup
WireGuard
Architecture
The WireGuard client runs on the Harness Cloud build VM, establishes an encrypted tunnel using the Noise protocol over UDP (port 51820) to your WireGuard server, and creates a wg0 virtual interface. Traffic to your private subnets is routed through this tunnel.
Connection flow:
Client sends encrypted handshake with public key
Server validates client public key and responds
Session established in under 1 RTT
wg0interface created (client gets IP like10.0.0.2)Each packet individually authenticated with replay protection
Prerequisites
A WireGuard server accessible from the internet with a public IP or domain
A client configuration file (
wg0.conf) with keys and peer configurationThe
wg0.confconfig stored as a base64-encoded Harness file secret
Setup VPN client in pipeline
Store your WireGuard configuration as a base64-encoded Harness secret:
Add the following steps to your pipeline stage. WireGuard steps require privileged: true and runAsUser: "0":
Install WireGuard
Configure and connect
Verify connectivity
Cleanup
Tunnel configuration
Split tunnel (recommended)
Split tunneling routes only traffic destined for your private subnets through the VPN. All other traffic (internet, package downloads) uses the default route. This is the recommended approach for CI/CD pipelines.
OpenVPN - Configure on your server:
WireGuard - Configure in wg0.conf:
Full tunnel
Full tunneling routes all traffic through the VPN. Use this when compliance requires complete traffic encryption or when accessing geo-restricted resources.
OpenVPN - Configure on your server:
WireGuard - Configure in wg0.conf:
Full tunnel routing increases latency and VPN server bandwidth usage. Use split tunneling unless you have a specific requirement for full tunnel.
Best practices
Store credentials as Harness secrets - Never hardcode VPN keys or certificates in pipeline YAML.
Always include cleanup steps - Use
when: stageStatus: Allto ensure VPN resources are cleaned up even on failure.Verify connectivity before proceeding - Add a verification step after connecting to confirm the VPN is operational.
Use split tunneling - Route only necessary traffic through the VPN to minimize latency and bandwidth overhead.
Use PersistentKeepalive - Set
PersistentKeepalive = 25in WireGuard configs to prevent NAT timeout issues.Set connection timeouts - Avoid indefinite hangs by implementing timeout logic when waiting for VPN connections.
Last updated
Was this helpful?