ADR 0191: domains are a node's — one internal, one or more public; the roster is the machines
This commit is contained in:
@@ -14,11 +14,12 @@ supersedes-in-part:
|
||||
> **Progressive insight — 2026-10-03.** The first implementation told the mesh's names from public
|
||||
> ones by their spelling — a name ending in the mesh suffix — and this record said so: the Decision
|
||||
> read *"only names under its own suffix"*, and the roster check *"every name the roster carries ends
|
||||
> in the mesh suffix"*. The mesh needs no such test: it composes both names of every route itself,
|
||||
> `name` from the node's public domain and `internal-name` from its own domain under the serving node
|
||||
> (ADR 0151), and publishes the second. Which names are its own is known from where each was
|
||||
> composed. Both sentences now say that; what was decided — a public name is never given a private
|
||||
> answer — is unchanged.
|
||||
> in the mesh suffix"*. The mesh needs no such test, nor any per-route name: domains are a node's. A
|
||||
> node has **one internal domain**, `<node>.internal`, and every route on it is a name under that domain
|
||||
> (ADR 0151), answered by one wildcard per node; a node has **one or more public domains**, which public
|
||||
> DNS answers. So the mesh's resolver holds the nodes' internal domains and nothing else, and the roster
|
||||
> carries the machines and no routed name. Both sentences now say that; what was decided — a public
|
||||
> name is never given a private answer — is unchanged.
|
||||
|
||||
## Context
|
||||
|
||||
@@ -72,8 +73,8 @@ every public name the mesh serves, is forwarded and resolves publicly. Chosen.
|
||||
|
||||
## Decision
|
||||
|
||||
**The mesh publishes into internal resolution only the names it composes for itself** — a
|
||||
machine's name, and each route's `internal-name`, never a route's public `name`. A machine's name,
|
||||
**The mesh's resolver holds each node's internal domain and nothing else** — `<node>.internal` and
|
||||
everything under it, at that node's private address. A machine's name,
|
||||
and through it every `<label>.<node>.internal`, resolve to that machine's private address. **A public
|
||||
name is never given a private answer by the mesh**: it resolves through public DNS to the public
|
||||
address, from members and non-members alike.
|
||||
@@ -103,8 +104,8 @@ reachability — the lab — certifies its internal names and has no public name
|
||||
|
||||
**How each is checked:**
|
||||
|
||||
- **The roster:** the controller's catalogue tests assert that the names served are routes'
|
||||
internal names and that no route's public name is among them — one published fails the build.
|
||||
- **The roster:** the controller's tests assert that the roster names the machines and nothing
|
||||
else — a routed name in it, public or internal, fails the build.
|
||||
- **On a machine:** asking the machine's resolver for a public name the mesh serves returns the
|
||||
public address, and asking it for that route's internal name returns the private one. Asked from a
|
||||
non-member on a LAN the resolver answers, the first must hold as well.
|
||||
|
||||
Reference in New Issue
Block a user