Skip to content

[Investigate] Tailscale (mesh VPN) for secure remote dashboard access — the response path to #79/#121 alerts (opt-in, default off) #262

Description

@VijitSingh97

Goal

Investigation / spike (not a committed build): evaluate Tailscale (WireGuard mesh VPN) as an opt-in, default-off way to reach the dashboard — and other stack services — securely from anywhere, with no exposed ports and no public IP. Decide a recommended pattern (sidecar container vs host install, tailscale serve for the dashboard) and whether it warrants a small compose profile + a doc, or docs-only.

Why this is scheduled alongside #79 / #121 / #99 (the alerting work)

Alerting tells the operator "something's wrong." It does not give them a way to look and act. Tailscale is the response path to the alerts:

Shipping alerts without a clean remote-look path leaves the loop half-closed — hence: investigate it in the same v1.2 slice.

Viability — looks high, low effort (to confirm)

Privacy caveat — must be addressed head-on (this is a Tor-first project, see #160)

  • Tailscale's data plane is E2E WireGuard, but its control plane is a SaaS coordination server (Tailscale Inc.) that sees node metadata (keys, endpoints, coordination). That's a philosophical wrinkle for a Tor-everything stack.
  • Therefore: opt-in, default off (consistent with the privacy-first-defaults stance and the clearnet-sync Feature: optional clearnet initial sync (Monero + Tari) then switch to Tor — default off, privacy-first #183 pattern). When off, nothing runs and nothing phones home.
  • Flag Headscale (open-source, self-hostable drop-in control server) as the privacy-pure option — config must allow a custom control-server URL, not just Tailscale's.
  • Honest positioning: this is a convenience tier over the existing Tor onion path, not a new capability. The onion service stays the privacy-maximalist default; Tailscale is for operators who find Tor too slow/clunky for a live dashboard on mobile.

Alternatives to weigh in the spike

  • Tor onion service (already the project's remote path) — keep as default; Tailscale is the opt-in convenience layer.
  • Headscale — self-hosted control plane; the privacy answer.
  • Plain WireGuard — no SaaS at all, but manual key/peer management (more setup friction).
  • Cloudflare Tunnel / Nebula — another SaaS / more setup; worse privacy or worse ergonomics. Note and move on.

Config sketch (config.json, default off — to be refined by the spike)

"tailscale": {
    "enabled": false,
    "auth_key": "",                       // ephemeral, tagged; secret → .env, owner-only, never logged
    "control_url": "",                    // blank = Tailscale SaaS; set for self-hosted Headscale
    "serve_dashboard": true,              // publish dashboard via `tailscale serve` (HTTPS + MagicDNS)
    "hostname": "pithead"
}

Outputs / acceptance criteria (it's a spike — deliver decisions + a recommendation)

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationenhancementNew feature or requestinfraDeployment, packaging, releasessecuritySecurity-sensitive issue or hardening

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions