Files
DorkNet/tools/cloudflared.README.md
T
Alexa d471b418b9 Import march-2020-03-10 from private repo (scrubbed 2026-05-27)
Targets Rec Room 2020.03.10 client (also serves 2020.03.06).

Re-import after adding:
- DorkNet.ClientMod/dorknet-clientmod.json.template — config schema
  the launcher's manifest-driven patcher renders into UserData/.
- tools/build-patcher-zip.ps1 — produces dorknet-clientpatch-{key}.zip
  for v1-march-* Release uploads.
- .github/workflows/release.yml — on tag push publishes both
  dorknet-server-march_2020_03_10-win-x64.zip and
  dorknet-clientpatch-march_2020_03_10.zip as Release assets.

Same scrub rules as december; tools/build-patcher-zip.ps1 added to
the maintainer-side allow-list so it survives.
2026-05-27 01:06:12 +03:00

3.5 KiB

Cloudflare Tunnel for localhost

Stand up a Cloudflare Tunnel that exposes your local DorkNet server on *.localhost for public testing — without opening port 443 on your firewall, and using Cloudflare's real Let's-Encrypt-equivalent cert edge-side so visitors don't need your mkcert CA installed.

When to use this

  • You want a friend to play the patched 2020 Rec Room client against your server, but they're not on your LAN and don't want to install your local CA.
  • You want https://admin.localhost / https://feed.localhost reachable from any browser, not just yours.

Prerequisites

  1. localhost is on a Cloudflare account you control. The DNS nameservers for the domain need to be Cloudflare's. Check at https://dash.cloudflare.com/ — the zone should be Active.
  2. Local server running on 0.0.0.0:443 with the wildcard cert that covers *.localhost (re-run tools/patch-client.ps1 if your cert is still the +1 rec.net-only one — it'll regenerate as +3 covering both domains).
  3. Patched client with tools/patch-domain.ps1 so the in-game URLs resolve to *.localhost. (Players using the public deployment need to run this on their own client too.)

One-shot setup

PS C:\…\Recnet> .\tools\setup-cloudflared.ps1

The script:

  1. Installs cloudflared via winget if missing.
  2. Runs cloudflared tunnel login — opens a browser, you pick the localhost zone, Cloudflare drops cert.pem into %USERPROFILE%\.cloudflared\.
  3. Creates a named tunnel called dorknet (or reuses one if it already exists).
  4. Generates %USERPROFILE%\.cloudflared\config.yml from the tools/cloudflared-config.yml.template template, filling in the tunnel id and credentials path.
  5. Adds DNS CNAMEs for every localhost subdomain DorkNet uses (api, auth, accounts, match, notify, ns, admin, feed, …).

Run the tunnel

Foreground (for testing — Ctrl+C to stop):

cloudflared tunnel run dorknet

Or install as a Windows service so it survives reboots:

cloudflared service install

What happens at request time

visitor → https://api.localhost/api/versioncheck/v4
        → Cloudflare edge (real LE cert, validated)
        → cloudflared tunnel
        → cloudflared (running on your machine)
        → https://localhost:443  (Host: api.localhost, mkcert cert)
        → DorkNet.Server matches [Host("api.localhost")] → handler runs

The leg from cloudflared → localhost has noTLSVerify: true because the local server's cert is from mkcert (private CA only trusted on your machine). The Cloudflare-edge → cloudflared leg is still TLS-encrypted with their cert, so this isn't a security weakening — it's just acknowledging that "127.0.0.1 with self-trusted cert" is where the trust chain ends.

Tearing down

cloudflared service uninstall   # if you ran service install
cloudflared tunnel delete dorknet

DNS records left behind in the Cloudflare dashboard need to be deleted manually if you want them gone.

Limits / caveats

  • Photon traffic is NOT proxied. Cloudflare Tunnel is HTTP-only; the realtime Photon connection still hits the public Photon Cloud directly, with the AppId from your appsettings.json. That's fine — Photon doesn't go through your server.
  • WebSocket support is on by default in modern cloudflared, so the SignalR notify hub works through the tunnel.
  • Free tier rate limits — Cloudflare Free is generous for a small private server but watch the dashboard if you scale up.