Gate 4, slice 3: verfahren/, hosts/, vision/ and shared/ moved via git mv - six AARs to docs/aar/ (four harvested by the 2026-08-09 retro, two open), procedures and host knowledge to docs/wiki/ (admin, deployment, architecture, new area vision), the retro protocol and the commit mapping table to docs/sources/ (protokolle/, migration/). New: the wiki index linking every page, and the mirror-topology page carrying the why-two-places reasoning verbatim from the old CLAUDE.md (F-013 preserved). All moved-path references retargeted; the link checker drove the sweep to zero. pruefe_prosa.py added (pattern C+D): SHA citations resolve via repo, mapping table, optional component clones or a curated exemption list (documented dead Gitea-force-push commits, a vendor-repo tag, an Authentik uid that is hex but no git SHA, the external neckbeard reference); wiki task prose without an issue reference errors, with a visible pragma for deliberate checklists; the dead-tracker denylist now covers every mirrored repo's retired Gitea tracker (F-005) - two links re-verified against live GitLab titles and retargeted, five defused into honest historical citations. Verified: validate 0/0, gen_status --check current, drift 0. Demo on the pre-migration state fires 6 findings (3 orphaned SHAs, 3 task blocks); on the current tree exactly the 3 F-004 task blocks remain - they turn green in slice 4 when the issues exist, which is why pruefe_prosa joins CI only then. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.4 KiB
type, id, status, date, supersedes, superseded_by, related
| type | id | status | date | supersedes | superseded_by | related |
|---|---|---|---|---|---|---|
| adr | 0004 | accepted | 2026-08-01 | null | null |
0004 — Site-to-Site-VPN Hetzner-Projektnetz ↔ Lab, schaltbar über die UDM
Status: akzeptiert (umgesetzt und abgenommen 2026-08-01, Testreihe 1–7 in management#12) · Datum: 2026-08-01 · Entscheider: sorb
Kontext
Das Lab ist die Quelle der Wahrheit (ADR-0002), aber die Hetzner-Hosts erreichten
git.lab nicht — das erzwang beim Cutover die Übergabe-Issue-Ausnahme. Ein
dauerhafter Zugang von exponierten Servern ins Heimnetz soll es trotzdem nicht sein.
Entscheidung
Ein eigener WireGuard-Tunnel (getrennt vom Roadwarrior) verbindet das
Hetzner-Projektnetz 10.0.0.0/24 mit dem Lab-VLAN 10.58.73.0/24. Der An/Aus-Schalter
liegt in der UniFi-UI; die Hetzner-Seite ist passiv und kann den Tunnel nicht selbst
öffnen (Bedarfsfall-Prinzip, Kontrolle im Lab).
Wie es tatsächlich gebaut wurde (Architektur v2)
Der ursprüngliche Entwurf sah die UDM als Initiator gegen einen WireGuard-Listener auf CFGMON vor. UniFi bietet Site-to-Site jedoch nur als OpenVPN/IPsec an; WireGuard existiert dort ausschließlich als Server — dafür mit der Option „Networks Behind Client". Die Richtung wurde deshalb gedreht:
| UDM | zweiter WG-Server „Matrix", UDP 51841, Tunnelnetz 10.58.75.0/24, „Alternate Address for Clients" = 178.25.213.70 |
| Client „Hetzner" | 10.58.75.2, Networks Behind Client = 10.0.0.0/24 |
| CFGMON | WG-Client/Initiator, dauerhaft aktiv (enable) + PersistentKeepalive 25; AllowedIPs nur 10.58.73.0/24, 10.58.75.1/32; Split-DNS nur ~lab → 10.58.73.1; ip_forward + iptables-ACCEPT in DOCKER-USER (ufw ist dort inaktiv), kein NAT |
| Fritzbox | Portfreigabe UDP 51841 → 192.168.178.20 |
| Hetzner | Netz-Range auf 10.0.0.0/8 erweitert, Route 10.58.73.0/24 → 10.0.0.3 — damit erreichen alle Server im Netz das Lab ohne eigene Konfiguration |
| UniFi-Firewall | Trennung vom Roadwarrior über Quell-/Ziel-IP (10.58.75.0/24 + 10.0.0.0/24), nicht über eine eigene Zone: erlaubt sind nur 10.58.73.17:443 (git.lab/Registry) und 10.58.73.1:53 (DNS); IoT und Arbeit sind für alle VPNs komplett gesperrt |
Konsequenzen
- ✅ Eingelöst am 2026-08-02 (LABNET-03, #13): Übergabe-Issues können nicht nur umziehen — sie sind umgezogen (#25, #26), der Gitea-Tracker ist leer, die Vorlage liegt als GitLab-Issue-Template, und die Ausnahme aus ADR-0002 ist zurückgebaut. Damit hat dieser Tunnel seinen ersten inhaltlichen Zweck erfüllt.
- Abschaltung wirkt in unter 4 s, Rückkehr nach dem Einschalten in ~8 s ohne Eingriff auf der Hetzner-Seite (gemessen 2026-08-01 23:21–23:23).
- Ein kompromittierter Hetzner-Host sieht bei offenem Tunnel nur git.lab:443 und den Lab-DNS; bei geschlossenem Schalter gar nichts.
- Preis der Richtungsdrehung: eine Portfreigabe am Heimanschluss (im Ursprungsentwurf nicht nötig). Bewertung: akzeptabel, da nur UDP 51841 und WireGuard auf unbekannte Peers still schweigt.
- Der TURN-Rotations-CronJob trifft nur bei eingeschaltetem Tunnel auf git.lab — seine
Gitea-PR-Ausnahme bleibt bewusst bestehen.
Nachtrag 2026-08-02: Die Ausnahme besteht weiter, wird aber nicht mehr von Hand
aufgelöst. Der Schedule-Job
canonize_rotationim gitops-Repo holt die Rotation täglich von git.lab aus nach. Damit hängt sie nicht mehr am Tunnelzustand — der Job läuft im Lab und erreicht Gitea öffentlich. Das war der eigentliche Grund für die Ausnahme; sie ist jetzt automatisiert statt terminiert. - game.axion1337.de profitiert erst nach Aufnahme in den vSwitch (GAME-01).
Verworfene Alternativen
- UDM als Initiator (Ursprungsentwurf): von UniFi nicht angeboten.
- Einzelne Roadwarrior-Profile pro Server: Schalter läge auf den exponierten Hosts, Key-Streuung, kein Site-Routing.
- Tunnel dauerhaft an: widerspricht dem Bedarfsfall-Prinzip ohne echten Gewinn.
- git.lab öffentlich exponieren: größte Angriffsfläche, klar verworfen.
- Eigene UniFi-Zone für den Tunnel: technisch nicht möglich (VPN-Server bleiben in der VPN-Zone), siehe AAR Lab-Seite.