Files
homelab-infra/docs/EXTERNAL_DEPENDENCIES.md
T
Micha 7d87698715 docs(dr): Hetzner Storage Box DR-SSH-Key offline gesichert (2026-06-03)
Dritte der vier P1-Operator-Aufgaben aus dem DR-Tabletop teil-erledigt.
Die SSH-Schicht der DR-Workstation steht; verbleibend ist die
WSL2+Borg-Installation auf dem Gaming-PC.

Was passiert ist:
- ed25519-Keypair `dr-hetzner-2026-06-03` (Passphrase-frei) lokal erzeugt
- Public Key per `install-ssh-key` auf der Hetzner Storage Box autorisiert
- Smoke `ssh -p23 ... ls` passwortlos erfolgreich, vier Borg-Repos
  sichtbar (`backup`, `backup2`, `hetzner_borg_appdata`,
  `hetzner_borg_appdata_critical`)
- Private Key offline neben KOMODO_*-Notiz und GitHub-Deploy-Key gelegt
- Arbeitsplatz-Kopie nach USB-Transfer geloescht

EXTERNAL_DEPENDENCIES.md:
- DR-Workstation-Kit-Tabelle: SSH-Key-Zeile auf "offline gesichert"
- Review-Zeile 2026-06-03 erweitert mit Smoke-Ergebnis

AUDIT_2026-05-25_TODO.md:
- P1-Eintrag DR-Workstation umformuliert: SSH-Key ist erledigt,
  Verbleibend ist nur noch WSL2 + Borg-Client-Installation
- Eintrag unter "Zuletzt geschlossen" mit Wirkung

Stand der DR-Bare-Metal-Pillars:
1. KOMODO_*-Notiz offline                                       erledigt
2. GitHub-Mirror Read-Only Deploy-Key offline                   erledigt
3. Hetzner Storage Box DR-SSH-Key offline                       erledigt
4. WSL2 + Borg-Client auf DR-Workstation installiert            offen
5. Nextcloud-Restore-Test als letzte Tier-2-Luecke schliessen   offen
2026-06-03 19:10:01 +02:00

14 KiB

External Dependencies - KalliLab CORE

Status: Betreiber-Baseline 2026-06-01; Account-Recovery, Schluessel und Besitznachweise bleiben ausserhalb des Repos.

Zweck

Dieses Dokument beschreibt externe Anbieter und Konten, von denen Betrieb, Recovery oder Zugriff abhaengen. Ziel ist, im Ausfallfall nicht erst suchen zu muessen, welcher Provider welches Teilproblem verursacht.

Abhaengigkeiten

Anbieter / System Zweck Kritikalitaet Recovery-Auswirkung Zugang / Besitz Notfallplan
Telekom DSL Internet-Uplink hoch Public Apps, ACME, DDNS, Hetzner-Off-site und Tailscale-Initial-Verbindung fallen aus Telekom-Kundenkonto Kein WAN-Failover am Standort eingerichtet (FRITZ!Box-Ausfallschutz inaktiv); lokale LAN-Dienste laufen weiter; Hotspot-Behelf nur fuer Operator-Arbeit, nicht fuer Public Apps
FRITZ!Box 7590 Router, DHCP, Telefonie, WAN hoch LAN ohne DHCP/Routing; auch lokale Inter-Subnet-Kommunikation kann brechen Operator-Login auf 192.168.178.1 FRITZ!Box-Konfig-Backup vom 2026-06-01 liegt extern/off-system in Vaultwarden; Reset-Pin und Account-Pfad bereithalten; Remote-HTTPS/FTP/FTPS aus dem Internet sind aus
Domain-Registrar Besitz kaleschke.info hoch Ohne Domain brechen Public URLs/TLS-Erneuerung Operator-Konto ausserhalb Repo, konkreten Registrar im Account pruefen Registrar-Zugang, 2FA-Recovery und Zahlungsweg analog/off-system sichern
Cloudflare DNS Authoritative DNS, ACME DNS-Challenge, DDNS hoch Neue Zertifikate/DNS-Aenderungen blockiert Cloudflare-Konto; API-Token liegt als Host-Secret API-Token rotierbar halten, Account-Recovery und Zone-Besitz pruefen
Hetzner Storage Box Off-site Borg Backup kritisch Restore aus Off-site ggf. nicht moeglich Hetzner-Konto / Storage-Box-Zugang ausserhalb Repo Borg-Passphrase ist offline gesichert; Hetzner 2FA/Recovery/Zahlung sind bestaetigt; Storage Box ist SSH-only, Maintenance-Key liegt in Vaultwarden; Borg append-only wird per Operator-Entscheidung nicht umgesetzt
GitHub Mirror Externer Repo-Mirror michaelkaleschke-spec/homelab-infra (privat) mittel/hoch Gitea-Verlust abfederbar, aber Bare-Metal-Bootstrap braucht Read-Zugang (PAT oder SSH-Deploy-Key); ohne diesen ist der Mirror im DR nicht klonbar GitHub-Konto; Push-PAT liegt in Gitea-Mirror-Settings; Read-PAT/Deploy-Key fuer DR muss zusaetzlich offline im DR-Kit liegen Mirror-Status regelmaessig pruefen; lokalen Clone als zweite Kopie behalten; Read-PAT mit Scope repo:read separat erzeugen und im DR-Kit ablegen
Tailscale Remote-/Operator-Zugang hoch Remote-Zugriff erschwert, lokale Bedienung bleibt Tailnet-Konto; Node Kallilabcore, IPv4 100.80.98.33 Break-glass per LAN und physischem Zugriff; Tailnet-Recovery-Codes sichern
GMX SMTP Authelia Notifier, Vaultwarden-Einladungen, Ops-Report-Mail mittel Mail-Notifier und Vaultwarden-Einladungen fallen aus; Login selbst nicht zwingend GMX-Konto; SMTP-Secrets liegen hostseitig ntfy/zweiter SMTP als Fallback pruefen
OpenAI API Paperless-GPT LLM und Vision-OCR mittel Automatische Dokument-Titel, Tags, Korrespondenten und LLM-OCR fallen aus; Paperless selbst laeuft weiter OpenAI-Projekt/API-Key ausserhalb Repo Key in Vaultwarden/Komodo sichern, bei Offenlegung rotieren; Kosten/Usage im OpenAI-Projekt beobachten
Let's Encrypt TLS-Zertifikate hoch Cert-Erneuerung faellt aus automatisch via Traefik und Cloudflare DNS-Challenge Cert-Expiry Alert einrichten; Cloudflare-Token und Traefik-Storage pruefen
Container Registries Image Pulls von Docker Hub, GHCR, LSCR, Gitea Registry u. a. mittel Redeploy/Update blockiert ueberwiegend oeffentlich; keine produktiven Registry-Tokens im Repo Gepinnte Digests und lokale Runtime helfen kurzfristig; Updates geplant und einzeln deployen
Plex Konto/Remote Access Plex native Auth, ggf. Remote Access und Claim mittel Plex-Clients/Remote-Funktionen koennen ausfallen Plex-Konto ausserhalb Repo; PLEX_CLAIM nur fuer Setup LAN-Medienpfade bleiben lokal; Konto-Recovery separat sichern
Mobile Push ntfy und ggf. mobile Plattform-Pushes niedrig/mittel Alerts erreichen Mobilgeraete ggf. nicht App-/Device-seitig Kritische Alerts zusaetzlich in Grafana/Glance sichtbar halten
Operator-DR-Workstation Bare-Metal-Recovery-Arbeitsplatz (Gaming-PC Windows, lokaler Repo-Clone G:\Gitea_Clone\homelab-infra) kritisch Ohne Workstation kein Borg-Extract, kein Hetzner-Zugriff, kein Repo-Bootstrap; der Unraid-Host ist im Bare-Metal-Fall gerade weg Operator-PC, WSL2 + Borg-Client, SSH-Key fuer Hetzner Storage Box, Offline-Kopie der Borg-Passphrase Setup als bewusste DR-Vorbedingung pflegen (siehe Abschnitt "DR-Workstation Bare-Metal-Kit")

Kritische Secrets ausserhalb des Repos

Authoritativ ist docs/SECRETS_MAP.md. Diese Liste markiert nur externe Abhaengigkeiten.

Secret Zweck Recovery-Hinweis
Borg Passphrase Entschluesselung Borg-Repos Offline gesichert, Operator-Bestaetigung 2026-05-26
Cloudflare DNS API Token ACME DNS-Challenge Token-Rotation und Scope pruefen
GitHub Mirror Token Push-Mirror In Gitea/GitHub verwaltet, nicht im Repo
Tailscale Account Recovery Tailnet-Zugang Account-2FA/Recovery Codes sichern
SMTP Passwort Authelia Mail, Vaultwarden-Einladungen, Ops-Report-Mail In Host-Secrets, Fallback pruefen
Domain-Registrar Recovery Domain-Besitz und Zahlung Account, 2FA und Zahlungsweg ausserhalb des Homelabs sichern
Hetzner Storage Box Zugang Off-site Backup-Ziel Account 2FA aktiv, Recovery Key offline gedruckt, Zahlungsweg ok; Maintenance-Key und Storage-Box-Passwort in Vaultwarden
OpenAI API Key Paperless-GPT GPT-Zugriff Als Stack ENV / Vaultwarden-Eintrag sichern; bei Verdacht auf Leak rotieren
KOMODO_* Stack-ENV-Notiz Offline-Sicherung der 5 Komodo-Werte (KOMODO_SECRET_KEY, KOMODO_WEBHOOK_SECRET, KOMODO_JWT_SECRET, KOMODO_MONGO_PASSWORD, KOMODO_PERIPHERY_PASSKEY) Status 2026-06-03: offline gesichert (Operator-Bestaetigung). Quelle der Werte ist die host-seitige Self-Stack-.env (/mnt/user/services/stacks/komodo/.env) bzw. die Drift-Recovery-Kopie unter /mnt/user/appdata/secrets/_komodo_stack_env_recovery_2026-05-04.env. Nicht im Repo, nicht in ntfy, nicht in Logs
GitHub-Mirror Read-Only Deploy-Key DR-Read-Zugang zum privaten Mirror michaelkaleschke-spec/homelab-infra Status 2026-06-03: offline gesichert (Operator-Bestaetigung). SSH-Deploy-Key dr-readonly-2026-06-03 (ed25519, Passphrase-frei), Title in GitHub Repo Settings -> Deploy Keys: DR Read-Only 2026-06-03, Write-Access bewusst deaktiviert. Private Key liegt offline neben der KOMODO_*-Notiz. Smoke git ls-remote am 2026-06-03 erfolgreich.

DR-Workstation Bare-Metal-Kit

Der Operator-Gaming-PC ist im Bare-Metal-Fall die einzige Stelle, von der aus Recovery starten kann. Folgende Bestandteile gehoeren zum minimalen DR-Kit auf diesem Rechner:

Bestandteil Zweck Pruefen
Repo-Clone G:\Gitea_Clone\homelab-infra (master, gefetcht) Recovery-Anker fuer ops/komodo/docker-compose.yml, Restore-Skripte git -C G:\Gitea_Clone\homelab-infra log --oneline -1 plausibel aktuell
Read-Zugang zum privaten GitHub-Mirror Fallback, falls lokaler Clone defekt SSH-Deploy-Key dr-readonly-2026-06-03 (ed25519, Passphrase-frei) offline im DR-Kit, ein Test-Clone pro Quartal mit GIT_SSH_COMMAND="ssh -i <pfad-zum-key> -o IdentitiesOnly=yes" git ls-remote git@github.com:michaelkaleschke-spec/homelab-infra.git
WSL2 mit Borg-Client (apt install borgbackup) Borg-Extract von Hetzner Storage Box ohne laufenden Unraid-Host borg --version antwortet; ein borg list gegen Hetzner-Repo laeuft
SSH-Key fuer Hetzner Storage Box Login auf u565255.your-storagebox.de:23 Status 2026-06-03: ed25519-DR-Key dr-hetzner-2026-06-03 offline gesichert. Pubkey via install-ssh-key auf der Storage Box autorisiert, passwortloser Login erfolgreich, ls zeigt vier Borg-Repos (backup, backup2, hetzner_borg_appdata, hetzner_borg_appdata_critical). Private Key liegt offline neben KOMODO_*-Notiz und GitHub-Deploy-Key
Offline-Kopie Borg-Passphrase Entschluesselung des Borg-Repos Operator-Bestaetigung 2026-05-26; bei Reviews nur Auffindbarkeit pruefen
Offline-Kopie KOMODO_* Stack-ENV Komodo-Bootstrap ohne Vaultwarden Status 2026-06-03: offline gesichert (Operator-Bestaetigung)
Vaultwarden Master-Passwort offline Zugriff auf Vaultwarden-Export im DR Operator-Wissen, ggf. analog gesichert

Operative Regel: Die DR-Workstation wird nicht als Test-/Spiel-PC betrachtet. WSL und das DR-Kit duerfen nicht unbemerkt unbrauchbar werden. Quartalsweise minimaler Trockenlauf: borg list <hetzner-repo> muss antworten und der Repo-Clone muss fetchbar bleiben.

Ausfall-Szenarien

Hetzner Storage Box nicht erreichbar

  • Lokales Borg-Repo und aktuelle Dumps pruefen.
  • Keine destruktiven Host-Aenderungen starten, solange Off-site unklar ist.
  • H:/ Nearline-Pull als schnelle lokale Zweitkopie fuer kritische Restore-Artefakte nutzen.
  • Zweites Off-site-Ziel nur neu bewerten bei Hetzner-Problemen, stark wachsendem Datenwert oder geaenderter Betreiber-Praeferenz.

Cloudflare Account/DNS gestoert

  • Bestehende Zertifikate laufen bis Ablauf weiter.
  • Keine Domain-/ACME-Aenderungen moeglich.
  • Tailscale/LAN-Zugang als Break-glass nutzen.

Tailscale gestoert

  • Lokalen LAN-Zugang nutzen.
  • Direkte Admin-Ports nur gemaess dokumentierten Ausnahmen verwenden.
  • AdGuard-Admin-Bind muss so geplant werden, dass ein lokaler Break-glass-Weg bekannt ist.
  • Seit 2026-05-26 ist AdGuard Admin nur ueber 100.80.98.33:8082 gebunden; bei Tailnet-Ausfall ist lokaler Host-/Compose-Zugriff der Break-glass-Weg.

Telekom-DSL / FRITZ!Box gestoert

  • Lokale LAN-Apps (Plex, AdGuard-DNS, lokales Borg-Dump-Repository) bleiben verfuegbar, solange Host und Switch laufen.
  • Tailscale-Sessions, die bereits stehen, koennen ueber DERP/Relays kurzzeitig weiterlaufen; neue Verbindungen koennen ausfallen.
  • ACME-/DDNS-/Hetzner-Backup-Laeufe pausieren bis WAN zurueck ist.
  • FRITZ!OS ist am 2026-06-01 auf 8.25 (154.08.25) beobachtet; weitere Updates nur in einem geplanten Service-Fenster einspielen, weil Reboot WAN/Tailscale-Aufbau unterbricht.

Domain verloren oder Registrar-Zugriff verloren

  • Gitea/GitHub Mirror und lokale IP/Tailscale-Pfade fuer Recovery nutzen.
  • Neue Domain waere separater Migrationsfall fuer Traefik, Authelia, App-URLs und Clients.

Review

Datum Ergebnis Naechste Aktion
2026-05-26 Bekannte externe Abhaengigkeiten aus Repo-/Betriebsdoku dokumentiert; keine Secret-Werte aufgenommen. Borg-Passphrase ist laut Operator offline gesichert. Account-Besitz, 2FA-Recovery-Codes und Zahlungswege extern bestaetigen
2026-05-26 Telekom-DSL und FRITZ!Box 7590 (damals FRITZ!OS 8.21) als WAN-/Router-Abhaengigkeit aufgenommen; Ausfallschutz nicht eingerichtet FRITZ!OS-Update am 2026-06-01 als 154.08.25 beobachtet
2026-05-28 FRITZ!Box-Portfreigaben bereinigt: aktiv bleibt nur 443/tcp; 80/tcp entfernt, 222/tcp bewusst nicht angelegt; UPnP-Recht fuer VONETS-Bridge deaktiviert IPv6-/Dienste-Review am 2026-06-01 nachgezogen
2026-06-01 Externer Betreibercheck vorbereitet: docs/EXTERNAL_OPERATOR_RUNBOOK.md und ops/maintenance/check-external-operator.sh; FRITZ!Box meldet per TR-064 FRITZ!OS 154.08.25, Public DNS hat keine AAAA-Records, Host hat keine globale Provider-IPv6 Account-Hygiene am 2026-06-01 nachgezogen
2026-06-01 FRITZ!Box-UI gegengeprueft und Konfig-Backup extern/off-system in Vaultwarden abgelegt; Remote-HTTPS auf FRITZ!Box-UI aus, FTP/FTPS auf Speichermedien aus, nur 443/tcp -> 192.168.178.58, keine aktive IPv6-Freigabe sichtbar, UPnP-Selbstfreigaben aus Bei naechstem Router-Update erneut exportieren
2026-06-01 Hetzner-Account-Hygiene erledigt: externe Mail ok, Zahlung ok, 2FA aktiv, Recovery Key offline gedruckt. Storage Box: SSH aktiv, SMB/WebDAV aus, Maintenance-Key in Vaultwarden, Borg-Repo-Zugriff nach Recovery geprueft. Borg append-only wird bewusst nicht umgesetzt. Keine Folgeaktion
2026-06-03 Hetzner Storage Box Maintenance-Key zusaetzlich offline gesichert bestaetigt (Operator-Antwort im DR-Tabletop 2026-06-03). Damit ist der Hetzner-Zugang im Bare-Metal-Fall ohne Vaultwarden moeglich. Keine Folgeaktion
2026-06-03 DR-Tabletop ergibt drei offene Bootstrap-Bloecke: KOMODO_*-Notiz nicht offline, GitHub-Mirror-Read-PAT/Deploy-Key nicht angelegt, DR-Workstation nicht als DR-Kit konfiguriert. Details in docs/DR_DRILL_2026-06-03.md und Folge-Tasks in docs/AUDIT_2026-05-25_TODO.md. KOMODO_*-Notiz erzeugen, Read-PAT erzeugen, WSL2+Borg auf Gaming-PC einrichten
2026-06-03 KOMODO_*-Notiz offline gesichert (Operator-Bestaetigung im DR-Tabletop-Followup). Quelle bleibt host-seitige .env (/mnt/user/services/stacks/komodo/.env) bzw. Drift-Recovery-Kopie vom 2026-05-04. Bare-Metal-Komodo-Bootstrap ist damit ohne Vaultwarden moeglich. Restliche P1-Operator-Aufgaben: GitHub-Read-PAT, DR-Workstation-Setup, Nextcloud-Restore-Test
2026-06-03 GitHub-Mirror Read-Only Deploy-Key DR Read-Only 2026-06-03 (ed25519, Passphrase-frei) erzeugt, in GitHub Repo Settings ohne Write-Access hinterlegt, Smoke git ls-remote erfolgreich (d947c7f matched master HEAD), Private-Key offline neben KOMODO_*-Notiz abgelegt, Arbeitsplatz-Kopie geloescht. Restliche P1-Operator-Aufgaben: DR-Workstation-Setup, Nextcloud-Restore-Test
2026-06-03 Hetzner Storage Box DR-SSH-Key dr-hetzner-2026-06-03 (ed25519, Passphrase-frei) erzeugt, via install-ssh-key auf Storage Box u565255.your-storagebox.de:23 autorisiert, passwortloser Login erfolgreich (Borg-Repos sichtbar), Private-Key offline neben KOMODO_*-Notiz und GitHub-Deploy-Key abgelegt, Arbeitsplatz-Kopie geloescht. Bare-Metal-Borg-Restore von der DR-Workstation ist damit moeglich, sobald WSL2 + Borg-Client installiert sind. Restliche P1-Operator-Aufgaben: WSL2 + Borg-Client auf DR-Workstation installieren, Nextcloud-Restore-Test