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

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