# 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.md` TP15. **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.md` und 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 `gi16` und `gi8`**, 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.