Skip to the content.

Remote Access

Reaching the Project Dashboard from outside its LAN — current topology, the Tailscale recipe, and the hard limits that stay by design.

Status

Verified-pattern-pending-rollout. Recon on 2026-08-25 confirmed Tailscale is not installed on the dev machine (no tailscale binary in any standard path, no tailscaled systemd unit, nothing in snap or dpkg). The recipe below is the proven pattern for this exact shape of problem; it has not yet been executed on this deployment. When Tailscale lands, follow Rollout and record the resulting URL at the top of this page.

Current Topology (verified 2026-08-25)

Piece Binding Reachable from
Dashboard (staging) 0.0.0.0:8120 on the LAN dev machine (192.168.0.81) Any LAN host — verified HTTP 200 from a second LAN vantage
OpenClaw gateway wss://127.0.0.1:18789, loopback-only inside WSL2 Only processes inside the same WSL2 network namespace

What this means:

Why the Gateway Constraint Is Harmless

The browser never talks to the gateway directly. Realtime flows:

browser  ←SSE—  dashboard (:8120)  ←WSS—  gateway bridge (server-side)  →  gateway (127.0.0.1:18789)

The bridge lives inside the server process (lib/gateway-bridge.js, GATEWAY_BRIDGE_URL, derived from openclaw.json — see Configuration Reference); the browser consumes GET /api/events/stream. Because mediation is server-side, remote access only ever needs the dashboard port. See Shell Architecture for the realtime pipeline.

Why Tailscale Serve

A tailnet + reverse-serve pattern gives off-LAN access without opening any port to the internet:

Rollout (when Tailscale is installed)

On the dev machine:

# 1. Install + authenticate (once)
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

# 2. Enable HTTPS certificates for the tailnet (once, admin console):
#    https://login.tailscale.com/admin/dns -> HTTPS Certificates -> Enable

# 3. Serve the dashboard (the only service change)
tailscale serve --bg --https=443 http://127.0.0.1:8120

Result: https://<dev-machine>.<tailnet>.ts.net/ proxies to the local dashboard. The shorthand tailscale serve --bg 8120 is equivalent.

Verify from a second tailnet device (phone, another PC):

curl -sI https://<dev-machine>.<tailnet>.ts.net/ | head -5   # expect HTTP 200

Then open the URL in a browser, authenticate with the dashboard bearer token, and confirm the PWA install prompt appears.

Roll back / disable:

tailscale serve --https=443 off

What Does Not Work (by design)

Security Notes