8.1 KiB
TP15 — Handoff-Prompt: CRS326-Bring-up + Branch-Tausch (neue Session)
✅ ERLEDIGT am 2026-07-23 — beide CRS326 grundkonfiguriert, branch produktiv gegen sw2 getauscht, Nautobot modelliert. As-built s.
docs/teilprojekte.mdTP15. Nächster Schritt = Core-Tausch/L3-Umzug:docs/tp15-core-swap-session-handoff-prompt.md. (Dieses Dokument nur noch als Historie.)
Zweck: Kopierfertiger Auftrag für eine frische Session, die die beiden CRS326 in Betrieb nimmt und crs326-branch produktiv gegen sw2 tauscht. Der Core-Tausch (= gleichzeitig der L3-Umzug) ist bewusst NICHT Teil dieses Auftrags.
Empfohlenes Modell: Opus. Nicht wegen der Befehle — die sind Standard-RouterOS — sondern weil in der Session laufend zwischen „Ist-Zustand am Gerät", „Modell in Nautobot" und „Zielbild" abgeglichen werden muss und die sw1-Belegung nur teilweise verifiziert ist.
So übergibst du es: Neue Session öffnen, als ersten Prompt schicken: „Lies
docs/tp15-crs326-session-handoff-prompt.mdund arbeite den Auftrag darin ab."
--- PROMPT ---
TP15 — CRS326 in Betrieb nehmen: beide grundkonfigurieren, Portplan in Nautobot
modellieren, danach NUR crs326-branch produktiv gegen sw2 tauschen.
KONTEXT ZUERST LESEN (in dieser Reihenfolge):
1. docs/teilprojekte.md — TP15 (Hardware/Standorte/Portfakten/Risiko), TP21 (Nautobot-Stand),
TP3 (WLAN-Neuaufbau ohne CAPsMAN) + die beiden Governance-Callouts im Kopfbereich.
2. CLAUDE.md (Projekt) — Hardware/Zugänge/Gotchas.
3. nautobot/README.md — die Nautobot-API-Fallen. NICHT überspringen: `tagged_vlans` liest
sich per REST als `null`, OBWOHL korrekt gespeichert. Wer das nicht weiß, sucht eine
Stunde einen Fehler, den es nicht gibt. Verifikation immer per GraphQL.
4. docs/tp16.1-warp-mesh-native-crs326.md — was später auf dem Core terminieren soll.
ZIEL DIESER SESSION (Scope-Grenze hart einhalten):
(a) beide CRS326 grundkonfigurieren (Mgmt-IP, Bridge, vlan-filtering, Trunks/Access),
(b) den Portplan beider Switches in Nautobot modellieren,
(c) crs326-branch physisch gegen sw2 tauschen (Technik OG).
NICHT in dieser Session: crs326-core produktiv setzen, L3-Umzug (Routing/DHCP/DNS von ap1),
CAPsMAN-Abbau, ap2-Neuprovisionierung. Das sind eigene, spätere Sessions.
‼️ WARUM DER CORE TABU IST — DAS IST KEINE VORSICHT, DAS IST DIE TOPOLOGIE ‼️
crs326-core ersetzt sw1 UND wird der neue L3-Router. An sw1 hängt auf Port 15 ap1 — also
Gateway, DHCP, DNS und der WAN-Trunk fürs GESAMTE Netz. Wer sw1 anfasst, nimmt das ganze
Haus offline, inklusive des eigenen Management-Pfads. Core-Tausch und L3-Umzug sind faktisch
dasselbe Ereignis und brauchen ein geplantes Ausfallfenster. Deshalb: Branch zuerst.
GOVERNANCE — AUSNAHME BEREITS ERTEILT (Christoph, 2026-07-22):
Die Regel "Config ausschließlich über Nautobot" gilt weiter, ABER für den CRS326-BRING-UP
hat Christoph eine Ausnahme erteilt: Mgmt-IP, Bridge, VLAN-Filtering, Trunks/Access-Ports
dürfen direkt via MikroMCP/Winbox gesetzt werden (Henne-Ei: GC kann nicht auf ein Gerät ohne
erreichbare IP pushen, und die GC-Templates existieren noch nicht).
AUFLAGE: den entstandenen Ist-Stand danach als intended config nach Nautobot zurückschreiben.
Die Ausnahme deckt das Bootstrapping, NICHT den Dauerbetrieb, und gilt NICHT für ap1/ap2.
GERÄTE-IDENTITÄT (beide sind bereits am Netz, RouterOS 7.19.5, Werkszustand):
crs326-core = MAC 04:F4:1C:B4:17:76, software-id 4W04-URHT
crs326-branch = MAC 04:F4:1C:B4:15:58, software-id RGZJ-UK0T
⚠️ BEIDE hören auf die Werks-IP 192.168.88.1 im SELBEN L2-Segment = IP-Konflikt.
Immer nur eines nach dem anderen adressieren; Unterscheidung ausschließlich per MAC
(MAC-Telnet/Winbox-Neighbor). Christoph hat die Geräte griffbereit neben sich, der
Erstzugriff ist deshalb unkritisch — kein Lockout-Szenario, notfalls physisch.
⚠️ crs326-branch ist BEREITS PHYSISCH INLINE: ap2 hängt an dessen Port 24 (deshalb war es
überhaupt per MNDP von ap1 aus sichtbar). Das ist kein Greenfield-Einbau.
ZIELBILD BRANCH = die heutige sw2-Belegung (aus TP2) 1:1 übernehmen:
P1 Uplink-Trunk (→ sw1 gi8) | P2 ap2 | P3 frei | P4 Dock/Monitor | P5 Drucker
P6 frei | P7 Mac mini | P8 NAS (2. Port)
⚠️ P4/P7/P8 sind in TP2 ausdrücklich als "nicht anfassen" markiert (fixe IPs, Lifeline).
VLANs laut kanonischem Modell: Uplink+ap2 = Trunk all; Rest Access auf dem jeweiligen VLAN.
CONNECTIVITY — VOR DEM KABELZIEHEN LESEN:
Christophs Notebook hängt aktuell NUR per WLAN über cudy1, und cudy1 hängt am CORE (Port 11).
Der kabelgebundene Plan B (Dock/Monitor im Arbeitszimmer) hängt am sw2/BRANCH (P4).
Beim Branch-Tausch stirbt also der Kabelweg, das WLAN über cudy1 überlebt — die Pfade liegen
günstig auf verschiedenen Switches. Trotzdem: vor dem Ziehen von sw2 ansagen.
WAS VERIFIZIERT IST UND WAS NICHT (nicht raten, nicht als Fakt ausgeben):
✅ sw1 #15 = ap1, sw1 #11 = cudy1 (von Christoph bestätigt 2026-07-22)
⚠️ sw1 gi16 (Arris/VLAN100) und gi8 (Trunk → sw2) stammen aus der Doku, sind NICHT am
Gerät gelesen — in Nautobot als "UNVERIFIZIERT" markiert. Falls für den Branch-Uplink
relevant: von Christoph bestätigen lassen, er macht sw1 ohnehin selbst.
❌ switch/cli/03-trunk-ap-ports.cli (gi1 = ap1) ist STALE — vom Edge-Cutover 2026-07-01
überholt. Nicht als Quelle verwenden.
❌ switch/state-backups/sw1-running-config-*.txt sind 214-Byte-Fehlschläge (toter
claudecode-Login), switch/cli/running-PRE.txt ist Pre-TP1.
NAUTOBOT (SoT, http://10.40.20.30:8080):
Token: NAUTOBOT_SUPERUSER_API_TOKEN in docs/nas-vlan20/stacks/210-nautobot.yml (gitignored).
Bereits gepflegt: 8 Devices mit Bereich/Rolle/Platform, 9 VLANs, 8 Prefixes, ap1 vollständig
(26 Interfaces + IPs), 6 SSIDs mit VLAN-Bindung, sw1 gi8/gi11/gi15/gi16, crs326-core ether4.
Wiederverwenden: nautobot/ingest-baseline.py (idempotentes goc()/patch()-Muster) —
nicht neu erfinden. Neue Ports als Interfaces am jeweiligen Device anlegen.
ROUTEROS-FAKTEN, DIE ZEIT SPAREN:
- Interface-Nummerierung beginnt bei 1 (ether1…ether24). Es gibt KEIN ether0.
- hAP ax²: PoE-Port ist ether1, aber PASSIV 18–28 V, NICHT 802.3af/at. Der CRS326 hat gar
kein PoE → Strom käme aus einem Inline-Injektor. ether1 am hAP steht auf poe-out=auto-on;
wenn ether1 künftig der versorgte Uplink wird, muss poe-out dort auf off.
(PoE ist laut Christoph "vorerst kein Thema", die Config soll es nur vorsehen.)
- MikroMCP kennt in routers.yaml nur ap1/ap2 → die CRS326 dort ergänzen, sonst kein
MCP-Zugriff. Writes immer erst dryRun/plan_changes, dann apply_plan.
NICHT ANFASSEN:
- ap1-Config (der CAPsMAN-Abbau kommt erst NACH dem Core-Tausch, s. TP3).
- ap2 (aktuell unerreichbar, meldet 10.40.40.2 = falsches VLAN; wird ohnehin neu
provisioniert — nicht diagnostizieren, nicht reparieren).
- sw1 (Christoph macht sw1 selbst; siehe Feedback-Memory).
ABNAHME:
- Beide CRS326 unter ihrer neuen Mgmt-IP erreichbar, per MAC eindeutig zugeordnet, IP-Konflikt
aufgelöst.
- Nach dem Branch-Tausch: ap2-Port, Dock/Monitor, Drucker, Mac mini und NAS wieder erreichbar;
jeder in seinem korrekten VLAN (nicht ungetaggt in VLAN1 — das ist die Fehlerklasse, die
dieses Projekt seit Wochen verfolgt).
- Nautobot bildet die tatsächliche Portbelegung ab; Verifikation per GraphQL, nicht REST.
DOKU (Pflicht am Ende): teilprojekte.md TP15 fortschreiben (As-built Portplan, was tatsächlich
lief/nicht lief), Nautobot-Stand nachziehen, Gotchas festhalten. Danach committen + pushen
(Commit-Msg-Konvention siehe git log: deutsch, Bullet-Struktur, Co-Authored-By).
--- ENDE PROMPT ---
Was Christoph zur Session parat haben sollte
- Beide CRS326 griffbereit (Erstzugriff/IP-Konflikt wird physisch aufgelöst).
- Bestätigung der sw1-Ports
gi16undgi8, falls der Branch-Uplink daran hängt — aktuell nur aus der Doku, nicht vom Gerät gelesen. - Zeitfenster für den sw2-Ausfall (Dock/Monitor, Drucker, Mac mini, NAS-2. Port sind währenddessen weg; WLAN über cudy1 bleibt).
- Klarheit, ob der NAS-2.-Port (sw2 P8) und der Mac mini (P7) während des Tauschs ausfallen dürfen — beide sind in TP2 als „nicht anfassen" markiert.