🖧 Simple DHCP Server (Lab Edition)

Ein minimalistischer, aber funktionsfähiger IPv4-DHCP-Server mit GUI ideal zum Basteln, Testen und für kleine Lab-Setups mit Raspberry Pi oder PC.

⚠️ Warnung: Ein DHCP-Server im falschen Netz kann massives Chaos auslösen (IP-Konflikte, Netzwerkausfall).
Benutze dieses Tool nur in isolierten Testumgebungen oder auf einem dedizierten Interface!


Features

  • GUI-basiert: Start/Stop per Button, aktive Clients & Leases live sehen
  • Interface-selektiert: bindet exklusiv auf das gewählte Interface (SO_BINDTODEVICE)
  • Preflight-Checks:
    • prüft Root-Rechte vor dem Start
    • prüft, ob Port 67 bindbar ist
  • Leichte Konfiguration:
    • liest IP & Subnetz des gewählten Interface automatisch aus
    • vergibt Adressen aus einem dynamischen Pool (ab Start-IP)
  • Log-Panel & Statusleiste: zeigt DHCP-Events in Echtzeit
  • Echte DHCP-Pakete: DISCOVER → OFFER, REQUEST → ACK, RELEASE → Lease-Freigabe

🛠 Installation

git clone https://github.com/<dein-repo>/simple-dhcp-server.git
cd simple-dhcp-server
pip install -r requirements.txt

Dependencies

  • Python 3.9+
  • psutil (Interface-Infos)
  • optional: sv-ttk für schickes Dark-Theme
pip install psutil sv-ttk

🚀 Starten

1) GUI starten

Root-Rechte sind erforderlich, da Port 67 (<1024) privilegiert ist.

sudo -E python3 main.py

2) Interface auswählen

  • Wähle das Interface (z. B. eth0) aus der Dropdown-Liste.
  • IP & Subnetz werden automatisch eingetragen (kann angepasst werden).
  • ⚠️ Warnmeldung bestätigen.

3) Server starten

  • Start klicken → Log zeigt „Listening on UDP/67“.
  • DHCP-Clients können jetzt Adressen beziehen.

🧪 Testen

Mit dhclient

sudo dhclient -v -i -4 -d -sf /bin/true eth0
  • -sf /bin/true verhindert Änderungen an /etc/resolv.conf
  • Du solltest in der GUI sehen, wie der Client einen Lease bekommt.

Mit nmap

sudo nmap --script broadcast-dhcp-discover -e eth0

Zeigt DHCP-Server im Netz. Dein Server sollte mit OFFER antworten.

Mit tcpdump sniffen

sudo tcpdump -ni eth0 port 67 or port 68

Zeigt DISCOVER/OFFER/REQUEST/ACK Pakete live.


🔒 Sicherheit & Best Practices

  • Nur in isolierten Netzen verwenden (Lab, VLAN, Test-Switch).
  • Auf Produktivsystemen immer statische IP für den Server selbst setzen, sonst könnte er seine eigene IP verlieren.
  • Bei Mehr-Interface-Hosts genau überlegen, auf welchem Interface der Server laufen soll.

🛑 Stoppen

Einfach Stop in der GUI klicken oder Fenster schließen. Leases werden nur im Speicher gehalten (kein persistentes Lease-File).


🧭 Roadmap

  • Lease-Persistenz (JSON oder SQLite)
  • Statische MAC-Reservierungen
  • Konfigurierbarer Pool (Start/End-Adresse)
  • Unterstützung für Option 3 (Router) & Option 6 (DNS) konfigurierbar

⚠️ Haftungsausschluss

Dies ist ein Entwicklungs- und Lern-Tool. Es ist nicht als Ersatz für produktive DHCP-Server gedacht. Benutzung auf eigene Gefahr prüfe deine Netzumgebung sorgfältig, bevor du den Server startest!

Description
No description provided
Readme 56 KiB
Languages
Python 98.2%
Batchfile 1%
Shell 0.8%