🖧 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!