proximo

A peer host is answered without rewriting Host

A request from a colleague arrives at Traefik carrying a peer name, which is not under the machine's TLD. Something has to make the route answer it. The tempting answer is to have the transport rewrite Host to the .test name at its edge, so that proximo changes nothing.

Decision. proximo writes a second HTTP router for a shared route, on the existing websecure entrypoint, matching the route's peer names. It points at the same service as the local router and carries the same middleware chain. Host is never rewritten, on any layer.

What an interactive session gets, measured on the relayed path: X-Forwarded-Proto: https and X-Forwarded-Host set to the peer name, so an app that builds URLs from the request needs no change; a login that holds across navigation; a WebSocket upgrade proxied as any other, with Origin and Host agreeing.

Considered options

The transport rewrites Host. Rejected for the reasons above (#78).

TLS terminated outside Traefik, by a proxy or by the transport. Rejected: it is the same extra edge, and it would split certificate handling between two components.

A dedicated entrypoint bound to the mesh address, so "this request came from a colleague" would be a property of the listener. Rejected: Traefik runs in a container and cannot see the host's mesh interface, so it would need a second published port and a host-side bind.

A mesh client inside the stack, or a routing peer advertising the Docker network. Rejected on ownership: proximo would own mesh enrolment, which belongs to the person at the machine, and the machine's other mesh traffic would need a second client anyway.

A second service that skips Inspection for peer requests. Rejected: the peer request would stop being the local one.

Consequences