[Tutoria] private DoT mit AGH+NPM und Letsencrypt

  • Warum?

    Ich denke der ein oder andere verwendet in seinem Netzwerk einen eigenen DNS- Filter um unliebige DNS- Abfragen (Werbung, Tracking) zu blocken. Leider funktioniert dies mit neueren Android- Versionen, da diese das Eintragen eines eigenen DNS- Servers bei mobilen Daten nur als DNS-Over-TLS erlauben. Eine Möglichkeit ist sich per VPN ins heimische Netzwerk zu Tunneln und die VPN- Verbindung den heimischen DNS- Server nutzen lässt. Dieses hat aber den Nachteil, daß damit die Downloadrate des Handys durch den Upload der heimischen Verbindung limitiert wird und man so unter umständen trotz 4G/5G nur auf ein- bis zweistellige Downloadraten kommt. Deswegen beschreibe ich hier, wie man seinen lokalen AGH als privaten DNS- Over- TLS verfügbar macht


    Vorraussetzung

    Installierte Adguard Home Instanz
    Installierter Nginx Proxy Manager
    eigene Domain z.B. eine DynDNS von Duckdns


    1. Schritt Über Nginx Reverse Proxy eine Weiterleitung inkl. Zertifikate erstellen
    Hauptsächlich dient der NPM hier eigentlich nur zur Erstellung und erneuerung der Zertifikate. Da kann man auch gerne irgendwas anderes Nutzen. Eine Weiterleitung selbst ist eigentlich nicht notwendig, es macht aber sinn, diese auf die Weboberfläche des AGH zu legen, damit ihr von Unterwegs eurere Regeln bearbeiten könnt. Als Weiterleitungsdomains wählt ihr

    Code
    *.meinedomain.tld
    *.mein-adguard-home.meinedomain.tld


    meinedomain.tld ist die Domain die ihr für die Weiterleitungen nutzt. Bei Duckdns soowas wie "meine-tolle-domain.duckdns.org"
    mein-adguard-home Ist die Subdomain über die ihr Adguard Home von Ausserhalb aufrufen wollt

    Ihr braucht ein Wildcardzertifikat, das ihr braucht um so später den Zugriff auf euren DoT-Server beschränken könnt. Für die Wildcard- Domain müsst ihr zwingend eine DNS- Challenge nutzen. Das geht bei Duckdns recht einfach, dafür braucht ihr nur das Account- Token aus eurem Duckdns- Account. Es kann sein, daß das die erste Domain nicht zwingend eine Wildcard- Domain sein muss und es auch mit

    Code
    mein-adguard.meinedomain.tld

    funktioniert. Das habe ich aber nicht ausprobiert

    2. Schritt Verschlüsselung in Adguard Home
    Habt ihr NGINX Proxy Manager und Adguard Home in einem Docker laufen, so mounted den Letsencrypt Ordner eures NGINX Proxy Managers als Volume in den Adguard Home Container. So das AGH auf die von NPM erstellten Zertifikate zugreifen kann

    Unter Einstellungen-> Verschlüsselungseinstellungen
    konfiguriert ihr jetzt die Verschlüsselung:

    1. Haken bei "Verschlüsselung aktivieren"
    2. Servername: "mein-adguard-home.meinedomain.tld"
    3. Ganz wichtig: KEIN Haken bei "http auf httpsS umleiten"

    Die Ports müssen so bleiben. Zumindest der TLS- Port darf nicht verändert werden (853)

    Unter Zertifikate tragt ihr dann euren gemounteten Pfad zu dem entsprechenden Letsencrypt- Zertifikaten ein. Wichtig ist, daß ihr in das archive- Verzeichnis geht, da AGH nicht den symbolischen Links im live- Ordner folgen kann und ihr nur die Fehlermeldung bekommt, daß die Zertifikatsdatei nicht gültig ist.

    Für die Zertifikatsdatei tragt ihr den vollen Pfad zur "fullchain1.pem" ein und für die Schlüsseldatei den Pfad zur privkey1.pem"

    Wenn die Zertifikate richtig gewählt sind könnt ihr nun speichern

    3. Schritt Client in Adguard Home zur Zugriffskontrolle erstellen
    Unter "Einstellungen->Client erstellen -> Client hinzufügen" erstellt ihr euch für jedes gerät einen Client der Zugriff auf euren DoT Server haben soll
    Ihr wählt einen Namen und einen Bezeichner, mit denen der Client später identifiziert werden soll

    4. Schritt Zugrif auf AGH beschränken
    Unter "Einstellungen-> DNS- Einstellungen" könnt ihr weiter unten auf der Seite unter "Zugriffskontrolle" einschränken, wer auf euren DoT zugreifen kann
    Dort tragt ihr unter "Zugelassene Clients" die Bezeichner eurer in 3. erstellten Clients ein. Nicht vergessen, auch eure Clients im lokalen Netzwerk freizugeben. Da könnt ihr die IP- Adressen benutzen oder euer ganzes Subnetz mit der richtigen CIDR freigeben. So können fast wirklich nur von euch zugelassene Clients auf den DoT Server zugreifen

    5. Portweiterleitung im Router einrichten
    Nun müsst ihr noch eine Portweiterleitung von Port 853 auf den Port 853 der AGH- Instanz in eurem Router einrichten und ihr seit eigentlich fast fertig

    6. Privates DNS im Android- Handy einrichten
    Ihr geht in die Handyeinstellungen-> Netzwerk& Internet -> Privates DNS (meist letzter Punkt)
    Dort wählt ihr "Hostname des privaten DNS- Anbieters"

    und tragt im Feld ein:

    Code
    clientbezeichner.mein-adguard-home.meinedomain.tld

    clientbezeichner ist der Bezeichner den ihr für das Gerät in 3. gewählt hat. ÜÜber diese "fiktive" Subdomain identifiziert AGH wer auf das DoT zugreift. Das ist natürlich nicht 100% Sicher. Gibt aber schon mal den Schutz, daß nicht jeder den DoT- Server nach Lust und Laune benutzen kann. Damit sollten nun alle Einrichtungsschritte erledigt sein und ihr könnt euch über euren eigenen Werbefilter über mobile Daten freuen!

  • 2. Schritt Verschlüsselung in Adguard Home
    Habt ihr NGINX Proxy Manager und Adguard Home in einem Docker laufen, so mounted den Letsencrypt Ordner eures NGINX Proxy Managers als Volume in den Adguard Home Container. So das AGH auf die von NPM erstellten Zertifikate zugreifen kann

    Hi,

    ich habe Adguard Home und NPM auf einem UnRAID-Server als Docker am Laufen.

    Ebenso habe ich eine eigene TLD und habe diese schon im NPM für AGH eingerichtet -> mydns.mytld.de

    Könntest Du den 2. Schritt mal genauer ausführen?

    Weiterhin die Frage, was es mit Port 853 auf sich hat? Bei mir verwendet AGH Port 3000 (zum Einrichten) und Port 53?!?

    Hylli

  • Du hast ja sowohl bei AGH als auch NPM einen Pfad gemountet, wo die daten gespeichert sind. Die liegen meistens unter /mnt/cache/appdata oder /mnt/user/appdata

    Wir gehen jetzt mal davon aus, daß die im Cache liegen. Du hast also die Ordner

    /mnt/cache/appdata/NginxProxyManager und /mnt/cache/appdata/adguard_home


    Im Template von NPM fügst du einen zusätzlichen Pfad hinzu, dem du den Docker zu verfügung stellst und zwar /mnt/cache/appdata/NginxProxyManager/letsencrypt/archive . Darin liegen in Ordnern alle Zertifikate die NPM zur Verfügung stellt und so kann dein Adguard Home diese auch nutzen

  • Werde ich testen, Danke!

    Edit:
    Du meintest denke ich, dass ich dem Template von AGH den Pfad zu /mnt/cache/appdata/NginxProxyManager/letsencrypt/archive hinzufügen soll.
    Das habe ich nun getan, und so hat es auch funktioniert!

    Ich war da schon auf dem richtigen Weg, nur hatte ich den Pfad zu den "Live-Keys" also /mnt/user/appdata/NginxProxyManager/letsencrypt/live verwendet, und damit funktionierte es nicht.


    ---

    Jetzt hänge ich allerdings noch mit Punkt 1 fest, was die Weiterleitungen sowie das Wildcard-Zertifikat betrifft.
    Wie hast Du das in NPM bzw. zusammen mit der eigenen TLD sowie Duckdns bewerkstelligt? Was muss da noch in NPM alles getan werden?


    Hylli

    Einmal editiert, zuletzt von hylli (7. September 2022 um 18:44)

  • Eigentlich weiß ich wie ich Proxy-Hosts anlege, es laufen bei mir schon diverse!

    Ich habe DuckDNS und habe auch meinen Token dafür. Ebenso habe ich eine eigene TLD und leite per Proxy-Hosts diverse Subdomains auf Dienste wie Nextcloud, Emby, ... etc. auf meinen UnRAID Server um.

    Soweit ist mir das Prinzip schon logisch!

    Ich tue mich aktuell nur schwer mit dem Thema Wildcard(-Zertifikate)?!?

    Bzw. ich kann doch nicht einfach eine Proxy-Host für "*.meinetld.de" bzw. "*.meindns.meinetld.de" anlegen und einfach auf AGH weiterleiten, oder sehe ich das falsch?

    Mein gestriger Versuch mal nur (!!!) ein Wildcard-Zertifikat für *.meinetld.de über NPM anzulegen, scheiterte auf jeden Fall.

    Hylli

  • Ich hatte bereits eine Subdomain meindns.meinetld.de auf AdGuard Home als Proxy Host eingerichtet.
    Gestern versuchte ich diese zu ändern mit einer DNS-Challenge und DuckDNS mit entsprechendem Token.
    Ich erhielt hier durch NPM nur einen "Internal Error".

    Dann testete ich "neu" eine SubSubDomain meingeraet.meindns.meinetld.dem, aber auch hier nur "Internal Error".

    Wenn ich versuche in NPM über SSL-Zertifikate ein neues Zertifikat mit DNS-Challenge anzulegen, erhalte ich eine Fehlermeldung von certbot.

    Hylli

  • Ich bin mir nicht sicher, ob das der richtige Ansatz für mich ist?!?
    Ich nutze DuckDNS eigentlich nur als meinen dynamischen DNS-Dienst.

    Ich selbst habe eine eigene TLD bei Netcup, und nutze hier Subdomains für diverse Dienste auf meinem UnRAID NAS, z.B.

    • cloud.meinedomain.de für meine Nextcloud
    • emby.meinedomain.de für meinen Emby-Server
    • wp.meinedomain.de für meine WordPress-Testumgebung
    • wiki.meinedomain.de für mein Wiki (Bookstack)
    • usw. usw. usw.

    Hierzu erstelle ich im CCP von Netcup für jede Subdomain einen CNAME-Eintrag, welcher auf die DuckDNS-Adresse verweist.

    Interessanterweise kann man im NPM eine DNS-Challenge auch mit Netcup nutzen, hierzu habe ich mir bei Netcup ein API-Passwort und einen API-Key generiert:
    https://www.netcup-wiki.de/wiki/CCP_API#B…ts_und_API-Keys

    Gemäß NPM, müssen folgende Daten für eine DNS-Challenge mit Netcup eingetragen werden:

    Zitat

    dns_netcup_customer_id = 123456
    dns_netcup_api_key = 0123456789abcdef0123456789abcdef01234567
    dns_netcup_api_password = abcdef0123456789abcdef01234567abcdef0123


    Mit meiner Kundennummer bei Netcup, dem zuvor generierten API-Passwort und API-Key, wollte ich so ein Wildcard-Zertifikat auf die bestende Subdomain "meindns.meinedomain.de" erstellen, aber auch das schlägt fehl.

    Nutze ich eine neue Subdomain, so erhalte ich beim Versuch einen neuen Proxy Host mit DNS-Challenge zu erstellen nur einen "Internal Error".

    Hylli

  • Zum einen, weil ich es gerne über "meine" eigene Domain laufen lassen wollte, und zum anderen:
    Weil da auch etwas schief läuft?!?

    Vorgabe:
    Ich habe mir bei DuckDNS eine weitere URL hinterlegt, die ich dann auch im Docker von DuckDNS in UnRAID hinterlegt habe!

    Beispielhaft:

    Zitat

    meindnsxxx.duckdns.org


    Ich erstelle gemäß verlinkter Anleitung...
    https://www.edvpfau.de/wildcard-zerti…kdns-erstellen/
    ...den TXT Record für *.meindnsxxx.duckdns.org.

    Zumindest bin ich der Meinung, es gemäß dieser Anleitung richtig zu machen!?!?

    Wenn ich die Befehle jedoch nacheinander eingebe, so erscheint bei Punkt 3 bei mir folgendes:

    Leider wird in der Anleitung nicht dargestellt, wie das Ergebnis korrekterweise lauten muss?!?

    Für mich deutet "Datei oder Verzeichnis nicht gefunden" eher auf einen Fehler hin?!?

    Ich kann das zwar ignorieren und kann sogar über NPM ein Whitecard-Zertifikat für

    Zitat

    meindnsxxx.duckdns.org
    *.meindnsxxx.duckdns.org

    per DNS-Challenge anfordern, soweit ist alles grün!

    Dann steige ich in Adguard Home ein, wechsle auf Einstellungen -> Verschlüsselungseinstellungen und nehme als neue Serveradresse:

    Zitat

    meindnsxxx.duckdns.org

    Zum Testen habe ich die Inhalte der fullchain.pem und privkey.pem unter Zertifikate bzw. Privater Schlüssel eingefügt.

    Der private Schlüssel wird auch akzeptiert, jedoch nicht das Zertifikat.

    Hier erhalte ich die Fehlermeldung:

    Zitat

    Your certificate does not verify: x509: certificate is valid for *.meindnsxxx.duckdns.org, not meindnsxxx.duckdns.org


    Und nun bin ich wieder genauso schlau wie vorher.

    Hylli

  • Der Fehler scheint mir nicht an NPM zu liegen, sondern aktuell in AGH.

    Screenshots liefere ich aber gerne noch nach.

    Edit:
    OK, vielleicht saß der Fehler mal wieder vor dem PC. Ich melde mich, wenn ich weitere Erkenntnisse habe.

    Hylli

    Einmal editiert, zuletzt von hylli (12. September 2022 um 08:51)

  • Hat etwas gedauert, aber ich bin da noch eine Rückmeldung schuldig. ;)

    Ich hatte während meiner ganzen Versuche diverse Denkfehler, weshalb es etwas länger dauerte, bis es dann endgültig funktionierte!

    Ich beschränke mich auf die wesentlichen zwei Fehler!

    Fehler 1:
    Ich war der Meinung, dass ich es mit meiner Domain bei Netcup hinbekommen würde, wie gehabt unter Verwendung meiner DuckDNS-Adresse als dynamischer IP-Adresse für mein NAS.

    Der Grund war, weil ich unter Punkt 1 eben auch was von meinedomain.tld gelesen hatte, und ich bereits diverse Subdomains für einige Dienste auf meinem NAS nutze.

    Zudem scheint es so, dass Wildcard-Zertifikate mit Subdomains bei Netcup wohl nicht oder nicht so einfach erstellt/genutzt werden können.

    Fehler 2:
    Ich wollte das durch diese Anleitung...
    https://www.edvpfau.de/wildcard-zerti…kdns-erstellen/
    ...erzeugte Zertifikat bzw. den erzeugten Schlüssel bei AGH hinterlegen.

    Das war natürlich falsch, denn ich musste natürlich die verwenden, die dann durch den Nginx Proxy Manager erzeugt wurden.

    ---

    Anschließend funktionierte das Private DNS auf Anhieb, doch dann hatte ich wieder ein paar negative Erfahrungen gemacht. ;)

    Als ich am nächsten Tag dann mit LTE bei eingeschaltetem Wireguard VPN unterwegs war, ging natürlich nichts mehr. Ich habe es mit Peer-Zugriffs-Typ "Tunnel Fernzugang" bzw. mit "Fernzugang zum LAN" getestet.

    Erst als ich verschiedene Varianten durchspielte, merkte ich eben, dass es mit VPN nicht funktioniert.

    Hätte ich mal den ersten Absatz von Dir @Adromir mal genauer durchgelesen. ;)

    Hylli

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!