Werbung im Internet nervt. Sie blinkt, verlangsamt Webseiten und verfolgt dich über mehrere Seiten hinweg. Normale Adblocker-Plugins im Browser helfen zwar, aber sie funktionieren nur auf diesem einen Gerät und in diesem einen Browser.

Was wäre, wenn du Werbung und Tracker für alle Geräte in deinem Netzwerk auf einmal blockieren könntest? Genau hier kommt AdGuard Home ins Spiel.

In diesem Guide zeigen wir dir, wie du AdGuard Home installieren kannst, indem du es mit Docker (und der grafischen Oberfläche Portainer) auf deinem eigenen vServer einrichtest. Keine Sorge, wir erklären jeden Schritt!

Was ist AdGuard Home und was brauchst du?

AdGuard Home ist kein Browser-Plugin, sondern ein sogenannter DNS-Filter. Stell es dir wie einen Türsteher für dein Internet vor. Jedes Mal, wenn dein Handy, PC oder Smart-TV eine Webseite aufrufen will (z.B. google.com), fragt es AdGuard Home. AdGuard Home prüft die Anfrage gegen eine „Schwarze Liste“.

Steht die Adresse auf der Liste (z.B. werbe-tracker.com), blockiert AdGuard die Anfrage einfach. Die Werbung wird nie geladen.

Was du für diesen Guide brauchst:

  • Einen Server (z.B. einen vServer mit KVM-Virtualisierung).
  • Eine statische IP-Adresse für deinen Server.
  • Docker und Portainer sollten bereits installiert sein (das ist unsere Basis für fast alle Apps).

Schritt 1: Deinen Server vorbereiten (Der knifflige Port 53)

AdGuard Home muss auf Port 53 lauschen. Das ist der Standard-Port für alle DNS-Anfragen. Das Problem: Viele moderne Linux-Systeme (wie Ubuntu 20.04 oder 22.04) benutzen diesen Port bereits für einen eigenen kleinen Dienst namens systemd-resolved.

Wir müssen dem System also höflich sagen, dass es diesen Port freigeben soll, damit AdGuard Home ihn nutzen kann.

Verbinde dich per SSH mit deinem Server und gib folgende Befehle ein, um den alten Dienst zu stoppen und zu deaktivieren:

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

Jetzt müssen wir deinem Server noch sagen, welchen DNS-Server er zukünftig nutzen soll (denn wir haben seinen eingebauten ja gerade abgeschaltet).

# Öffnet die Konfigurationsdatei in einem einfachen Editor
sudo nano /etc/resolv.conf

Lösche den Inhalt der Datei und füge stattdessen diese Zeilen ein. Wir nutzen hier temporär den bekannten DNS-Server von Cloudflare, damit dein Server weiterhin Webseiten erreichen kann:

# Später, wenn AdGuard läuft, können wir hier 127.0.0.1 eintragen
nameserver 1.1.1.1
nameserver 1.0.0.1

Speichere die Datei (mit STRG + O, dann Enter) und schließe den Editor (mit STRG + X). Super! Port 53 ist jetzt frei.

Schritt 2: AdGuard Home mit Docker (Portainer) installieren

Logge dich in deine Portainer-Weboberfläche ein. Wir erstellen jetzt den AdGuard-Container.

  1. Gehe zu „Containers“ und klicke auf „Add container“.
  2. Name: Gib ihm einen einfachen Namen, z.B. adguard-home.
  3. Image: Gib das offizielle Docker-Image ein: adguard/adguardhome:latest

Wichtig: Die Ordner (Volumes)

Damit AdGuard seine Einstellungen und Listen nicht verliert, wenn du den Container mal neustartest, müssen wir „Volumes“ (also Ordner) anlegen.

Bevor wir in Portainer weitermachen, erstelle kurz die Ordner auf deinem Server per SSH:

sudo mkdir -p /home/AdGuard_work
sudo mkdir -p /home/AdGuard_conf

Zurück in Portainer, scrolle runter zu „Volumes“ und klicke zweimal auf „map additional volume“:

  • Volume 1 (Arbeitsdaten):
    • container: /opt/adguardhome/work
    • host: /home/AdGuard_work
  • Volume 2 (Konfiguration):
    • container: /opt/adguardhome/conf
    • host: /home/AdGuard_conf

Wichtig: Die Ports

Jetzt müssen wir die Ports freigeben. Scrolle zu „Manual network port publishing“ und klicke „publish a new network port“:

  • Port 53 (DNS): host 53 -> container 53 (wähle UDP aus)
  • Port 53 (DNS): Klicke nochmal „publish…“. host 53 -> container 53 (wähle TCP aus)
  • Port 3000 (Web-Interface): host 3000 -> container 3000 (wähle TCP aus). Hinweis: Im Rohtext wurde Port 80 genutzt, aber Port 3000 ist oft sicherer, um Konflikte zu vermeiden. Wir nutzen 3000 für die Ersteinrichtung.

Letzter Schritt: Neustart-Policy

Scrolle ganz nach unten zur „Restart policy“ und wähle „Always“. Das sorgt dafür, dass AdGuard Home automatisch startet, falls dein Server mal neu bootet.

Klicke auf „Deploy the container“.

Schritt 3: Die Ersteinrichtung von AdGuard Home

Dein Container läuft jetzt! Du kannst die Weboberfläche nun über die IP deines Servers und den Port 3000 aufrufen: http://DEINE-SERVER-IP:3000

Dich begrüßt der Einrichtungs-Assistent:

  1. Willkommen: Klicke auf „Los geht’s“.
  2. Web-Interface Port: Der Assistent fragt, auf welchem Port das Web-Interface laufen soll. Lass es bei 80 (oder 3000, wenn du das oben so gewählt hast). Hinweis: Der Rohtext schlägt 80 vor, wir bleiben bei 3000 für dieses Beispiel.
  3. DNS-Server Port: Der Assistent fragt nach dem DNS-Port. Hier muss 53 stehen.
  4. Benutzer anlegen: Erstelle einen Benutzernamen und ein sicheres Passwort für deine AdGuard-Verwaltung.
  5. Fertig! Klicke dich bis zum Dashboard durch.

Um zu testen, ob es funktioniert, kannst du jetzt z.B. in den WLAN-Einstellungen deines Handys oder den Netzwerk-Einstellungen deines PCs die IP-Adresse deines Servers als manuellen DNS-Server eintragen. Wenn du danach noch surfen kannst, funktioniert alles!

Unter „Einstellungen“ -> „Allgemeine Einstellungen“ kannst du noch die „Internetsicherheit“ aktivieren, um auch bekannte Phishing- und Malware-Seiten zu blockieren.

Schritt 4 (Optional): Schöne Domain statt IP-Adresse (Nginx Proxy Manager)

Im Moment erreichst du dein AdGuard-Dashboard nur über http://DEINE-IP:3000. Das ist unschön und unverschlüsselt. Mit dem Nginx Proxy Manager (NPM), den wir auch als Docker-Container installieren, kannst du eine Subdomain (z.B. adguard.deine-domain.de) einrichten – inklusive kostenlosem SSL-Zertifikat (HTTPS).

Der NPM ist ein mächtiges Tool, das wir in einem eigenen Guide genauer behandeln. Hier ist die Kurz-Installation (für Fortgeschrittene):

Gehe in Portainer zu „Stacks“ -> „Add stack“ und füge folgenden Code ein (achte darauf, die Ordner-Pfade data und letsencrypt anzupassen, z.B. /home/NPM/data):

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # Diese Ports sind für das Web-Routing (HTTP/HTTPS)
      - '80:80'
      - '443:443'
      # Dies ist der Admin-Port für NPM selbst
      - '81:81'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

Klicke auf „Deploy the stack“. Du erreichst NPM jetzt unter http://DEINE-IP:81.

Standard-Login (Sofort ändern!):

  • Email: admin@example.com
  • Password: changeme

Im NPM kannst du dann einen „Proxy Host“ erstellen, der adguard.deine-domain.de auf die interne Docker-IP deines AdGuard-Containers (z.B. 172.18.0.5) auf Port 3000 weiterleitet und ein SSL-Zertifikat anfordert.

Schritt 5 (Optional): Das Komplettpaket mit WireGuard-VPN

AdGuard Home filtert jetzt deinen DNS-Traffic. Aber was, wenn du unterwegs im Café-WLAN bist? Dort ist dein Traffic unverschlüsselt und du nutzt nicht deinen AdGuard-Server.

Die Lösung: Ein WireGuard-VPN.

WireGuard baut einen sicheren, verschlüsselten Tunnel von deinem Handy (egal wo du bist) direkt zu deinem Server auf. Der gesamte Internetverkehr deines Handys läuft dann über den Server. Der Bonus: Weil der Traffic über den Server läuft, nutzt er automatisch auch deinen AdGuard Home DNS-Filter!

Du bekommst also Sicherheit (VPN) und Werbe-Blocker (AdGuard) in einem.

Auch WireGuard kannst du einfach als Docker-Stack in Portainer installieren (dieser Stack enthält auch eine Weboberfläche zur Verwaltung):

version: "3"
services:
  wireguard:
    image: linuxserver/wireguard:latest
    container_name: wireguard
    cap_add:
      - NET_ADMIN
    volumes:
      - /home/WireGuard/config:/config # Passe den Pfad an
    ports:
      - "51820:51820/udp" # Standard WireGuard Port
    restart: unless-stopped

  wireguard-ui:
    image: ngoduykhanh/wireguard-ui:latest
    container_name: wireguard-ui
    depends_on:
      - wireguard
    cap_add:
      - NET_ADMIN
    network_mode: service:wireguard # Teilt sich das Netzwerk mit dem WireGuard-Container
    environment:
      - WGUI_USERNAME=admin # Ändere das
      - WGUI_PASSWORD=password # UNBEDINGT ÄNDERN
      - WGUI_MANAGE_START=true
      - WGUI_MANAGE_RESTART=true
    logging:
      driver: json-file
      options:
        max-size: 50m
    volumes:
      - /home/WireGuard/db:/app/db # Passe den Pfad an
      - /home/WireGuard/config:/etc/wireguard
    # Port 5000 ist nur intern im Docker-Netzwerk erreichbar
    # Nutze Nginx Proxy Manager, um Port 5000 per Domain freizugeben

Wichtiger Sicherheitstipp: Mache deinen DNS-Server nicht öffentlich!

Das ist der wichtigste Teil dieses Guides.

Wenn du Port 53, so wie wir es getan haben, auf deinem Server öffnest, ist dein AdGuard-DNS-Server offen für die ganze Welt. Das ist extrem gefährlich!

Hacker scannen das Internet nach offenen DNS-Servern (sogenannten „Open Resolvers“). Sie können deinen Server für Angriffe (DDoS Amplification Attacks) missbrauchen und ihn als Teil eines Botnetzes verwenden.

Du musst das verhindern! Du hast drei Möglichkeiten:

  1. Die Firewall (Empfohlen): Blockiere Port 53 (TCP/UDP) in deiner Server-Firewall (z.B. ufw oder die Firewall deines Hosters) für ALLE, außer für deine eigene Heim-IP-Adresse.
  2. Die VPN-Lösung (Beste): Wenn du Schritt 5 (WireGuard) machst, kannst du Port 53 für die Öffentlichkeit komplett sperren. Du greifst dann nur noch über den sicheren VPN-Tunnel auf deinen DNS-Server zu. Das ist die sicherste Methode.
  3. AdGuard Home Einstellungen: Du kannst in AdGuard Home unter „Einstellungen“ -> „DNS-Einstellungen“ -> „Zugriffseinstellungen“ festlegen, welche IPs deinen DNS-Server nutzen dürfen.

Fazit

Glückwunsch! Du hast gelernt, wie du AdGuard Home installieren und damit deinen eigenen, netzwerkweiten Werbe- und Tracking-Blocker aufsetzt. Du hast gesehen, wie Docker und Portainer die Installation vereinfachen und wie du dein Setup mit NPM und WireGuard auf ein professionelles Level heben kannst.

2 Antworten

  1. Hey 🙂

    Danke für deine Anleitung. Wenn der AdGuard nicht als DHCP Server im Netzwerk fungiert, dann sind meine Geräte nicht über WireGuard im Internet, sondern über die normale IP von meinem Anbieter und „nur“ die DNS Anfragen sind über WireGuard verschlüsselt.

    Frage: Hast du es schon geschafft, dass AdGuard als DNS-Server *und* als DHCP-Server im Container-Modus funktioniert?

    Viele Grüße

    Erik

    1. Hallo Erik 🙂
      Ich arbeite gerade für die nächsten Tutorials auch mit Pi-Hole.
      Dort müsste es so weit ich gehört habe auch DHCP funktionieren.
      Ich muss ich mich genauer damit noch beschäftigen und vielleicht schaffe ich dann auch ein Update veröffentlichen zu können.
      Es gäbe verschiedene Methoden, um z.B. auch manuell einen DHCP aufzusetzen und die DNS Setups darauf zu konfigurieren.
      Ähnlich wie dieser Beitrag nur ohne MAC Bindung eher, aber vielleicht könnte es dir schonmal bei der Idee helfen, um ein Bild davon zu bekommen:
      https://www.server-verstehen.de/home-projekt-wireguard-und-dhcpv4-selbst-gemacht-statisches-routing/

      Aber das finale kommt hierbei noch zwecks AdGuard und Pi-Hole zumindest arbeite ich daran 🙂

      Lieben Gruß Jan 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert