# 🖧 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) - Lease-Time optional per Extended Option 51 oder pro Reservierung - **Config-Profiles**: Interface/IP/DNS + Reservierungen/Extended Options als JSON speichern & laden - **Statische Reservierungen**: MAC → IP Tabelle in der GUI, wird vom Server beachtet - **Leases-Tab**: Restlaufzeit sichtbar, Direkt-Button „Add“ um Leases in Reservierungen zu übernehmen - **Force Renew**: DHCPFORCERENEW an alle Hosts im Subnetz auslösen - **Optionale PXE-Infos**: DHCP Option 66 (TFTP-Server) und 67 (Bootfile), wenn gesetzt - **DHCP-Optionen:** - Option 1: Subnetzmaske - Option 3: Router/Gateway (setzt automatisch auf Server-IP) - Option 6: DNS-Server (aus GUI) - Option 42: NTP-Server (kommagetrennte IPs) - Option 15: DNS-Suffix - Option 51: Lease Time (Pflicht; Default 3600s, override per Extended Options/Reservierung) - Option 66/67: TFTP-Server & Bootfile - **Log-Panel & Statusleiste**: zeigt DHCP-Events in Echtzeit - **Echte DHCP-Pakete**: DISCOVER → OFFER, REQUEST → ACK, RELEASE → Lease-Freigabe --- ## 🛠 Installation ```bash git clone https://github.com//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 ```bash pip install psutil sv-ttk ``` --- ## 🚀 Starten ### 1) GUI starten > **Root-Rechte sind erforderlich**, da Port 67 (< 1024) privilegiert ist. ```bash 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` ```bash 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` ```bash sudo nmap --script broadcast-dhcp-discover -e eth0 ``` Zeigt DHCP-Server im Netz. Dein Server sollte mit OFFER antworten. ### Mit `tcpdump` sniffen ```bash 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: ```bash 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) * [x] Statische MAC-Reservierungen * [x] Mehr Optionen (NTP, PXE, Extended Options) * [ ] Konfigurierbarer Pool (Start/End-Adresse) * [ ] Persistente Config-/Lease-Imports für PXE-Labs --- ## ⚠️ 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!