Pi-hole DNS-Server (DietPi / NanoPi NEO3)¶
Netzwerkweite Werbe- und Tracker-Blockierung via Pi-hole v6 auf einem FriendlyElec NanoPi NEO3 mit DietPi OS. DNS-Upstream über Unbound (rekursiver Resolver, kein Drittanbieter-DNS).
Hardware¶
FriendlyElec NanoPi NEO3¶
| Eigenschaft | Wert | | Modell | FriendlyElec NanoPi NEO3 | | SoC | Rockchip RK3328 (Quad-Core ARM Cortex-A53, 64-bit) | | RAM | 1 GB LPDDR4 | | Netzwerk | Gigabit Ethernet | | OS | DietPi (Debian-basiert, ARM64) | | Kernel | 6.18.16-current-rockchip64 | | IP-Adresse | 192.168.178.15 | | Hostname | Pi-Hole |
Software¶
Pi-hole v6¶
| Komponente | Version | Status | | Core | v6.4.1 | aktuell | | Web | v6.5 | aktuell | | FTL | v6.6 | aktuell |
- Web-Interface: http://192.168.178.15:8089/
- API: http://192.168.178.15:8089/api/
- Passwort: Nec338a°!
Home Assistant Integration¶
Pi-hole ist seit 2026-04-09 in HA integriert (Einstellungen → Integrationen → Pi-hole).
| Entity | Beschreibung | | binary_sensor.pi_hole_status | Pi-hole aktiv/inaktiv | | switch.pi_hole | Blocking ein/ausschalten | | sensor.pi_hole_dns_abfragen | DNS-Abfragen heute | | sensor.pi_hole_blockierte_anzeigen | Blockierte Anfragen heute | | sensor.pi_hole_anteil_blockierter_anzeigen | Blockierungsrate in % | | sensor.pi_hole_blockierte_domains | Domains in Blockliste | | update.pi_hole_core_update_verfugbar | Core-Update verfügbar |
Auth: Passwort direkt als api_key, Port 8089, kein SSL.
Unbound (Rekursiver DNS-Resolver)¶
Pi-hole leitet DNS-Anfragen nicht an Drittanbieter (Google, Cloudflare etc.) weiter, sondern nutzt Unbound als rekursiven Resolver:
- Unbound läuft lokal auf Port 5335
- Pi-hole Upstream DNS: 127.0.0.1#5335
- Vorteile: Datenschutz, keine Abhängigkeit von externen DNS-Anbietern, direkte Root-Server-Abfragen
DNS-Konfiguration¶
| Einstellung | Wert | | Interface | eth0 | | DNS Port | 53 | | Listening Mode | LOCAL | | Upstream DNS | 127.0.0.1#5335 (Unbound) | | Blocking Mode | NULL | | DNS Cache | 10.000 Einträge | | DNSSEC | deaktiviert | | CNAME Deep Inspect | aktiviert | | Block ESNI | aktiviert | | Query Logging | deaktiviert | | Domain | lan | | Rate Limit | 1.000 Anfragen / 60 Sek. |
DHCP ist deaktiviert — die FritzBox übernimmt DHCP und ist als einziger DNS-Client eingetragen (192.168.178.1). Alle Netzwerkgeräte erhalten Pi-hole als DNS über die FritzBox.
Blocklisten¶
| # | Liste | Domains | Status | | 1 | Steven Black Unified Hosts | 92.277 | aktiv |
Gesamt blockierte Domains: 92.277 (Stand 2026-04-09)
Statistiken (Stand 2026-04-09)¶
| Metrik | Wert | | Gesamte Anfragen | ~28.800 / 24h | | Blockierte Anfragen | ~816 (2,8 %) | | Gecachte Anfragen | ~24.200 (84 %) | | Weitergeleitet (Upstream) | ~3.550 | | Aktive Clients | 2 (FritzBox + localhost) |
Top 10 blockierte Domains¶
| # | Domain | Blockierungen | Kategorie | | 1 | mobile.pipe.aria.microsoft.com | 143 | Microsoft Telemetrie | | 2 | firebaselogging-pa.googleapis.com | 53 | Google Analytics | | 3 | _dns.resolver.arpa | 48 | DNS Spezial | | 4 | global.telemetry.insights.video.a2z.com | 39 | Amazon Telemetrie | | 5 | googleads.g.doubleclick.net | 35 | Google Werbung | | 6 | app-analytics-v2.snapchat.com | 34 | Snapchat Analytics | | 7 | firebaselogging.googleapis.com | 32 | Google Analytics | | 8 | app-measurement.com | 25 | Firebase Analytics | | 9 | api.ad.intl.xiaomi.com | 23 | Xiaomi Werbung | | 10 | www.googletagmanager.com | 21 | Google Tag Manager |
Performance-Optimierungen (2026-03-26)¶
Pi-hole hatte unter hoher Last (DNS-Burst beim Neustart) Crashes durch das Kaskadierproblem: dnsmasq-Limit → Unbound-Überlastung → TCP-Fehler → FTL-Crash.
Behobene Konfiguration¶
dnsmasq — /etc/dnsmasq.d/99-custom.conf:
Unbound — /etc/unbound/unbound.conf.d/dietpi.conf (geänderte Werte):
num-threads: 2 # war: 1 (NanoPi NEO3 hat 4 Kerne)
msg-cache-slabs: 2
rrset-cache-slabs: 2
infra-cache-slabs: 2
key-cache-slabs: 2
| Einstellung | Vorher | Nachher | | dnsmasq dns-forward-max | 150 (Standard) | 500 | | Unbound num-threads | 1 | 2 | | Unbound cache-slabs | nicht gesetzt | 2 |
Update-History¶
| Datum | System | Vorher | Nachher | | 2026-04-09 | Pi-hole + OS | Core v6.4 / Web v6.4.1 / FTL v6.5 | Core v6.4.1 / Web v6.5 / FTL v6.6 | | 2026-04-09 | Debian Packages | — | libssl3, openssl, bind9, libpng16, libtiff6 (Security-Updates) | | 2026-03-26 | DietPi Update | v9.15.0 | v10.2.3 | | 2026-03-26 | Unbound + dnsmasq | forward-max=150, threads=1 | forward-max=500, threads=2 | | 2026-03-21 | DietPi + Pi-hole | Kernel 6.12.35 / Core v6.0.6 | Kernel 6.18.16 / Core v6.4 / Web v6.4.1 / FTL v6.5 |
Installierte Addons¶
Fail2ban¶
Schützt den SSH-Zugang (Dropbear) vor Brute-Force-Angriffen.
| Einstellung | Wert | | Jail | dropbear | | Max. Versuche | 3 | | Beobachtungsfenster | 600 Sekunden | | Ban-Dauer | 3.600 Sekunden (1 Stunde) | | Config | /etc/fail2ban/jail.d/dietpi-hardened.conf |
Log2Ram¶
Schreibt /var/log in den RAM, um die SD-Karte/eMMC zu schonen. Logs werden periodisch und beim Herunterfahren auf die Karte zurückgeschrieben.
| Einstellung | Wert | | RAM-Größe | 128 MB | | Sync | rsync (täglich + bei Shutdown) | | Config | /etc/log2ram.conf | | Mount | tmpfs auf /var/log |
Zugang & Administration¶
| Zugang | Details | | Web-Interface | http://192.168.178.15:8089/ | | SSH | ssh root@192.168.178.15 · PW: Nec338a°! (kein Key, Passwort-Auth) | | SSH via HA | ssh -F /config/.ssh/config omv → sshpass -p 'Nec338a°!' ssh root@192.168.178.15 | | API Auth | POST /api/auth mit {"password":"Nec338a°!"} |
Ressourcen (Stand 2026-03-26)¶
| Ressource | Wert | | RAM gesamt | ~969 MB | | RAM genutzt | ~135 MB (14 %) | | Swap | ~1 GB (ungenutzt) | | CPU-Auslastung | ~1 % | | CPU-Kerne | 4 |