Publish your Mac at a real hostname.
Switch it off when you're done.

Xprem VPN gives a service running on your laptop a public HTTPS address — updates.example.com, with a real certificate — by routing it through an AWS load balancer and a WireGuard tunnel you control.

It runs entirely in your AWS account. Nothing is hosted for you, no traffic passes through anyone else's servers, and there is no account to sign up for. The menu bar switch is the only thing that decides whether the world can reach you.

client ──TLS──▶ NLB :443 ──▶ 10.100.0.2:3000
                              │
                      VPC route 10.100.0.0/24
                              ▼
                      gateway instance (Elastic IP)
                              │  WireGuard
                              ▼
                      your Mac 10.100.0.2 ──▶ your service :3000

What it is for

Some things are better served from a machine you can see. A staging build, an update feed, a demo, a service whose data should not leave the building. What those have in common is that they want a real hostname and a real certificate — and that they should not be reachable at three in the morning when nobody is watching.

A hostname, not a tunnel URL

Your own domain, your own ACM certificate, a Route53 record. Not a random subdomain that changes every restart.

Off by default

The tunnel is a switch, not a daemon that quietly holds the door open. Disconnect and the hostname stops answering.

No inbound port forward

Your Mac dials out. Nothing has to change on your router, and a new IP address from your ISP re-pins itself.

Your account, your bill

No middleman, no per-seat pricing, no rate limit. The only cost is the AWS resources, itemised below.

Several Macs, one hostname

Register more than one workstation and the load balancer spreads across them. Adding one does not interrupt the others.

Repairs itself

The gateway is an Auto Scaling group of one. A failed instance is replaced, keeps the same address and the same identity.

How it works

An AWS Network Load Balancer holds your certificate and terminates TLS. Behind it, a small gateway instance forwards to a private address that lives on your Mac, reached over WireGuard. The tunnel dials outward, so your network needs no changes.

Why not AWS Site-to-Site VPN

It needs a fixed public IP address, because AWS answers the IKE negotiation rather than starting it — and a laptop behind a residential NAT does not have one. AWS does support a certificate-based gateway with no address for exactly this case, but it requires an ACM Private CA at roughly USD 400/month, more than everything here combined. WireGuard inverts the direction and costs nothing extra.

Nothing to install first

The package carries its own WireGuard. macOS has no in-kernel implementation, so the data plane is wireguard-go — MIT-licensed, built from a pinned and checksummed release, shipped inside the installer and signed with the same identity. No Homebrew, no AWS CLI, no Node, no Python.

Why not wg-quick? On macOS it is a bash script that needs bash 4, which macOS has not shipped since 2007 for licensing reasons. Rather than drag in a second installer, everything it did is implemented directly against wireguard-go's documented UAPI socket. The config file written to /etc/wireguard/wg0.conf is still wg-quick's format, so the standard tools can drive the same tunnel if you have them.

The privileged part is small

Moving a tunnel needs root. Rather than a background daemon with broad powers, the app gets one sudoers rule scoped to two exact command lines — raise this interface, drop this interface — pointing at a root-owned helper in /Library/PrivilegedHelperTools, a directory no package manager takes ownership of. Your WireGuard private key is generated on your Mac and never leaves it.

Installing

About ten minutes, most of it AWS building the load balancer. The installer stops at the first thing that fails and names it, rather than reporting success on a half-built tunnel.

You will need

A MacmacOS 13 or later, Apple silicon or Intel
An administrator accountone password prompt, covering three files
An AWS accountthe resources cost roughly USD 26/month
A domain in Route53in that account, as a public hosted zone
A service to publishrunning on your Mac, on a known port
Your service must listen on all interfaces. The load balancer reaches your Mac at its tunnel address, 10.100.0.2 — not 127.0.0.1. A service bound to loopback is invisible to it, and the only symptom is a health check that never passes. With Docker that means -p 3000:3000, not -p 127.0.0.1:3000:3000.
  1. Create AWS credentials for the installer

    In IAM, create a policy from the published least-privilege deploy policy, attach it to a new user, and create an access key. A dedicated key, not an administrator one. If you already have a working AWS CLI profile, skip this.

  2. Check your hosted zone

    You need a public Route53 zone for the domain you will serve from. The installer finds it on its own; it only has to exist.

  3. Open the installer

    Signed and notarized. It places the app, a command-line tool, the privileged helper and the tunnel, then opens the setup window by itself.

  4. Answer six questions

    Credentials, the hostname to serve, your service's port, and — optionally — an address to email when the gateway fails and whether the tunnel should come back after a reboot.

  5. Approve one password prompt

    It covers the tunnel configuration, your private key, and the narrow sudoers rule. Nothing else asks again.

  6. Watch it prove itself

    The last stage checks every hop in the order traffic travels: tunnel up, gateway answers, load balancer healthy, hostname returns 200. A clean run means it is live right now.

Or from a terminal

wiregard-mini-vpn install --domain updates.example.com --port 3000
wiregard-mini-vpn status
wiregard-mini-vpn peers

What it costs

Xprem VPN itself is free software and costs nothing. What you pay is AWS, billed to your own account, and you can see every resource it creates in the published CloudFormation template before you run it.

ResourceWhy it is thereUSD / month
Network Load Balancer Holds the certificate, terminates TLS, gives the hostname something stable to point at ~16.00
t4g.micro gateway Terminates the WireGuard tunnel and forwards into the VPC ~6.00
Elastic IP The fixed address your Mac dials, so a replacement gateway keeps the same endpoint ~3.60
Route53, ACM, SSM, CloudWatch DNS record, certificate, peer registry, alarms ~0.50
Totalplus load balancer capacity units and data transfer~26
The load balancer is most of the bill. If that is not worth it for your use, this is the wrong tool and you should say so — a single instance with a reverse proxy is cheaper and simpler. Xprem VPN is for when you want the traffic ending up on a machine you can see, at a name you own, with a switch you control.

Alarms and their notification topic are only created if you give an address to notify. Nothing is created that you did not ask for, and uninstall removes all of it, including the parameters the gateway wrote for itself.

Licence

GPL-3.0-or-later Xprem VPN is free software. You may use it, read it, change it, and pass it on — and anyone you give a binary to has the same rights, including the right to the source.

What that means in practice

Run it for anythingCommercial use included. There is no seat count, no licence key, and nothing phones home.
Read every lineIncluding the part that runs as root and the template that spends your money.
Change itAnd ship your changes, under the same licence.
No warrantyAs with all free software. It is tested, but it is yours to run.

Third-party components are listed in full in the repository. wireguard-go is MIT, Sparkle is MIT, the AWS SDK is Apache-2.0, and the golang.org/x libraries are BSD — all compatible with GPLv3. Notably Apache-2.0 is compatible with GPLv3 and not GPLv2, which is part of why version 3 was the only sensible choice.

Help make it better

This is a small project with a clear shape and a lot of obvious next steps. If any of these are interesting, they are genuinely open — not a wishlist someone is quietly already doing.

A Windows or Linux client

The AWS side is platform-neutral and the tunnel logic is ordinary Go. What is missing is the platform-specific interface handling and a front end.

A cheaper shape

The load balancer is most of the cost. A design that keeps the static address and the certificate without it would change the economics.

Onboarding for non-AWS people

Step one is still "create an IAM policy". That is a reasonable ask for an engineer and a wall for everyone else.

A diagnostics bundle

When it misbehaves on someone else's machine there is no single command that collects what a maintainer would need to see.

Integration tests against real AWS

CI checks everything except the part that actually deploys. A throwaway-account test would have caught more than one bug earlier.

Tell us it broke

Bug reports are contributions. What you did, what happened, and the output of wiregard-mini-vpn status is plenty to start from.

Getting in touch

Email xpremvpn@maragato.ca, or open an issue or pull request on GitHub. make check is the gate — vet, formatting, tests, and CloudFormation linting over both templates. If that passes, the change is in good shape.