3.9 KiB
🖧 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)
- Neu: Eingabefelder für Primary/Secondary DNS (DHCP Option 6)
- DHCP-Optionen:
- Option 1: Subnetzmaske
- Option 3: Router/Gateway (setzt automatisch auf Server-IP)
- Option 6: DNS-Server (aus GUI)
- Option 51: Lease-Time
- 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).
- Primary DNS wird standardmäßig auf die Interface-IP gesetzt (typisch fürs Lab).
- Optional Secondary DNS eintragen (z. B.
8.8.8.8
).
3) Server starten
- Start klicken → Warnmeldung bestätigen → Log zeigt „Listening on UDP/67“.
- DHCP-Clients können jetzt Adressen und DNS-Settings beziehen.
🧪 Testen
Mit dhclient
sudo dhclient -v -i -4 -d -sf /bin/true eth0
-sf /bin/true
verhindert Änderungen an/etc/resolv.conf
- GUI sollte zeigen, dass ein Lease vergeben wurde.
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.
🌐 Internet-Sharing (optional)
Wenn der PC per WLAN im Internet ist, kann man den Traffic ins Labnetz weiterleiten:
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o wlp61s0 -j MASQUERADE
sudo iptables -A FORWARD -i wlp61s0 -o enp0s31f6 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i enp0s31f6 -o wlp61s0 -j ACCEPT
Dann können Clients im Labnetz Internetzugang nutzen.
🔒 Sicherheit & Best Practices
- Nur in isolierten Netzen verwenden (Lab, VLAN, Test-Switch).
- Server-IP statisch setzen, damit sie stabil bleibt.
- Aufpassen bei Mehr-Interface-Systemen: Immer bewusst auswählen, welches Interface beschallt wird.
🛑 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)
- Mehr Optionen (NTP, PXE, benutzerdefiniert)
⚠️ 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!