Matrix: migrate from mesh0:6167 to public TLS (matrix.et0.pw) #34
Labels
No labels
blocked
conflicted
curated
in-progress
in-review
needs-decision
No milestone
No project
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
larandar/flaky-mesh#34
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Stable ID: FM-MATRIX-PUBLIC
Source: owner ruling 2026-08-06 (mesh decommission, #32)
Disposition: open — hard migration
Blocked by: #33 (Forgejo OIDC — proves the Authelia OIDC provider is production-grade before Matrix depends on it)
Epic: #32 (mesh decommission)
Problem
Matrix (tuwunel on bifrost) currently serves clients over mesh0:
listenAddress = "0.0.0.0", port 6167, plain HTTP, firewall gated to the meshinterface. The mesh is the encryption — no TLS needed because wireguard
membership is the trust boundary.
With mesh0 decommissioned, that path disappears. Matrix must move to public
ingress: TLS, a public hostname, and federation delegation that survives the
transition.
Two failure modes are silent:
Federation delegation —
/.well-known/matrix/*must serve correct JSONfrom
et0.pw. A delegation that serves 200 with subtly wrong JSON failsfederation silently — a remote server cannot resolve
@you:et0.pw. This isthe same trap DEFERRED.md already flags, and it applies doubly here because
the delegation target itself is moving.
Client connections — mobile clients currently reach the homeserver over
mesh0. Moving to public means the client configuration changes. A client
pointed at a mesh address that no longer resolves fails with a generic
connection error that doesn't point at the cause.
Scope
TLS + public hostname.
matrix.et0.pwalready exists as a DNS name.Caddy (on bifrost) serves it with TLS — Cloudflare proxy certificate or
Let's Encrypt, whichever the fleet standard is post-mesh.
Homeserver listener. tuwunel continues listening on
0.0.0.0:6167, butCaddy proxies
matrix.et0.pw:443→localhost:6167. The firewall opens443 on the public interface, not 6167.
Federation delegation.
/.well-known/matrix/serverand/.well-known/matrix/clientserved fromet0.pw(on bifrost's Caddy).Verify against real federation — a remote server must resolve
@you:et0.pwand deliver a message. Serving 200 is not enough.Client migration. Mobile clients reconfigured to
matrix.et0.pw.Registration token handling stays as-is (
registrationTokenFile).Wolves. The planned accounts (
@freki:et0.pw,@geri:et0.pw, backlog.md)assumed mesh-only plain HTTP to bifrost:6167. They now connect over public
TLS like any other client.
Non-scope
Only the network path changes.
Acceptance
matrix.et0.pwserves TLS on 443 via Caddy/.well-known/matrix/serverserves correct delegation JSON fromet0.pw/.well-known/matrix/clientserves correct client discovery JSON@you:et0.pwProvenance
Owner ruling 2026-08-06. Matrix is one of the two hard migrations blocking
mesh decommission (#32). Current config:
listenAddress = "0.0.0.0", port6167, mesh-firewall-gated, plain HTTP. Public name
matrix.et0.pwexists.DEFERRED.md's federation verification step ("verify federation actually works")
is an acceptance criterion here, not a TODO.