AdGuard Home im Netzwerk implementieren

Letzte Aktualisierung am 01.03.2023, 13:03:50 Uhr

Vielen Leuten ist das Projekt Pi-hole ein Begriff. Damit verbunden wird primär das Blockieren von Werbung für Produkte. Und zwar für alle Geräte, die den Server auf dem die Applikation läuft, als DNS-Server nutzen.

Ein vergleichsweises relativ unbekanntes Projekt ist AdGuard Home. Die technische Architektur ist die gleiche wie bei Pi-Hole. Der Mehrwert liegt meines Erachtens nach an dem expliziten Familienschutzfilter, keine wesentlichen Abhängigkeiten zu anderen Paketen. Damit verbunden erhöht sich auch die Stabilität/Zuverlässigkeit.

Funktionsumfang

Nachstehend eine Übersicht des Funktionsvergleich:

Die Gegenüberstellung der Funktionen ist zum Zeitpunkt des Schreibens aktuell. Natürlich hängt eure Entscheidung auch davon ab, welche Anforderungen und Wünsche ihr umsetzen dürft/sollt/müsst. Darum soll es auch in diesen Artikel nicht gehen.

Installation

Nachstehend beschreibe ich die Installation von AdGuard Home unter Ubuntu Server 20.04 LTS. Es geht sowohl um die klassische Installation als auch die Nutzung eines Docker Containers.

Es handelt sich dabei um einen virtuellen Server in der Hetzner Cloud. So, dass ich von überall aus von allen Endgeräten AdGuard nutzen kann.

Native Installation

Download der aktuellen Installationsskripts.

curl -sSL https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh

Ausgabe:

[info] Starting AdGuard Home installation script
[info] Channel release
[info] Script called with root privileges
[info] AdGuard Home will be installed to /opt/AdGuardHome
[info] Downloading package from https://static.adguard.com/adguardhome/release/AdGuardHome_linux_amd64.tar.gz -> AdGuardHome_linux_amd64.tar.gz
[info] Unpacking package from AdGuardHome_linux_amd64.tar.gz -> /opt
2020/12/26 11:01:21 [info] Service control action: install
2020/12/26 11:01:22 [info] Service has been started
2020/12/26 11:01:22 [info] Almost ready!
AdGuard Home is successfully installed and will automatically start on boot.
There are a few more things that must be configured before you can use it.
Click on the link below and follow the Installation Wizard steps to finish setup.
2020/12/26 11:01:22 [info] AdGuard Home is available on the following addresses:
2020/12/26 11:01:22 [info] Go to http://127.0.0.1:3000
2020/12/26 11:01:22 [info] Go to http://[::1]:3000
2020/12/26 11:01:22 [info] Go to http://159.69.118.129:3000
2020/12/26 11:01:22 [info] Go to http://[2a01:4f8:c17:dd5d::1]:3000
2020/12/26 11:01:22 [info] Action install has been done successfully on linux-systemd
[info] AdGuard Home is now installed and running.
[info] You can control the service status with the following commands:
[info]   sudo /opt/AdGuardHome/AdGuardHome -s start|stop|restart|status|install|uninstall

Die Installation ist erfolgreich durchgeführt. Das wir vermutlich daran liegen, dass die Applikation aus einer Datei besteht.

Somit gibt es wie bereits eingangs geschrieben keine Abhängigkeiten zu erfüllen und zu installieren. Damit ein Problem weniger…

Konfiguration der Firewall.

ufw allow ssh
ufw allow 53/tcp
ufw allow 53/udp
#ufw allow 67/udp
#ufw allow 68/udp
ufw allow http
ufw allow https
ufw allow 853/tcp
ufw allow 3000/tcp

echo y | ufw enable
ufw status

Natives Update

Leider bringt das Installationsskript keine Updatefunktion mit sich. Auch die Aktualisierung über die Weboberfläche funktioniert in meinem Fall nicht. Daher übernimmt dies folgendes Skript:

cat << \EOF > /opt/AdGuardHome/UpdateAdGuard.sh
wget -O /tmp/AdGuardHome_linux_amd64.tar.gz https://static.adguard.com/adguardhome/release/AdGuardHome_linux_amd64.tar.gz

/opt/AdGuardHome/AdGuardHome -s stop
tar xvf /tmp/AdGuardHome_linux_amd64.tar.gz -C /opt
/opt/AdGuardHome/AdGuardHome -s start

rm /tmp/AdGuardHome_linux_amd64.tar.gz
EOF

Berechtigung für das Skript anpassen:

chmod 700 /opt/AdGuardHome/UpdateAdGuard.sh

Somit kann manuell eine Aktualisierung vorgenommen werden.

Für eine automatische Aktualisierung kann auf Cron zurückgegriffen werden. Hierfür wird das Skript einfach als symbolischen Link verknüpft.

ln -s /opt/AdGuardHome/UpdateAdGuard.sh /etc/cron.daily/

In diesen Fall wird täglich das Skript ausgeführt. Kann natürlich auch wöchentlich oder sogar monatlich ausgeführt werden. Letzteres ist auf Grund der Vielzahl der neuen Versionen von AdGuard nicht zu empfehlen.

SSL-Zertifikat bereitstellen

Standardmäßig wird AdGuard Home ohne SSL Zertifikat ausgeliefert. Damit verbunden sind folgende Funktionen deaktivert:

  • Nutzung der Weboberfläche über HTTPS
  • DNS-over-HTTPS
  • DNS-over-TLS

Seit geraumer Zeit gibt es mit Let’s Encrypt einen Anbieter in dem Bereich, bei dem man kostenlos SSL-Zertifikate abrufen kann. In diesen Szenario kann allerdings nicht wie oft genutzt, auf die HTTP-01 challenge zurückgegriffen werden. Grund dafür ist, dass der Port 80 (HTTP) und Port 443 (HTTPS) bereits bzw. zukünftig durch AdGuard Home verwendet werden. Daher bleibt nur die alternative Methode DNS-01 challenge über.

Die Besonderheit bei DNS-01 challenge ist, dass keine Ports vom Internet auf den Server (Port Forwarding), auf dem Adguard bzw. Certbot installiert sind, geöffnet werden müssen. Zumal viele Internetanschlüsse heutzutage von dem Internet Service Provider (ISP) als DualStack Lite bereitgestellt werden und daher technisch ohne weiteres nicht umsetzbar ist.

Abruf SSL Zertifikat

Ich greife für den Abruf des SSL-Zertifikats auf das Tool certbot zurück.

apt install -y certbot

Damit sind alle Voraussetzungen geschaffen, so dass nun endlich das SSL Zertifikat abgerufen werden kann. Wie immer gilt: Zuerst wird  ein Testlauf durchgeführt, um evtl. (logische) Fehler zu finden.

certbot --manual --preferred-challenges dns certonly \
 --domain adguard01.wydler.eu \
 -m webmaster@wydler.eu \
 --agree-tos \
 --rsa-key-size 4096 \
 --dry-run

Ausgabe:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): hostmaster@wydler.eu

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
Account registered.
Requesting a certificate for adguard01.wydler.eu

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:

_acme-challenge.adguard01.wydler.eu.

with the following value:

Ngyq4BXtLXfVjo80B8OSx6E3zWD1ILnRvaRBsd4LqMo

Before continuing, verify the TXT record has been deployed. Depending on the DNS
provider, this may take some time, from a few seconds to multiple minutes. You can
check if it has finished deploying with aid of online tools, such as the Google
Admin Toolbox: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.adguard01.wydler.eu.
Look for one or more bolded line(s) below the line ';ANSWER'. It should show the
value(s) you've just added.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

Nun ist bei dem Domain Hoster für den FQDN des AdGuard Servers ein TXT Eintrag anzulegen. Ist dies geschehen, kann mit der Taste „Enter“ der Vorgang fortgesetzt werden.

Press Enter to Continue
Successfully received certificate.

Da der Vorgang ohne Probleme durchgelaufen ist, kann der initiale Befehl ohne den Parameter „–dry-run“ nochmals gestartet werden.

Sollte es doch zu Problemen ist, gibt es natürlich ein Logfile „/var/log/letsencrypt/letsencrypt.log“.

Konfiguration der automatischen Erneuerung

Das oben ausgestellte SSL-Zertifikat ist 90 Tage gültig. Standardmäßig erfolgt keine automatische Erneuerung des Zertifikats vor dessen Ablauf. Daher folgende zusätzliche Schritte zu tun.

Zuerst muss die Konfigurationsdatei für das Zertifikat für die Domain angepasst werden.

vi /etc/letsencrypt/renewal/adguard01.wydler.eu.conf

Dort muss der Wert des Parameters „authenticator“ von „manual“ => „standalone“ geändert werden. Änderung speichern und Datei schließen.

Für die Erneuerung des SSL-Zertifikats wird auf Cron zurückgegriffen. Hierzu wird ein separates Skript angelegt:

cat << \EOF > /etc/cron.weekly/certbot.sh
#!/bin/bash
/usr/bin/certbot renew --renew-hook '/opt/AdGuardHome/AdGuardHome -s restart' > /dev/null 2>&1
EOF

Nicht vergessen die Berechtigung anzupassen:

chmod 755 /etc/cron.weekly/certbot.sh

Initiale Einrichtung der Applikation

Unabhängig von der Installationsmethode sind insgesamt 5 Einrichtungsschritte notwendig. Danach ist die AdGuard Home vollständig nutzbar für die Geräte im Netzwerk.

Nach der erfolgreichen Anmeldung wir das Dashboard von AdGuard Home angezeigt.

Das Dashboard wirkt aufgeräumt und damit übersichtlich. Die Navigation befindet sich an der

Administration des AdGuard Home Dienstes

Die Applikation wird während der Installation automatisch als Dienst eingerichtet. Die Verwaltung des Dienstes kann mit folgenden Befehlen erfolgen:

sudo /opt/AdGuardHome/AdGuardHome -s start|stop|restart|status|install|uninstall

Änderung der Upstream DNS-Server

Standardmäßig sind nach der initialen Konfiguration ein DNS-Server hinterlegt.

Wer es so wie ich gerne datenschutzfreundlich habe möchte, kann problemlos andere DNS-Server eintragen. Für diesen Artikel greife ich auf DNS.WATCH zurück.

Ich nutze aktuell folgende DNS-Server:

https://dns.telekom.de/dns-query
https://doh.ffmuc.net/dns-query
tls://dns3.digitalcourage.de

Durch die Nutzung der regulären DNS-Abfragen erfolgen natürlich die DNS Abfragen auch deutlich schneller als in der Standardkonfiguration.

Nicht vergessen die Änderungen explizit über die Schaltfläche „Anwenden“ zu speichern.

SSL-Zertifikat einbinden

Zu guter Letzt muss die Nutzung des SSL-Zertifikats in der Weboberfläche konfiguriert werden.

Bitte nicht vergessen, dass der Pfad natürlich an eure Umgebung bzw. Servernamen anzupassen ist. Die Dateinamen fullchain.pem und privkey.pem ändern sich nicht. Die Änderungen mit Konfiguration speichern übernehmen.

Kindersicherung aktivieren

Gerade mit Home Schooling waren in vergangenen 10 Monate viele Kinder und Jugendliche (alleine) zu Hause. Damit verbunden müssen sich verantwortungsvolle Eltern gezwungenermaßen mit dem Jugendschutz Ihrer Kinder am Tablet/Notebook/Smartphone beschäftigen.

Hierfür sind in AdGuard Home alle notwendigen Mechanismen integriert. Die notwendige Konfiguration erfolgt einfach über das Dashboard unter Einstellungen -> Allgemeine Einstellungen.

Die Einstellung „AdGuard Webservice für Kindersicherung verwenden“ aktivieren. Dazu mit der Maus auf das Kästchen klicken. Das Gleiche noch einmal für „SafeSearch“ wiederholen. Letztes filtert auch entsprechende Suchergebnisse auf den Internetseiten der genannte Internetkonzerne. Die Änderung wird sofort gespeichert und wirksam.

Erfolgt nun der Aufruf einer Internetseite, die als FSK18 kategorisiert wurde, wird im Browser der entsprechende Hinweis angezeigt.

Kindersicherung pro Gerät aktivieren

Im Gegensatz zu Pi-Hole gibt es in AdGuard die Möglichkeit pro Gerät die Konfiguration vorgenommen werden kann. Die Kindersicherung nicht global sondern pro Gerät zu konfigurieren, ist zu Hause durch aus sinnvoller. Denn somit können Eltern mit ihren Smartphone weiterhin uneingeschränkt bewegen.

Zuerst die evtl. obengetätigen Konfiguration für die Kindersicherung rückgängig machen. Danach die Konfiguartion die Einstellungen -> Client Einstellungen aufrufen.

Ein neues Gerät kann über „Client hinzufügen“ angelegt werden.

Neben den Filter Einstellungen können auch diverse Dienste freigeben/gesperrt werden. Dazu auf die Registerkarte „Bestimmte Dienste sperren“ wechseln.

Mit „Speichern“ werden die Änderungen übernommen und wirksam. Änderungen für den Client sind natürlich jederzeit möglich.

Beim Aufruf eines Dienstes (z.B. www.amazon.de) wird im Browser des Clients folgende Fehler ausgegeben. 

In der Weboberfläche von AdGuard unter Anfrageprotokoll kann der gesperrte Dienst kontrolliert werden. In diesen Fall ist der Aufruf von Amazon durch AdGuard geblockt wurde.

Abschlusstest

Nach dem die Änderungen erfolgreich gespeichert wurden, wechselt die Weboberfläche automatisch von HTTP auf HTTPs.

Zum Testen von DNS over HTTPS ist ein aktueller Browser (z.B. Google Chrome, Microsoft Edge oder Mozialle Firefox) notwnedig, der die Technik bereits unterstützt.

Firefox

Hier bin ich so frei und verweise auf die Hilfe von Mozilla.

Microsoft Edge

Google Chrome

Leider keinen zur Hand.

Ergebnis

Die Änderung mit „OK“ speichern. Diese wird auch sofort wirksam. Neuer TAB öffnen und eine beliebige Seite (z.B. de.wikipedia.org) aufrufen. Danach die Weboberfläche von AdGuard und in den Reiter „Anfragenprotokoll“ wechseln. Dort sieht man ua. folgende Einträge:

Viel Spaß beim Ausprobieren. 🙂

Abonnieren
Benachrichtige mich bei
35 Comments
neueste
älteste
Inline Feedbacks
View all comments
AdGuard hochverfügbar aufbauen – Aus der IT – Praxis…
17.08.2022 13:51

[…] Grundkonfiguration von AdGuard habei ich im Artikel AdGuard Home im Netzwerk implementieren für euch […]

Andreas
15.07.2022 11:32

Hallo,
kurze Frage. Ist es möglich wie bei Pi-Hole die Konfiguration über die Weboberfläche zu speichern? (Black und White Listen Client Einstellungen usw)

Danke im Voraus

Jan
13.02.2022 18:46

Hallo,

klasse Artikel zur Adguard! Ich habe es auf meinem Synology NAS über Docker/Portainer installiert. Wie kann ich denn dort das Zertifikat für Lets Encrypt installieren? Die Möglichkeit certbot in einem Container zu installieren geht ja nicht.

Beste Grüße
Jan

Johannes
22.04.2021 08:33

Hallo,

super Artikel zur Adguard:

Gibt es einen Grund warum Du die ufw auch als Docker Container installierst und die Firewall regeln für Adguard dort erstellst?

Kann man nicht einfach die ufw nutzen die auf dem System außerhalb von Docker installiert ist?

Danke & Grüße

Johannes

Johannes
Reply to  Daniel Wydler
03.05.2021 12:51

Ja, aber in Deinem Beispiel hat mean nun 2x ne UFW auf dem System. Die „normale“ und die in Docker…
Und nutzt Du dann die UFW in Docker auch für andere Docker Container? Ich glaube, dass solltest Du noch etwas präzisieren:)

Grüße

Johannes

Johannes
Reply to  Daniel Wydler
19.05.2021 00:34

Hallo Daniel, hab ich das so richtig verstanden: Das Tool ufw docker behebt das Problem, dass Docker die Firewall „aufreißt“ Für meine Standard, nicht Docker Dienste wie z.B. SSH etc trage ich meine Regeln nach wie vor normal in der ufw ein Alle Firewallregeln, die irgendwas mit Docker Containern (auch anderen Programmen und Diensten) zu tun haben, trage ich zukünftig mit ufw-docker allow … ein, nicht über UFW allow…., richtig? Muss man bei der ufw-docker Variante immer noch den Programmnamen dazu mitangeben (z.B,. ufw-docker allow adguardhome…, sprich wenn ich jetzt Wireguard per Docker laufen lassen würde, müsste ich dann die… Weiterlesen »

Jojannes
Reply to  Daniel Wydler
22.06.2021 09:29

Hallo Daniel,

ich hab damit jetzt mal ein bisschen rumgespielt. Zur Firewall mit Docker hab ich aber dann doch noch ne Frage:
Ich habe jetzt den container xy laufen: Ports sind:  0.0.0.0:8998->17442/tcp

Es funktioniert nur, wenn ich in der Firewall ufw-docker allow xyz 17442/tcp freigebe und dann denn Container mit //ip:8998 über den Browser aufrufe.
Das ich 17442 freigeben muss verstehe ich, aber ich dachte das ist der externe Port, sprich ich muss auch mit //ip:17442 aufrufen.

Oder verstehe ich da was falsch.

Grüße

Johannes

Tumtrah
18.04.2021 19:40

Hi zusammen,

danke für die schnelle Hilfe bei meinen ersten beiden Fragen. Nun habe ich noch eine Frage.
Wenn eine Seite gesperrt wird bekomme ich folgende Meldung im Browser „Die Website ist nicht erreichbarmusterseite.com hat die Verbindung abgelehnt.Versuchen Sie Folgendes:

ERR_CONNECTION_REFUSED“

Da dies unschön ist, würde ich gerne die Seiten, die gesperrt werden auf eine eigene Seite weiterleiten wo z.b. drin steht: „Die Seite wird durch Adguard Home geblockt“ oder so ähnlich.

Ist das möglich?

Tumtrah
11.04.2021 20:31

Hallo zusammen,

ich habe eine falsche Seite ausversehen geblockt.
Wie kann ich generell manuell erstellte Filter komplett entfernen?

Martin
11.04.2021 12:04

Edit zu meinem letzten Kommentar:
War wirklich ein einfacher Denkfehler. Jetzt läuft alles 🙂 Vielen Dank für die tolle Anleitung.

Martin
Reply to  Daniel Wydler
11.04.2021 14:50

Hallo Daniel. Gerne. Der Fehler lag aber definitiv auf meiner Seite, kommt trotzdem gleich. Aus Sicht eines Linux-Noobs würde ich vielleicht etwas deutlicher darstellen, wo du Adguard installiert hast (lokal oder auf deinem Webspace bzw. Vserver. Da kommt auch etwas überraschend bzw. ohne weitere Erklärung oder Einführung die Subdomain adguard01 zu wydler.eu ins Spiel). In meinem Fall war das Problem, dass ich das Zertifikat eben für meinen Desec.io-Account angelegt hatte (den ich nur für diesen Zweck erstellt hatte) aber Adguard lokal lief, also auf 192.168.178.X. Als ich Adguard dann jedoch über xxx.dedyn.io aufgerufen hatte, klappte es auch mit dem Zertifikat.… Weiterlesen »

Martin
11.04.2021 11:29

Hallo Daniel, ich schreibe dir mal, weil ich mich für die Verschlüsselungseinstellungen an Deinem Beitrag orientiert habe. Vermutlich habe ich es mir irgendwo zu einfach gemacht oder einen Denkfehler: Ich habe AdGuard Home auf einem Raspi in meinem lokalen Netzwerk installiert. Für das Letsencrypt Zertifikat habe ich den DynDNS-Dienst desec.io verwendet. Einen eigenen Webserver o.ä. habe ich (bislang) nicht Adguard akzeptiert das erstellte Zertifikat. Der Browser zeigt aber „nicht sicher“ an. Das dürfte daran liegen, dass Adguard eben über eine lokale IP-Adresse und nicht dedyn.io aufgerufen wird. Als DNS-Server habe ich analog Deiner Anleitung nur solche mit DoT oder DNS… Weiterlesen »

Lux
Reply to  Martin
27.12.2021 01:47

Mich würde das auch interessieren. 🙂

Tumtrah
11.04.2021 00:39

Hi zusammen,

wie kriege ich es hin, dass ich z.B auf meinen Router mit der Adresse -> fritz.box zugreifen?
Ich habe in der Fritbox als DNS die IP vom Adguard Home eingetragen. Die lokale Namensauflösung funktioniert leider nicht mehr…

Hartmut
05.04.2021 17:34

Hallo Daniel, nachdem mein pihole verstorben war (SD Karte defekt) habe ich mit deiner Anleitung AdGuard installiert und werde mal sehen wie es damit läuft. Allerdins habe ich noch eine Frage
Ich stelle AdGuard im Netzwerk bereit indem ich es als DNS-Server inder Fritzbox eingetragen habe.
Müßte ich, damit alle Anfragen über AdGuard laufen, nicht auch ein IPv6 DNS in der Fritzbox eingetragen werden?

rar9
25.03.2021 13:31

Was muss man anstellen um auch noch Unbound als DNS mit Adguard zu integrieren?

Michael
21.02.2021 12:14

Hi,

interessant. Das mit dem dedizierten Blocken von Domains für Clients, wie z.B. Kinderschutz, funktioniert aber nur wenn der DNS Server auf jedem Gerät explizit eingegeben wurde da ja sonst alle Anfragen immer über den Router kommen. Oder täusche ich mich da?

Christian
Reply to  Daniel Wydler
24.10.2021 15:01

Hallo Zusammen,

ich schließe mich mal hier an. Bei mir läuft AdGuard auf einen vServer von netcup. Alles funktioniert wunderbar.

Dass man allerdings die Clients individuell angezeigt bekommt, funktioniert hingegen nicht. Der DNS Server AdGuard wird über den DHCP Dienst verteilt, aber ich sehe als Anfrage im AdGuard nur einen Client, nämlich die öffentliche IP/Hostname und die ist ja im Heimnetzwerk für alle Clients gleich. Was habe ich hier übersehen?

Vielen Dank.
Christian

Frank
20.02.2021 08:23

Danke für die Anleitung für die Installation von Adguard. Ich komme bei der nativen Installation der Firewallregeln nicht weiter. Im Terminal macht er noch die ufw SSH, aber ufw allow adguardhome 53/tcp kommt diese Fehlermeldung –> ERROR: Need ‚to‘ or ‚from‘ clause Leider find eich dazu nichts. Danke für einen Tipp.