When the standard “open port 443, run Let’s Encrypt” path doesn’t work for you, Orbitr supports three fallbacks: a Cloudflare Tunnel, ngrok for quick public sharing, or a reverse proxy / custom cert workflow you maintain yourself.
🤔 When do I need this?
CGNAT — your ISP shares your public IP with other customers, so port forwarding can’t open ports for you. The admin panel detects this and surfaces a CGNAT warning under Network Diagnostics.
ISP blocks port 443 — some residential plans block inbound 443 as anti-server policy. Without 443, friends can’t reach Orbitr at all and Let’s Encrypt can’t validate either.
Behind an enterprise firewall where opening inbound ports is non-negotiable.
Quick public sharing — you just want a URL friends can hit for an evening, no DNS work.
What You’ll Need
A running Orbitr server with the admin panel open
One of:
Cloudflare Tunnel: a free Cloudflare account (and cloudflared for named tunnels)
ngrok: a free ngrok account
Reverse proxy: a machine to terminate TLS upstream (Caddy, nginx, traefik), or DNS-01 issuance via your DNS provider’s API
Pick a Method
A Cloudflare Tunnel connects your server to Cloudflare’s network, so friends can reach it without you opening any ports on your router. You run cloudflared yourself and point a Named Tunnel at a permanent URL on your own domain.
🤔 What is a Cloudflare Tunnel?
Normally, for someone to reach your server, you need to open a port on your router (port forwarding). A tunnel flips this: your server connects out to Cloudflare, and Cloudflare handles incoming traffic. No router config needed, works behind strict firewalls and CGNAT.
Named Tunnel (permanent URL on your domain)
A named tunnel gives you a permanent URL with your own domain. Requires a free Cloudflare account and a few terminal commands.
Replace the tunnel ID, credentials path, and hostname with your values. noTLSVerify: true is needed because Orbitr’s default origin certificate is self-signed — without it, cloudflared rejects the origin and the tunnel fails. (Cloudflare still serves a valid public certificate to your visitors.)
5
Start the tunnel
Terminal
cloudflared tunnel run orbitr
Your server is now live at https://chat.yourdomain.com.
⚙ Run as a system service (auto-start on boot)
Use cloudflared service install to register as a system service.
The fastest way to get a public link — great for testing with friends or a one-evening session.
ngrok will print a public URL like https://abc123.ngrok-free.app — share it with friends.
⚠️ Warning
The free ngrok URL changes every time you restart. For a permanent address, use a Cloudflare Named Tunnel or upgrade ngrok.
Run a reverse proxy in front of Orbitr. The proxy handles TLS termination and certificate issuance; Orbitr reads PEM files the proxy provides via TLS_MODE=custom, or the proxy hands plain HTTP to Orbitr on the LAN with TLS off.
💡 When this fits
You already run Caddy, nginx, or traefik for other services on the same box; you have a static cert from a private CA; or you want to issue Let’s Encrypt certs externally (via DNS-01 with acme.sh / lego, or your DNS provider’s API).
4113 is only an example local port. Orbitr defaults to 443, but in a reverse-proxy setup the proxy needs 443 for HTTPS, so run Orbitr on any free non-privileged port instead. Whatever you set in PORT, use the same number in your proxy config below.
Caddy — automatic HTTPS with zero config. Caddyfile:
Caddyfile
chat.example.com {
reverse_proxy 127.0.0.1:4113
}
Caddy will provision Let’s Encrypt automatically via TLS-ALPN-01 over port 443. If you don’t have inbound 443 either, use Caddy’s DNS-01 plugin for your DNS provider.
If you’d rather have Orbitr serve TLS directly (e.g. you got a cert from a private CA, or you’re issuing via DNS-01 with acme.sh / lego and want Orbitr to read the resulting PEMs):
Orbitr reads the files at boot and serves them. You handle issuance and renewal in whatever workflow you already use. Restart the server (or trigger a config reload) after rotating the files.
💡 DNS-01 = no inbound port required
Tools like acme.sh and lego solve the LE challenge over your DNS provider’s API instead of via inbound TLS. Drop the resulting PEM files into the paths above and you’re done — no router configuration at all.
Comparison
Named Tunnel
ngrok (free)
Reverse Proxy
Setup time
15–20 min
5 min
30–60 min
Permanent URL
Yes
No
Yes
Custom domain
Yes
Paid only
Yes
Port forwarding
Not needed
Not needed
Depends on issuance method
Hides your IP
Yes
Yes
Depends
Traffic routes through
Cloudflare
ngrok
Direct
Works behind CGNAT
Yes
Yes
Only with DNS-01
Cost
Free
Free / paid
Domain + (optional) cert costs
Troubleshooting
cloudflared not found — install it yourself (winget install Cloudflare.cloudflared) or download it from Cloudflare’s downloads page , then verify with cloudflared --version.
Tunnel failed to start — check internet, ensure nothing else is using the port, your firewall may block outbound. Confirm cloudflared tunnel list shows yours.
URL not reachable — named tunnel not running; DNS not set (run cloudflared tunnel route dns).
Reverse-proxy: certificate validation issues — if Orbitr reads your custom PEM but browsers complain, the chain is likely incomplete. Use the fullchain.pem (cert + intermediates), not just the leaf.
TLS_MODE=custom and the server won’t start — with custom TLS there is no self-signed fallback: if the cert or key path is missing or unreadable, the server fails to boot rather than starting insecurely. Check the boot log for the cert/key error, confirm TLS_CERT_PATH and TLS_KEY_PATH are set to absolute paths, and check file permissions so the server process can read them.
ngrok works but voice doesn’t — ngrok’s free tier proxies HTTPS, not UDP. WebRTC voice traffic uses UDP and can’t tunnel through. Use a Cloudflare Tunnel or a custom domain with port forwarding for voice support.
Privacy
All traffic passes through a third party when using a tunnel (Cloudflare or ngrok). The connection from users to that party is encrypted (HTTPS). Their privacy policy governs handling of metadata. Your identity is unaffected: your keys are generated and held on your own device, and you authenticate by signing a challenge — a tunnel provider can’t read or forge them. (Per-channel and DM end-to-end content encryption is on the roadmap, not yet available; today message content is protected in transit by HTTPS and stored on the server you chose.)
For direct connections where no third party handles traffic, use a custom domain with port forwarding.
Related
Custom Domain Setup — the standard path when port 443 does work, with HTTPS automatic
IP Masking — combine these methods with VPS reverse proxy for stronger IP privacy