Guide
7 min read

When Self-Hosted Fleets Outgrow a Single Tunnel: Multi-Site Remote Access

One WireGuard tunnel is fine for one box. Across several sites and a dozen devices it turns into a mess of overlapping subnets and manual keys. Here's how to scale remote access.

When Self-Hosted Fleets Outgrow a Single Tunnel: Multi-Site Remote Access

A single point-to-point tunnel is the right answer for one server and one laptop. The trouble starts when "one box" quietly becomes a fleet: a homelab at home, a mini PC at a relative's house, a couple of cloud VPSes, and a dozen client devices. Suddenly you're hand-managing keys, tripping over overlapping 192.168.1.0/24 subnets, and discovering that device A can reach the server but device B can't reach device A. The tunnel didn't fail — it just stopped being the right shape.

Symptoms that you've outgrown a single tunnel

  • You maintain WireGuard peers by editing config files by hand on every node.
  • Two sites use the same LAN subnet, so routing to "the other 192.168.1.10" is ambiguous.
  • Access is hub-shaped when you need any-to-any (the CGNAT relay pattern gets your apps reachable, but it doesn't make every node talk to every other node).
  • Onboarding a new device means touching every existing node's config.

Option 1: a mesh overlay (least ongoing effort)

A mesh VPN like Tailscale gives every node a stable address on a private network and handles NAT traversal, key rotation, and ACLs centrally. Any node can reach any other node it's allowed to, regardless of which site it's at. For most growing fleets this is the pragmatic answer — the operational cost of hand-managed WireGuard is what you're really trying to escape.

If you want the mesh ergonomics without a hosted control plane, Headscale is an open, self-hosted coordination server that speaks to the same clients — you run the brain yourself and keep the convenience.

Option 2: hub-and-spoke WireGuard (most control)

If you prefer plain WireGuard, scale it deliberately as hub-and-spoke: one or two well-connected hubs (a cloud VPS with a public IP) that every site dials into, with routes advertised so spokes can reach each other through the hub. The discipline that makes this survivable:

  • Non-overlapping subnets — give every site a distinct range (10.10.1.0/24, 10.10.2.0/24, …). Overlapping LANs are the number-one multi-site headache.
  • A single source of truth for peers and AllowedIPs, generated rather than hand-edited.
  • Keepalives on NAT'd spokes so tunnels don't go quiet and drop.

For Linux nodes specifically, watch the stability and DNS gotchas covered in Tailscale on Linux: stability and backups — they apply to WireGuard too.

Option 3: don't mesh what doesn't need to mesh

Not every service needs fleet-wide reachability. Public-facing apps can sit behind a reverse proxy on a hub VPS and be reached over the internet with TLS, while only management traffic rides the overlay. Separating "things the public reaches" from "things only I reach" keeps the private network small and the attack surface smaller. Keep management off routable interfaces entirely — the boundary discipline in safer Docker management boundaries is the same idea applied to the control plane.

Choosing

  • Several sites, many devices, want it to just work: mesh overlay (Tailscale or self-hosted Headscale).
  • You value full control and don't mind the bookkeeping: hub-and-spoke WireGuard with disciplined subnets.
  • Mostly public apps, a little private management: reverse proxy for the public side, a small overlay for the rest.

See the whole fleet in one place

However you connect the fleet, you still need to see it — which node is down, which cert is expiring, which disk is full across sites. A single pane over hybrid infrastructure beats SSHing into each box to check.

ServerCompass dashboard showing several servers across regions in one view One dashboard over a multi-site fleet in ServerCompass — cloud VPSes and home boxes side by side instead of a folder of SSH bookmarks.

A single tunnel is a tool, not an architecture. Once you have a fleet, pick a model that scales onboarding and routing, keep subnets unique, and stop editing peer configs by hand.

wireguard
tailscale
remote-access
networking
fleet

Keep reading

Guide

Home access breaks at the edge when DDNS, tailnets, reverse proxies, and cert verification drift apart

Self-hosted remote access fails in predictable ways: DDNS containers that think nothing has changed, reverse proxies that route correctly inside the network but break at the edge, and WireGuard tunnels that work from everywhere except the one location you frequent most. This guide walks through each failure pattern and the checks that catch them before they strand you.

Guide
8 min

Beginners need one exposure model before mixing tunnels, reverse proxies, VLANs, and Tailscale

Fresh self-hosting threads show beginners combining the right words without a safe operating model. One new self-hoster wants Minecraft, Jellyfin, Tailscale, maybe NAS/cloud storage, Nginx, Cloudflare tunnels or DDNS, Docker or VLANs, fail2ban, firewall…

Guide
7 min

Before You Upgrade a Home Server, Make Sure You Can Still Get Back In

A small network or bootloader mistake during an upgrade can lock you out before the app layer even matters — and a remote box is hard to fix when you can't reach it. A pre-upgrade access preflight.

Guide
7 min

Running Your Router in a VM? Check These Failure Modes Before Apps Depend on It

Virtualizing OPNsense on the same Proxmox box that runs your apps is elegant until a host reboot takes the whole network — including your way back in — down with it. The failure modes to plan for.

Guide
7 min

A Safer Reverse-Proxy Decision Tree for Self-Hosted Media Apps

Should Jellyfin and Immich be public behind a reverse proxy, private over a VPN, or both? A decision tree that weighs privacy, family access, and streaming bandwidth instead of guessing.

Guide
7 min

Container-First Linux Troubleshooting: A Logs, Process, and Network Path for VPS Apps

Troubleshooting a containerized app on a VPS isn't classic Linux debugging — the process, logs, and network live one layer in. A repeatable path from 'it's broken' to the actual cause.