Skip to content

Tailscale

Tailscale provides a private mesh VPN for direct access to homelab services. While Cloudflare Tunnel handles public/third-party access with email-based authentication, Tailscale is the private/admin channel — used for services like Home Assistant’s iOS app, SSH, Backrest, and Cockpit where Cloudflare Access prompts are inconvenient.

MethodPurposeURL Pattern
CloudflarePublic/third-party accesshttps://<svc>-home.javiersc.com
TailscalePrivate/admin access (no login prompt)http://<tailscale-ip>:<port>

After deploying this module, authenticate the node once:

Terminal window
sudo tailscale up --accept-routes --ssh

Follow the link in the output to log in to your Tailscale account. After the first login, Tailscale persists authentication in /var/lib/tailscale and reconnects automatically on subsequent boots.

If re-provisioning from scratch, generate a new reusable auth key in the Tailscale admin console and store it in 1Password as Tailscale - Auth Key. The tailscale-secrets systemd service will inject it before tailscaled starts.

PortProtocolPurpose
41641UDPWireGuard (Tailscale)

The tailscale0 interface is trusted (all traffic allowed through it).

  • --accept-routes: Accepts subnet routes advertised by other Tailscale nodes.
  • --ssh: Enables Tailscale SSH for secure shell access without key management.
  • No exit node: The miniPC does not route all traffic for connected devices.
  • No Tailscale Funnel: Services are not exposed through Funnel.

The Home Assistant iOS app should connect via the Tailscale IP (e.g., http://100.82.100.68:8123) instead of the Cloudflare Access URL. This avoids the login prompt entirely.

Configure the Home Assistant companion app with the Tailscale IP as both internal and external URL.

Tailscale state (/var/lib/tailscale) is included in Restic backups. The .local subdirectory (temporary files) is excluded.