Quick answer

What makes remote access work here is one node rather than many: install Tailscale on the Proxmox host, enable net.ipv4.ip_forward, then run tailscale up –advertise-routes=192.168.1.0/24. The route stays inert until you approve it under Machines, Edit route settings, and Linux clients run tailscale up –accept-routes. MagicDNS then resolves https://proxmox:8006.

By LK Wood IV · 2026-05-25 · ~12 min read · St. Louis County, MO

Topology diagram of a Tailscale homelab: a laptop on hotel WiFi and a phone on cellular connect over the WireGuard mesh tailnet (100.x.x.x, with a DERP relay for CGNAT) to a Proxmox or LXC subnet router advertising 192.168.1.0/24, which reaches the NAS, router admin, Pi-hole, IP camera and printer, with MagicDNS resolving hostname.your-tailnet.ts.net names.

The traditional homelab remote access setup — port forwarding, DynDNS, OpenVPN with certificate management, firewall rules — takes an afternoon to set up correctly and another afternoon to debug when something breaks. Tailscale does the same thing in 20 minutes, handles NAT traversal automatically, and gives you a web UI to manage devices instead of config files scattered across three machines.

This guide sets up Tailscale on a Proxmox host with subnet routing — one node on your LAN that routes Tailscale traffic to every other device on your network, including things that can’t run Tailscale themselves.

What Tailscale is (and isn’t)

Tailscale is a mesh VPN built on WireGuard. Each device you install it on gets a stable IP address in the 100.x.x.x range (the Tailscale IP space, also called a tailnet). Devices in your tailnet can talk to each other directly, peer-to-peer, regardless of what NAT layers are between them.

What it is not: a traditional VPN that routes all your traffic through a central server. By default, only traffic to other tailnet devices goes through Tailscale. Your normal internet traffic goes direct. You can enable exit nodes if you want full traffic routing, but that’s optional.

It is also not the right tool for publishing a service to people who won’t install anything — that’s what a Cloudflare Tunnel is for. Tailscale vs Cloudflare Tunnel covers which job belongs to which, including who can decrypt your traffic on each path. Most homelabs end up running both.

For homelab use, the workflow is:

  1. Install Tailscale on your Proxmox host (or a dedicated LXC/VM)
  2. Enable subnet routing to advertise your home LAN
  3. Install Tailscale on your laptop/phone
  4. Access every device on your home network from anywhere

No port forwarding. No exposed ports. No certificate drama.

Subnet routing advertises your LAN’s exact CIDR (for example 192.168.1.0/24). If you’re not sure of the network address or range to advertise, the subnet & CIDR calculator confirms it from any IP and prefix so you don’t accidentally route the wrong block.

Step 1: Install Tailscale on your Proxmox host

SSH into your Proxmox host and run:

curl -fsSL https://tailscale.com/install.sh | sh

This installs the Tailscale daemon and CLI. After install:

tailscale up

You’ll get a URL — open it in a browser, log in with your Tailscale account (Google, GitHub, or Microsoft SSO, or email), and authorize the device. After authorization, run:

tailscale status

You should see your Proxmox host listed with a 100.x.x.x IP. At this point, the host is in your tailnet and you can reach it from any other Tailscale device. But only the Proxmox host itself — not your NAS, your router’s admin page, or any other device on your LAN.

Step 2: Enable subnet routing

Subnet routing lets this one Tailscale node advertise your entire home LAN to the tailnet. Every other device on your LAN becomes reachable without installing Tailscale on each one.

First, enable IP forwarding on the Proxmox host:

echo 'net.ipv4.ip_forward = 1' | tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | tee -a /etc/sysctl.conf
sysctl -p /etc/sysctl.conf

Then re-run tailscale up with the subnet flag. Replace 192.168.1.0/24 with your actual home LAN range:

tailscale up --advertise-routes=192.168.1.0/24

Check your home LAN range if you’re unsure:

ip route show | grep -v tailscale

Look for a line like 192.168.1.0/24 dev vmbr0 — that’s your LAN range.

Approve the subnet in the Tailscale admin console. Subnet routes require explicit approval before they become active.

  1. Open login.tailscale.com/admin → Machines
  2. Click your Proxmox host → Edit route settings
  3. Enable the 192.168.1.0/24 subnet

After approval, any Tailscale device with subnet route acceptance enabled can reach devices on 192.168.1.0/24 through your Proxmox host.

On client devices. On macOS and iOS, subnet routes are accepted automatically. On Linux clients, run:

tailscale up --accept-routes

On Windows, route acceptance is in the Tailscale system tray menu.

Test it: from your phone (on cellular, not WiFi), try pinging a device on your home LAN by its local IP:

ping 192.168.1.1

If the router responds, subnet routing is working.

Step 3: Enable MagicDNS and resolve local names

MagicDNS lets you reach devices by hostname instead of IP. Enable it in the Tailscale admin console → DNS → Enable MagicDNS.

After enabling, devices in your tailnet are reachable by hostname.your-tailnet-name.ts.net. Your Proxmox host becomes something like proxmox.coral-raccoon.ts.net.

Add your local DNS to Tailscale. If you’re running Pi-hole or a local resolver (common with a homelab), you can push its IP to all Tailscale clients as a nameserver:

  1. Tailscale admin → DNS → Add nameserver
  2. Enter your Pi-hole’s Tailscale IP (100.x.x.x) or LAN IP
  3. Enable “Override local DNS” if you want all DNS going through Pi-hole even when away from home

Now you can SSH to proxmox or open the Proxmox web UI at https://proxmox:8006 from anywhere on your tailnet — without remembering IPs or fighting DNS.

Step 4: Running Tailscale in an LXC (optional)

If you’d rather not install Tailscale directly on the Proxmox host (to keep the host clean), run it in a dedicated LXC container configured as the subnet router.

Create a Debian 12 LXC in Proxmox. In the LXC options, enable:

  • Features → TUN device — required for Tailscale’s WireGuard tunnel

Then inside the LXC:

apt update && apt install -y curl
curl -fsSL https://tailscale.com/install.sh | sh

Enable IP forwarding inside the container:

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

Then:

tailscale up --advertise-routes=192.168.1.0/24

Approve the subnet in the admin console as before. The LXC acts as the Tailscale gateway for the whole network while keeping the Proxmox host itself clean.

Step 5: SSH key setup for password-free access

Once Tailscale is running, you can SSH into your Proxmox host via its Tailscale IP. To make this keyless:

# On your laptop — generate a key if you don't have one
ssh-keygen -t ed25519 -C "homelab-access"

# Copy to Proxmox host
ssh-copy-id root@100.x.x.x  # use Proxmox's Tailscale IP

Add an entry to ~/.ssh/config on your laptop:

Host proxmox
  HostName 100.x.x.x
  User root
  IdentityFile ~/.ssh/id_ed25519

Now ssh proxmox from anywhere connects through Tailscale. Works on cellular, works through hotel WiFi, works through CGNAT — no port forwarding, no exposed SSH port on the internet.

Tailscale ACLs: limiting access

By default, every device in your tailnet can reach every other device. For a personal homelab this is fine. If you’re sharing the tailnet (letting a family member access the Plex server but not the Proxmox UI), use ACLs.

In the Tailscale admin console → Access Controls:

{
  "acls": [
    {
      "action": "accept",
      "src": ["tag:homelab"],
      "dst": ["*:*"]
    },
    {
      "action": "accept",
      "src": ["tag:family"],
      "dst": ["100.x.x.x:32400"]
    }
  ],
  "tagOwners": {
    "tag:homelab": ["autogroup:owner"],
    "tag:family":  ["autogroup:owner"]
  }
}

This allows your homelab-tagged devices full access, while family-tagged devices can only reach port 32400 (Plex). Tailscale ACLs use a JSON5 format documented at tailscale.com/kb/1018/acls.

Troubleshooting

Connection goes through a relay (DERP). Run tailscale status and look for relay in the connection type. This usually means direct peer connection failed due to both sides being behind strict NAT. Check if your home router has UPnP or if you can open UDP 41641 on the external interface — that helps Tailscale establish direct connections.

Subnet routes not working. Confirm you:

  1. Ran tailscale up --advertise-routes=... with the right CIDR
  2. Approved the route in the admin console
  3. On the client, ran tailscale up --accept-routes

Can’t reach a specific device on the subnet. Make sure the device’s default gateway is your home router, not a Proxmox bridge. Devices need to send return traffic back through the router, which routes it to the Proxmox subnet router.

Tailscale service down after Proxmox update. Proxmox updates occasionally reset package configurations. Check systemctl status tailscaled and journalctl -u tailscaled if Tailscale stops working after an update.

What about Headscale?

Headscale is a self-hosted, open-source implementation of the Tailscale control plane. You run your own coordination server instead of using Tailscale’s cloud service. This gives you full data sovereignty and no dependency on Tailscale’s infrastructure.

The tradeoff: setup is more involved, you manage the server yourself, and some Tailscale features (MagicDNS, the mobile app) have partial or no Headscale support. For a personal homelab where the free Tailscale tier covers you and you trust Tailscale’s service terms, the cloud version is simpler. For a privacy-critical deployment, Headscale is worth the effort.

Persistent setup with systemctl

Make sure Tailscale starts at boot:

systemctl enable --now tailscaled

This is set by default during install, but verify it if you’re on a minimal install. Without this, Tailscale stops on reboot and your remote access disappears.


Accessing your homelab remotely is step one. Protecting it with a UPS is step two — Tailscale can’t help you if the power cuts out while you’re away. The Power & Cost Calculator shows what running a always-on Tailscale gateway node costs per year. Prefer to run your own coordinator with no cloud dependency? The WireGuard self-hosted VPN guide covers setting up a WireGuard server in a Proxmox LXC as a direct Tailscale alternative — or, if you want to keep Tailscale’s zero-config mesh experience while owning the control plane yourself, NetBird vs Tailscale weighs the open, self-hostable option.

Sources

Frequently asked questions

Is Tailscale free for homelab use?
Yes. The free plan supports up to 100 devices and 3 users — more than enough for any homelab. The paid plans add ACL auditing, device approval, and larger user counts. For a personal homelab you will not hit the free plan’s limits.
Does Tailscale replace a VPN like WireGuard or OpenVPN?
Tailscale uses WireGuard under the hood. It replaces the manual setup work — key exchange, NAT traversal, IP assignment, DNS — not the underlying protocol. If you already have a WireGuard setup working perfectly, Tailscale doesn’t add much. If you’re starting fresh, Tailscale is dramatically faster to configure. For the full side-by-side, see Tailscale vs WireGuard.
What is a Tailscale subnet router?
A subnet router is a Tailscale node that advertises your LAN’s IP range to other tailnet members. Instead of installing Tailscale on every device on your LAN, one node (your Proxmox host or a gateway LXC) routes Tailscale traffic to the rest of your local network. This lets you reach a printer, an IP camera, or a NAS that can’t run Tailscale directly.
Can I run Tailscale inside a Proxmox LXC container?
Yes, but the LXC needs TUN device access. In Proxmox, go to the LXC container’s Options → Features and enable ‘TUN device’. Then install Tailscale normally inside the container.
Does Tailscale work through CGNAT?
Yes. This is one of Tailscale’s main advantages. Tailscale uses DERP relay servers to punch through carrier-grade NAT when direct peer connections aren’t possible. Connection setup may be slightly slower through a relay, but it works where manual WireGuard port forwarding would fail completely.

Evidence ledger

Last updated
Methodology
This tutorial was written and edited by Lowell K. Wood IV in St. Louis County, MO. Specs, prices, commands, and version numbers are drawn from the official vendor, reseller, and project documentation current on the date above, and were verified before publishing. First-person hardware claims appear only where the article shows a verifiable artifact — a photo, receipt, or measurement — or links to the TechFuelHQ Open Bench Datasets. Every fact is human-verified against its cited source before publishing; AI assists with first-draft structure and source-gathering, not with the verdict. Full editorial standard: methodology.
Update log
  • 2026-07-25 — Last reviewed and updated.
Corrections
Spotted an error or stale price? Email hello@techfuelhq.com. Confirmed corrections are added to the update log above.

About the author

Written by Lowell K. Wood IV. Lowell builds and runs TechFuelHQ from St. Louis, Missouri, pairing thirteen-plus years of hands-on homelab, PC, server, and networking experience with cited third-party testing and first-party benchmarks on the gear he still runs. He also works ground EMS as a Nationally Registered Paramedic (NREMT).