AdGuard Home mit Unbound auf Debian 13 einrichten: Eigener DNS-Filter mit Werbe- und Tracker-Blocking, ohne Abhängigkeit von Google oder Cloudflare. Schnell, privat und unter deiner Kontrolle.
💡 Hinweis: Dieses Tutorial setzt voraus, dass du einen normalen Benutzer mit sudo-Rechten verwendest — wie im Tutorial Debian 13 Server absichern beschrieben.
Einleitung — Was ist AdGuard Home?
Jedes Gerät in eurem Netzwerk fragt ständig DNS-Server: „Wo ist google.com? Wo ist tracking.facebook.com? Wo ist ads.example.com?“. Standardmäßig laufen diese Anfragen über Google (8.8.8.8) oder Cloudflare (1.1.1.1) — beides Konzerne, die jede einzelne Anfrage protokollieren können.
AdGuard Home ist ein Open-Source DNS-Server, den ihr selbst hostet. Er filtert Werbung, Tracker und Malware-Domains schon auf DNS-Ebene — geräteübergreifend für alle Smartphones, Smart-TVs, IoT-Geräte und PCs in eurem Netzwerk. Unbound als Backend macht das Setup vollständig unabhängig von Drittanbietern: AdGuard Home filtert, Unbound fragt direkt die DNS-Root-Server.
Was AdGuard Home kann
- Network-wide Blocking — Werbung & Tracker für alle Geräte gleichzeitig
- DNS-over-HTTPS, DNS-over-TLS, DNS-over-QUIC — Verschlüsselte DNS-Anfragen
- Web-Dashboard — Statistiken, Logs, Block/Allow-Listen
- Per-Client-Regeln — Kindersicherung, eigene Filter pro Gerät
- Custom DNS Records — Lokale Domains für Self-Hosted-Services
- Parental Control — Erwachseneninhalte automatisch blockieren
- Safe Search — Google, Bing, YouTube zwingen zu jugendfreien Ergebnissen
AdGuard Home vs. Pi-hole
| Feature | AdGuard Home | Pi-hole |
|---|---|---|
| Setup | Single Binary | LAMP-Stack nötig |
| Konfiguration | Web-UI komplett | Web-UI + CLI |
| DNS-over-HTTPS | Eingebaut | Nur via Cloudflared |
| DNS-over-TLS | Eingebaut | Nur via stubby |
| Verschlüsseltes Upstream | Ja | Erweitert nötig |
| Per-Client-Regeln | Sehr gut | Möglich, aber komplex |
| Update | Self-Update | apt-get |
| Performance | Sehr gut | Sehr gut |
Beides sind exzellente Tools — AdGuard Home ist moderner und bringt mehr Features standardmäßig mit, Pi-hole ist der etablierte Klassiker mit größerer Community.
In diesem Guide richten wir AdGuard Home + Unbound auf Debian 13 ein — vom DNS-Setup bis zur Router-Integration und Backup-Strategie.
Architektur des Setups
[Eure Geräte]
↓ DNS-Anfrage
[AdGuard Home] (Port 53)
↓ Werbung & Tracker raus
↓ Rest weiterleiten
[Unbound] (Port 5335, lokal)
↓ Direkt fragen, kein Upstream
[DNS Root-Server der Welt]- AdGuard Home lauscht auf Port 53 (Standard-DNS)
- Unbound lauscht auf Port 5335 (intern)
- AdGuard Home leitet alle nicht-blockierten Anfragen an Unbound weiter
- Unbound fragt rekursiv die echten DNS-Server der Welt — keine Upstream-Provider, keine Logs bei Dritten
Voraussetzungen
- Debian 13 (Trixie) — siehe Debian 13 Server-Guide
- Mindestens 512 MB RAM (1 GB empfohlen, AdGuard Home ist sehr leichtgewichtig)
- Statische IP-Adresse im LAN — euer Router muss diese kennen
- Port 53 frei —
systemd-resolvedmuss umkonfiguriert werden - Optional: Port 80/443 für AdGuard-Web-UI mit eigener Domain
Schritt 1: Port 53 freimachen (systemd-resolved)
Debian 13 nutzt systemd-resolved, das selbst auf Port 53 lauscht. Wir müssen es umstellen, sonst kann AdGuard Home nicht starten.
sudo nano /etc/systemd/resolved.confSetzt diese Werte:
[Resolve]
DNS=127.0.0.1
DNSStubListener=noSymlink für /etc/resolv.conf aktualisieren:
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl restart systemd-resolvedPrüfen, dass Port 53 jetzt frei ist:
sudo ss -tulpn | grep ':53 'Die Ausgabe sollte leer sein.
⚠️ Wichtig: Sobald AdGuard Home läuft, ist euer Server selbst von DNS abhängig. Achtet darauf, dass entweder AdGuard Home oder ein Fallback (z.B.
1.1.1.1in/etc/resolv.conf) erreichbar ist — sonst funktioniert auchapt updatenicht mehr.
Schritt 2: Unbound installieren
sudo apt update
sudo apt install -y unboundUnbound für AdGuard Home konfigurieren
sudo nano /etc/unbound/unbound.conf.d/adguard.confInhalt:
server:
# Auf localhost, Port 5335 lauschen
interface: 127.0.0.1
port: 5335
# Nur lokal erreichbar
do-ip4: yes
do-udp: yes
do-tcp: yes
# IPv6 — bei Bedarf aktivieren
do-ip6: no
# Trust-Anchor für DNSSEC
auto-trust-anchor-file: "/var/lib/unbound/root.key"
# Performance
num-threads: 2
msg-cache-slabs: 4
rrset-cache-slabs: 4
infra-cache-slabs: 4
key-cache-slabs: 4
# Cache-Größen (für ~512 MB RAM ausreichend)
rrset-cache-size: 100m
msg-cache-size: 50m
# Privacy
hide-identity: yes
hide-version: yes
qname-minimisation: yes
harden-glue: yes
harden-dnssec-stripped: yes
use-caps-for-id: yes
# Maximum UDP-Größe — verhindert Fragmentierung
edns-buffer-size: 1232
# Prefetch beliebter Anfragen
prefetch: yes
prefetch-key: yes
# Privates IP-Netz nicht extern auflösen (Rebind-Schutz)
private-address: 192.168.0.0/16
private-address: 169.254.0.0/16
private-address: 172.16.0.0/12
private-address: 10.0.0.0/8
private-address: fd00::/8
private-address: fe80::/10Standard-Konfiguration deaktivieren, damit es keine Konflikte gibt:
sudo systemctl restart unbound
sudo systemctl enable unboundTest: Funktioniert Unbound?
dig @127.0.0.1 -p 5335 google.comIhr solltet eine Antwort mit status: NOERROR und einer IP-Adresse sehen. Erste Anfragen dauern länger (Cache leer), danach unter 50ms.
💡 Tipp: Mit
dig +dnssec @127.0.0.1 -p 5335 cloudflare.comtestet ihr, ob DNSSEC funktioniert. Imflags-Feld mussadstehen (Authenticated Data) — dann validiert Unbound korrekt.
Schritt 3: AdGuard Home installieren
AdGuard Home ist ein Single-Binary, also keine Paketquellen nötig. Wir laden es direkt:
cd /tmp
curl -sSL https://github.com/AdguardTeam/AdGuardHome/releases/latest/download/AdGuardHome_linux_amd64.tar.gz -o AdGuardHome.tar.gz
tar -xzf AdGuardHome.tar.gz
sudo mv AdGuardHome /opt/
cd /opt/AdGuardHome
sudo ./AdGuardHome -s installDas Install-Script richtet AdGuard Home als systemd-Service ein und startet ihn.
Status prüfen
sudo systemctl status AdGuardHomeSollte active (running) zeigen. Im Browser:
http://EURE-SERVER-IP:3000Schritt 4: Initial-Setup im Web-Wizard
Im Wizard:
- Listen Interface:
Alle Interfaces, Port80für Web-UI (oder3000belassen) - DNS Listen Interface:
Alle Interfaces, Port53 - Admin-User: Username + starkes Passwort wählen
- Konfiguration prüfen und abschließen
⚠️ Wichtig: Wenn AdGuard Home auf Port 80 lauscht, kann später kein Webserver (Nginx, Apache, Traefik) mehr auf Port 80 laufen. Falls ihr beides braucht, lasst AdGuard auf Port 3000 oder 8080 und schaltet einen Reverse Proxy davor.
Nach dem Wizard meldet ihr euch erneut an — diesmal unter dem konfigurierten Port.
Schritt 5: AdGuard Home → Unbound verbinden
Im AdGuard-Dashboard: Einstellungen → DNS-Einstellungen.
Bei Upstream-DNS-Server alles löschen und nur eintragen:
127.0.0.1:5335Bei Bootstrap DNS Server (für initiale Auflösung):
1.1.1.1
8.8.8.8💡 Hinweis: Bootstrap DNS wird nur einmalig für die DNS-over-HTTPS-Provider-Domain aufgelöst. Für eure normalen Anfragen ist das egal — die laufen über Unbound.
Klickt auf Test Upstreams — alle sollten OK sein. Dann Speichern.
Filter-Listen aktivieren
Unter Filter → DNS-Sperrlisten → Aktualisierungs-Intervall auf 12 Stunden stellen. Standard-Listen sind aktiv. Empfehlenswerte zusätzliche Listen:
- OISD Big —
https://big.oisd.nl/(sehr umfassende Liste) - HaGeZi Pro —
https://raw.githubusercontent.com/hagezi/dns-blocklists/main/adblock/pro.txt - AdGuard DNS Filter (bereits aktiv)
- EasyPrivacy — Tracker-Blocking
Hinzufügen über Custom Filtering Rules → Add blocklist.
✅ Geschafft! AdGuard Home filtert eure DNS-Anfragen über Unbound — kein Upstream-Provider, kein externer Logger, vollständig unter eurer Kontrolle.
Schritt 6: AdGuard Home als DNS im Netzwerk verteilen
Damit alle Geräte AdGuard Home nutzen, müssen sie eure Server-IP als DNS bekommen. Drei Wege:
Variante A: Router-DHCP (empfohlen)
Im Router-Interface (FritzBox, Speedport, OPNsense, pfSense etc.):
- DHCP-Einstellungen → Lokaler DNS-Server:
EURE-SERVER-IP - Sekundärer DNS leer lassen oder eine externe Adresse als Fallback
Geräte holen beim Reconnect die neue Konfiguration und nutzen ab sofort AdGuard Home.
Variante B: AdGuard Home als DHCP-Server
AdGuard Home kann selbst DHCP machen, falls euer Router das nicht sauber unterstützt. Im Dashboard: Einstellungen → DHCP-Einstellungen.
⚠️ Wichtig: Nur EINER im Netzwerk darf DHCP-Server sein. Wenn euer Router das schon macht, deaktiviert es entweder im Router oder in AdGuard Home — niemals beides parallel.
Variante C: Pro Gerät manuell
In den Netzwerk-Einstellungen jedes Geräts manuell den DNS auf eure Server-IP setzen. Aufwendig, aber funktioniert ohne Router-Eingriff.
Schritt 7: Verschlüsseltes DNS (DoH/DoT) — optional aber empfohlen
DNS-Anfragen sind im Klartext. Mit DoH/DoT könnt ihr sie verschlüsseln — sinnvoll für Mobilgeräte unterwegs.
Voraussetzungen
- Eine Domain (z.B.
dns.example.com) - Ein gültiges SSL-Zertifikat
- Reverse Proxy davor oder direkter Zugriff auf Port 443
Einfachste Lösung: Nginx als Proxy
Wir nutzen unseren Nginx-Reverse-Proxy, Domain dns.example.com:
sudo nano /etc/nginx/sites-available/dns.example.comWichtige Einstellungen:
server {
listen 443 ssl http2;
server_name dns.example.com;
ssl_certificate /etc/letsencrypt/live/dns.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dns.example.com/privkey.pem;
location /dns-query {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
}
}In AdGuard Home: Einstellungen → Verschlüsselung → DNS-over-HTTPS aktivieren, Pfad /dns-query.
In iOS/Android über Profile oder Apps wie AdGuard lässt sich der DoH-Server eintragen — funktioniert dann auch im LTE/5G-Netz.
Schritt 8: Custom DNS Records für Self-Hosted-Services
Ein riesiger Vorteil eures eigenen DNS: Ihr könnt interne Domains definieren, die nur im LAN auflösbar sind.
Im AdGuard-Dashboard: Filter → Custom Filtering Rules.
Beispiel:
192.168.1.100 proxmox.local
192.168.1.101 nas.local
192.168.1.50 homeassistant.localJetzt sind eure Self-Hosted-Services unter sprechenden Namen erreichbar — auch ohne öffentliche DNS-Einträge.
💡 Tipp: Mit
.localals TLD habt ihr garantiert keine Konflikte mit echten Domains. Manche Geräte (Apple Bonjour) reservieren.localaber für sich selbst — alternativ funktioniert.lanoder.home.
Schritt 9: Per-Client-Regeln & Kindersicherung
Im AdGuard-Dashboard: Einstellungen → Clients-Einstellungen.
Hier könnt ihr für jedes Gerät individuelle Filter-Regeln festlegen:
- Kinder-Tablet: Safe Search aktiv, zusätzliche Filter-Listen, YouTube auf jugendfrei
- Smart-TV: Tracker komplett blocken, aber nichts anderes filtern
- Gaming-PC: Keine Filter, weil Spiel-DRM sonst stört
Geräte werden automatisch erkannt und in der Übersicht angezeigt — ihr müsst sie nur benennen und Regeln zuweisen.
Backups
AdGuard Home speichert alles in /opt/AdGuardHome/AdGuardHome.yaml. Plus die Daten unter /opt/AdGuardHome/data/.
Was muss gesichert werden?
/opt/AdGuardHome/AdGuardHome.yaml— Komplette Config/opt/AdGuardHome/data/— Statistiken, Filter, Sessions/etc/unbound/unbound.conf.d/adguard.conf— Unbound-Config
Automatisches Backup-Script
sudo nano /usr/local/bin/adguard-backup.shInhalt:
#!/bin/bash
set -e
BACKUP_DIR="/var/backups/adguard"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
RETENTION_DAYS=14
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/adguard-$TIMESTAMP.tar.gz" \
-C /opt/AdGuardHome AdGuardHome.yaml data \
-C /etc/unbound/unbound.conf.d adguard.conf
find "$BACKUP_DIR" -type f -mtime +$RETENTION_DAYS -delete
echo "Backup completed: $TIMESTAMP"Ausführbar machen und mit systemd Timer automatisieren — wie in unserem restic Backup-Tutorial beschrieben:
sudo chmod +x /usr/local/bin/adguard-backup.sh
sudo /usr/local/bin/adguard-backup.shUpdates
AdGuard Home
AdGuard Home hat einen eingebauten Auto-Updater. Im Dashboard: Einstellungen → Allgemein → Auto-Update aktivieren. Bei jedem Start prüft AdGuard auf neue Versionen.
Manuell:
sudo /opt/AdGuardHome/AdGuardHome --updateUnbound
Updates über apt:
sudo apt update && sudo apt upgrade unbound
sudo systemctl restart unbound💡 Empfehlung: Bei AdGuard Home sind Updates fast immer Bugfixes oder neue Features ohne Breaking Changes. Auto-Update ist hier ausnahmsweise unbedenklich — anders als z.B. bei Datenbanken.
Zusammenfassung & Checkliste
| Schritt | Status |
|---|---|
| Debian 13 Server eingerichtet | ☐ |
systemd-resolved umkonfiguriert (Port 53 frei) | ☐ |
| Unbound installiert und konfiguriert | ☐ |
| Unbound auf Port 5335 erreichbar | ☐ |
| AdGuard Home heruntergeladen und installiert | ☐ |
| Web-Wizard durchlaufen | ☐ |
Upstream auf 127.0.0.1:5335 (Unbound) gesetzt | ☐ |
| Filter-Listen aktiviert | ☐ |
| Router-DHCP auf AdGuard-IP umgestellt | ☐ |
| Test-Geräte filtern Werbung | ☐ |
| Custom DNS Records für lokale Services | ☐ |
| Backup-Script eingerichtet | ☐ |
Troubleshooting
„Address already in use“ beim AdGuard-Start
Port 53 ist noch von systemd-resolved belegt:
sudo ss -tulpn | grep ':53 '
sudo systemctl status systemd-resolvedFalls noch belegt, Schritt 1 erneut prüfen.
DNS-Auflösung schlägt fehl
- AdGuard Home läuft?
sudo systemctl status AdGuardHome - Unbound läuft?
sudo systemctl status unbound - Test direkt gegen AdGuard:
dig @127.0.0.1 google.com - Test gegen Unbound:
dig @127.0.0.1 -p 5335 google.com
Geräte im Netzwerk nutzen AdGuard nicht
- Router-DHCP korrekt umgestellt?
- Geräte neu verbunden (DHCP-Lease erneuern)?
ipconfig /all(Windows) odercat /etc/resolv.conf(Linux) — welcher DNS steht da?
Webseite blockiert, soll aber funktionieren
- Im Dashboard → Query Log → Eintrag suchen → Allow this domain
- Oder dauerhaft in Custom Filtering Rules:
@@||example.com^
Unbound-Fehler „could not open autotrust file“
sudo unbound-anchor -a /var/lib/unbound/root.key
sudo chown unbound:unbound /var/lib/unbound/root.key
sudo systemctl restart unboundSehr langsame DNS-Antworten
- Unbound-Cache zu klein? In
adguard.confrrset-cache-sizeundmsg-cache-sizeerhöhen - DNSSEC-Validierung scheitert? Logs prüfen:
sudo journalctl -u unbound -f
Nächste Schritte
AdGuard Home läuft — und jetzt? Hier sind sinnvolle nächste Schritte:
- DNS-over-HTTPS für Mobilgeräte — Filterung auch unterwegs
- HA-Setup mit zweitem AdGuard — Replikation + Failover für Ausfallsicherheit
- Pi-hole-Backup importieren — Falls ihr von Pi-hole umzieht, gibt es Migration-Tools
- Custom-CSS für AdGuard-Dashboard — Branding fürs Homelab
- Grafana-Dashboards — Block-Statistiken visualisieren
- AdGuard auf zweitem Server — Round-Robin für Performance
AdGuard Home + Unbound ist die saubere Lösung für DNS-Privatsphäre. Die offizielle AdGuard-Dokumentation ist umfangreich.
Habt ihr Fragen oder Probleme? Schreibt es in die Kommentare — ich helfe gerne!