Die Verwaltung des eigenen Netzwerks wird immer komplexer, insbesondere wenn es um DNS-Filterung, Jugendschutz oder das Blockieren unerwünschter Werbung geht. AdGuard Home hat sich hier als eine hervorragende, selbst gehostete Lösung etabliert. In Kombination mit Docker bietet es eine unschlagbare Flexibilität und einfache Bereitstellung. Doch viele Nutzer stolpern über die korrekte Konfiguration, besonders wenn es darum geht, AdGuard Home nahtlos im Parallelbetrieb für IPv4 und IPv6 zu betreiben – ein sogenanntes Dual-Stack-Szenario.
Dieser Artikel führt Sie umfassend und detailliert durch den Prozess, AdGuard Home in Docker so einzurichten, dass es sowohl über IPv4 als auch über IPv6 optimal funktioniert. Wir erklären die notwendigen Schritte, von der Aktivierung von IPv6 im Docker-Daemon bis zur feingranularen Konfiguration Ihres Docker Compose-Files, um eine reibungslose und leistungsstarke DNS-Lösung zu gewährleisten.
Warum AdGuard Home in Docker mit Dual-Stack?
Bevor wir ins Detail gehen, lassen Sie uns kurz die Vorteile dieser Konfiguration beleuchten:
* **Zentrale Kontrolle:** AdGuard Home ermöglicht die zentrale Verwaltung aller DNS-Anfragen in Ihrem Netzwerk.
* **Werbe- und Malware-Blockierung:** Effektives Filtern von Werbung, Trackern und potenziell schädlichen Domains.
* **Anpassbarkeit:** Umfangreiche Filterlisten, eigene Regeln und detaillierte Statistiken.
* **Docker-Vorteile:** Isolation, Portabilität und einfache Updates der AdGuard Home-Instanz.
* **Zukunftssicherheit mit IPv6:** Immer mehr Internetdienste und Geräte nutzen IPv6. Eine Dual-Stack-Konfiguration stellt sicher, dass Ihr DNS-Server für alle Anfragen gerüstet ist und keine Kompatibilitätsprobleme entstehen. Dies ist entscheidend für eine zukunftsfähige Netzwerkinfrastruktur.
Ohne eine korrekte IPv6-Konfiguration könnte es passieren, dass Anfragen über IPv6 nicht gefiltert werden oder sogar ganz fehlschlagen, wenn Ihr Router oder Ihre Geräte bevorzugt IPv6 nutzen.
Voraussetzungen für die perfekte Konfiguration
Bevor Sie beginnen, stellen Sie sicher, dass die folgenden Punkte erfüllt sind:
1. **Ein Linux-Server (oder ähnliches):** Auf dem Docker installiert ist.
2. **Docker und Docker Compose:** Beide müssen auf Ihrem System installiert sein. Wenn nicht, finden Sie Anleitungen auf der offiziellen Docker-Website.
3. **Grundlegendes Netzwerkverständnis:** Kenntnisse über IP-Adressen, Subnetze und DNS sind hilfreich.
4. **IPv6-Konnektivität:** Ihr Server und Ihr Netzwerk müssen über eine funktionierende IPv6-Anbindung verfügen. Überprüfen Sie dies, indem Sie versuchen, eine IPv6-Website (z.B. `ipv6.google.com`) von Ihrem Server aus zu pingen.
Schritt 1: IPv6 für den Docker-Daemon aktivieren
Der erste und oft übersehene Schritt ist die Aktivierung von IPv6 auf dem Docker-Daemon selbst. Standardmäßig ist die IPv6-Unterstützung für Docker-Bridge-Netzwerke deaktiviert.
1. **Öffnen oder erstellen Sie die Docker-Daemon-Konfigurationsdatei:**
Die Datei befindet sich normalerweise unter `/etc/docker/daemon.json`. Wenn sie nicht existiert, erstellen Sie sie.
„`bash
sudo nano /etc/docker/daemon.json
„`
2. **Fügen Sie die IPv6-Konfiguration hinzu:**
Fügen Sie den folgenden Inhalt in die Datei ein. Wenn bereits andere Einstellungen vorhanden sind (z.B. `log-opts`), fügen Sie die neuen Einträge einfach dazu, achten Sie auf die korrekte JSON-Syntax (Kommas zwischen Einträgen).
„`json
{
„ipv6”: true,
„fixed-cidr-v6”: „2001:db8:1::/64″
}
„`
**Wichtiger Hinweis zu `fixed-cidr-v6`:**
* `”ipv6″: true`: Aktiviert die IPv6-Unterstützung für Docker-Netzwerke.
* `”fixed-cidr-v6”: „2001:db8:1::/64″`: Dies ist ein Beispiel-IPv6-Subnetz, das Docker *intern* für seine Bridge-Netzwerke verwendet. **Es ist entscheidend, dass dieses Subnetz nicht mit einem bereits in Ihrem Netzwerk verwendeten IPv6-Subnetz kollidiert.** Wählen Sie ein Subnetz aus dem `fd00::/8`-Bereich (Unique Local Addresses) oder einem anderen ungenutzten globalen Präfix, das Sie besitzen. Ein Beispiel für ULA wäre `”fixed-cidr-v6”: „fd00:abcd:efgh:1::/64″`. Ersetzen Sie `abcd:efgh` durch zufällige Hexadezimalwerte, um Kollisionen zu vermeiden.
3. **Speichern und schließen Sie die Datei.**
4. **Starten Sie den Docker-Daemon neu:**
Damit die Änderungen wirksam werden, muss der Docker-Daemon neu gestartet werden.
„`bash
sudo systemctl restart docker
„`
Überprüfen Sie den Status mit `sudo systemctl status docker`, um sicherzustellen, dass er ohne Fehler gestartet wurde.
Schritt 2: Das Docker Compose-File erstellen
Nun erstellen wir die `docker-compose.yml`-Datei, die die AdGuard Home-Instanz und ein spezielles Netzwerk für den Dual-Stack-Betrieb definiert.
1. **Erstellen Sie ein Verzeichnis für AdGuard Home:**
„`bash
mkdir adguardhome
cd adguardhome
„`
2. **Erstellen Sie die `docker-compose.yml`-Datei:**
„`bash
nano docker-compose.yml
„`
3. **Fügen Sie den folgenden Inhalt ein:**
Dies ist das Herzstück Ihrer Konfiguration. Achten Sie auf die Kommentare, die wichtige Details erklären.
„`yaml
version: ‘3.8’
services:
adguardhome:
image: adguard/adguardhome:latest
container_name: adguardhome
restart: unless-stopped
ports:
# DNS-Ports (Standard: 53) – Für Client-Anfragen
# WICHTIG: Port 53 MUSS von Docker an den Host weitergeleitet werden.
# Wenn andere Dienste Port 53 nutzen, müssen Sie diesen ändern (z.B. 5353:53),
# aber dann müssen Ihre Clients auch diesen Port nutzen.
# Für Router-Konfiguration ist 53 am besten.
– „53:53/tcp”
– „53:53/udp”
# DNS-over-HTTPS (DoH), DNS-over-TLS (DoT) etc.
# Standardmäßig bindet AdGuard Home an alle Ports, die konfiguriert werden.
# Wenn Sie diese Dienste nutzen möchten, müssen Sie die Ports entsprechend mappen.
# Beispiel für DoH/DoT:
# – „853:853/tcp” # DoT
# – „443:443/tcp” # DoH (Wenn kein anderer Webserver läuft)
# Web-Interface-Port (Standard: 3000 oder 80/443 nach Konfiguration)
# Diesen Port verwenden Sie, um das AdGuard Home Dashboard zu erreichen.
# Ändern Sie „80” auf einen freien Port, wenn Port 80 bereits belegt ist (z.B. „8080:80”).
– „80:80/tcp” # Für die erste Einrichtung und Web-UI (HTTP)
# Optional: Wenn Sie HTTPS für das Web-UI nutzen möchten (nach initialer Konfiguration)
# – „443:443/tcp” # Für die Web-UI (HTTPS), wenn 80/443 für DoH/DoT nicht genutzt wird
volumes:
# Speichert die Konfigurationsdateien und Logs von AdGuard Home persistent
– ./work:/opt/adguardhome/work
– ./conf:/opt/adguardhome/conf
# Weist den Container unserem benutzerdefinierten Netzwerk zu
networks:
adguard_network:
# Hier weisen wir eine statische IPv4 und IPv6 Adresse zu.
# Dies ist optional, kann aber bei Troubleshooting und
# für konsistente Konfigurationen nützlich sein.
ipv4_address: 172.20.0.10 # Muss innerhalb des ipam.config.subnet liegen
ipv6_address: fd00:abcd:efgh:2::10 # Muss innerhalb des ipam.config.subnet liegen
# Stellen Sie sicher, dass diese IP-Adressen nicht von anderen Containern
# in diesem Netzwerk verwendet werden.
networks:
adguard_network:
driver: bridge
enable_ipv6: true # Wichtig: Aktiviert IPv6 für dieses spezifische Docker-Netzwerk
ipam:
driver: default
config:
# IPv4 Konfiguration für das Docker-Bridge-Netzwerk
# Wählen Sie ein privates Subnetz, das nicht mit Ihrem Heimnetzwerk kollidiert.
– subnet: 172.20.0.0/24
gateway: 172.20.0.1
# IPv6 Konfiguration für das Docker-Bridge-Netzwerk
# WICHTIG: Dieses Subnetz muss zum ‘fixed-cidr-v6’ passen, das Sie in daemon.json gesetzt haben,
# aber es ist ein *anderes* Subnetz innerhalb dieses übergeordneten Bereichs.
# z.B. wenn daemon.json 2001:db8:1::/64 hat, kann das hier 2001:db8:1:2::/80 sein.
# Alternativ und meist einfacher: Nutzen Sie ein ULA Subnetz, das komplett unabhängig ist.
# z.B. fd00:abcd:efgh:2::/64. Das ‘2’ im Subnetz sorgt für Eindeutigkeit.
# Stellen Sie sicher, dass ‘abcd:efgh’ die gleichen sind wie in daemon.json,
# oder wählen Sie ein ganz neues, ungenutztes Präfix.
– subnet: fd00:abcd:efgh:2::/64 # Beispiel-ULA-Subnetz
gateway: fd00:abcd:efgh:2::1 # Gateway für das IPv6-Subnetz
„`
**Wichtige Überlegungen zur `docker-compose.yml`:**
* **Ports:** `53:53/tcp` und `53:53/udp` leiten den DNS-Verkehr von Ihrem Host an den Container weiter. Der Port `80:80/tcp` (oder `8080:80` etc.) ist für das AdGuard Home Web-Interface. Achten Sie darauf, dass diese Ports auf Ihrem Host-System frei sind. Wenn Sie DoH/DoT nutzen möchten, benötigen Sie zusätzlich Port 443 und/oder 853.
* **Volumes:** `./work` und `./conf` sind entscheidend für die Persistenz Ihrer AdGuard Home-Konfiguration und Logs. Diese Verzeichnisse werden relativ zum Speicherort Ihrer `docker-compose.yml`-Datei erstellt.
* **Netzwerk (`adguard_network`):**
* `enable_ipv6: true`: Dies aktiviert IPv6 für *dieses spezifische* Bridge-Netzwerk.
* **`ipam` Konfiguration:** Hier definieren Sie die IPv4- und IPv6-Subnetze und Gateways für das interne Docker-Netzwerk.
* **IPv4:** Wählen Sie ein privates Subnetz (z.B. aus 172.16.0.0/12 oder 10.0.0.0/8), das *nicht* mit Ihrem Heimnetzwerk kollidiert. `172.20.0.0/24` ist ein gutes Beispiel.
* **IPv6:** Dies ist der kritische Teil. Das hier definierte Subnetz (`fd00:abcd:efgh:2::/64`) muss ein Teil des Bereichs sein, den Sie in `daemon.json` mit `fixed-cidr-v6` konfiguriert haben, oder ein völlig unabhängiges ULA-Subnetz. Die Verwendung eines ULA-Subnetzes (`fd00::/8`) ist oft am unkompliziertesten, da es keine Konflikte mit global routbaren IPv6-Präfixen Ihres Internetanbieters verursacht. Achten Sie darauf, ein eindeutiges Subnetz innerhalb des ULA-Bereichs zu wählen (z.B. `fd00:abcd:efgh:2::/64`, wobei `abcd:efgh` zufällig gewählt wird).
* **Statische IP-Adressen:** Die Zuweisung von `ipv4_address` und `ipv6_address` für den AdGuard Home-Container ist optional, aber sehr empfehlenswert für eine stabilere Konfiguration. Stellen Sie sicher, dass diese Adressen innerhalb der jeweiligen Subnetze liegen.
4. **Speichern und schließen Sie die Datei.**
Schritt 3: AdGuard Home starten und erste Einrichtung
Nachdem die Konfigurationsdateien vorbereitet sind, ist es Zeit, AdGuard Home zu starten.
1. **Starten Sie den Container:**
Navigieren Sie in das Verzeichnis, in dem sich Ihre `docker-compose.yml`-Datei befindet, und führen Sie aus:
„`bash
docker-compose up -d
„`
Der `-d`-Parameter sorgt dafür, dass der Container im Hintergrund läuft.
2. **Überprüfen Sie den Status:**
Stellen Sie sicher, dass der Container erfolgreich gestartet wurde:
„`bash
docker-compose ps
docker-compose logs adguardhome
„`
Sie sollten sehen, dass der AdGuard Home-Container läuft und keine offensichtlichen Fehler im Log auftauchen.
3. **Erste Einrichtung über das Web-Interface:**
Öffnen Sie einen Webbrowser und navigieren Sie zur IP-Adresse Ihres Docker-Hosts auf dem konfigurierten Web-Interface-Port (standardmäßig Port 80).
Beispiel: `http://
* Folgen Sie den Anweisungen des Installationsassistenten.
* **Wichtiger Schritt:** Wenn AdGuard Home nach den „Listening interfaces” fragt, lassen Sie es standardmäßig auf alle verfügbaren Interfaces (0.0.0.0 und ::) lauschen. Dies stellt sicher, dass es sowohl IPv4- als auch IPv6-Anfragen innerhalb des Docker-Netzwerks verarbeiten kann.
* Erstellen Sie einen Administrator-Benutzer und ein Passwort.
* Schließen Sie die Einrichtung ab.
Schritt 4: Clients konfigurieren und testen
Nach der Einrichtung ist es an der Zeit, Ihre Geräte oder Ihren Router so zu konfigurieren, dass sie AdGuard Home als DNS-Server nutzen.
1. **DNS-Server auf Ihrem Router einstellen (empfohlen):**
Die einfachste und effektivste Methode ist, AdGuard Home als primären und sekundären DNS-Server in den DHCP-Einstellungen Ihres Routers zu konfigurieren.
* Geben Sie die IPv4-Adresse Ihres Docker-Hosts an.
* Geben Sie die IPv6-Adresse Ihres Docker-Hosts an. Dies ist die globale oder ULA IPv6-Adresse Ihres Host-Systems, nicht die interne Docker-Container-Adresse. Wenn Ihr Host eine öffentliche IPv6-Adresse hat, verwenden Sie diese. Wenn nicht, stellen Sie sicher, dass Ihr Router ULA-Adressen verteilen kann, und verwenden Sie eine ULA-Adresse Ihres Hosts.
* Alle Geräte, die sich über DHCP verbinden, erhalten dann automatisch AdGuard Home als DNS-Server.
2. **Manuelle DNS-Konfiguration auf einzelnen Geräten:**
Alternativ können Sie die DNS-Server auf einzelnen Geräten (Computer, Smartphones) manuell ändern.
* **IPv4-DNS:** Die IPv4-Adresse Ihres Docker-Hosts.
* **IPv6-DNS:** Die IPv6-Adresse Ihres Docker-Hosts.
3. **Testen der DNS-Auflösung:**
Nach der Konfiguration ist ein Test unerlässlich.
* **Auf einem Client-Gerät:**
* Öffnen Sie die Eingabeaufforderung/Terminal.
* Für IPv4: `nslookup example.com
* Für IPv6: `nslookup -query=AAAA example.com
* Alternativ: `dig example.com @
* Besuchen Sie eine bekannte Werbe-Website oder eine Website, die Sie blockiert haben. Überprüfen Sie, ob die Werbung blockiert wird.
* **Im AdGuard Home Dashboard:**
* Navigieren Sie zum Query Log (Anfrageprotokoll).
* Sie sollten DNS-Anfragen von Ihren Clients sehen, die über IPv4 und IPv6 eingehen. Achten Sie auf den Typ der IP-Adresse (A für IPv4, AAAA für IPv6), die AdGuard Home für die Auflösung verwendet.
Fehlerbehebung (Troubleshooting)
Sollten Probleme auftreten, überprüfen Sie folgende Punkte:
* **Firewall:** Stellen Sie sicher, dass die Ports 53 (UDP/TCP), 80 (TCP) und ggf. 443 (TCP) auf Ihrem Docker-Host geöffnet sind. Verwenden Sie `ufw` oder `firewalld` entsprechend Ihrer Distribution.
„`bash
sudo ufw allow 53/udp
sudo ufw allow 53/tcp
sudo ufw allow 80/tcp # Oder den Port, den Sie für die Web-UI konfiguriert haben
sudo ufw reload
„`
* **Docker Daemon IPv6:** Haben Sie den Docker-Daemon nach der Änderung von `daemon.json` neu gestartet? Ist `ipv6: true` korrekt konfiguriert?
* **Netzwerkkollisionen:** Stellen Sie sicher, dass die in `docker-compose.yml` definierten IPv4- und IPv6-Subnetze (im `ipam`-Bereich) nicht mit Ihrem tatsächlichen Heimnetzwerk oder anderen Docker-Netzwerken kollidieren.
* **AdGuard Home Logs:** Überprüfen Sie die Container-Logs (`docker-compose logs adguardhome`) auf Fehlermeldungen.
* **Router-Konfiguration:** Manchmal speichern Router alte DNS-Einstellungen oder verteilen IPv6-DNS-Server nicht korrekt. Überprüfen Sie die DHCPv6-Einstellungen Ihres Routers.
* **DNS-Cache leeren:** Leeren Sie den DNS-Cache auf Ihren Client-Geräten, nachdem Sie die DNS-Server geändert haben.
Best Practices und weitere Tipps
* **Regelmäßige Updates:** Halten Sie sowohl Docker als auch AdGuard Home auf dem neuesten Stand, um von Bugfixes und neuen Funktionen zu profitieren. Ein einfaches `docker-compose pull && docker-compose up -d` aktualisiert AdGuard Home.
* **Backup:** Sichern Sie regelmäßig Ihre `conf`- und `work`-Verzeichnisse von AdGuard Home, um Ihre Einstellungen und Statistiken zu schützen.
* **HTTPS für Web-UI:** Sobald AdGuard Home läuft, können Sie in den Einstellungen die HTTPS-Verwaltung für das Web-Interface aktivieren, um eine verschlüsselte Verbindung zum Dashboard zu gewährleisten. Dies erfordert oft, dass Port 443 auf Ihrem Host verfügbar ist.
* **Filterlisten:** Experimentieren Sie mit verschiedenen Filterlisten in AdGuard Home, um die für Ihre Bedürfnisse beste Balance zwischen Blockierung und Kompatibilität zu finden.
Fazit
Die Konfiguration von AdGuard Home in Docker für den reibungslosen Parallelbetrieb mit IPv4 und IPv6 mag auf den ersten Blick komplex erscheinen, ist aber mit dieser detaillierten Anleitung gut zu meistern. Indem Sie die IPv6-Unterstützung im Docker-Daemon aktivieren und ein dediziertes Docker-Netzwerk mit Dual-Stack-Fähigkeit erstellen, stellen Sie sicher, dass Ihr DNS-Filter in Ihrem gesamten Netzwerk, unabhängig vom verwendeten IP-Protokoll, zuverlässig arbeitet. Sie schaffen damit eine robuste, zukunftsfähige und werbefreie Surfumgebung für alle Ihre Geräte. Genießen Sie die verbesserte Kontrolle und Sicherheit, die Ihnen diese leistungsstarke Kombination bietet!