From f433fc2b2af6612aaa2075e772148464bc8c418b Mon Sep 17 00:00:00 2001 From: Thore Cimbal Date: Sat, 15 Aug 2026 12:00:00 +0000 Subject: [PATCH] =?UTF-8?q?docs(adr):=20ADR-0017=20=E2=80=94=20split-DNS?= =?UTF-8?q?=20as-built,=20each=20zone=20justified=20by=20measurement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Corrects only the split-DNS line of ADR-0004 (frozen once accepted, hence a separate ADR). Rather than documenting 'four zones exist', it measures what each one does: ~lab and ~axionlabs.de resolve names that exist only internally or differently (git.lab, and ca.axionlabs.de as real split-horizon to the step-ca), ~axion1337.de carries the internal-only git.axion1337.de, and ~lab.de carries nothing at all while routing a foreign public domain through the lab resolver — so it goes. This also answers the audit's rollback option: reverting to ~lab alone would have broken internal CA and git resolution. The purpose was never written down, which is why rolling back would have been blind. Co-Authored-By: Claude Opus 4.8 --- STATUS.md | 3 +- docs/adr/0017-split-dns-cfgmon-vier-zonen.md | 94 +++++++++++++++++++ ...01-acht-widersprueche-aus-dem-labnet-02.md | 26 +++++ 3 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 docs/adr/0017-split-dns-cfgmon-vier-zonen.md diff --git a/STATUS.md b/STATUS.md index c7cc8c7..947da10 100644 --- a/STATUS.md +++ b/STATUS.md @@ -43,7 +43,7 @@ Verteilung: M1 6 · M2 18 · M4 2 · M5 4 _none active_ -## ADRs (16) +## ADRs (17) | ADR | Status | Title | |---|---|---| @@ -63,6 +63,7 @@ _none active_ | [0014](docs/adr/0014-wikijs-loest-docusaurus-ab.md) | accepted | 0014 — Wiki.js löst Docusaurus ab: abgeschottete Betriebs-/Anwenderdoku, docs-as-code | | [0015](docs/adr/0015-wiki-git-storage-ueber-gitea-kanonisieren.md) | accepted | 0015 — Wiki.js Git-Storage: Inhalt fließt Cluster→Gitea→kanonisiert nach git.lab | | [0016](docs/adr/0016-notfallhandbuch-nicht-spiegeln.md) | accepted | 0016 — Das Notfallhandbuch bleibt lab-intern und wird nicht gespiegelt | +| [0017](docs/adr/0017-split-dns-cfgmon-vier-zonen.md) | accepted | 0017 — Split-DNS auf CFGMON: vier Zonen statt einer, je Zone begründet | ## Open AARs (2) diff --git a/docs/adr/0017-split-dns-cfgmon-vier-zonen.md b/docs/adr/0017-split-dns-cfgmon-vier-zonen.md new file mode 100644 index 0000000..b11ccd6 --- /dev/null +++ b/docs/adr/0017-split-dns-cfgmon-vier-zonen.md @@ -0,0 +1,94 @@ +--- +type: adr +id: "0017" +status: accepted +date: 2026-08-15 +supersedes: null +superseded_by: null +related: + - "docs/adr/0004-site-to-site-vpn-hetzner-lab.md" + - "docs/issues/0027-audit-01-acht-widersprueche-aus-dem-labnet-02.md" +--- + +# 0017 — Split-DNS auf CFGMON: vier Zonen statt einer, je Zone begründet + +**Status:** akzeptiert · **Datum:** 2026-08-15 · **Entscheider:** sorb + +## Kontext + +[ADR-0004](0004-site-to-site-vpn-hetzner-lab.md) beschreibt in der CFGMON-Zeile +*„Split-DNS nur `~lab` → `10.58.73.1`"*. Tatsächlich konfiguriert sind seit +2026-08-01 (auf sorbs Ansage, `/etc/wireguard/lab.conf`, festgehalten nur im +CFGMON-AAR, Nachtrag 2) **vier** Zonen: `~lab`, `~lab.de`, `~axion1337.de`, +`~axionlabs.de`. Aufgefallen im Selbst-Audit als W1 von +[#0027](../issues/0027-audit-01-acht-widersprueche-aus-dem-labnet-02.md). + +ADRs sind nach Annahme eingefroren; der As-built-Stand lässt sich nicht in +ADR-0004 nachtragen. Diese ADR korrigiert **ausschließlich diese eine Zeile** — +die VPN-Architektur aus ADR-0004 bleibt unberührt und gültig. + +Befürchtet wurde: Löst der Lab-Resolver `axion1337.de` anders auf als die +öffentliche Sicht, ändert sich unbemerkt der Pfad zum Gitea-Mirror +(`rohana.axion1337.de`) — also zur Flux-Quelle. + +## Messung (2026-08-15, vom Lab-VLAN gegen `10.58.73.1`, verglichen per DoH) + +**Die Befürchtung trifft nicht zu.** Kein einziger Record weicht ab — geprüft +wurden A, MX, TXT (SPF/DMARC), CNAME (DKIM), nur öffentlich existierende +Subdomains sowie Records, die **einen Tag zuvor** angelegt (`rohana` MX `0 .`, +`_dmarc.rohana`, SPF `-all`) bzw. **gelöscht** wurden (`www.rohana`, `ftp`). +Der Lab-Resolver hält für `axion1337.de` **keine eigene Zone**, sondern reicht +live nach oben durch. Das von ihm gesetzte `aa`-Flag ist eine Eigenheit des +UniFi-Resolvers und war der irreführende Teil, der den Verdacht überhaupt +begründet hat. + +Was die vier Zonen tatsächlich leisten: + +| Zone | Nachweis | Urteil | +|---|---|---| +| `~lab` | `git.lab` → `10.58.73.17`, `wiki.lab` → `10.58.73.17`; öffentlich **NXDOMAIN** | **notwendig** — ohne sie kein git.lab (266 Fundstellen in der Doku) | +| `~axionlabs.de` | `ca.axionlabs.de` → **`10.58.73.13`** intern vs. `91.195.241.232` öffentlich | **notwendig** — echtes Split-Horizon auf die interne step-ca | +| `~axion1337.de` | `git.axion1337.de` → **`10.58.73.13`** intern, öffentlich NXDOMAIN; alle übrigen Namen identisch zur öffentlichen Sicht | **notwendig** für den internen Namen; für den Rest wirkungslos, aber schadlos | +| `~lab.de` | kein interner Name gefunden; `lab.de` löst identisch zur öffentlichen Sicht auf (`52.59.124.117`, **fremde Domain**); keine einzige Fundstelle im Repo | **ohne belegbaren Zweck** | + +## Entscheidung + +1. **`~lab`, `~axionlabs.de` und `~axion1337.de` bleiben** und sind hiermit als + As-built dokumentiert. Jede der drei löst mindestens einen Namen auf, den es + öffentlich nicht oder anders gibt — sie sind kein Versehen. +2. **`~lab.de` wird entfernt.** Es leitet Anfragen für eine **fremde** öffentliche + Domain über den Lab-Resolver, ohne dass ein interner Name darunter existiert + oder das Repo sie irgendwo verwendet. Heute schadlos (der Resolver reicht + durch), aber eine Umleitung ohne Zweck ist eine Angriffs- und Fehlerfläche, + die niemand pflegt. +3. **Kein Rückbau auf `~lab` allein.** Das hätte `ca.axionlabs.de` und + `git.axion1337.de` unauflösbar gemacht — der Rückbau wäre ins Blinde gegangen, + weil der Zweck der Zonen nirgends festgehalten war. Genau das ist die Lücke, + die diese ADR schließt. + +## Konsequenzen + +- **Offene Handlung:** `~lab.de` aus `/etc/wireguard/lab.conf` auf CFGMON + entfernen (`Domains =`-Zeile), Dienst neu laden, mit `resolvectl domain` + gegenprüfen. Bis dahin bleibt der Ist-Zustand vierzonig. +- **Der Verdacht aus W1 ist ausgeräumt und belegt** — künftige Sessions müssen + ihn nicht erneut prüfen. Die Messung steht oben, nicht nur ihr Ergebnis. +- **`aa`-Flag ist hier kein Autoritätsbeweis.** Wer künftig auf UniFi-Resolvern + misst, darf daraus nicht auf eine lokale Zone schließen; nur der + Datenvergleich gegen die öffentliche Sicht entscheidet. +- **Die ACME-Resolver-Festnagelung** in Traefik + (`dnschallenge.resolvers=1.1.1.1:53,8.8.8.8:53`, `thread-net-git` `8d089e2`) + bleibt sinnvoll (deterministisch, umgeht Negativ-Caching), ist aber **kein** + Sicherheitsnetz gegen diese Zonen — eine gegenteilige Behauptung in #0027 wurde + nach der Messung korrigiert. + +## Verworfene Alternativen + +- **ADR-0004 nachbessern:** nicht zulässig, ADRs sind nach Annahme eingefroren — + deshalb diese eigene ADR statt einer stillen Korrektur. +- **Alle vier Zonen belassen und nur dokumentieren:** hätte `~lab.de` als + „historisch gewachsen" zementiert, ohne dass irgendwer einen Zweck benennen + kann. Eine Ausnahme, die niemand begründen kann, ist keine Ausnahme, sondern + ein Rest. +- **Rückbau auf `~lab`** (die zweite Option aus W1): bricht die interne CA- und + git-Auflösung, siehe Messung. diff --git a/docs/issues/0027-audit-01-acht-widersprueche-aus-dem-labnet-02.md b/docs/issues/0027-audit-01-acht-widersprueche-aus-dem-labnet-02.md index 4deb906..d93f16f 100644 --- a/docs/issues/0027-audit-01-acht-widersprueche-aus-dem-labnet-02.md +++ b/docs/issues/0027-audit-01-acht-widersprueche-aus-dem-labnet-02.md @@ -219,3 +219,29 @@ niemand entscheiden, ob ein Rückbau auf `~lab` etwas kaputtmacht. Empfehlung da **ablösender ADR mit dem As-built-Stand** samt Begründung (sorb kennt sie), statt eines Rückbaus ins Blinde. Die Messung oben gehört als Beleg hinein — sie zeigt, dass die Zonen heute schadlos sind. + +## W1 erledigt 2026-08-15 — ADR-0017 + +Festgehalten als [ADR-0017](../adr/0017-split-dns-cfgmon-vier-zonen.md). Er korrigiert +**ausschließlich** die Split-DNS-Zeile aus ADR-0004 (die VPN-Architektur bleibt gültig) und +begründet **jede Zone einzeln durch Messung** statt sie pauschal zu dokumentieren: + +- **`~lab`** notwendig — `git.lab`/`wiki.lab` → `10.58.73.17`, öffentlich NXDOMAIN. +- **`~axionlabs.de`** notwendig — `ca.axionlabs.de` löst intern auf `10.58.73.13` auf, + öffentlich auf `91.195.241.232`: echtes Split-Horizon auf die interne step-ca. +- **`~axion1337.de`** notwendig — `git.axion1337.de` existiert **nur** intern (`10.58.73.13`); + für alle übrigen Namen wirkungslos, aber schadlos (Messung: keine Abweichung). +- **`~lab.de`** → **wird entfernt**: kein interner Name darunter, keine Fundstelle im Repo, + und es leitet eine **fremde** öffentliche Domain (`lab.de`, `52.59.124.117`) über den + Lab-Resolver. Heute schadlos, aber eine Umleitung ohne Zweck pflegt niemand. + +Damit ist auch die Rückbau-Option aus dem Audit beantwortet: Ein Rückbau auf `~lab` allein +**hätte die interne CA- und git-Auflösung gebrochen** — er wäre ins Blinde gegangen, weil der +Zweck der Zonen nirgends stand. Genau diese Lücke schließt der ADR. + +⚠️ **Offene Handlung (klein):** `~lab.de` aus `/etc/wireguard/lab.conf` auf CFGMON entfernen, +Dienst neu laden, mit `resolvectl domain` gegenprüfen. + +**Stand der acht Widersprüche: W1, W2, W3, W6, W7, W8 erledigt — offen nur noch W4 und W5** +(Schließung von #16 bestätigen bzw. Punkte 4+5 reaktivieren; Bootstrap-Klausel in der +Secrets-Regel). Beide hängen an der Schlüsselrotation und passen zu #0015.