01 The shape
A tunnel connector runs in a dedicated always-on container and holds outbound QUIC connections to the edge. Public hostnames map to internal origins through the tunnel's ingress rules. Nothing listens on the WAN, and the origin addresses are never published.
Authentication sits in front: the edge access layer delegating to an OIDC provider, with a central directory as the identity store and group membership driving authorisation.
02 Two failures worth recording
The OIDC provider rejecting X-Forwarded-Proto: http. The connector speaks plain HTTP to the backend, but the provider's OIDC implementation requires HTTPS in that header or it generates OAuth redirect URIs with the wrong scheme. The fix is a small nginx shim in front that injects the correct header before proxying.
A connector on a stopped container reading as a total outage. Most hostnames appeared to work — they returned 302s. Those 302s were access-layer login pages, served at the edge, entirely independent of whether the origin was alive. Only the one hostname not behind the access layer showed the real error.
The lesson generalises past this stack: when an auth layer can answer on behalf of a dead origin, a green check on the front door tells you nothing about the building. Probe something that must reach the origin to succeed. That probe is part of what we hand over.
03 Auditing it later
An access layer is only as good as the last time someone checked it still covers everything. A later review tabulated all 35 published hostnames against the 28 access rules in force — every hostname in a row, the rule that guards it in the column — so a gap is a visible empty cell rather than an assumption. There were none.
The same review restored the true client address behind the tunnel, so per-address controls act on the visitor rather than on the proxy in front, and read back 15,087 logins from the access log. None was unexpected.