TunnelFleet
Feature: Cloud-init

VPN servers provisioned on first boot

TunnelFleet generates a cloud-init script tailored to your server and passes it to your cloud provider when the VM is created. WireGuard is installed, configured, and running before you even see the IP address.

The Problem

What it takes to provision WireGuard without cloud-init

  • SSH session per server

    Every new server requires opening a terminal, SSHing in, and running commands manually.

  • Manual package management

    Installing WireGuard varies by distro. Getting the right packages and versions requires attention.

  • Error-prone key generation

    Generating WireGuard keypairs, setting correct file permissions, and configuring the interface manually is tedious and easy to get wrong.

  • Not repeatable at scale

    What works for one server needs to be repeated for each new server. Scripting this yourself introduces another maintenance burden.

The Solution

cloud-init makes provisioning idempotent and automatic

cloud-init is the industry-standard way to initialise cloud VMs. Every major Linux cloud image supports it. TunnelFleet generates a cloud-init YAML document for each server and passes it as user-data when the Droplet is created.

On first boot, cloud-init runs the script before the server is reachable via SSH. By the time TunnelFleet polls for the server's IP and status, WireGuard is already installed, keys are generated, and the interface is up.

  • Runs once, on first boot
  • WireGuard installed and configured
  • Keys generated on-server (private key never transmitted)
  • IP forwarding enabled
  • Firewall rules applied
  • Public key sent back to TunnelFleet for peer configuration

What TunnelFleet's cloud-init does

Below is a simplified representation. The actual script includes error handling, version pinning, and TunnelFleet callback endpoints.

cloud-init Security Properties

TunnelFleet's cloud-init approach is designed with security as a first consideration.

Private key never leaves the server

The WireGuard private key is generated on the VM during cloud-init. It is never transmitted to TunnelFleet or stored off-server.

Runs once on first boot

cloud-init scripts run exactly once. Rebooting the server does not re-run the provisioning script.

Auditable script

The cloud-init template used by TunnelFleet is documented. You can review exactly what runs on your server before deploying.

No SSH credentials required

TunnelFleet never needs SSH access to your servers. Provisioning happens via the cloud provider API and cloud-init.

Frequently Asked Questions

Deploy your first cloud-init provisioned VPN server

No SSH. No manual configuration. TunnelFleet generates the script and your server does the rest.