5.8 KiB
Übergabe — nächste Session: AdGuard DNS-Cutover fortsetzen (TP23 Stufe 2 ∥ TP31 Schritt 4)
Entstanden am 2026-08-26. Die Handoff
20260825-agh-dns-cutover.mdwurde begonnen und teilweise abgearbeitet. Diese Datei führt den neuen Stand fort. Keine Config-Transaktion offen.
Ausgangslage
✅ Erledigt in dieser Session (2026-08-26):
| Was | Stand |
|---|---|
opencode.jsonc |
Permission "allow", MCPs: gitea-mcp, mikromcp, pve-mcp, home-assistant, cloudflare (OAuth) |
docs/teilprojekte.md |
Quick-Index-Tabelle eingebaut (1-Read-Statusbaum), hass-400-Fix vermerkt |
CLAUDE.md |
TP-Management-Regel: vorschlagen → abstimmen → anlegen |
.opencode/commands/handoff.md |
/handoff-Custom-Command (generate + resume) |
LXC 110 agh-bf1 |
pve, Debian 13, 10.40.20.36, 4 GB / 512 MB / 2 Cores, onboot=1, startup order=10 |
LXC 111 agh-bf2 |
pve, Debian 13, 10.40.20.37, 4 GB / 512 MB / 2 Cores, onboot=1, startup order=10 |
| Backup-Job | Beide VMIDs im Job backup-6dcf5c10-610f (pbs, sonntags 01:00) |
AdGuard v0.107.79 |
Installiert auf 110 + 111 (offizieller Installer) |
| AGH-Konfig | docs/transaktionen/agh-bf1-AdGuardHome.yaml — 28 Rewrites (16 Caddy-Sites → .40, 8 Hosts → live-IPs), conditional upstream [/bf.emsenhuber.net/], Admin-PW wie altes adguard_bf1 |
Entscheidungen getroffen:
- (a)
bf.lan→bf.emsenhuber.netheben (Domain-Wechsel im DHCP + conditional upstream) - (b) FM beantwortet BF-Namen künftig nicht selbst, sondern fragt nach BF — Paar-Sync löst die toten VLAN1-Antworten
- tv =
10.40.40.11(Reservierung bestätigt), appletv/vuplus → streichen (keine Reservierung/ARP)
IPs vergeben (alle .36/.37): ARP auf vlan20 geprüft — beide frei (keine Kollision).
🔴 AKTUELLER BLOCKER: AGH startet nicht
Symptom: --check-config meldet yaml: construct errors: line 33: cannot construct !!seq into string
Ursache: AdGuard Home v0.107.79 schreibt die AdGuardHome.yaml beim Start selbst neu (alphabetische
Schlüsselreihenfolge) und verschachtelt dabei bootstrap_dns von flach auf - - 1.1.1.1 / - 1.0.0.1 —
ein Format, das es selbst nicht mehr parsen kann. Zirkelschluss.
Versuchter Fix: Datei direkt schreiben → start → AGH korrumpiert sie erneut.
🔑 Empfohlener Weg für die nächste Session:
AGH nicht über YAML-Datei einrichten, sondern über die HTTP-API im First-Run-Wizard-Modus:
- AGH stoppen (
systemctl stop AdGuardHome),AdGuardHome.yamllöschen. - Starten → AGH läuft im Wizard-Modus auf Port 3000 (kein Admin-Login nötig).
POST /control/install/configuremit Admin-PW + DNS-Config (upstreams, filter, bootstrap).POST /control/rewrite/addfür jeden der 28 Rewrites (oder Bulk-POST).POST /control/dns_configfür cache_size, refuse_any, enable_dnssec etc.- Nach erfolgreichem Setup: die resultierende YAML von 110 → 111 kopieren, und auf 111
POST /control/install/configuremit denselben Werten. - Beide YAMLs ins Repo committen (unter
adguard/AdGuardHome.yamlo.ä.).
Alternativer Weg (einfacher): Docker-Container auf pve (Muster wie LXC 400) mit adguard/adguardhome:latest
— genau das Image, das produktiv auf adguard_bf1 läuft und dort klaglos startet. Die LXCs sind schon
da, ein docker compose darin wäre minimaler Aufwand. Entscheidung gehört dem User.
Noch offene Schritte (aus dem ursprünglichen Auftrag)
Der Handoff 20260825-agh-dns-cutover.md (192 Zeilen) bleibt vollständig gültig — alle Punkte
dort gelten weiter. Zusammenfassung der noch offenen Schritte:
- AGH zum Laufen bringen (API- oder Docker-Weg, s.o.)
- Rewrites auf beiden Instanzen identisch (Paar-Sync = eine Quelle)
- Firewall zuerst (Fund 3 des Original-Handoffs):
TP5-E2: LAN->AGH dns(.16) → umziehen auf das Paar.36/.37- Über Golden Config (Core ist GC-only), nicht ad hoc
--refresh-compliancevor dem Cutover
- Testen:
dig @10.40.20.36 vw.emsenhuber.net(erwartet.40),dig @10.40.20.36 <lease>(erwartet Core-Antwort), aus anderem VLAN - VLAN für VLAN umstellen (20→10→Rest→30 IoT zuletzt):
- Vor jedem Flip
lease-timeauf ~10 min senken dns-serverauf.36,.37umstellen- Abnahme: frische DHCP-Lease, nicht
ping
- Vor jedem Flip
- Domain-Wechsel
bf.lan→bf.emsenhuber.net:/ip dhcp-server network set→domain=bf.emsenhuber.net(alle 7). Conditional upstream im AGH zeigt bereits auf[/bf.emsenhuber.net/]. - Rollback: Core bleibt bis Session-Ende unangetastet als Rückfallebene (DNS und DoH laufen dort weiter).
- Danach (TP31 Schritt 5–6): Tunnel
bf-public+ cloudflared auf ap1/ap2, CNAMEs umhängen, alte Tunnel + Container abbauen.
Einstieg für die nächste Session
- Diese Datei lesen →
docs/handoff-20260826-agh-dns-cutover.md docs/teilprojekte.md→ Quick-Index-Block (Zeilen ~174–200)- Original-Handoff:
docs/handoff-20260825-agh-dns-cutover.md(192 Zeilen, alle Details) - AGH zum Laufen bringen (API- oder Docker-Weg, s.o.) — das ist der erste technische Schritt.
- LXC-Zugang:
ssh root@10.40.20.100 "pct exec 110 -- bash" - Referenz-Config:
docs/transaktionen/agh-bf1-AdGuardHome.yaml(236 Zeilen, lokal)
Fallen, die schon bezahlt sind
- AGH-YAML-Datei-Kampf ist verloren — API-Weg oder Docker.
pvesm freescheitert an geschützten PBS-Snapshots stillschweigend (Merkregel aus TP31).- Ein Statuscode vom öffentlichen FQDN beweist nichts (Access-Login maskiert tote Dienste).
pct pushliest vom pve-Host, nicht lokal — Datei erst per scp auf pve, dann push.bf.lan-Suffix vs.bf.emsenhuber.net: der conditional upstream muss zum DHCP-domain-Wert passen. Beim Domain-Wechsel beides synchron ändern, sonst brechen Lease-Namen.