Initial import from bf-network-r6.opencode — opencode migration

This commit is contained in:
2026-08-26 12:44:21 +02:00
commit 5ee0716dda
297 changed files with 72324 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
# === BF Core-Switch sw1 (ALL-SG8316M, FW 2.2.1) — VLAN-Datenbank ===
# Reproduzierbar: . switch/.secrets && expect switch/cli/run-cli.exp switch/cli/01-vlan-db.cli
# NON-DISRUPTIV: legt nur VLANs an; ändert KEINE Port-Zugehörigkeit (alle Ports bleiben default VLAN1).
# VID-Plan: 10=Server/Main 20=Docker 30=IoT 40=Guest 100=WAN
configure
vlan 10,20,30,40,100
end
save

View File

@@ -0,0 +1,30 @@
# === BF Core-Switch sw1 (ALL-SG8316M, FW 2.2.1) — VLAN-Namen setzen ===
# Reproduzierbar: . switch/.secrets && expect switch/cli/02-vlan-names.exp
# NON-DISRUPTIV: benennt nur die bereits angelegten VLANs (aus 01-vlan-db.cli);
# ändert KEINE Port-Zugehörigkeit.
# VID-Plan: 10=MAIN 20=INFRA 30=IOT 40=UNTRUSTED 90=GUEST 99=MGMT 100=WAN
configure
vlan 10
name MAIN
exit
vlan 20
name INFRA
exit
vlan 30
name IOT
exit
vlan 40
name UNTRUSTED
exit
vlan 90
name GUEST
exit
vlan 99
name MGMT
exit
vlan 100
name WAN
exit
end
save
show vlan

View File

@@ -0,0 +1,107 @@
#!/usr/bin/expect -f
# VLAN-Namen setzen — korrigiert: `end` aus config-vlan geht zu sw1#,
# also nicht nutzen. Stattdessen `exit` aus config-vlan → config,
# und einmal `end` zum Speichern am Ende.
set timeout 30
log_user 1
spawn telnet $env(SW_HOST)
expect "Username:"
send "$env(SW_USER)\r"
expect "Password:"
sleep 1
send "$env(SW_PASS)\r"
expect "sw1#"
send "configure\r"
expect "(config)"
# 90 GUEST
send "vlan 90\r"
expect "(config-vlan)"
send "name GUEST\r"
expect "(config-vlan)"
send "exit\r"
expect "(config)"
# 99 MGMT
send "vlan 99\r"
expect "(config-vlan)"
send "name MGMT\r"
expect "(config-vlan)"
send "exit\r"
expect "(config)"
# 10 MAIN
send "vlan 10\r"
expect "(config-vlan)"
send "name MAIN\r"
expect "(config-vlan)"
send "exit\r"
expect "(config)"
# 20 INFRA
send "vlan 20\r"
expect "(config-vlan)"
send "name INFRA\r"
expect "(config-vlan)"
send "exit\r"
expect "(config)"
# 30 IOT
send "vlan 30\r"
expect "(config-vlan)"
send "name IOT\r"
expect "(config-vlan)"
send "exit\r"
expect "(config)"
# 40 UNTRUSTED
send "vlan 40\r"
expect "(config-vlan)"
send "name UNTRUSTED\r"
expect "(config-vlan)"
send "exit\r"
expect "(config)"
# 100 WAN
send "vlan 100\r"
expect "(config-vlan)"
send "name WAN\r"
expect "(config-vlan)"
send "exit\r"
expect "(config)"
# Save!
send "end\r"
expect "sw1#"
send "save\r"
expect {
"Success" { send "\r" }
timeout { }
}
# Verifizieren mit show vlan (paged)
send "show vlan\r"
# --More-- handling
for {set i 0} {$i < 20} {incr i} {
expect {
-ex "--More--" {
sleep 0.3
send " "
}
-ex "sw1#" {
break
}
timeout { break }
}
}
send "exit\r"
expect eof

View File

@@ -0,0 +1,46 @@
spawn telnet 10.40.41.239
Trying 10.40.41.239...
Connected to sw1.fritz.box.
Escape character is '^]'.
Username: claudecode
Password: ************
sw1# configure
sw1(config)# vlan 90
sw1(config-vlan)# name GUEST
sw1(config-vlan)# exit
sw1(config)# vlan 99
sw1(config-vlan)# name MGMT
sw1(config-vlan)# exit
sw1(config)# vlan 10
sw1(config-vlan)# name MAIN
sw1(config-vlan)# exit
sw1(config)# vlan 20
sw1(config-vlan)# name INFRA
sw1(config-vlan)# exit
sw1(config)# vlan 30
sw1(config-vlan)# name IOT
sw1(config-vlan)# exit
sw1(config)# vlan 40
sw1(config-vlan)# name UNTRUSTED
sw1(config-vlan)# exit
sw1(config)# vlan 100
sw1(config-vlan)# name WAN
sw1(config-vlan)# exit
sw1(config)# end
sw1# save
Success
sw1#
sw1# show vlan
VID | VLAN Name | Untagged Ports | Tagged Ports | Type
-------+------------------+------------------------------+------------------------------+---------
1 | default | gi1-16,lag1-8 | --- | Default
10 | MAIN | --- | --- | Static
20 | INFRA | --- | --- | Static
30 | IOT | --- | --- | Static
40 | UNTRUSTED | --- | --- | Static
90 | GUEST | --- | --- | Static
99 | MGMT | --- | --- | Static
100 | WAN | --- | --- | Static
sw1# exit
sw1>

View File

@@ -0,0 +1,21 @@
# === BF Core-Switch sw1 (ALL-SG8316M, FW 2.2.1) — Trunk-Ports für hAP-APs ===
# Reproduzierbar: . switch/.secrets && expect switch/cli/run-cli.exp switch/cli/03-trunk-ap-ports.cli
# Belegung (provisorisch, 2026-06-09): gi1 = ap1 (10.40.41.1), gi2 = ap2 (10.40.41.2).
# Absicht: native vlan1 untagged (Mgmt/Flachnetz bleibt, kein Lockout) + tagged 10,20,30,40,90,99,100.
# NICHT-DISRUPTIV: nur AP-Ports (tragen keinen Haushalts-Traffic); vlan1 bleibt überall untagged.
# Syntax am Gerät verifiziert: 'switchport trunk allowed vlan add <LIST>' / 'native vlan <id>'.
# Angewendet + verifiziert (POST show vlan: gi1-2 tagged auf 10..100; vlan1 weiter untagged). save=Success.
configure
interface gi1
switchport mode trunk
switchport trunk native vlan 1
switchport trunk allowed vlan add 10,20,30,40,90,99,100
exit
interface gi2
switchport mode trunk
switchport trunk native vlan 1
switchport trunk allowed vlan add 10,20,30,40,90,99,100
exit
end
save
show vlan

View File

@@ -0,0 +1,23 @@
# === BF Core-Switch sw1 (ALL-SG8316M, FW 2.2.1) — VLAN 40→MEDIA + VLAN 50 UNTRUSTED ===
# Reproduzierbar: . switch/.secrets && expect switch/cli/run-cli.exp switch/cli/04-vlan50-media-untrusted.cli
# NON-DISRUPTIV:
# - VLAN 40 wird nur umbenannt (kein Port-Eingriff, Membership bleibt identisch)
# - VLAN 50 wird angelegt + benannt (noch kein Port-Member → kein Traffic betroffen)
# - GE1 + GE2 (AP-Trunks) bekommen VLAN 50 als tagged hinzu (kein Gerät nutzt VLAN 50 noch)
# Ergebnis: VLAN-DB korrekt (40=MEDIA, 50=UNTRUSTED), AP-Trunks bereit für künftige UNTRUSTED-SSID.
configure
vlan 40
name MEDIA
exit
vlan 50
name UNTRUSTED
exit
interface gi1
switchport trunk allowed vlan add 50
exit
interface gi2
switchport trunk allowed vlan add 50
exit
end
save
show vlan

View File

@@ -0,0 +1,55 @@
# ALL-SG8316M FW 2.2.1.2956 — CLI-Referenz (Telnet)
Switch `sw1` @ 10.40.41.239. **Kein SSH** → Telnet (Port 23). IOS-artige CLI. Login: `claudecode` (Creds in `switch/.secrets`).
Prompt-Ebenen: `sw1>` (user) → `sw1#` (enable) → `sw1(config)#` (config). `configure` rein, `end`/`exit` raus.
> ⚠️ **Nur EINE VTY-Line!** Der Switch reapt halb-offene Sessions schlecht (stale Session sperrt ~15 min).
> → Immer **serialisiert** arbeiten und **sauber ausloggen** (`exit` bis zur Verbindungstrennung). Bei „busy" **nicht hämmern**, paar Minuten warten.
Tooling (macOS): `telnet` (/opt/homebrew/bin) + `expect`. Python 3.14 hat KEIN telnetlib. Runner: `switch/cli/run-cli.exp <file.cli>`.
## Management-IP
- **Ansehen** (enable): `show ip` → IP / Subnet Netmask / Default Gateway.
- `show ip ?`: `dhcp dns http https igmp` (+ `<cr>` = Summary).
- **Statisch setzen** (config):
```
ip address <A.B.C.D> mask <A.B.C.D>
ip default-gateway <A.B.C.D>
```
- ✅ **Netzmasken-Syntax bestätigt:** `mask 255.255.255.0` (aus running-config abgelesen).
- DHCP statt statisch: `ip dhcp`.
- **NICHT vorhanden:** `interface vlan`, `show ip interface`, `show management`, `terminal datadump`.
## Management-VLAN
- **Setzen** (config): `management-vlan vlan <1-4094>` (`management` = Abk.)
- **Ansehen** (enable): `show management-vlan` → aktuell `default(1)`.
- Reihenfolge-Warnung: Ziel-VLAN muss existieren UND der Mgmt-Port muss es tragen, sonst Reachability weg.
## VLANs
- **Anlegen** (config): `vlan <liste>` z.B. `vlan 10,20,30,40,100` (Range 1–4094, `3,6-8` möglich).
- **Ansehen** (enable): `show vlan`.
- **Namen setzen** (config):
```
configure
vlan <id> → sw1(config-vlan)#
name <NAME> → max 32 Zeichen, keine Leerzeichen
exit → zurück zu sw1(config)#
```
- ⚠️ **`end` aus config-vlan geht DIREKT zu sw1#** (überspringt config-Ebene) — also `exit` benutzen, nicht `end`, wenn man weitere VLANs bearbeiten will.
- Befehle im config-vlan: `do` (exec-Befehle), `end`/`exit` (raus), `name` (Name setzen).
- Aktuelle Namen: 10=MAIN, 20=INFRA, 30=IOT, 40=MEDIA, 50=UNTRUSTED, 90=GUEST, 99=MGMT, 100=WAN.
## Ports (gi1-16, lag1-8) — Trunk/Access (für Cutover)
```
interface gi<n> (oder: interface range ...)
switchport mode {access|hybrid|trunk}
switchport access vlan <id>
switchport trunk native vlan <id>
switchport trunk allowed vlan ... (genaue add/remove-Syntax via `switchport trunk allowed ?` prüfen)
```
## Speichern / Diverses
- **Persistieren:** `save` (enable) → „Success". (Sonst nach Reboot weg!)
- **Config-Dump:** `show running-config` / `show startup-config` (Paging `--More--` → Space).
- **Version:** `show version` → `Firmware Version : 2.2.1.2956`.
- Andere: `reboot`, `restore-defaults`, `copy`, `clock`, `ping`, `ssl`, `clear`, `disable`, `terminal`.

47
switch/cli/backup.exp Normal file
View File

@@ -0,0 +1,47 @@
#!/usr/bin/expect -f
# Backup running-config mit --More-- Handling
# Schreibt komplette running-config nach STDOUT (zur Weiterleitung in Datei)
set timeout 60
log_user 1
spawn telnet $env(SW_HOST)
expect "Username:"
send "$env(SW_USER)\r"
expect "Password:"
sleep 1
send "$env(SW_PASS)\r"
expect {
"sw1#" { }
timeout { puts "TIMEOUT: kein Prompt"; exit 1 }
}
send "show running-config\r"
# Seiten durchblättern bis zurück zum Prompt
set more_count 0
while {$more_count < 100} {
expect {
-ex "--More--" {
set more_count [expr $more_count + 1]
sleep 0.3
send " "
}
-ex "sw1#" {
break
}
timeout {
puts "TIMEOUT beim Paging"
break
}
}
}
send "\r"
expect "sw1#"
send "exit\r"
expect eof

33
switch/cli/run-cli.exp Normal file
View File

@@ -0,0 +1,33 @@
#!/usr/bin/expect -f
# Generischer Telnet-CLI-Runner für sw1 (ALL-SG8316M, FW 2.2.1, IOS-artige CLI).
# Nutzung: . switch/.secrets && expect switch/cli/run-cli.exp switch/cli/<datei>.cli
# Liest die .cli-Datei zeilenweise, loggt ein, sendet jeden Befehl, flaggt Fehler.
# Zeilen mit führendem '#' = Kommentar (übersprungen). Am Ende: show vlan zur Kontrolle.
set timeout 20
set user $env(SW_USER)
set pass $env(SW_PASS)
set host $env(SW_HOST)
if {[llength $argv] < 1} { puts "usage: run-cli.exp <file.cli>"; exit 1 }
set fh [open [lindex $argv 0] r]
log_user 1
spawn telnet $host
expect "Username:"; send "$user\r"
expect "Password:"; send "$pass\r"
expect -re {sw1[#>]}
while {[gets $fh line] >= 0} {
set line [string trim $line]
if {$line eq "" || [string match "#*" $line]} { continue }
send "$line\r"
expect {
"Incomplete command" { puts "\n>>> FEHLER (incomplete): $line" }
"Unknown command" { puts "\n>>> FEHLER (unknown): $line" }
-re {sw1\([^)]*\)[#>] ?$} {}
-re {sw1[#>] ?$} {}
timeout { puts "\n>>> TIMEOUT bei: $line" }
}
}
close $fh
send "show vlan\r"
expect -re {sw1[#>]}
send "exit\r"
expect eof