Neu: DHCP-Reservierungen aus Client-Stammdaten (Systemeinstellungen -> DHCP)

- Neue Unterseite unter Einstellungen (eigenes Rechtepaar
  settings_dhcp.view/settings_dhcp.edit, in PERMISSIONS/NAV_ITEMS/
  _nav_key_visible integriert, Kill-Switch über settings_group.view
  greift wie bei den anderen Einstellungen-Unterpunkten).
- Rein lesende Installations-/Status-Erkennung (shutil.which("dhcpd"),
  systemctl is-active isc-dhcp-server) — die App installiert/startet nie
  selbst einen DHCP-Dienst, sondern zeigt bei fehlender Installation den
  passenden manuellen Befehl an.
- Konfigurierbare Netzwerkparameter (Interface/Subnet/Netzmaske/Range/
  DNS/Domain/Lease-Zeiten/Ausgabepfad), gespeichert als dhcp_*-Schlüssel
  in der bestehenden settings-Tabelle.
- Reservierungen werden aus aktiven Geräten mit gültiger MAC+IP generiert
  (Hostname aus Gerätename abgeleitet, Kollisionen automatisch
  durchnummeriert, Geräte ohne MAC/IP werden übersprungen).
- "In Datei schreiben" (nur mit settings_dhcp.edit) schreibt eine
  separate Include-Datei statt der aktiven dhcpd.conf; kein automatischer
  Dienst-Reload/-Restart durch die App.
- Live getestet: Status-Erkennung, Config speichern, Reservierungs-
  Generierung inkl. Namenskollisionen, Datei-Schreiben in sicheren
  Testpfad, View-only-Gating (Formular ausgeblendet, POST blockiert),
  Kill-Switch über settings_group.view.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-10 21:10:05 +02:00
co-authored by Claude Sonnet 5
parent 06db4c1382
commit 9eb9cfdda6
5 changed files with 388 additions and 1 deletions
+31
View File
@@ -212,6 +212,37 @@ sich per SSH mit einem Switch verbindet: dem Web-Terminal (Verbindungstest),
`expect`-Aufrufen in `poe.sh` selbst (`ssh -p <port> ...`) für automatische
wie manuelle PoE-Neustarts.
## DHCP-Reservierungen (Systemeinstellungen → DHCP)
Erzeugt aus den vorhandenen Client-Stammdaten (MAC + IP + Name) automatisch
feste DHCP-Reservierungen, ohne die Daten ein zweites Mal pflegen zu müssen.
Eigenes Rechtepaar `settings_dhcp.view`/`settings_dhcp.edit`, gespiegelt in
der Navbar unter Einstellungen.
- **Status-Erkennung** (rein lesend): prüft per `shutil.which("dhcpd")` und
`systemctl is-active isc-dhcp-server`, ob ein ISC-DHCP-Server installiert
bzw. aktiv ist. Die App installiert und startet **nie selbst** einen
DHCP-Dienst — ist keiner gefunden, zeigt die Seite lediglich den passenden
manuellen Befehl (`sudo apt-get install isc-dhcp-server`) an. Grund: ein
unerwartet aktiver oder fehlkonfigurierter DHCP-Server kann ein ganzes
Netzwerksegment stören, das soll ausschließlich eine bewusste,
eigenständige Admin-Entscheidung außerhalb der App bleiben.
- **Konfiguration**: Interface, Subnet, Netzmaske, Range, DNS-Server,
Domain, Lease-Zeiten sowie der Ausgabepfad der generierten Datei — als
`dhcp_*`-Schlüssel in der bestehenden `settings`-Tabelle gespeichert.
- **Reservierungen**: für jedes aktive Gerät mit gültiger MAC + IP wird ein
`host { hardware ethernet ...; fixed-address ...; }`-Block erzeugt; der
Hostname wird aus dem Gerätenamen abgeleitet (nur `a-z0-9-`, Kollisionen
bekommen automatisch ein `-2`/`-3`-Suffix). Geräte ohne MAC/IP werden mit
Hinweis übersprungen statt eine kaputte Reservierung zu erzeugen.
- **Schreiben**: „In Datei schreiben“ (nur mit `settings_dhcp.edit`)
schreibt die generierte Subnet-/Reservierungs-Deklaration in eine
**separate Include-Datei** (Standard-Vorschlag
`/etc/dhcp/dhcpd.conf.d/aruba-poe-reservations.conf`) — **nicht** in die
eigentliche `dhcpd.conf`. Einmalig manuell per `include "<Pfad>";`
einbinden. Die App reloadet/restartet den DHCP-Dienst dabei bewusst
**nicht automatisch** — dieselbe Begründung wie bei der Status-Erkennung.
## Änderungslog
Jede Anlage, Bearbeitung, Löschung sowie jedes Aktivieren/Deaktivieren von