146 lines
3.9 KiB
Markdown
146 lines
3.9 KiB
Markdown
# 🖧 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
|
||
|
||
```bash
|
||
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
|
||
|
||
```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)
|
||
* [ ] 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! |