Initial import from bf-network-r6.opencode — opencode migration
This commit is contained in:
8
switch/cli/01-vlan-db.cli
Normal file
8
switch/cli/01-vlan-db.cli
Normal 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
|
||||
30
switch/cli/02-vlan-names.cli
Normal file
30
switch/cli/02-vlan-names.cli
Normal 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
|
||||
107
switch/cli/02-vlan-names.exp
Normal file
107
switch/cli/02-vlan-names.exp
Normal 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
|
||||
46
switch/cli/02-vlan-names.log
Normal file
46
switch/cli/02-vlan-names.log
Normal file
@@ -0,0 +1,46 @@
|
||||
spawn telnet 10.40.41.239
|
||||
Trying 10.40.41.239...
|
||||
Connected to sw1.fritz.box.
|
||||
Escape character is '^]'.
|
||||
[H[JUsername: 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>
|
||||
21
switch/cli/03-trunk-ap-ports.cli
Normal file
21
switch/cli/03-trunk-ap-ports.cli
Normal 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
|
||||
23
switch/cli/04-vlan50-media-untrusted.cli
Normal file
23
switch/cli/04-vlan50-media-untrusted.cli
Normal 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
|
||||
55
switch/cli/CLI-REFERENCE.md
Normal file
55
switch/cli/CLI-REFERENCE.md
Normal 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
47
switch/cli/backup.exp
Normal 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
33
switch/cli/run-cli.exp
Normal 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
|
||||
Reference in New Issue
Block a user