DHCP: Backend auf Kea umgestellt, eigene Options (global + pro Client), echte Install-/Dienststeuerung

- Backend-Wechsel von isc-dhcp-server (seit 2022 EOL) auf Kea DHCP
  (kea-dhcp4-server) — aktiv weiterentwickelt, bildet "globaler Wert, pro
  Client überschreibbar" nativ über Kea-Reservation-Option-Data ab.
- Neue Tabellen dhcp_option_defs/dhcp_option_values: eigene/herstellerspezifische
  Options mit Code/Name/Typ/Beschreibung, Wert global sowie optional pro
  Client (device_mac="" für global, siehe Kommentar zur SQLite-NULL-
  UNIQUE-Falle). UI dafür: Optionen-Tabelle + "Neue Option"-Modal +
  Pro-Client-Overrides-Modal je Reservierung.
- Kea-JSON-Generator (_render_kea_config): option-def für jede eigene
  Option, globale Werte im Top-Level option-data, Client-Overrides im
  option-data der jeweiligen Reservierung.
- Reservierungen werden jetzt zusätzlich auf Zugehörigkeit zum
  konfigurierten Subnet gefiltert (_dhcp_reservation_candidates) — beim
  Live-Test gegen echtes Kea gefunden: Kea lehnt Reservierungen außerhalb
  ihres Subnets als Konfigurationsfehler ab, das muss also schon bei der
  Generierung berücksichtigt werden statt erst beim Laden zu crashen.
- Neue, einzeln bestätigte Aktionen: "kea-dhcp4-server installieren"
  (apt-get), "Aktivieren & (neu) starten" sowie "Stoppen"
  (systemctl) — bewusst getrennt von "Konfiguration speichern"/"In
  Datei schreiben".
- Live gegen eine echte, frisch installierte Kea-3.0.3-Instanz verifiziert:
  Installation erfolgreich, generierte Config besteht "kea-dhcp4 -t",
  Dienst übernimmt sie beim Neustart fehlerfrei (DHCP4_CONFIG_COMPLETE),
  globaler Options-Wert und Client-Override erscheinen korrekt getrennt.
  Danach wieder gestoppt; Paket bleibt installiert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-10 21:47:54 +02:00
co-authored by Claude Sonnet 5
parent 9eb9cfdda6
commit c3d69a9870
4 changed files with 557 additions and 103 deletions
+47 -24
View File
@@ -212,36 +212,59 @@ 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)
## DHCP-Reservierungen & eigene Options (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.
feste DHCP-Reservierungen inkl. eigener/herstellerspezifischer Options, 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.
**Backend: Kea DHCP** (`kea-dhcp4-server`), nicht das ältere
`isc-dhcp-server` — ISC hat isc-dhcp-server 2022 als EOL erklärt, Kea ist
der aktiv weiterentwickelte Nachfolger und bildet „globaler Wert, pro Client
überschreibbar“ nativ ab (siehe unten).
- **Status-Erkennung** (rein lesend): `shutil.which("kea-dhcp4")` +
`systemctl is-active`/`is-enabled`. Zeigt Version, Lauf- und
Autostart-Status.
- **Installation & Dienststeuerung**: eigene, jeweils einzeln bestätigte
Buttons — „kea-dhcp4-server installieren“ (`apt-get install -y`),
„Aktivieren & (neu) starten“ (`systemctl enable` + `restart`) und
„Stoppen“. Bewusst **nicht** automatisch an „Konfiguration speichern“
oder „In Datei schreiben“ gekoppelt — ein unerwartet aktiver oder
fehlkonfigurierter DHCP-Server kann ein ganzes Netzsegment stören, jede
dieser Aktionen soll ein bewusster, separater Klick 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
Domain, Lease-Zeiten sowie der Ausgabepfad der generierten Kea-Config
(Standard: die aktive `/etc/kea/kea-dhcp4.conf`) — als `dhcp_*`-Schlüssel
in der bestehenden `settings`-Tabelle gespeichert.
- **Eigene Options** (`dhcp_option_defs`/`dhcp_option_values`, analog den
„Vordefinierten Optionen und Werten“ eines Windows-DHCP-Servers): Code,
Name, Kea-Datentyp und Beschreibung frei definierbar (z.B. herstellerspezifische
Options wie eine Terminal-Boot-URL). Jede Option hat einen **globalen**
Wert sowie optional einen **Wert pro Client** — ein Client-Override
überschreibt den globalen Wert ausschließlich für dieses eine Gerät
(technisch: globale Werte landen im Top-Level `option-data`, Overrides im
`option-data` der jeweiligen Kea-Reservierung, was Kea automatisch pro
Client Vorrang geben lässt).
- **Reservierungen**: für jedes aktive Gerät mit gültiger MAC + IP **innerhalb
des konfigurierten Subnets** wird eine Kea-Reservierung 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.
bekommen automatisch ein `-2`/`-3`-Suffix). Geräte ohne MAC/IP oder mit
einer IP außerhalb des Subnets werden mit Hinweis übersprungen — Kea lehnt
eine Reservierung außerhalb ihres Subnets als Konfigurationsfehler ab
(mit einer echten Kea-Instanz verifiziert).
- **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.
schreibt die vollständige, generierte Kea-JSON-Konfiguration an den
konfigurierten Ausgabepfad. Wirksam wird sie erst nach einem
Dienst-Neustart über den separaten Button.
Live gegen eine echte, frisch installierte Kea-Instanz verifiziert:
Installation, generierte Konfiguration besteht `kea-dhcp4 -t`, Dienststart
übernimmt sie fehlerfrei (`DHCP4_CONFIG_COMPLETE`), globaler Options-Wert
sowie Client-spezifischer Override erscheinen korrekt getrennt in der
Konfiguration.
## Änderungslog