read

A small personal VPN can be useful for travel, lab work, and a disposable trusted egress point in a cloud subscription. The important word is disposable: a personal VPN should be easy to create, easy to audit, and easy to destroy when it is no longer needed.

This post uses the Trail of Bits Algo project as the deployment wrapper and WireGuard as the client VPN. The exact commands can drift over time, so treat this as a practical workflow rather than frozen vendor documentation.

2026 context: this is a handy lab or personal setup, not enterprise VPN architecture. Before using Algo today, check the current project status, supported cloud providers, supported operating systems, and whether WireGuard directly, Tailscale, Cloudflare WARP, or your cloud provider’s native VPN service is a better fit.

The pattern

The good pattern here is disposable infrastructure:

  • Create a small VPN endpoint in Azure, AWS, or another supported provider.
  • Generate strong per-device client configurations.
  • Store those client configurations as credentials.
  • Confirm the cloud firewall exposes only the required ports.
  • Tear the server down when the use case is finished.

Do not let a forgotten personal VPN become a mystery Internet-facing box in your subscription.

Deploying Algo

If you are on Windows, using WSL generally makes the deployment process smoother.

  1. Make sure the Azure CLI or equivalent cloud CLI is installed and authenticated.
  2. Clone the Algo repository:
git clone https://github.com/trailofbits/algo.git
cd algo
  1. Create the Python environment and install the dependencies:
python3 -m virtualenv --python="$(command -v python3)" .env
source .env/bin/activate
python3 -m pip install -U pip virtualenv
python3 -m pip install -r requirements.txt

algodeps

  1. Edit config.cfg to suit the deployment. At minimum, define the users/devices that should receive VPN profiles.
  2. Run the deployment wizard:
./algo
  1. Answer the provider and configuration questions.

When deployment succeeds, Algo writes the generated client material into the configs/ directory:

#                          Congratulations!                            #
#                     Your Algo server is running.                     #
#    Config files and certificates are in the ./configs/ directory.    #
#              Go to https://whoer.net/ after connecting               #
#        and ensure that all your traffic passes through the VPN.      #

After deployment, confirm the cloud security group or NSG exposes only the ports Algo requires.

Connecting from desktop clients

Install the WireGuard client for your operating system, then find the generated configuration for the client you created. In an Algo deployment, that is usually under a path like:

configs/<vpn-public-ip>/wireguard/

Import the matching .conf file into the WireGuard client and activate the tunnel.

wg

VPN configuration files are credentials. Anyone who has the config can authenticate as that client, so store them carefully and rotate them if they are exposed.

Connecting from Ubuntu

On Ubuntu, first check the current WireGuard installation guidance:

https://www.wireguard.com/install/

For many Ubuntu releases, installation is still straightforward:

sudo apt install wireguard

Copy the generated client configuration into /etc/wireguard. For example:

sudo cp ubuntu.conf /etc/wireguard/wg0.conf

Start the tunnel:

sudo systemctl start wg-quick@wg0

Confirm the service is running:

sudo systemctl status wg-quick@wg0

wireguard-service

Confirm WireGuard has a live interface and peer:

sudo wg

Check the observed external IP address:

curl ipv4.icanhazip.com

If this client should connect after reboot, enable the service:

sudo systemctl enable wg-quick@wg0

Cleanup

The cleanup step is not optional. When the VPN is no longer needed:

  • Remove unused client configurations.
  • Destroy the cloud VM and associated networking resources.
  • Check for lingering public IPs, disks, NSGs, firewall rules, and DNS records.
  • Remove any local copies of generated configs that are no longer needed.

Small infrastructure has a habit of becoming permanent infrastructure when nobody owns its lifecycle. A personal VPN is most useful when it stays boring, documented, and temporary.

References

Blog Logo

Chad Duffey


Published

Image

Chad Duffey

Blue Team -> Exploit Development & things in-between

Back to Overview