I2411 — A server whose mesh is enabled is reachable on the tailnet and the LAN, and only by a trusted peer
When the mesh is enabled, the shared server listens and advertises on the machine's tailnet and LAN addresses as well as loopback, so a trusted peer can dial it, while a request from a non-loopback address stays limited to what runtime-trust allows.
READY wave 0 · p0 · implementation profile · runs alone
Ready. Every dependency is done, so majordomus plan start I2411 will be accepted.
Objective
When the mesh is enabled, the shared server listens and advertises on the machine's tailnet and LAN addresses as well as loopback, so a trusted peer can dial it, while a request from a non-loopback address stays limited to what runtime-trust allows.
Why
The server binds 127.0.0.1 unless --host or MAJORDOMUS_HTTP_HOST says otherwise (apps/majordomus-cli/src/cli.rs:3355-3362) and advertises only loopback (mesh/address.rs:39-45), so two machines on default settings can never dial each other (docs/MESH.md:383-391). The hubs in this repository are servers started by hand on 0.0.0.0.
Current state
Cross-machine links exist only through hand-started hubs.
Desired state
After the remote-caller restrictions of I2123 (PR #860) land, a mesh-enabled server binds the addresses it advertises (tailnet and LAN, never a public interface), the advertised endpoints are the bound ones, and a non-loopback caller is held to the remote-caller rule.
Scope
- apps/majordomus-cli/src/cli.rs
- apps/majordomus-cli/src/shared.rs
- apps/majordomus-cli/src/mesh/address.rs
- docs/MESH.md
- test/cases
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- A server started with the mesh enabled answers a trusted peer on its tailnet address with no --host
- The same server refuses a write from a non-loopback caller, as runtime-trust requires
- A server with the mesh disabled still binds loopback only
Validation
- bin/majordomus plan validate
- cargo test --test serve_lifecycle
Evidence required
- mesh_server_reachable_on_tailnet_test
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I2411.yaml. Read it back with majordomus plan show I2411.