AP4.1 🧪 Offline-WAN-Cutover-Test für ap1 — scheduler-frei, Disk-Log
Toolkit, um den FB-Bridge/Passthrough-Cutover (Liwest) autonom auf ap1 zu testen, während Claude/MikroMCP offline ist (Test-Client auf install-wifi, LAN4-Umstecken kappt den Live-Pfad). - wan-cutover-test.rsc: wantest-probe (schichtweise Diagnose: ether1-IP, default-gw, WAN-Reach via :resolve@1.1.1.1, DoH end-to-end) + wantest-run (blockierender Loop, Hintergrund-fähig). Persistentes Disk-Logging nach wan-test.0.txt. - wan-macclone-test.rsc: CM-MAC-Clone (0C:72:74:36:90:99) mit eingebautem Auto-Revert (~90s), scheduler-frei. - wan-cutover-runbook.md: Solo-Runbook für den User (Console altes WiFi → 10.40.41.1). Scheduler-frei, weil device-mode=home auf ap1 /system scheduler und /tool fetch blockiert. Reachability via :resolve statt ping ([/ping] gibt in 7.23 nil; ICMP hier geblockt). Public-IP 86.56.201.104 bereits bewiesen (kein Liwest-MAC-Lock). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
71
routeros/wan-cutover-runbook.md
Normal file
71
routeros/wan-cutover-runbook.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# WAN-Cutover Runbook (Solo, ohne Claude live)
|
||||
|
||||
Ziel: FB-LAN4 auf Passthrough/Bridge umstellen, sodass **ap1 ether1** die echte Liwest-Public-IP
|
||||
zieht (Single-NAT statt Double-NAT). Der Testmechanismus läuft **autonom auf ap1** und loggt persistent
|
||||
— du brauchst Claude während des Cutovers nicht.
|
||||
|
||||
**Dein Console-Pfad:** altes WiFi → `10.40.41.1` (WebFig → New Terminal). Läuft über ap1 **ether2**
|
||||
(ALLNET-Uplink) und übersteht den Cutover an ether1/FB-LAN4.
|
||||
|
||||
> ⚠️ **device-mode=home** blockiert auf ap1 Scheduler *und* `/tool fetch`. Deshalb arbeitet der
|
||||
> Mechanismus **ohne Scheduler**: `wantest-run` ist ein blockierendes Loop-Script, das im Hintergrund
|
||||
> weiterläuft (auch wenn deine Session abreißt). Der MAC-Auto-Revert ist fest in den Clone-Lauf eingebaut.
|
||||
|
||||
---
|
||||
|
||||
## Schritt 0 — Vorbereitung (mit Claude online schon erledigt)
|
||||
- Scripts auf ap1 installiert: `wantest-probe`, `wantest-run`, `wanmac-clone`, `wanmac-revert`.
|
||||
- Disk-Logging aktiv → Ergebnisse in `wan-test.0.txt` **und** live im `/log`.
|
||||
- FB-WAN-MAC für den Clone-Lauf: **`0C:72:74:36:90:99`** (CM-MAC, als Default hinterlegt).
|
||||
|
||||
## Schritt 1 — Auto-Capture starten
|
||||
WebFig-Terminal auf `10.40.41.1`:
|
||||
```
|
||||
:global WTN 40 # optional: 40 Proben (~10 min). Default ohne = 24 (~6 min)
|
||||
/system script run wantest-run
|
||||
```
|
||||
→ probt alle 15 s und loggt jede Schicht. Läuft im Hintergrund. (Terminal blockiert während des Laufs;
|
||||
einfach ein zweites WebFig-Fenster für den Log öffnen.)
|
||||
|
||||
## Schritt 2 — FritzBox umstellen + Kabel
|
||||
- FB-UI → LAN4 auf Passthrough/IP-Client (Klickanleitung im Chat / `docs/`).
|
||||
- ether1 von ap1 an den FB-Passthrough-Port. **ether2 (Uplink) bleibt stecken!**
|
||||
|
||||
## Schritt 3 — Live mitlesen
|
||||
```
|
||||
/log print where message~"WANTEST"
|
||||
```
|
||||
Schichten interpretieren:
|
||||
- `ether1 ... addr=86.x.x.x` → externe IP gezogen ✓ (Bridge greift)
|
||||
- `wan-reach via-1.1.1.1 ok ...` → **Routing+NAT zur Public-IP ok** (ohne DNS-Abhängigkeit)
|
||||
- `wan-reach ... FAIL` → Routing/NAT kaputt → „nach .1 nichts" = WAN-seitig
|
||||
- `dns-doh ok ...` → DoH-Namensauflösung ok (das, was Clients als DNS nutzen)
|
||||
- `dns-doh FAIL` → DoH/Bootstrap kaputt → „nach .1 nichts" = **DNS** (Client erreicht .1, aber nichts per Name)
|
||||
|
||||
## Schritt 4 — MAC-Clone testen (optional, ~90 s, selbst-revertierend)
|
||||
Erst wenn Baseline extern steht:
|
||||
```
|
||||
/system script run wanmac-clone
|
||||
```
|
||||
→ setzt CM-MAC `0C:72:74:36:90:99`, release/renew, 4 Proben, dann **garantierter Auto-Revert** auf
|
||||
Werks-MAC (alles in einem Lauf). Vergleiche im Log IP/Schichten mit FB-MAC vs. Baseline.
|
||||
Not-Revert sofort: `/system script run wanmac-revert`.
|
||||
|
||||
## Schritt 5 — Abschluss
|
||||
- `wantest-run` endet von selbst nach WTN Proben (Log: „WANTEST run done").
|
||||
- Früher stoppen: `/system script job print` → `/system script job remove [find script=wantest-run]`.
|
||||
- Dann Claude wieder online holen → Claude liest `wan-test.0.txt` und bestimmt die Root-Cause.
|
||||
|
||||
---
|
||||
|
||||
## Sicherheitsnetze (eingebaut)
|
||||
- **Fallback-Route:** statische Default-Route via bridge (distance=2) bleibt — fällt ether1 aus,
|
||||
geht Internet automatisch wieder über die FB (Double-NAT). Kein Totalausfall.
|
||||
- **MAC-Auto-Revert:** im Clone-Lauf fest eingebaut (~90 s), läuft im Hintergrund garantiert zu Ende.
|
||||
- **Console bleibt:** `10.40.41.1` via ether2/altes WiFi ist vom Cutover unabhängig erreichbar.
|
||||
|
||||
## Notfall
|
||||
- ether1 zieht keine externe IP / kein Internet: `/system script run wanmac-revert`, dann FB-LAN4
|
||||
zurück auf normal — Fallback-Route hält das LAN online.
|
||||
- ap1 nicht erreichbar: ether2-Kabel prüfen (Uplink zu ALLNET), NICHT ether1.
|
||||
- Hängendes Script killen: `/system script job print` → `/system script job remove <id>`.
|
||||
58
routeros/wan-cutover-test.rsc
Normal file
58
routeros/wan-cutover-test.rsc
Normal file
@@ -0,0 +1,58 @@
|
||||
# ===== ap1 — Offline-fähiger WAN-Cutover-Test (scheduler-frei) =====
|
||||
# RouterOS 7.23.x, device-mode=home. Schichtweise Diagnose für FB-Bridge/Passthrough-Cutover.
|
||||
#
|
||||
# ⚠️ device-mode blockiert /system scheduler (scheduler=false) UND /tool fetch (fetch=false).
|
||||
# Daher: KEINE Scheduler — Autonomie via blockierendem Loop-Script (läuft im Hintergrund
|
||||
# weiter, auch wenn die Console-Session abreißt). Raw-Internet-Test via :resolve gegen feste
|
||||
# IP (ICMP/fetch sind hier unbrauchbar/geblockt).
|
||||
#
|
||||
# Apply: per REST/MikroMCP ODER /import wan-cutover-test.rsc
|
||||
# Lesen: /log print where message~"WANTEST" bzw. Datei wan-test.0.txt (persistent)
|
||||
# Einzel: /system script run wantest-probe
|
||||
# Lauf: /system script run wantest-run (24 Proben @15s = ~6 min; Hintergrund-fähig)
|
||||
# vorher optional: :global WTN 40 (mehr Iterationen)
|
||||
# Stop: /system script job print → /system script job remove [find script=wantest-run]
|
||||
|
||||
# --- idempotent: alte Versionen entfernen ---
|
||||
/system scheduler remove [find name~"^wantest-"]
|
||||
/system script remove [find name~"^wantest-"]
|
||||
/system logging remove [find action="wantest"]
|
||||
/system logging action remove [find name="wantest"]
|
||||
|
||||
# --- persistentes Logging auf Disk (überlebt Offline-Fenster + Reboot) ---
|
||||
# topics=script greift NUR auf script-generierte :log-Zeilen → genau unsere WANTEST-Zeilen
|
||||
/system logging action add name=wantest target=disk disk-file-name=wan-test disk-lines-per-file=2000
|
||||
/system logging add topics=script action=wantest
|
||||
|
||||
# --- Probe: eine schichtweise Messung, jede Zeile mit Timestamp + WANTEST-Prefix ---
|
||||
/system script add name=wantest-probe policy=read,write,test,policy source={
|
||||
:local ts ([/system clock get date] . " " . [/system clock get time])
|
||||
:local e1stat "?"
|
||||
:do { :set e1stat [/ip dhcp-client get [find interface=ether1] status] } on-error={}
|
||||
:local e1addr "-"
|
||||
:do { :set e1addr [/ip dhcp-client get [find interface=ether1] address] } on-error={}
|
||||
:local e1mac [/interface ethernet get [find name=ether1] mac-address]
|
||||
:log info ("WANTEST [" . $ts . "] ether1 status=" . $e1stat . " addr=" . $e1addr . " mac=" . $e1mac)
|
||||
:local gw "-"
|
||||
:do { :set gw [/ip route get [find dst-address="0.0.0.0/0" active=yes] gateway] } on-error={}
|
||||
:log info ("WANTEST route default-gw=" . $gw)
|
||||
# WAN-Routing+NAT: Router -> public 1.1.1.1 (UDP/53). UNABHÄNGIG von ap1-DNS-Config.
|
||||
# (ICMP/HTTPS sind hier geblockt -> :resolve gegen feste IP ist das robuste Signal.)
|
||||
:do { :local w [:resolve "google.com" server=1.1.1.1] ; :log info ("WANTEST wan-reach via-1.1.1.1 ok google.com=" . $w) } on-error={ :log info "WANTEST wan-reach via-1.1.1.1 FAIL (Routing/NAT?)" }
|
||||
# DoH end-to-end: ap1-Resolver = was die Clients als DNS bekommen
|
||||
:do { :local d [:resolve "google.com"] ; :log info ("WANTEST dns-doh ok google.com=" . $d) } on-error={ :log info "WANTEST dns-doh FAIL (DoH/Bootstrap?)" }
|
||||
}
|
||||
|
||||
# --- Run: blockierender Loop, probt N×@15s. Hintergrund-fähig (überlebt Session-Abbruch). ---
|
||||
/system script add name=wantest-run policy=read,write,test,policy source={
|
||||
:global WTN
|
||||
:if (([:typeof $WTN] = "nothing") or ($WTN = "")) do={ :set WTN 24 }
|
||||
:log info ("WANTEST run start (" . $WTN . "x @15s, ~" . ($WTN * 15 / 60) . " min)")
|
||||
:for i from=1 to=$WTN do={
|
||||
/system script run wantest-probe
|
||||
:delay 15s
|
||||
}
|
||||
:log info "WANTEST run done"
|
||||
}
|
||||
|
||||
:log info "WANTEST cutover-test installiert (probe + run, scheduler-frei, disk-logging)"
|
||||
57
routeros/wan-macclone-test.rsc
Normal file
57
routeros/wan-macclone-test.rsc
Normal file
@@ -0,0 +1,57 @@
|
||||
# ===== ap1 — WAN MAC-Clone-Test (FB CM-MAC → ether1), scheduler-frei =====
|
||||
# RouterOS 7.23.x, device-mode=home. Setzt wan-cutover-test.rsc voraus (nutzt wantest-probe).
|
||||
#
|
||||
# FB-WAN-MAC = CM-MAC 0C:72:74:36:90:99 (DOCSIS-SW 7.3.5.3.521, vom User aus FB-UI).
|
||||
# ⚠️ CM-MAC = Cable-Modem-/DOCSIS-Layer. Im echten Bridge-Modus nutzt die FB diese MAC
|
||||
# selbst → MAC-Konflikt-Risiko. Public-IP kam bereits mit ether1-eigener MAC → Clone ist
|
||||
# Verifikation, kein Muss.
|
||||
#
|
||||
# device-mode blockiert /system scheduler → Auto-Revert ist hier KEIN Scheduler, sondern fest
|
||||
# in den Clone-Lauf eingebaut (linearer Ablauf, ~90 s Clone-Fenster, dann garantierter Revert —
|
||||
# läuft im Hintergrund zu Ende, auch wenn die Console-Session abreißt).
|
||||
#
|
||||
# Ablauf (Console über altes WiFi auf 10.40.41.1):
|
||||
# 1) Baseline-Cutover mit ether1-eigener MAC (wantest-run) → Public-IP geloggt
|
||||
# 2) /system script run wanmac-clone → setzt CM-MAC, release/renew, 4 Proben, AUTO-REVERT
|
||||
# 3) Log prüfen: IP/Schichten mit FB-MAC vs. Baseline (/log print where message~"WANTEST")
|
||||
# Not-Revert jederzeit: /system script run wanmac-revert
|
||||
|
||||
# --- idempotent ---
|
||||
/system scheduler remove [find name~"^wanmac-"]
|
||||
/system script remove [find name~"^wanmac-"]
|
||||
|
||||
# --- Clone: orig sichern → CM-MAC → release/renew → 4 Proben → GARANTIERTER Auto-Revert ---
|
||||
/system script add name=wanmac-clone policy=read,write,test,policy source={
|
||||
:global FBMAC
|
||||
:if (([:typeof $FBMAC] = "nothing") or ($FBMAC = "")) do={ :set FBMAC "0C:72:74:36:90:99" }
|
||||
:global E1ORIG
|
||||
:set E1ORIG [/interface ethernet get [find name=ether1] mac-address]
|
||||
:log info ("WANTEST macclone: orig=" . $E1ORIG . " -> fb=" . $FBMAC . " (Auto-Revert in ~90s)")
|
||||
/interface ethernet set [find name=ether1] mac-address=$FBMAC
|
||||
:do { /ip dhcp-client release [find interface=ether1] } on-error={}
|
||||
:delay 2s
|
||||
:do { /ip dhcp-client renew [find interface=ether1] } on-error={}
|
||||
:delay 25s
|
||||
:for i from=1 to=4 do={ /system script run wantest-probe ; :delay 15s }
|
||||
# --- garantierter Auto-Revert im selben Lauf (kein Scheduler nötig) ---
|
||||
/interface ethernet reset-mac-address [find name=ether1]
|
||||
:do { /ip dhcp-client release [find interface=ether1] } on-error={}
|
||||
:delay 2s
|
||||
:do { /ip dhcp-client renew [find interface=ether1] } on-error={}
|
||||
:delay 15s
|
||||
/system script run wantest-probe
|
||||
:log info ("WANTEST macclone done -> revert auf factory-MAC (orig war " . $E1ORIG . ")")
|
||||
}
|
||||
|
||||
# --- Not-Revert: sofort Werks-MAC zurück (falls man früher raus will) ---
|
||||
/system script add name=wanmac-revert policy=read,write,test,policy source={
|
||||
/interface ethernet reset-mac-address [find name=ether1]
|
||||
:do { /ip dhcp-client release [find interface=ether1] } on-error={}
|
||||
:delay 2s
|
||||
:do { /ip dhcp-client renew [find interface=ether1] } on-error={}
|
||||
:delay 10s
|
||||
/system script run wantest-probe
|
||||
:log info "WANTEST macclone manual-revert -> factory-MAC"
|
||||
}
|
||||
|
||||
:log info "WANTEST macclone-test installiert (clone mit eingebautem Auto-Revert + manual-revert)"
|
||||
Reference in New Issue
Block a user