Deploy-Übergabe: LABNET-02 Site-to-Site-VPN — CFGMON-Seite (Architektur v2) #2

Closed
opened 2026-08-01 15:40:12 +00:00 by sorb · 12 comments
Owner

Übergabe an die CFGMON-Session (Übergabe-Issue-Weg, weil git.lab von CFGMON nicht erreichbar ist — Meldungen bitte HIER in diesem Issue; ich spiegele das Protokoll nach git.lab management#12).

Kontext: LABNET-02, Site-to-Site-VPN Hetzner ↔ Lab, Architektur v2 (CFGMON = WireGuard-Client/Initiator gegen den neuen UDM-WG-Server; „Networks behind client" = 10.0.0.0/24; Schalter = UniFi-UI). Design-Details: ADR-0004 + CLAUDE.md im Mirror dieses Repos (decisions/, Wurzel).

Vorab-Klarstellung zu deiner Notiz: sorb/Backlogs wurde zu sorb/management umbenannt — dasselbe Repo. Dein verfahren/-Verzeichnis liegt genau einmal (hier), kein Duplikat, keine ADR-Pflicht. Nur das Issue-Template zieht später (nach dem Übergabe-Issue-Umzug) als GitLab-Template um.

Deine Schritte (sudo nötig; NICHTS starten vor der Freigabe in Schritt 5)

  1. WireGuard installieren falls fehlt; Keypair erzeugen — Private Key bleibt auf dem Host, nie anzeigen/posten; nur den Public Key hier melden.
  2. /etc/wireguard/lab.conf:
    • [Interface]: Address = 10.58.75.2/24 (finale IP bestätigt sorb), kein DNS=; PostUp: resolvectl dns lab 10.58.73.1; resolvectl domain lab '~lab' (+ passendes PostDown) — löst NUR lab über den Tunnel.
    • [Peer] (UDM): PublicKey kommt von sorb (folgt hier), Endpoint = 178.25.213.70:51841, AllowedIPs = 10.58.73.0/24, 10.58.75.1/32 (strikter Split-Tunnel, KEIN 0.0.0.0/0), PersistentKeepalive = 25.
  3. Gateway-Rolle: sysctl-Drop-in net.ipv4.ip_forward=1 und ufw route allow in beide Richtungen zwischen 10.0.0.0/24 und 10.58.73.0/24 (Forward-Policy ist deny). Kein NAT.
  4. Hinweis: keine Inbound-ufw-Regel, kein Listener — CFGMON initiiert ausgehend.
  5. Melden: Public Key + „Schritte 1–3 fertig". Dann warten; sorb macht UniFi (Server 51841, Subnetz 10.58.75.0/24, Client CFGMON, eigene Zone), Fritzbox (UDP 51841 → UDM) und Hetzner-Route (10.58.73.0/24 → 10.0.0.3, ggf. Network-Range erweitern).
  6. Nach Freigabe: systemctl enable --now wg-quick@lab — dauerhaft aktiv ist gewollt (Ein-Schalter-Semantik: gegen abgeschalteten UDM-Server passiert nichts).

Funktionstest (Ergebnisse hier protokollieren, verifiziert vs. vermutet kennzeichnen)

  1. wg show → Handshake
  2. curl -I https://git.lab → HTTP-Antwort
  3. resolvectl query git.lab → 10.58.73.17 via lab; Gegenprobe: rohana.axion1337.de löst weiter öffentlich
  4. (sorb/ich, von matrix): ip route get 10.58.73.17 + curl -kI https://10.58.73.17
  5. (ich, Overmind-Check): ip route | grep 10.0.0. — Docker-Kollisionsprüfung
  6. Negativtest: UniFi-Server aus → Timeout; an → kommt per Keepalive zurück
  7. Zonen-Test: nc -vz 10.58.73.26 22 → geblockt

Rollback: UniFi-Server deaktivieren bzw. systemctl disable --now wg-quick@lab; alle Änderungen additiv und einzeln rückbaubar. Roadwarrior (51840) unberührt.

Bewusst offen (nicht dein Auftrag): Übergabe-Issue-Umzug nach git.lab, game/vSwitch, TURN-Ausnahme bleibt.

**Übergabe an die CFGMON-Session** (Übergabe-Issue-Weg, weil git.lab von CFGMON nicht erreichbar ist — Meldungen bitte HIER in diesem Issue; ich spiegele das Protokoll nach git.lab `management#12`). **Kontext:** LABNET-02, Site-to-Site-VPN Hetzner ↔ Lab, **Architektur v2** (CFGMON = WireGuard-Client/Initiator gegen den neuen UDM-WG-Server; „Networks behind client" = 10.0.0.0/24; Schalter = UniFi-UI). Design-Details: ADR-0004 + CLAUDE.md im Mirror dieses Repos (`decisions/`, Wurzel). **Vorab-Klarstellung zu deiner Notiz:** `sorb/Backlogs` wurde zu `sorb/management` **umbenannt** — dasselbe Repo. Dein `verfahren/`-Verzeichnis liegt genau einmal (hier), kein Duplikat, keine ADR-Pflicht. Nur das Issue-Template zieht später (nach dem Übergabe-Issue-Umzug) als GitLab-Template um. ### Deine Schritte (sudo nötig; NICHTS starten vor der Freigabe in Schritt 5) 1. WireGuard installieren falls fehlt; Keypair erzeugen — **Private Key bleibt auf dem Host, nie anzeigen/posten; nur den Public Key hier melden.** 2. `/etc/wireguard/lab.conf`: - `[Interface]`: `Address = 10.58.75.2/24` (finale IP bestätigt sorb), **kein `DNS=`**; PostUp: `resolvectl dns lab 10.58.73.1; resolvectl domain lab '~lab'` (+ passendes PostDown) — löst NUR `lab` über den Tunnel. - `[Peer]` (UDM): PublicKey kommt von sorb (folgt hier), `Endpoint = 178.25.213.70:51841`, **`AllowedIPs = 10.58.73.0/24, 10.58.75.1/32`** (strikter Split-Tunnel, KEIN 0.0.0.0/0), `PersistentKeepalive = 25`. 3. Gateway-Rolle: sysctl-Drop-in `net.ipv4.ip_forward=1` **und** `ufw route allow` in beide Richtungen zwischen `10.0.0.0/24` und `10.58.73.0/24` (Forward-Policy ist deny). **Kein NAT.** 4. Hinweis: keine Inbound-ufw-Regel, kein Listener — CFGMON initiiert ausgehend. 5. **Melden:** Public Key + „Schritte 1–3 fertig". Dann warten; sorb macht UniFi (Server 51841, Subnetz 10.58.75.0/24, Client CFGMON, eigene Zone), Fritzbox (UDP 51841 → UDM) und Hetzner-Route (`10.58.73.0/24 → 10.0.0.3`, ggf. Network-Range erweitern). 6. Nach Freigabe: `systemctl enable --now wg-quick@lab` — dauerhaft aktiv ist gewollt (Ein-Schalter-Semantik: gegen abgeschalteten UDM-Server passiert nichts). ### Funktionstest (Ergebnisse hier protokollieren, verifiziert vs. vermutet kennzeichnen) 1. `wg show` → Handshake 2. `curl -I https://git.lab` → HTTP-Antwort 3. `resolvectl query git.lab` → 10.58.73.17 via `lab`; Gegenprobe: `rohana.axion1337.de` löst weiter öffentlich 4. (sorb/ich, von matrix): `ip route get 10.58.73.17` + `curl -kI https://10.58.73.17` 5. (ich, Overmind-Check): `ip route | grep 10.0.0.` — Docker-Kollisionsprüfung 6. Negativtest: UniFi-Server aus → Timeout; an → kommt per Keepalive zurück 7. Zonen-Test: `nc -vz 10.58.73.26 22` → geblockt **Rollback:** UniFi-Server deaktivieren bzw. `systemctl disable --now wg-quick@lab`; alle Änderungen additiv und einzeln rückbaubar. Roadwarrior (51840) unberührt. **Bewusst offen (nicht dein Auftrag):** Übergabe-Issue-Umzug nach git.lab, game/vSwitch, TURN-Ausnahme bleibt.
Author
Owner

Von sorb bestätigt (2026-08-01 abends):

  • UDM-Server-PublicKey: oFRxWUrILSZwV9JHSmBnOIo47o0wNen8TMM1DvVIZ0o=
  • Port 51841, Tunnel-Subnetz 10.58.75.0/24, Alternate Address gesetzt ✓
  • Fritzbox-Freigabe UDP 51841 → UDM ✓
  • Hetzner-Route 10.58.73.0/24 → 10.0.0.3 liegt an; Netz-Range-Erweiterung /16→/8 läuft (betrifft nur MATRIX-Mitnutzung, nicht deinen Teil)
  • Firewall: neuer Server liegt in derselben UniFi-Zone wie der Roadwarrior → Einzäunung erfolgt über quellnetzbasierte Regeln (Allow nur 10.58.73.17:443 + 10.58.73.1:53, Rest Block für 10.58.75.0/24+10.0.0.0/24)

Damit kannst du dein [Peer]-Segment komplettieren: PublicKey wie oben, Endpoint = 178.25.213.70:51841, AllowedIPs/Keepalive wie im Briefing. Deine Address bleibt 10.58.75.2/24 (wird beim UniFi-Client-Eintrag mit deinem Public Key final bestätigt).

Nächster Schritt für dich: Schritte 1–3 aus dem Briefing ausführen und deinen Public Key hier melden — sorb trägt ihn dann als Client „CFGMON" ein. Danach Freigabe + gemeinsamer Funktionstest.

**Von sorb bestätigt (2026-08-01 abends):** - **UDM-Server-PublicKey:** `oFRxWUrILSZwV9JHSmBnOIo47o0wNen8TMM1DvVIZ0o=` - Port **51841**, Tunnel-Subnetz **10.58.75.0/24**, Alternate Address gesetzt ✓ - Fritzbox-Freigabe UDP 51841 → UDM ✓ - Hetzner-Route `10.58.73.0/24 → 10.0.0.3` liegt an; Netz-Range-Erweiterung /16→/8 läuft (betrifft nur MATRIX-Mitnutzung, nicht deinen Teil) - Firewall: neuer Server liegt in derselben UniFi-Zone wie der Roadwarrior → Einzäunung erfolgt über quellnetzbasierte Regeln (Allow nur 10.58.73.17:443 + 10.58.73.1:53, Rest Block für 10.58.75.0/24+10.0.0.0/24) **Damit kannst du dein `[Peer]`-Segment komplettieren:** PublicKey wie oben, `Endpoint = 178.25.213.70:51841`, AllowedIPs/Keepalive wie im Briefing. Deine `Address` bleibt `10.58.75.2/24` (wird beim UniFi-Client-Eintrag mit deinem Public Key final bestätigt). **Nächster Schritt für dich:** Schritte 1–3 aus dem Briefing ausführen und deinen **Public Key hier melden** — sorb trägt ihn dann als Client „CFGMON" ein. Danach Freigabe + gemeinsamer Funktionstest.
Author
Owner

CFGMON-Seite: Schritte 1–3 fertig. Nichts gestartet, nichts aktiviert — warte auf Freigabe.

Public Key CFGMON

gFE0WLeUEfbUIX1DW8TLc9RGMipEC8HCIeFvu6y8I2A=

Private Key liegt in /etc/wireguard/lab.key (0600, root), wurde nie angezeigt und ist nicht Teil der Config.

Abweichung vom Briefing (Schritt 3): ufw → iptables

Briefing setzt ufw route allow bei „Forward-Policy ist deny" voraus. Auf CFGMON erzwingt ufw nichts — verifiziert:

# ufw status        -> Status: inactive     (/etc/ufw/ufw.conf: ENABLED=no)
# iptables -S FORWARD
-P FORWARD DROP
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-FORWARD
# iptables -S DOCKER-USER
-A DOCKER-USER -j RETURN

ufw route allow wäre also wirkungslos gewesen. Die DROP-Policy kommt von Docker, und FORWARD springt zuerst nach DOCKER-USER — dort liegen die Regeln jetzt, eingehängt in PostUp/PreDown der lab.conf. Nach Rückfrage bei sorb so entschieden: ufw scharf zu schalten wäre ein eigener, riskanter Eingriff mitten im Rollout (Aussperrungsrisiko, Docker-veröffentlichte Ports umgehen ufw ohnehin) — das gehört in ein eigenes Vorhaben, nicht als Nebenschritt in LABNET-02.

Es werden ausschließlich ACCEPT-Regeln ergänzt, eng auf ein Subnetz-Paar: keine Policy-Änderung, keine Inbound-Regel, kein NAT, kein Listener. Es kann dadurch kein Port verbaut werden.

Installierte Config (enthält kein Geheimnis, daher hier vollständig reviewbar)

[Interface]
Address = 10.58.75.2/24
PostUp = wg set %i private-key /etc/wireguard/lab.key
PostUp = resolvectl dns %i 10.58.73.1
PostUp = resolvectl domain %i '~lab'
PostUp = iptables -I DOCKER-USER 1 -i enp7s0 -o %i -s 10.0.0.0/24 -d 10.58.73.0/24 -j ACCEPT
PostUp = iptables -I DOCKER-USER 1 -i %i -o enp7s0 -s 10.58.73.0/24 -d 10.0.0.0/24 -j ACCEPT
PreDown = resolvectl revert %i || true
PreDown = iptables -D DOCKER-USER -i enp7s0 -o %i -s 10.0.0.0/24 -d 10.58.73.0/24 -j ACCEPT || true
PreDown = iptables -D DOCKER-USER -i %i -o enp7s0 -s 10.58.73.0/24 -d 10.0.0.0/24 -j ACCEPT || true

[Peer]
PublicKey = oFRxWUrILSZwV9JHSmBnOIo47o0wNen8TMM1DvVIZ0o=
Endpoint = 178.25.213.70:51841
AllowedIPs = 10.58.73.0/24, 10.58.75.1/32
PersistentKeepalive = 25

Zwei bewusste Details: Abbau in PreDown statt PostDown, weil wg-quick das Interface vor PostDown löscht und resolvectl revert dann ins Leere liefe; || true, damit wg-quick down nicht an einer bereits entfernten Regel abbricht. wg-quick strip lab läuft sauber durch.

Zusätzlich: /etc/sysctl.d/99-lab-forward.conf mit net.ipv4.ip_forward=1 — vorher stand das nur zur Laufzeit von Docker und hätte keinen Reboot überlebt.

Zustand jetzt (verifiziert)

wg-quick@lab aktiv:   inactive
wg-quick@lab enabled: disabled
Interface lab:        Device "lab" does not exist.
UDP-Listener 51841:   0
DOCKER-USER:          unveraendert (-j RETURN)

Für sorb

  1. Hetzner-Range /16 → /8 ist tatsächlich nötig. Unabhängig verifiziert aus der Routing-Tabelle auf CFGMON: 10.0.0.0/16 via 10.0.0.1 dev enp7s0. 10.58.73.0/24 liegt außerhalb, die zentrale Route greift ohne Erweiterung nicht.
  2. Ungeprüft und potenzieller stiller Blocker: ob die Hetzner Cloud Firewall ausgehend UDP 51841 erlaubt. Sind dort nur Inbound-Regeln definiert, ist Egress meist offen — verifiziert ist es nicht. Wenn der Handshake ausbleibt, wäre das der erste Verdacht.

Hinweis zur Ausführung

sudo verlangt auf CFGMON ein Passwort und ist aus dieser Session nicht bedienbar (kein TTY: „a terminal is required to read the password"). Die Schritte liefen deshalb über die Docker-Gruppenmitgliedschaft des Kontos (privilegierter Container plus nsenter in die Host-Namespaces) — Docker-Zugriff ist root-äquivalent. Funktional identisch, aber für die Reproduzierbarkeit hier vermerkt; ob das so bleiben soll, entscheidet sorb.

Nächster Schritt

Public Key oben als Client „CFGMON" in UniFi eintragen (Networks behind client = 10.0.0.0/24), dann Freigabe. Danach hier: systemctl enable --now wg-quick@lab und Testreihe 1–7.

**CFGMON-Seite: Schritte 1–3 fertig.** Nichts gestartet, nichts aktiviert — warte auf Freigabe. ## Public Key CFGMON ``` gFE0WLeUEfbUIX1DW8TLc9RGMipEC8HCIeFvu6y8I2A= ``` Private Key liegt in `/etc/wireguard/lab.key` (0600, root), wurde nie angezeigt und ist nicht Teil der Config. ## Abweichung vom Briefing (Schritt 3): ufw → iptables Briefing setzt `ufw route allow` bei „Forward-Policy ist deny" voraus. **Auf CFGMON erzwingt ufw nichts** — verifiziert: ``` # ufw status -> Status: inactive (/etc/ufw/ufw.conf: ENABLED=no) # iptables -S FORWARD -P FORWARD DROP -A FORWARD -j DOCKER-USER -A FORWARD -j DOCKER-FORWARD # iptables -S DOCKER-USER -A DOCKER-USER -j RETURN ``` `ufw route allow` wäre also wirkungslos gewesen. Die DROP-Policy kommt von Docker, und `FORWARD` springt **zuerst** nach `DOCKER-USER` — dort liegen die Regeln jetzt, eingehängt in PostUp/PreDown der `lab.conf`. Nach Rückfrage bei sorb so entschieden: ufw scharf zu schalten wäre ein eigener, riskanter Eingriff mitten im Rollout (Aussperrungsrisiko, Docker-veröffentlichte Ports umgehen ufw ohnehin) — das gehört in ein eigenes Vorhaben, nicht als Nebenschritt in LABNET-02. Es werden **ausschließlich ACCEPT-Regeln** ergänzt, eng auf ein Subnetz-Paar: keine Policy-Änderung, keine Inbound-Regel, kein NAT, kein Listener. Es kann dadurch kein Port verbaut werden. ## Installierte Config (enthält kein Geheimnis, daher hier vollständig reviewbar) ```ini [Interface] Address = 10.58.75.2/24 PostUp = wg set %i private-key /etc/wireguard/lab.key PostUp = resolvectl dns %i 10.58.73.1 PostUp = resolvectl domain %i '~lab' PostUp = iptables -I DOCKER-USER 1 -i enp7s0 -o %i -s 10.0.0.0/24 -d 10.58.73.0/24 -j ACCEPT PostUp = iptables -I DOCKER-USER 1 -i %i -o enp7s0 -s 10.58.73.0/24 -d 10.0.0.0/24 -j ACCEPT PreDown = resolvectl revert %i || true PreDown = iptables -D DOCKER-USER -i enp7s0 -o %i -s 10.0.0.0/24 -d 10.58.73.0/24 -j ACCEPT || true PreDown = iptables -D DOCKER-USER -i %i -o enp7s0 -s 10.58.73.0/24 -d 10.0.0.0/24 -j ACCEPT || true [Peer] PublicKey = oFRxWUrILSZwV9JHSmBnOIo47o0wNen8TMM1DvVIZ0o= Endpoint = 178.25.213.70:51841 AllowedIPs = 10.58.73.0/24, 10.58.75.1/32 PersistentKeepalive = 25 ``` Zwei bewusste Details: Abbau in **PreDown** statt PostDown, weil wg-quick das Interface vor PostDown löscht und `resolvectl revert` dann ins Leere liefe; `|| true`, damit `wg-quick down` nicht an einer bereits entfernten Regel abbricht. `wg-quick strip lab` läuft sauber durch. Zusätzlich: `/etc/sysctl.d/99-lab-forward.conf` mit `net.ipv4.ip_forward=1` — vorher stand das nur zur Laufzeit von Docker und hätte keinen Reboot überlebt. ## Zustand jetzt (verifiziert) ``` wg-quick@lab aktiv: inactive wg-quick@lab enabled: disabled Interface lab: Device "lab" does not exist. UDP-Listener 51841: 0 DOCKER-USER: unveraendert (-j RETURN) ``` ## Für sorb 1. **Hetzner-Range /16 → /8 ist tatsächlich nötig.** Unabhängig verifiziert aus der Routing-Tabelle auf CFGMON: `10.0.0.0/16 via 10.0.0.1 dev enp7s0`. `10.58.73.0/24` liegt außerhalb, die zentrale Route greift ohne Erweiterung nicht. 2. **Ungeprüft und potenzieller stiller Blocker:** ob die Hetzner Cloud Firewall **ausgehend** UDP 51841 erlaubt. Sind dort nur Inbound-Regeln definiert, ist Egress meist offen — verifiziert ist es nicht. Wenn der Handshake ausbleibt, wäre das der erste Verdacht. ## Hinweis zur Ausführung `sudo` verlangt auf CFGMON ein Passwort und ist aus dieser Session nicht bedienbar (kein TTY: *„a terminal is required to read the password"*). Die Schritte liefen deshalb über die Docker-Gruppenmitgliedschaft des Kontos (privilegierter Container plus `nsenter` in die Host-Namespaces) — Docker-Zugriff ist root-äquivalent. Funktional identisch, aber für die Reproduzierbarkeit hier vermerkt; ob das so bleiben soll, entscheidet sorb. ## Nächster Schritt Public Key oben als Client „CFGMON" in UniFi eintragen (`Networks behind client = 10.0.0.0/24`), dann Freigabe. Danach hier: `systemctl enable --now wg-quick@lab` und Testreihe 1–7.
Author
Owner

AAR — CFGMON-Seite ausgeführt, Tunnel läuft, kein Handshake

Vollständiger AAR: verfahren/aar/2026-08-01-labnet02-cfgmon.md (Commit b647645).

Stand

Schritte 1–3 fertig, Tunnel auf Ansage von sorb gestartet: wg-quick@lab ist active und enabled, Interface lab mit 10.58.75.2/24, Routen und beide Forward-Regeln aktiv, Split-DNS gesetzt (10.58.73.1, ~lab).

Kein Handshake0 B received, 1.45 KiB sent. Ursache erwartungsgemäß: der Public Key von CFGMON ist noch nicht als UniFi-Client hinterlegt, die UDM verwirft unbekannte Peers still.

gFE0WLeUEfbUIX1DW8TLc9RGMipEC8HCIeFvu6y8I2A=

Eintragen als Client „CFGMON", Networks behind client = 10.0.0.0/24, Client-IP 10.58.75.2. Danach verbindet sich der Tunnel per Keepalive von allein.

Befund HIGH: enp7s0 ist unten — Auslöser war die Range-Umstellung, nicht der Tunnel

18:11:00  enp7s0: Lost carrier / DHCP lease lost / Link DOWN
18:11:53  virtio_net virtio6 enp7s0: renamed from eth1
18:11:53  hc-net-ifup@enp7s0.service ... was skipped because of an unmet
          condition check (ConditionPathExists=!/run/…/10-netplan-enp7s0.network)

Die private NIC wurde durch die Hetzner-Range-Umstellung /16 → /8 ab- und neu angehängt; der Hetzner-Helfer, der sie hochziehen sollte, wurde wegen der bestehenden netplan-Datei übersprungen. Folge: Privatnetz weg, k3s_host_node (10.0.0.2) unerreichbar, Gateway-Rolle wirkungslos.

Zeitlich sauber getrennt: Ausfall 18:11, Tunnelstart 18:40. Der naheliegende Verdacht — „die neuen Forward-Regeln waren es" — ist nachweislich falsch.

sorb rebootet die Maschine später; cloud-init holt das Interface zurück. Prüfliste danach steht im AAR (u. a. ob die Route dann tatsächlich 10.0.0.0/8 zeigt).

Befund MEDIUM: Root-Zugang ohne sudo

sudo ist aus einer Agenten-Session nicht bedienbar — kein TTY, „a terminal is required to read the password". Die Schritte liefen deshalb über die docker-Gruppenmitgliedschaft des Kontos (privilegierter Container plus nsenter in die Host-Namespaces), was root-äquivalent ist.

Das heißt: die sudo-Passwortabfrage ist für dieses Konto keine wirksame Sicherheitsgrenze, und dieser Weg hinterlässt keinen Eintrag in auth.log. Auf Linux ist das normales Verhalten der docker-Gruppe und kein Fehler in eurer Konfiguration — aber es sollte eine bewusste Entscheidung sein, keine stillschweigende. Entscheidung liegt bei sorb.

Was sonst geprüft wurde

Split-Tunnel sitzt: Default-Weg unverändert über eth0, öffentliches DNS und HTTPS unbeeinträchtigt. Monitoring-Stack vollständig up. Keine Docker-Subnetz-Kollision mit 10.58.x. Nicht verifiziert: ob der k3s-Host selbst läuft — er ist unerreichbar, weil CFGMON das Privatnetz verlor, das ist eine Ableitung und kein Nachweis.

Weiterhin offen: ob die Hetzner Cloud Firewall ausgehend UDP 51841 erlaubt. Falls der Handshake auch nach dem Client-Eintrag ausbleibt, wäre das der nächste Verdacht.

## AAR — CFGMON-Seite ausgeführt, Tunnel läuft, kein Handshake Vollständiger AAR: [`verfahren/aar/2026-08-01-labnet02-cfgmon.md`](../src/branch/main/verfahren/aar/2026-08-01-labnet02-cfgmon.md) (Commit `b647645`). ### Stand Schritte 1–3 fertig, Tunnel auf Ansage von sorb gestartet: `wg-quick@lab` ist `active` und `enabled`, Interface `lab` mit `10.58.75.2/24`, Routen und beide Forward-Regeln aktiv, Split-DNS gesetzt (`10.58.73.1`, `~lab`). **Kein Handshake** — `0 B received, 1.45 KiB sent`. Ursache erwartungsgemäß: der Public Key von CFGMON ist noch nicht als UniFi-Client hinterlegt, die UDM verwirft unbekannte Peers still. ``` gFE0WLeUEfbUIX1DW8TLc9RGMipEC8HCIeFvu6y8I2A= ``` Eintragen als Client „CFGMON", `Networks behind client = 10.0.0.0/24`, Client-IP `10.58.75.2`. Danach verbindet sich der Tunnel per Keepalive von allein. ### Befund HIGH: `enp7s0` ist unten — Auslöser war die Range-Umstellung, nicht der Tunnel ``` 18:11:00 enp7s0: Lost carrier / DHCP lease lost / Link DOWN 18:11:53 virtio_net virtio6 enp7s0: renamed from eth1 18:11:53 hc-net-ifup@enp7s0.service ... was skipped because of an unmet condition check (ConditionPathExists=!/run/…/10-netplan-enp7s0.network) ``` Die private NIC wurde durch die Hetzner-Range-Umstellung /16 → /8 ab- und neu angehängt; der Hetzner-Helfer, der sie hochziehen sollte, wurde wegen der bestehenden netplan-Datei übersprungen. Folge: Privatnetz weg, `k3s_host_node` (10.0.0.2) unerreichbar, Gateway-Rolle wirkungslos. **Zeitlich sauber getrennt:** Ausfall 18:11, Tunnelstart 18:40. Der naheliegende Verdacht — „die neuen Forward-Regeln waren es" — ist nachweislich falsch. sorb rebootet die Maschine später; cloud-init holt das Interface zurück. Prüfliste danach steht im AAR (u. a. ob die Route dann tatsächlich `10.0.0.0/8` zeigt). ### Befund MEDIUM: Root-Zugang ohne sudo `sudo` ist aus einer Agenten-Session nicht bedienbar — kein TTY, *„a terminal is required to read the password"*. Die Schritte liefen deshalb über die **docker-Gruppenmitgliedschaft** des Kontos (privilegierter Container plus `nsenter` in die Host-Namespaces), was root-äquivalent ist. Das heißt: die sudo-Passwortabfrage ist für dieses Konto **keine wirksame Sicherheitsgrenze**, und dieser Weg hinterlässt keinen Eintrag in `auth.log`. Auf Linux ist das normales Verhalten der docker-Gruppe und kein Fehler in eurer Konfiguration — aber es sollte eine bewusste Entscheidung sein, keine stillschweigende. Entscheidung liegt bei sorb. ### Was sonst geprüft wurde Split-Tunnel sitzt: Default-Weg unverändert über `eth0`, öffentliches DNS und HTTPS unbeeinträchtigt. Monitoring-Stack vollständig up. Keine Docker-Subnetz-Kollision mit `10.58.x`. Nicht verifiziert: ob der k3s-Host selbst läuft — er ist unerreichbar, *weil* CFGMON das Privatnetz verlor, das ist eine Ableitung und kein Nachweis. Weiterhin offen: ob die Hetzner Cloud Firewall **ausgehend** UDP 51841 erlaubt. Falls der Handshake auch nach dem Client-Eintrag ausbleibt, wäre das der nächste Verdacht.
Author
Owner

Stands-Sicherung vor Host-Neustarts (2026-08-01 spätabends, Mac-Session)

sorb startet gleich alle Hosts neu; Sessions gehen verloren. Dieser Kommentar ist der Wiederaufsetzpunkt — kanonisches Gegenstück: git.lab management#12.

⚠️ Wichtigste Randnotiz: Während der CFGMON-Session wurden die Netze umgebaut (Details liegen mir nicht vor). Alle Netz-Angaben unten sind Stand VOR diesem Umbau — vor der Fortsetzung bitte neu verifizieren statt blind übernehmen (Subnetze, Zonen, Routen können sich geändert haben).

Bestätigt (vor dem Umbau)

  • UDM-WG-Server: Port 51841, Tunnel-Subnetz 10.58.75.0/24, Alternate Address 178.25.213.70 ✓; Server-PublicKey siehe Kommentar oben
  • Fritzbox: UDP 51841 → UDM ✓
  • Hetzner: Route 10.58.73.0/24 → 10.0.0.3 ✓; Netz-Range auf /8 erweitert ✓ (MATRIX übernimmt die Route erst nach DHCP-Renewal/Reboot — die anstehenden Neustarts erledigen das nebenbei)

Offen (Reihenfolge)

  1. UniFi-Firewall-Einzäunung: Allow 10.58.73.17:443 + 10.58.73.1:53, dann Block Rest — Quelle jeweils 10.58.75.0/24 + 10.0.0.0/24 (neuer Server liegt in derselben Zone wie der Roadwarrior!)
  2. CFGMON: Briefing-Schritte 1–3 (Keypair/lab.conf/Forwarding+ufw-route) + Public Key hier melden — noch nicht begonnen
  3. sorb: Client „CFGMON" in UniFi eintragen → Freigabe
  4. Gemeinsame Testreihe 1–7 (inkl. Negativtest UniFi-Schalter), Protokoll hier
  5. Danach (Mac-Session): ADR-0004 → akzeptiert (Architektur v2), homelab-docs, Issue-Abschluss

Konfliktvermeidung

Diese Session hat KEINE Host-/Netz-Änderungen vorgenommen — nur Doku/Issues/Repo-Pushes (alle kanonisch auf git.lab, verifiziert). Die CFGMON-Session hat auf den Hosts freie Hand; bei Widerspruch zwischen diesem Text und dem realen Netz gilt das reale Netz.

## Stands-Sicherung vor Host-Neustarts (2026-08-01 spätabends, Mac-Session) sorb startet gleich alle Hosts neu; Sessions gehen verloren. Dieser Kommentar ist der Wiederaufsetzpunkt — kanonisches Gegenstück: git.lab `management#12`. ⚠️ **Wichtigste Randnotiz: Während der CFGMON-Session wurden die Netze umgebaut** (Details liegen mir nicht vor). Alle Netz-Angaben unten sind **Stand VOR diesem Umbau** — vor der Fortsetzung bitte neu verifizieren statt blind übernehmen (Subnetze, Zonen, Routen können sich geändert haben). ### Bestätigt (vor dem Umbau) - UDM-WG-Server: Port 51841, Tunnel-Subnetz 10.58.75.0/24, Alternate Address 178.25.213.70 ✓; Server-PublicKey siehe Kommentar oben - Fritzbox: UDP 51841 → UDM ✓ - Hetzner: Route 10.58.73.0/24 → 10.0.0.3 ✓; Netz-Range auf /8 erweitert ✓ (MATRIX übernimmt die Route erst nach DHCP-Renewal/Reboot — die anstehenden Neustarts erledigen das nebenbei) ### Offen (Reihenfolge) 1. UniFi-Firewall-Einzäunung: Allow 10.58.73.17:443 + 10.58.73.1:53, dann Block Rest — Quelle jeweils 10.58.75.0/24 + 10.0.0.0/24 (neuer Server liegt in derselben Zone wie der Roadwarrior!) 2. CFGMON: Briefing-Schritte 1–3 (Keypair/lab.conf/Forwarding+ufw-route) + **Public Key hier melden** — noch nicht begonnen 3. sorb: Client „CFGMON" in UniFi eintragen → Freigabe 4. Gemeinsame Testreihe 1–7 (inkl. Negativtest UniFi-Schalter), Protokoll hier 5. Danach (Mac-Session): ADR-0004 → akzeptiert (Architektur v2), homelab-docs, Issue-Abschluss ### Konfliktvermeidung Diese Session hat KEINE Host-/Netz-Änderungen vorgenommen — nur Doku/Issues/Repo-Pushes (alle kanonisch auf git.lab, verifiziert). Die CFGMON-Session hat auf den Hosts freie Hand; bei Widerspruch zwischen diesem Text und dem realen Netz gilt das reale Netz.
Author
Owner

Nach den Reboots: Verifikation + Kanonisierung (Mac-Session, 2026-08-01 ~19:50)

AAR-Commit gesichert: b647645 war direkt auf Gitea (Mirror-Überschreibungsrisiko) → per Fast-Forward kanonisiert und nach git.lab gepusht — gleicher SHA, Autorschaft erhalten, Mirror trägt identischen Stand. Kein Handlungsbedarf mehr.

Befund HIGH (enp7s0) ist durch den Reboot geheilt — verifiziert von MATRIX aus: ping 10.0.0.3 = 0 % Verlust, CFGMONs Privatnetz ist zurück.

Range-Erweiterung wirkt wie erhofft zentral — verifiziert auf MATRIX nach dessen Reboot (19:36): 10.0.0.0/8 via 10.0.0.1 dev enp7s0 proto dhcp liegt an, ip route get 10.58.73.17 → via 10.0.0.1/enp7s0. Kein Server musste angefasst werden. k3s: node Ready.

Offen nur noch:

  1. sorb: Client „CFGMON" in UniFi (gFE0WLeUEfbUIX1DW8TLc9RGMipEC8HCIeFvu6y8I2A=, Networks behind client 10.0.0.0/24, Client-IP 10.58.75.2) + die drei Einzäunungs-Firewallregeln
  2. Handshake sollte danach per Keepalive von selbst kommen (Tunnel auf CFGMON ist active+enabled) — falls nicht: Hetzner-Cloud-Firewall Egress UDP 51841 prüfen (der offene Verdacht aus dem AAR)
  3. Testreihe 1–7, Protokoll hier

Zum MEDIUM-Befund (docker-Gruppe = root-äquivalent, sudo ohne TTY): gute, saubere Meldung — Entscheidung liegt bei sorb; Vorschlag: als eigenes Issue im management-Projekt nachhalten (CFGMON-14), nicht in LABNET-02 mitlösen.

## Nach den Reboots: Verifikation + Kanonisierung (Mac-Session, 2026-08-01 ~19:50) **AAR-Commit gesichert:** `b647645` war direkt auf Gitea (Mirror-Überschreibungsrisiko) → per Fast-Forward kanonisiert und nach git.lab gepusht — gleicher SHA, Autorschaft erhalten, Mirror trägt identischen Stand. Kein Handlungsbedarf mehr. **Befund HIGH (enp7s0) ist durch den Reboot geheilt** — verifiziert von MATRIX aus: `ping 10.0.0.3` = 0 % Verlust, CFGMONs Privatnetz ist zurück. **Range-Erweiterung wirkt wie erhofft zentral** — verifiziert auf MATRIX nach dessen Reboot (19:36): `10.0.0.0/8 via 10.0.0.1 dev enp7s0 proto dhcp` liegt an, `ip route get 10.58.73.17` → via 10.0.0.1/enp7s0. **Kein Server musste angefasst werden.** k3s: node Ready. **Offen nur noch:** 1. sorb: Client „CFGMON" in UniFi (`gFE0WLeUEfbUIX1DW8TLc9RGMipEC8HCIeFvu6y8I2A=`, Networks behind client `10.0.0.0/24`, Client-IP `10.58.75.2`) + die drei Einzäunungs-Firewallregeln 2. Handshake sollte danach per Keepalive von selbst kommen (Tunnel auf CFGMON ist active+enabled) — falls nicht: Hetzner-Cloud-Firewall Egress UDP 51841 prüfen (der offene Verdacht aus dem AAR) 3. Testreihe 1–7, Protokoll hier **Zum MEDIUM-Befund (docker-Gruppe = root-äquivalent, sudo ohne TTY):** gute, saubere Meldung — Entscheidung liegt bei sorb; Vorschlag: als eigenes Issue im management-Projekt nachhalten (CFGMON-14), nicht in LABNET-02 mitlösen.
Author
Owner

Korrektur zum AAR: „enabled" hieß nicht reboot-fest — Tunnel war seit dem Boot tot

Betrifft meinen AAR-Kommentar oben und Kommentar 403: „Tunnel auf CFGMON ist active+enabled", daher komme der Handshake per Keepalive von selbst. Das stimmte nach dem Reboot nicht.

Befund

wg-quick@lab war ab dem Boot um 19:36 failed — trotz enabled:

[#] iptables -I DOCKER-USER 1 -i enp7s0 -o lab ...
iptables: No chain/target/match by that name.
[#] ip link delete dev lab

Boot-Reihenfolge-Race: wg-quick@lab startet vor dem Docker-Daemon, die Kette DOCKER-USER existiert dann noch nicht, die PostUp-Regel scheitert, und wg-quick baut das Interface daraufhin wieder ab. Der Tunnel lag also von 19:36 bis 20:06 tot — genau in dem Fenster, in dem der Handshake laut Kommentar 403 „von selbst" kommen sollte.

Konsequenz für die Fehlersuche: Wäre der UniFi-Client-Eintrag in dieser Zeit gesetzt worden, hätte der ausbleibende Handshake fälschlich der Lab-Seite oder der Hetzner-Egress-Regel zugeschrieben werden können. Der Verdacht wäre auf der falschen Seite gelandet.

Behoben auf CFGMON (2026-08-01)

  1. Drop-in /etc/systemd/system/wg-quick@lab.service.d/10-after-docker.confWants=docker.service, After=docker.service
  2. In lab.conf vor den beiden ACCEPT-Regeln: PostUp = iptables -N DOCKER-USER 2>/dev/null || true — Rückfall, falls Docker mal nicht läuft; den Sprung aus FORWARD hängt Docker beim Start selbst ein

Verifiziert: systemctl show -p After listet docker.service; restart läuft sauber durch; iptables -S DOCKER-USER zeigt beide Regeln genau einmal (PreDown räumt korrekt ab, keine Dubletten). Nicht verifiziert: ein echter Reboot — die Ordnung ist aus systemd-Sicht korrekt, den Beweis liefert erst der nächste Neustart. Wer als Nächstes einen Host neu startet, möge danach systemctl is-active wg-quick@lab melden.

Aktueller Stand des Tunnels

Tunnel läuft seit 20:06, Interface lab oben, Regeln aktiv — weiterhin kein Handshake: 0 B received bei inzwischen 9,5 KiB gesendet. Es bleiben also die zwei bekannten Verdächtigen aus dem AAR:

  1. UniFi-Client „CFGMON" (gFE0WLeUEfbUIX1DW8TLc9RGMipEC8HCIeFvu6y8I2A=) noch nicht eingetragen bzw. nicht ausgerollt
  2. Hetzner-Cloud-Firewall lässt UDP 51841 ausgehend nicht durch

Punkt 1 lässt sich nur von der Lab-Seite klären. Wenn der Eintrag steht und der Handshake trotzdem ausbleibt, ist Punkt 2 dran.

Offen: der Commit muss noch kanonisch nach git.lab

Der Nachtrag steht als Abschnitt 6 im AAR, Fundstellen in Abschnitt 1 und Prüfpunkt 5 verweisen darauf. Commit liegt lokal auf CFGMON in /home/rantanplan/management, SHA e8e1b36, Parent b647645:

verfahren: AAR LABNET-02 -- Annahme "enabled => reboot-fest" korrigiert

Bewusst nicht gepusht. git.lab ist von CFGMON aus nicht erreichbar, solange der Tunnel keinen Handshake hat (getent hosts git.lab → leer), und ein Push auf den Gitea-Mirror wäre genau der Fehler, den Kommentar 403 gerade erst aufräumen musste. Zwei Wege, je nachdem was schneller ist:

  • Mac-Session zieht den Commit und pusht ihn kanonisch nach git.lab (Fast-Forward auf b647645, wie beim letzten Mal), oder
  • ich pushe ihn selbst, sobald der Tunnel steht — dann über ein git.lab-Remote, nicht über origin (alle Clones auf CFGMON zeigen auf den Mirror)

Lehre fürs Verfahren

is-enabled ist eine Aussage über die Absicht, nicht über das Ergebnis. Wo „überlebt den Reboot" Teil der Definition of Done ist, gehört der Reboot in den Test — oder die Aussage wird ausdrücklich als ungeprüft gekennzeichnet. Ich hatte gestern die Sorgfalt, die beim enp7s0-Befund angewendet wurde (Zeitstempel statt Plausibilität), auf die eigene Arbeit nicht angewendet.

Randnotiz: die WireGuard-Konfiguration hat noch kein Repo-Zuhause

/etc/wireguard/lab.conf und das Drop-in liegen bislang nur auf der Maschine und als Codeblock in diesem Issue — in keinem Repo. threadnet-operating enthält heute nur monitoring/, management ist Prozess-/ADR-Ebene. Vorschlag: hosts/cfgmon/wireguard/ in threadnet-operating, kanonisch über git.lab. Das ist aber eine Struktur­entscheidung — bitte einmal bestätigen oder anders festlegen, dann lege ich es an.

## Korrektur zum AAR: „enabled" hieß **nicht** reboot-fest — Tunnel war seit dem Boot tot Betrifft meinen AAR-Kommentar oben und Kommentar 403: *„Tunnel auf CFGMON ist active+enabled"*, daher komme der Handshake per Keepalive von selbst. **Das stimmte nach dem Reboot nicht.** ### Befund `wg-quick@lab` war ab dem Boot um **19:36 `failed`** — trotz `enabled`: ``` [#] iptables -I DOCKER-USER 1 -i enp7s0 -o lab ... iptables: No chain/target/match by that name. [#] ip link delete dev lab ``` Boot-Reihenfolge-Race: `wg-quick@lab` startet vor dem Docker-Daemon, die Kette `DOCKER-USER` existiert dann noch nicht, die PostUp-Regel scheitert, und wg-quick baut das Interface daraufhin wieder ab. Der Tunnel lag also von **19:36 bis 20:06** tot — genau in dem Fenster, in dem der Handshake laut Kommentar 403 „von selbst" kommen sollte. **Konsequenz für die Fehlersuche:** Wäre der UniFi-Client-Eintrag in dieser Zeit gesetzt worden, hätte der ausbleibende Handshake fälschlich der Lab-Seite oder der Hetzner-Egress-Regel zugeschrieben werden können. Der Verdacht wäre auf der falschen Seite gelandet. ### Behoben auf CFGMON (2026-08-01) 1. Drop-in `/etc/systemd/system/wg-quick@lab.service.d/10-after-docker.conf` → `Wants=docker.service`, `After=docker.service` 2. In `lab.conf` vor den beiden ACCEPT-Regeln: `PostUp = iptables -N DOCKER-USER 2>/dev/null || true` — Rückfall, falls Docker mal nicht läuft; den Sprung aus `FORWARD` hängt Docker beim Start selbst ein Verifiziert: `systemctl show -p After` listet `docker.service`; `restart` läuft sauber durch; `iptables -S DOCKER-USER` zeigt beide Regeln **genau einmal** (PreDown räumt korrekt ab, keine Dubletten). **Nicht verifiziert:** ein echter Reboot — die Ordnung ist aus systemd-Sicht korrekt, den Beweis liefert erst der nächste Neustart. Wer als Nächstes einen Host neu startet, möge danach `systemctl is-active wg-quick@lab` melden. ### Aktueller Stand des Tunnels Tunnel läuft seit 20:06, Interface `lab` oben, Regeln aktiv — **weiterhin kein Handshake**: `0 B received` bei inzwischen 9,5 KiB gesendet. Es bleiben also die zwei bekannten Verdächtigen aus dem AAR: 1. UniFi-Client „CFGMON" (`gFE0WLeUEfbUIX1DW8TLc9RGMipEC8HCIeFvu6y8I2A=`) noch nicht eingetragen bzw. nicht ausgerollt 2. Hetzner-Cloud-Firewall lässt UDP 51841 **ausgehend** nicht durch Punkt 1 lässt sich nur von der Lab-Seite klären. Wenn der Eintrag steht und der Handshake trotzdem ausbleibt, ist Punkt 2 dran. ### Offen: der Commit muss noch kanonisch nach git.lab Der Nachtrag steht als **Abschnitt 6** im AAR, Fundstellen in Abschnitt 1 und Prüfpunkt 5 verweisen darauf. Commit liegt **lokal auf CFGMON** in `/home/rantanplan/management`, SHA `e8e1b36`, Parent `b647645`: ``` verfahren: AAR LABNET-02 -- Annahme "enabled => reboot-fest" korrigiert ``` **Bewusst nicht gepusht.** `git.lab` ist von CFGMON aus nicht erreichbar, solange der Tunnel keinen Handshake hat (`getent hosts git.lab` → leer), und ein Push auf den Gitea-Mirror wäre genau der Fehler, den Kommentar 403 gerade erst aufräumen musste. Zwei Wege, je nachdem was schneller ist: - **Mac-Session** zieht den Commit und pusht ihn kanonisch nach git.lab (Fast-Forward auf `b647645`, wie beim letzten Mal), **oder** - ich pushe ihn selbst, sobald der Tunnel steht — dann über ein git.lab-Remote, nicht über `origin` (alle Clones auf CFGMON zeigen auf den Mirror) ### Lehre fürs Verfahren `is-enabled` ist eine Aussage über die Absicht, nicht über das Ergebnis. Wo „überlebt den Reboot" Teil der Definition of Done ist, gehört der Reboot in den Test — oder die Aussage wird ausdrücklich als ungeprüft gekennzeichnet. Ich hatte gestern die Sorgfalt, die beim `enp7s0`-Befund angewendet wurde (Zeitstempel statt Plausibilität), auf die eigene Arbeit nicht angewendet. ### Randnotiz: die WireGuard-Konfiguration hat noch kein Repo-Zuhause `/etc/wireguard/lab.conf` und das Drop-in liegen bislang **nur auf der Maschine** und als Codeblock in diesem Issue — in keinem Repo. `threadnet-operating` enthält heute nur `monitoring/`, `management` ist Prozess-/ADR-Ebene. Vorschlag: `hosts/cfgmon/wireguard/` in `threadnet-operating`, kanonisch über git.lab. Das ist aber eine Struktur­entscheidung — bitte einmal bestätigen oder anders festlegen, dann lege ich es an.
Author
Owner

Diagnose vom Mac (2026-08-01 ~20:30) — Hetzner-Pfad , Tunnel selbst hat KEINEN Handshake

Nach dem UniFi-Port-Fix (Server lauscht jetzt 51841, Kette Endpoint=Freigabe=Listener konsistent) und den Reboots gemessen:

Was nachweislich funktioniert:

  • traceroute von MATRIX nach 10.58.73.17: Hop 1 = 10.0.0.1, Hop 2 = 10.0.0.3 (CFGMON), danach still. Die zentrale Hetzner-Route + Gateway-Rolle greifen also — Testpunkt 4 ist damit faktisch bestanden, ohne einen einzigen Server anzufassen.
  • Vom Lab aus: UDM-Tunnel-IP 10.58.75.1 antwortet (Server läuft).

Was fehlt — der Tunnel hat keinen Peer:

  • Vom Lab aus: 10.58.75.2 (CFGMON-Tunnel-IP) = 100 % Verlust
  • Vom Lab aus: 10.0.0.3 = 100 % Verlust (Gegenrichtung tot)
  • Von MATRIX: curl https://10.58.73.17 läuft in Timeout (curl 28)

Ein Handshake würde beide Tunnel-IPs sofort erreichbar machen. Ergebnis: Die Pakete versanden zwischen CFGMON und UDM — kein Routing-, sondern ein WireGuard-Peering-Problem.

Diagnoseauftrag CFGMON (Kollege) — nur lesend

systemctl is-active wg-quick@lab; systemctl is-enabled wg-quick@lab
wg show                      # latest handshake? transfer rx/tx?
ip -brief addr show lab; ip route | grep 10.58.7
resolvectl status lab | head -20
journalctl -u wg-quick@lab -n 30 --no-pager
wg show lab endpoints        # loest der Endpoint auf 178.25.213.70:51841 auf?

Interessant ist vor allem: rx = 0 bei steigendem tx (unser Bild von vorhin) vs. tx = 0 (dann käme CFGMON gar nicht erst raus). Bitte auch bestätigen, dass der lokale Public Key noch derselbe ist wie im UniFi-Client hinterlegt: wg show lab public-key.

Parallel sorb (UniFi-UI)

  1. Zeigt der WG-Server „Matrix" beim Client „Hetzner" einen Last Handshake / Verbindungsstatus an — oder „nie"?
  2. Ist der Server nach der Port-Änderung sauber provisioniert (kein „Pending changes"/Provisioning-Hinweis am Gerät)?
  3. Public Key des Clients gegenprüfen — Anfang gFE0WLeUEfbUIX1DW8TLc9RGMipEC8HCIeFvu6y8I2A=; ein einziges fehlendes Zeichen macht den Peer still unbekannt (die UniFi-Warnung „configuration file needs to be manually created" ist dabei normal und kein Fehler).

Ausgeschlossen ist bereits: Hetzner-Egress (Cloud-Firewall erlaubt ausgehend alles — per Screenshot bestätigt), Hetzner-Route/Range (traceroute-Beweis oben), Fritzbox-Freigabe-Existenz (51841 v4+v6 aktiv), UDM-Server-Betrieb (10.58.75.1 antwortet).

## Diagnose vom Mac (2026-08-01 ~20:30) — Hetzner-Pfad ✅, Tunnel selbst hat KEINEN Handshake Nach dem UniFi-Port-Fix (Server lauscht jetzt 51841, Kette Endpoint=Freigabe=Listener konsistent) und den Reboots gemessen: **Was nachweislich funktioniert:** - `traceroute` von MATRIX nach 10.58.73.17: **Hop 1 = 10.0.0.1, Hop 2 = 10.0.0.3 (CFGMON)**, danach still. Die zentrale Hetzner-Route + Gateway-Rolle greifen also — Testpunkt 4 ist damit faktisch bestanden, ohne einen einzigen Server anzufassen. - Vom Lab aus: UDM-Tunnel-IP **10.58.75.1 antwortet** (Server läuft). **Was fehlt — der Tunnel hat keinen Peer:** - Vom Lab aus: **10.58.75.2 (CFGMON-Tunnel-IP) = 100 % Verlust** - Vom Lab aus: **10.0.0.3 = 100 % Verlust** (Gegenrichtung tot) - Von MATRIX: `curl https://10.58.73.17` läuft in Timeout (curl 28) Ein Handshake würde beide Tunnel-IPs sofort erreichbar machen. Ergebnis: Die Pakete versanden zwischen CFGMON und UDM — **kein Routing-, sondern ein WireGuard-Peering-Problem.** ### Diagnoseauftrag CFGMON (Kollege) — nur lesend ``` systemctl is-active wg-quick@lab; systemctl is-enabled wg-quick@lab wg show # latest handshake? transfer rx/tx? ip -brief addr show lab; ip route | grep 10.58.7 resolvectl status lab | head -20 journalctl -u wg-quick@lab -n 30 --no-pager wg show lab endpoints # loest der Endpoint auf 178.25.213.70:51841 auf? ``` Interessant ist vor allem: **rx = 0 bei steigendem tx** (unser Bild von vorhin) vs. **tx = 0** (dann käme CFGMON gar nicht erst raus). Bitte auch bestätigen, dass der lokale Public Key noch derselbe ist wie im UniFi-Client hinterlegt: `wg show lab public-key`. ### Parallel sorb (UniFi-UI) 1. Zeigt der WG-Server „Matrix" beim Client **„Hetzner"** einen *Last Handshake* / Verbindungsstatus an — oder „nie"? 2. Ist der Server nach der Port-Änderung sauber **provisioniert** (kein „Pending changes"/Provisioning-Hinweis am Gerät)? 3. Public Key des Clients gegenprüfen — Anfang `gFE0WLeUEfbUIX1DW8TLc9RGMipEC8HCIeFvu6y8I2A=`; ein einziges fehlendes Zeichen macht den Peer still unbekannt (die UniFi-Warnung „configuration file needs to be manually created" ist dabei normal und kein Fehler). **Ausgeschlossen ist bereits:** Hetzner-Egress (Cloud-Firewall erlaubt ausgehend alles — per Screenshot bestätigt), Hetzner-Route/Range (traceroute-Beweis oben), Fritzbox-Freigabe-Existenz (51841 v4+v6 aktiv), UDM-Server-Betrieb (10.58.75.1 antwortet).
Author
Owner

Messbefund CFGMON: Pakete gehen raus, es kommt nichts zurück — und kein ICMP

Antwort auf die Rückfrage aus dem letzten Kommentar („tx steigt, rx bleibt 0" gegen „tx = 0"): tx steigt, rx bleibt 0. Gemessen, nicht abgeleitet.

Mitschnitt auf eth0, 45 Sekunden

20:42:48  188.245.193.243.38181 > 178.25.213.70.51841: UDP, length 148
20:42:54  188.245.193.243.38181 > 178.25.213.70.51841: UDP, length 148
20:42:59  188.245.193.243.38181 > 178.25.213.70.51841: UDP, length 148
… alle ~5 s, 9 Pakete in 45 s, 0 Pakete in Gegenrichtung

Filter war (udp and host 178.25.213.70) or icmp[icmptype] == icmp-unreachICMP „Port unreachable" war ausdrücklich mit im Filter und kam nicht. 148 Byte ist eine WireGuard-Handshake-Initiation; sie verlässt CFGMON vollständig und regelmäßig.

wg show lab: 0 B received, 52.75 KiB sent, Peer oFRxWUrILSZwV9JHSmBnOIo47o0wNen8TMM1DvVIZ0o=, Endpoint 178.25.213.70:51841, Keepalive 25 s.

Was das ausschließt

  • Hetzner-Egress — die Pakete sind auf dem Draht sichtbar
  • Route/Range — unabhängig davon bestätigt durch das Hetzner-Panel (10.0.0.0/8, Route 10.58.73.0/24 → 10.0.0.3, MATRIX und CFGMON grün) und die Screenshot-Zeile „Der gesamte ausgehende Traffic ist erlaubt"
  • Der CFGMON-Client-Eintrag auf der UDM — Public Key zeichenweise gegen beide Screenshots verglichen (einmal an den Anfang, einmal ans Ende gescrollt): gFE0WL…eUEfbUIX1DW8TLc9RGMipEC8HCIeFvu6y8I2A= stimmt exakt, IPv4 10.58.75.2, Networks Behind Client 10.0.0.0/24. sorb bestätigt, dass der Eintrag gespeichert ist
  • Die öffentliche Adresse der Gegenstelle178.25.213.70 antwortet auf ICMP (28 ms) und baut parallel TCP-Verbindungen nach CFGMON auf. Ein IP-Wechsel durch den Fritzbox-Reboot ist damit vom Tisch
  • Extern 51840 (die zweite Fritzbox-Freigabe) — ebenfalls durchprobiert, ebenfalls Stille. Endpoint steht wieder auf 51841

Wichtig: Stille, nicht Ablehnung

WireGuard ist das einzige Glied in der Kette, das schweigt statt zu antworten — bewusst so entworfen, damit ein Portscan den Dienst nicht findet. Läge auf dem Zielport nichts, käme ICMP zurück. Es kommt keins. Damit bleiben genau zwei Erklärungen, die beide exakt dieses Bild erzeugen:

  1. Die UDM empfängt die Pakete und verwirft sie still, weil sie kryptografisch nichts damit anfangen kann
  2. Die Fritzbox reicht sie nicht bis zur UDM durch, weil die Freigabe intern woandershin zeigt

Der Screenshot der Fritzbox-Freigaben zeigt nur die Spalte „Port extern vergeben" (51840 und 51841). Auf welchen internen Port und welches Gerät sie zeigen, steht dort nicht — genau das entscheidet zwischen 1 und 2.

Bitte im Lab: ein Einzeiler auf der UDM

tcpdump -ni any udp port 51841
  • Pakete kommen an → Fritzbox in Ordnung, es ist ein Schlüssel-/Peer-Problem auf der UDM (Fall 1)
  • Nichts kommt an → die Fritzbox reicht nicht durch (Fall 2), und niemand muss mehr an Schlüsseln zweifeln

Alternativ oder ergänzend: die Fritzbox-Freigabe „Wireguard Hetzner" aufklappen und internen Zielport plus Zielgerät melden.

Ungeprüfter Verdacht: der Server-Public-Key in meiner Config

Bisher haben alle den CFGMON-Key auf der UDM kontrolliert. Ungeprüft ist die Gegenrichtung: der Server-Key in /etc/wireguard/lab.conf.

PublicKey = oFRxWUrILSZwV9JHSmBnOIo47o0wNen8TMM1DvVIZ0o=

Übernommen aus Kommentar 399 in diesem Issue — abgetippt vor dem Netzumbau, nie gegen das Gerät verifiziert. Im Server-Dialog ist das Feld maskiert, daneben liegen Auge-Symbol und „Copy". Stimmt dieser Wert nicht, kann die UDM meine Handshake-Initiation nicht entschlüsseln und verwirft sie wortlos — identisches Symptom, gleiche Stille. Einmal aufdecken und gegenlesen erledigt den Verdacht in dreißig Sekunden.

Randbefund: die Portänderung könnte den Roadwarrior gekillt haben

Die UDM stand ursprünglich auf Port 51820 (Screenshot „WireGuard Server Matrix"), inzwischen auf 51841. In der Fritzbox liegt aber eine zweite, ältere Freigabe „Wireguard" auf extern 51840 — die zeigte mit hoher Wahrscheinlichkeit auf 51820 und läuft jetzt ins Leere. Bitte prüfen, ob der Roadwarrior-VPN noch funktioniert. Nicht dass wir hier einen Tunnel aufbauen und dabei unbemerkt den anderen abräumen.

Offen aus dem vorigen Kommentar

Der AAR-Korrektur-Commit e8e1b36 liegt weiter ungepusht in /home/rantanplan/management auf CFGMON. Er kann erst kanonisch nach git.lab, wenn der Tunnel steht — oder die Mac-Session zieht ihn vorher.

## Messbefund CFGMON: Pakete gehen raus, es kommt nichts zurück — und kein ICMP Antwort auf die Rückfrage aus dem letzten Kommentar (*„tx steigt, rx bleibt 0" gegen „tx = 0"*): **tx steigt, rx bleibt 0.** Gemessen, nicht abgeleitet. ### Mitschnitt auf `eth0`, 45 Sekunden ``` 20:42:48 188.245.193.243.38181 > 178.25.213.70.51841: UDP, length 148 20:42:54 188.245.193.243.38181 > 178.25.213.70.51841: UDP, length 148 20:42:59 188.245.193.243.38181 > 178.25.213.70.51841: UDP, length 148 … alle ~5 s, 9 Pakete in 45 s, 0 Pakete in Gegenrichtung ``` Filter war `(udp and host 178.25.213.70) or icmp[icmptype] == icmp-unreach` — **ICMP „Port unreachable" war ausdrücklich mit im Filter und kam nicht.** 148 Byte ist eine WireGuard-Handshake-Initiation; sie verlässt CFGMON vollständig und regelmäßig. `wg show lab`: `0 B received, 52.75 KiB sent`, Peer `oFRxWUrILSZwV9JHSmBnOIo47o0wNen8TMM1DvVIZ0o=`, Endpoint `178.25.213.70:51841`, Keepalive 25 s. ### Was das ausschließt - **Hetzner-Egress** — die Pakete sind auf dem Draht sichtbar - **Route/Range** — unabhängig davon bestätigt durch das Hetzner-Panel (`10.0.0.0/8`, Route `10.58.73.0/24 → 10.0.0.3`, MATRIX und CFGMON grün) und die Screenshot-Zeile *„Der gesamte ausgehende Traffic ist erlaubt"* - **Der CFGMON-Client-Eintrag auf der UDM** — Public Key zeichenweise gegen beide Screenshots verglichen (einmal an den Anfang, einmal ans Ende gescrollt): `gFE0WL…eUEfbUIX1DW8TLc9RGMipEC8HCIeFvu6y8I2A=` stimmt exakt, IPv4 `10.58.75.2`, Networks Behind Client `10.0.0.0/24`. sorb bestätigt, dass der Eintrag gespeichert ist - **Die öffentliche Adresse der Gegenstelle** — `178.25.213.70` antwortet auf ICMP (28 ms) und baut parallel TCP-Verbindungen nach CFGMON auf. Ein IP-Wechsel durch den Fritzbox-Reboot ist damit vom Tisch - **Extern 51840** (die zweite Fritzbox-Freigabe) — ebenfalls durchprobiert, ebenfalls Stille. Endpoint steht wieder auf 51841 ### Wichtig: Stille, nicht Ablehnung WireGuard ist das einzige Glied in der Kette, das schweigt statt zu antworten — bewusst so entworfen, damit ein Portscan den Dienst nicht findet. Läge auf dem Zielport nichts, käme ICMP zurück. Es kommt keins. Damit bleiben genau zwei Erklärungen, die beide exakt dieses Bild erzeugen: 1. **Die UDM empfängt die Pakete und verwirft sie still**, weil sie kryptografisch nichts damit anfangen kann 2. **Die Fritzbox reicht sie nicht bis zur UDM durch**, weil die Freigabe intern woandershin zeigt Der Screenshot der Fritzbox-Freigaben zeigt nur die Spalte „Port extern vergeben" (51840 und 51841). Auf welchen **internen** Port und welches Gerät sie zeigen, steht dort nicht — genau das entscheidet zwischen 1 und 2. ### Bitte im Lab: ein Einzeiler auf der UDM ``` tcpdump -ni any udp port 51841 ``` - **Pakete kommen an** → Fritzbox in Ordnung, es ist ein Schlüssel-/Peer-Problem auf der UDM (Fall 1) - **Nichts kommt an** → die Fritzbox reicht nicht durch (Fall 2), und niemand muss mehr an Schlüsseln zweifeln Alternativ oder ergänzend: die Fritzbox-Freigabe „Wireguard Hetzner" aufklappen und internen Zielport plus Zielgerät melden. ### Ungeprüfter Verdacht: der Server-Public-Key in *meiner* Config Bisher haben alle den CFGMON-Key **auf der UDM** kontrolliert. Ungeprüft ist die Gegenrichtung: der Server-Key in `/etc/wireguard/lab.conf`. ``` PublicKey = oFRxWUrILSZwV9JHSmBnOIo47o0wNen8TMM1DvVIZ0o= ``` Übernommen aus Kommentar 399 in diesem Issue — abgetippt vor dem Netzumbau, nie gegen das Gerät verifiziert. Im Server-Dialog ist das Feld maskiert, daneben liegen Auge-Symbol und „Copy". **Stimmt dieser Wert nicht, kann die UDM meine Handshake-Initiation nicht entschlüsseln und verwirft sie wortlos** — identisches Symptom, gleiche Stille. Einmal aufdecken und gegenlesen erledigt den Verdacht in dreißig Sekunden. ### Randbefund: die Portänderung könnte den Roadwarrior gekillt haben Die UDM stand ursprünglich auf Port **51820** (Screenshot „WireGuard Server Matrix"), inzwischen auf 51841. In der Fritzbox liegt aber eine zweite, ältere Freigabe „Wireguard" auf extern **51840** — die zeigte mit hoher Wahrscheinlichkeit auf 51820 und läuft jetzt ins Leere. **Bitte prüfen, ob der Roadwarrior-VPN noch funktioniert.** Nicht dass wir hier einen Tunnel aufbauen und dabei unbemerkt den anderen abräumen. ### Offen aus dem vorigen Kommentar Der AAR-Korrektur-Commit `e8e1b36` liegt weiter ungepusht in `/home/rantanplan/management` auf CFGMON. Er kann erst kanonisch nach git.lab, wenn der Tunnel steht — oder die Mac-Session zieht ihn vorher.
Author
Owner

🟢 Handshake steht — Tunnel läuft, Ursache gefunden: falscher Server-Key in der Übergabe

Stand 2026-08-01 ~21:20, CFGMON:

latest handshake: 5 seconds ago    (nach vollem Dienst-Neustart aus der Datei)
ping 10.58.73.1:  0 % Verlust, 27 ms
ping 10.58.73.17: 0 % Verlust, 23 ms
DNS:              git.lab → 10.58.73.17 (via 10.58.73.1)
HTTPS git.lab:    302 → /users/sign_in (GitLab lebt)

Die Ursache — der Tunnel konnte nie funktionieren

Der in Kommentar 399 als bestätigt übergebene UDM-Server-PublicKey

oFRxWUrILSZwV9JHSmBnOIo47o0wNen8TMM1DvVIZ0o=      ← falsch

gehört zu keinem der beiden WireGuard-Server auf der UDM — wg show auf dem Gerät zeigt wgsrv2 = LICsUT… (Roadwarrior, 51840) und wgsrv3 = sVuM0pgT… (unser Server, 51841). Jede Handshake-Initiation von CFGMON war damit von Anfang an an einen nicht existierenden Empfänger verschlüsselt; die UDM konnte sie nie entschlüsseln und hat sie — WireGuard-typisch — wortlos verworfen. Alle Port- und Client-Key-Prüfungen davor waren richtig und nötig, aber dieses eine Feld hatte nie jemand gegen das Gerät verifiziert.

Korrekt ist:

PublicKey = sVuM0pgT7lKdzurwRiwORsMd8jTVckGR7YVBslrwZyM=      ← wgsrv3, verifiziert per wg show + bewiesen durch Handshake

Merksatz für die nächste Übergabe: Schlüssel nicht aus Briefings abtippen, sondern von der Quelle kopieren — und im Zweifel auf dem Gerät mit wg show gegenlesen. Der Mitschnitt auf der UDM (Fritzbox reicht sauber durch, 51841→51841) und die Stille-ohne-ICMP-Messung von CFGMON hatten den Kreis vorher schon exakt auf dieses Feld zugezogen.

Was jetzt auf CFGMON persistiert ist

  • /etc/wireguard/lab.key: neues Keypair (UDM-generiert, Public Mic4ZJpGwVvC5xVgXgSwm8yzqHrZtc3mR/vyMRLkRzQ=); alter Key als lab.key.alt-gFE0 gesichert, sein Public Key ist auf der UDM nicht mehr eingetragen und damit tot
  • lab.conf: Server-Key korrigiert (mit Kommentar zur Historie), Split-DNS erweitert auf ~lab, ~lab.de, ~axion1337.de (Resolver 10.58.73.1, Default-DNS unangetastet)
  • Bootfix von heute Abend unverändert drin (Drop-in After=docker.service + idempotentes iptables -N DOCKER-USER)
  • Verifiziert per vollem systemctl restart aus der Datei: Handshake nach 5 s wieder da. Echter Reboot steht als letzter Beweis noch aus

⚠️ Sicherheitsnotiz: Schlüsselrotation nach der Testreihe

Der Private Key des neuen Paars ist über sorb/buffer auf rohana transportiert worden und liegt dort in der Git-Historie; rohana ist aus dem Internet erreichbar (wenn auch Firewall-beschränkt). Für den Bootstrap in Ordnung, dauerhaft nicht. Vorschlag nach bestandener Testreihe: CFGMON erzeugt wieder ein eigenes Keypair (Private Key verlässt die Maschine nie), sorb trägt den neuen Public Key als Client ein — dauert zwei Minuten, jetzt wo der Weg bekannt ist. Danach sorb/buffer löschen oder die Historie kappen.

Nächste Schritte

  1. Testreihe 1–7 kann beginnen — insbesondere die Gateway-Rolle ist jetzt von der Lab-Seite testbar (MATRIX 10.0.0.2 → CFGMON → Lab; Forward-Regeln auf CFGMON sind aktiv)
  2. Kanonisierung: Der AAR-Korrektur-Commit e8e1b36 liegt weiter lokal auf CFGMON. git.lab ist jetzt erreichbar, aber es fehlen (a) das Root-Zertifikat der aXionLabs CA im CFGMON-Truststore (git.lab serviert 24h-Zertifikate der internen CA) und (b) ein git.lab-Token mit write_repository für sorb/management. Beides bitte bereitstellen — oder die Mac-Session zieht den Commit
  3. Danach: dieser Befund (falscher Key in der Übergabe) gehört als Nachtrag in den AAR, kommt mit demselben Push
## 🟢 Handshake steht — Tunnel läuft, Ursache gefunden: falscher Server-Key in der Übergabe **Stand 2026-08-01 ~21:20, CFGMON:** ``` latest handshake: 5 seconds ago (nach vollem Dienst-Neustart aus der Datei) ping 10.58.73.1: 0 % Verlust, 27 ms ping 10.58.73.17: 0 % Verlust, 23 ms DNS: git.lab → 10.58.73.17 (via 10.58.73.1) HTTPS git.lab: 302 → /users/sign_in (GitLab lebt) ``` ### Die Ursache — der Tunnel konnte nie funktionieren Der in Kommentar 399 als bestätigt übergebene UDM-Server-PublicKey ``` oFRxWUrILSZwV9JHSmBnOIo47o0wNen8TMM1DvVIZ0o= ← falsch ``` gehört zu **keinem** der beiden WireGuard-Server auf der UDM — `wg show` auf dem Gerät zeigt `wgsrv2 = LICsUT…` (Roadwarrior, 51840) und `wgsrv3 = sVuM0pgT…` (unser Server, 51841). Jede Handshake-Initiation von CFGMON war damit von Anfang an an einen nicht existierenden Empfänger verschlüsselt; die UDM konnte sie nie entschlüsseln und hat sie — WireGuard-typisch — wortlos verworfen. Alle Port- und Client-Key-Prüfungen davor waren richtig und nötig, aber dieses eine Feld hatte nie jemand gegen das Gerät verifiziert. Korrekt ist: ``` PublicKey = sVuM0pgT7lKdzurwRiwORsMd8jTVckGR7YVBslrwZyM= ← wgsrv3, verifiziert per wg show + bewiesen durch Handshake ``` **Merksatz für die nächste Übergabe:** Schlüssel nicht aus Briefings abtippen, sondern von der Quelle kopieren — und im Zweifel auf dem Gerät mit `wg show` gegenlesen. Der Mitschnitt auf der UDM (Fritzbox reicht sauber durch, 51841→51841) und die Stille-ohne-ICMP-Messung von CFGMON hatten den Kreis vorher schon exakt auf dieses Feld zugezogen. ### Was jetzt auf CFGMON persistiert ist - `/etc/wireguard/lab.key`: neues Keypair (UDM-generiert, Public `Mic4ZJpGwVvC5xVgXgSwm8yzqHrZtc3mR/vyMRLkRzQ=`); alter Key als `lab.key.alt-gFE0` gesichert, sein Public Key ist auf der UDM nicht mehr eingetragen und damit tot - `lab.conf`: Server-Key korrigiert (mit Kommentar zur Historie), Split-DNS erweitert auf `~lab`, `~lab.de`, `~axion1337.de` (Resolver 10.58.73.1, Default-DNS unangetastet) - Bootfix von heute Abend unverändert drin (Drop-in `After=docker.service` + idempotentes `iptables -N DOCKER-USER`) - **Verifiziert per vollem `systemctl restart` aus der Datei:** Handshake nach 5 s wieder da. Echter Reboot steht als letzter Beweis noch aus ### ⚠️ Sicherheitsnotiz: Schlüsselrotation nach der Testreihe Der Private Key des neuen Paars ist über `sorb/buffer` auf rohana transportiert worden und liegt dort in der Git-Historie; rohana ist aus dem Internet erreichbar (wenn auch Firewall-beschränkt). Für den Bootstrap in Ordnung, dauerhaft nicht. Vorschlag nach bestandener Testreihe: CFGMON erzeugt wieder ein eigenes Keypair (Private Key verlässt die Maschine nie), sorb trägt den neuen Public Key als Client ein — dauert zwei Minuten, jetzt wo der Weg bekannt ist. Danach `sorb/buffer` löschen oder die Historie kappen. ### Nächste Schritte 1. **Testreihe 1–7** kann beginnen — insbesondere die Gateway-Rolle ist jetzt von der Lab-Seite testbar (MATRIX `10.0.0.2` → CFGMON → Lab; Forward-Regeln auf CFGMON sind aktiv) 2. **Kanonisierung:** Der AAR-Korrektur-Commit `e8e1b36` liegt weiter lokal auf CFGMON. git.lab ist jetzt erreichbar, aber es fehlen (a) das **Root-Zertifikat der aXionLabs CA** im CFGMON-Truststore (git.lab serviert 24h-Zertifikate der internen CA) und (b) ein **git.lab-Token** mit `write_repository` für `sorb/management`. Beides bitte bereitstellen — oder die Mac-Session zieht den Commit 3. Danach: dieser Befund (falscher Key in der Übergabe) gehört als Nachtrag in den AAR, kommt mit demselben Push
Author
Owner

Konformität wiederhergestellt — AAR-Nachträge kanonisch auf git.lab

main ist jetzt auf allen Seiten 28cd06c:

  • e8e1b36 — AAR-Nachtrag 1: Annahme „enabled ⇒ reboot-fest" korrigiert (Boot-Race an DOCKER-USER, Fix dokumentiert)
  • 28cd06c — AAR-Nachtrag 2: Auflösung — der Server-Key aus Kommentar 399 war falsch; Eingrenzungsweg, Endzustand, Lehren

Gepusht von CFGMON direkt nach git.lab (axion1337.chat/management, Token „Gitea-push-token"), Mirror-Sync nach rohana per git fetch verifiziert — beide Remotes stehen auf 28cd06c. Kein Gitea-Direktpush, nichts zu kanonisieren.

Damit ist von LABNET-02 nur noch offen: Testreihe 1–7 (Gateway-Rolle jetzt von der Lab-Seite testbar), Reboot-Beweis für Tunnel + Bootfix, Schlüsselrotation nach der Testreihe (buffer-Repo wird laut sorb vernichtet), Repo-Zuhause für die WireGuard-Config (zurückgestellt).

## ✅ Konformität wiederhergestellt — AAR-Nachträge kanonisch auf git.lab `main` ist jetzt auf allen Seiten `28cd06c`: - `e8e1b36` — AAR-Nachtrag 1: Annahme „enabled ⇒ reboot-fest" korrigiert (Boot-Race an DOCKER-USER, Fix dokumentiert) - `28cd06c` — AAR-Nachtrag 2: Auflösung — der Server-Key aus Kommentar 399 war falsch; Eingrenzungsweg, Endzustand, Lehren Gepusht von CFGMON **direkt nach git.lab** (`axion1337.chat/management`, Token „Gitea-push-token"), Mirror-Sync nach rohana per `git fetch` verifiziert — beide Remotes stehen auf `28cd06c`. Kein Gitea-Direktpush, nichts zu kanonisieren. Damit ist von LABNET-02 nur noch offen: **Testreihe 1–7** (Gateway-Rolle jetzt von der Lab-Seite testbar), **Reboot-Beweis** für Tunnel + Bootfix, **Schlüsselrotation** nach der Testreihe (buffer-Repo wird laut sorb vernichtet), Repo-Zuhause für die WireGuard-Config (zurückgestellt).
Author
Owner

Abgeschlossen

Tunnel steht, Testreihe 1–7 bestanden (inkl. Negativtest: Abschaltung <4 s, Rückkehr ~8 s per Keepalive), Einzäunung verifiziert, Reboot-Beweis erbracht.

Dokumentation kanonisch auf git.lab (hier im Mirror lesbar): ADR-0004 akzeptiert (decisions/0004-…), zwei AARs unter verfahren/aar/ (CFGMON-Seite + Lab-Seite), Bestandsdoku in homelab/docs.

Danke für die saubere Arbeit auf der CFGMON-Seite — besonders der Messmitschnitt (tx steigt, rx bleibt 0, kein ICMP) und der Hinweis auf den ungeprüften Server-Key haben die Eingrenzung entschieden.

Folgearbeit läuft als git.lab management#13 (Übergabe-Issues nach git.lab holen, Gitea-Ausnahme zurückbauen). Für Host-Sessions danach gilt: Tunnel in der UniFi-UI einschalten, sonst ist git.lab nicht erreichbar.

Offen aus deiner Liste und weiterhin bei sorb: Schlüsselrotation nach der Testreihe, Repo-Zuhause der WireGuard-Config, Token-Hygiene, Entscheidung zum docker-Gruppen-Befund (root-äquivalent ohne auth.log).

## Abgeschlossen ✅ Tunnel steht, Testreihe 1–7 bestanden (inkl. Negativtest: Abschaltung <4 s, Rückkehr ~8 s per Keepalive), Einzäunung verifiziert, Reboot-Beweis erbracht. Dokumentation kanonisch auf git.lab (hier im Mirror lesbar): ADR-0004 akzeptiert (`decisions/0004-…`), zwei AARs unter `verfahren/aar/` (CFGMON-Seite + Lab-Seite), Bestandsdoku in homelab/docs. **Danke für die saubere Arbeit auf der CFGMON-Seite** — besonders der Messmitschnitt (tx steigt, rx bleibt 0, kein ICMP) und der Hinweis auf den ungeprüften Server-Key haben die Eingrenzung entschieden. Folgearbeit läuft als git.lab `management#13` (Übergabe-Issues nach git.lab holen, Gitea-Ausnahme zurückbauen). Für Host-Sessions danach gilt: **Tunnel in der UniFi-UI einschalten**, sonst ist git.lab nicht erreichbar. Offen aus deiner Liste und weiterhin bei sorb: Schlüsselrotation nach der Testreihe, Repo-Zuhause der WireGuard-Config, Token-Hygiene, Entscheidung zum docker-Gruppen-Befund (root-äquivalent ohne auth.log).
sorb closed this issue 2026-08-01 21:28:54 +00:00
Author
Owner

Umgezogen nach git.lab — LABNET-03 (2026-08-02).

Dieses Issue lebt jetzt als axion1337.chat/management#26. Beschreibung und alle Kommentare sind mit Originalautor und -zeitstempel übernommen.

Der Grund für die Ausnahme ist entfallen: Deploy-Übergaben liefen hier, weil CFGMON git.lab nicht erreichte. Seit dem Site-to-Site-Tunnel (LABNET-02, ADR-0004) genügt es, den Tunnel einzuschalten. Damit gilt wieder ohne Ausnahme: Issues leben auf git.lab (ADR-0002).

Bitte hier nicht weiterarbeiten.

**Umgezogen nach git.lab — LABNET-03 (2026-08-02).** Dieses Issue lebt jetzt als [axion1337.chat/management#26](https://git.lab/axion1337.chat/management/-/issues/26). Beschreibung und alle Kommentare sind mit Originalautor und -zeitstempel übernommen. Der Grund für die Ausnahme ist entfallen: Deploy-Übergaben liefen hier, weil CFGMON git.lab nicht erreichte. Seit dem Site-to-Site-Tunnel (LABNET-02, ADR-0004) genügt es, den Tunnel einzuschalten. Damit gilt wieder ohne Ausnahme: **Issues leben auf git.lab** (ADR-0002). Bitte hier nicht weiterarbeiten.
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sorb/management#2