Der perfekte DNS-Resolver im Lan

  • Ich beziehe mich in diesem Tutorial zu einem großen Teil auf das hervoragende Tutorial zu Pi-Hole und Unbound von einem User aus dem Kuketz-Forum (Pi-Hole-Unbound Tutorial - schaut da defintiv mal vorbei) und falls ihr wissen wollt, warum man Pi-Hole und Unbound nutzen sollte.



    Kurze Erklärung zu Lancache:

    Lancache ist eine wunderbare tolle Sache. Lancache ist in der Lage diverse Dienste bzw. Downloads zwischenzuspeichern um diese später schneller zur Verfügung zu stellen. Heißt ihr könnt bei Steam etwas herunterladen, der Download wird beim ersten mal gleichzeitig zum download auf eurem Server zwischengespeichert. Beim zweiten mal wird nicht aus dem Internet geladen, sondern von eben erwähntem Server, was die Downloadrate nur noch auf die Geschwindigkeit der Platten/SSD´s auf denen der Cache liegt und eurer Netzwerkgeschwindigkeit begrenzt (theoretisch sind hier also in einem Standartnetzwerk 125 Megabyte/Sekunde im download möglich).

    Ich glaube ich muss niemandem erzählen wie angenehm es wäre Warzone statt in Stunden, in 30 Minuten herunterzuladen (mal etwas übertrieben)



    Dieses Tutorial setzt einen Raspberry Pi und einen Docker-fähigen Server, ersatzweiße kann man allerdings auch (ohne Gewähr) auf den Pi verzichten.



    Zunächst mal was wird in diesem Tutorial behandel:

    - Installation von Pi-Hole auf einem Raspberry Pi

    - Installation von Unbound auf selbigem Raspberry Pi

    - Installation von Lancache-Monolithic als Docker image auf einem Docker-fähigem Server (vorzugsweiße Unraid, sonstige Linux-distros gehen auch; Windows ist soweit nicht direkt möglich)




    Wir beginnen also mit unserem Raspberry Pi. Dieser sollte je nach Hausstand entsprechend dimensioniert sein, einen Pi Zero kann ich allerdings nicht empfehlen. Am besten geeignet ist ein Raspberry Pi 3 oder besser.

    Ich setze hier mal ein eingerichtetes Raspberry Pi OS vorraus, sonstige Distros sind auch nutzbar. Hier wieder der Verweis auf das hervoragende Tutorial welches oben verlinkt ist, zum Einrichten des Pi´s sowie erhöhen der Sicherheit durch einige Tweaks.



    Pi-Hole

    Pi-Hole lässt sich sehr einfach mit diesem Command installiere:

    Code
    $ curl -sSL https://install.pi-hole.net | bash


    Dieses Script lädt die aktuellsten Dateien für Pi-Hole herunter und installiert diese auf dem Pi.

    Sobald das erledigt ist, müssen wir noch ein Passwort für Pi-Hole festlegen über den Command:

    Code
    $ pihole -a -p

    Nun kann man auf die Weboberfläche des Pi-Holes zugreifen über (IP_Des_Pi)/admin und sich dort mit dem gerade gesetzem Passwort anmelden.


    Man könnte jetzt direkt anfangen, diverse Blocklisten hinzuzufügen wenn man das denn möchte.

    Einige Gute findet man z.B hier RPiList oder hier Firebog



    Unbound

    Um noch mehr unabhängigkeit zu erreichen, installieren wir jetzt noch Unbound. Das geht inzwischen super einfach über den Command:

    Code
    $ sudo apt update
    $ sudo apt install unbound

    An dieser Stelle bejahen wir natürlich, dass wir Unbound wirklich installieren wollen.

    Leider ist Unbound so noch nicht nutzbar, weil die Dateien für die Root-DNS-Server fehlen und Unbound aktuell noch auf Port 53 konfiguriert ist, was vom Pi-Hole belegt wird, beides ändern wir jetzt.


    Zunächst zu den Root-Servern. Um diese in Unbound zu hinterlegen, müssen wir die root.hints-datei mit dem command

    Code
    $ wget -O root.hints https://www.internic.net/domain/named.root

    herunterladen, mit dem command

    Code
    $ sudo chown unbound:unbound root.hints

    für die Datei als Besitzer Unbound hinterlegen und zu guter letzt mit dem command

    Code
    $ sudo mv root.hints /var/lib/unbound/

    in den korrekten Pfad verschieben.

    Wenn alles soweit ist, überprüfen wir noch die von Pi-Hole bereitgestellte Unbound Konfigurationsdatei:

    Code
    $ sudoedit /etc/unbound/unbound.conf.d/pi-hole.conf

    Diese sollte wie folgt aussehen (der Port ist wichtig):

    Als letzten Schritt für Unbound starten wir dieses neu und testen Unbound:

    $ sudo systemctl restart unbound $ dig sigfail.verteiltesysteme.net @127.0.0.1 -p 5335 $ dig sigok.verteiltesysteme.net @127.0.0.1 -p 5335

    Die erste dig-anfrage sollte status: SERVFAIL" und die zweite "status: NOERROR" zurückgeben, wenn dem so ist, läuft Unbound ohne Probleme.


    Um Unbound jetzt im Pi-Hole zu hinterlegen müssen wir jetzt noch im Pi-Hole Webinterface unter Settings --> DNS alle haken bei bisher gesetzten DNS-Servern entfernen und dann bei "Custom 1" das folgende eintragen:

    Code
    127.0.0.1#5335

    Man könnte nun noch den "HYPERLOCAL & automatische Update" part aus dem oben verlinktem Tutorial durchgehen, um die root.hints datei zu aktualisieren bzw regelmäßig auf Updates zu überprüfen, das werde ich jetzt hier allerdings nicht weiter durchgehen.



    Lancache

    Wer Unraid nutzt, hat es jetzt hier etwas einfacher, da dieses Tutorial dafür ausgelegt ist. Für alle anderen Linux-Distros sollte aber etwa das selbe gelten/funktionieren.


    Zu aller erst brauchen wir ein MacVlan um den Docker-Container an unser Internes Netzwerk zu bridgen. Unraid-User können einfach unter Settings-->Network Settings-->Enable Bridging auf Yes stellen.


    Alle andere müssen folgendes im Terminal eingeben:

    Code
    $ docker network create -d macvlan -o parent=eth0 \
      --subnet 192.168.1.0/24 \
      --gateway 192.168.1.1 \
      --aux-address 'host=192.168.1.223' \
      mynet

    Bei "subnet" wir das subnet des eigenen Netzwerkes angegeben (beginnt in den meisten fällen mit 192.168. und endet meistens mit /24

    Bei "gateway" wird die IP des Routers angegeben

    Bei "parent" gibt man den "Namen" des Netzwerkadapters ein der mit dem Netzwerk verbunden will (meistens eth0; kann mit ifconfig herausgefunden werden)

    Die letzte Zeile ist der Name des MacVlan-Networks, hier kann man jeden X-Beliebigen Namen angeben.


    Nun können wir dem Docker-Container eine IP aus unserem Internen Netzwerk geben.


    Den Docker-Container den wir jetzt brauchen ist "Lancachenet/Monolithic". Unraid nutzer haben es hier auch wieder recht einfach und können im Community-Apps-Store nach "Monolithic" suchen und den von lancachenet einrichten.

    Beim Einrichten müssen wir als Network Type "br0" einstellen und unter "Fixed IP address" eine Feste IP-Adresse hinterlegen aus unserem internen Netzwerk-Bereich (z.B. 192.168.1.2).

    Danach müssen wir noch zwei volumes hinterlegen. Einmal den Container Path "/data/cache" und dann noch "/data/logs". Für beide einfach einen Ordner auf eurem Unraid setzen (z.B. /mnt/user/lancache/cache und /mnt/user/lancache/logs).


    Alle anderen können diesen Command eingeben:

    Code
    $ docker run \
      --restart unless-stopped \
      --name lancache \
      -v /cache/data:/mnt/user/lancache/cache \
      -v /cache/logs:/mnt/user/lancache/logs \
      lancachenet/monolithic:latest

    Man könnte allerdings den Container auch noch Tweaken. Hierbei gibt es diverse Möglichkeiten:

    - Größe des Caches ändern: Eine Environment Variable mit der Bezeichnung "CACHE_DISK_SIZE" hinterlegen und eine Zahl in Megabyte hinterlegen mit "m" am ende (z.B. 2000000m für 2 Terabyte cache) (default 1000000m)

    - Größe des Caches im Memory ändern: Eine Environment Variable mit der Bezeichnung "CACHE_MEM_SIZE" hinterlegen und eine Zahl in Megabyte hinterlegen mit "m" am ende (z.B. 1000m für 1 Gigabyte Memory Cache) (default 500m) (der Memory Cache ist nur zum hinterlegen des nutzbares Arbeitsspeichers für den NGINX cache manager process; laut offiziellen docs hält 1 Megabyte etwa 8000 Cache Einträge, bei 1MB slice-size sind das also 1MB CACHE_MEM_SIZE etwa 8GB CACHE_DISK_SIZE, 500MB reichen also für etwa 4TB)

    - Slice Size anpassen: Hier verweise ich einfach mal auf die offiziellen Docs Tweaking Slice Size. Das Ändern der Slice Size macht euren bisherigen Cache invalid und kann zu Problemen führen, nutzt das also nur, wenn ihr wisst, was ihr tut.


    Wenn ihr alles richtig gemacht habt und den Container so eingestellt habt wie ihr wollt, könnt ihr ihn starten.


    Nun laufen soweit alle Services die wir brauchen und Pi-Hole läuft ja bereits mit Unbound, nun müssen wir nurnoch Lancache integrieren.


    Wenn ihr Lancache nun in Pi-Hole und Lancache einbinden wollt ladet ihr euch zuerst auf den Raspberry Pi die source von hier Cache-Domains herunter (bitte nicht vorher auf einem Windows-Pc speichern und vorallem nicht auf einem Windows-Pc diese Dateien öffnen, das kann zu massiven Probleme führen, ich nenne hier für die Kenner "CRLF")


    Wenn ihr alles auf dem Pi habt, öffnet ihr den scripts Ordner und kopiert euch die config.example.json als config.json in das gleiche Verzeichnis nochmal herein und öffnet sie.

    Diese Datei sollte etwa so aussehen:

    Unter "ips" löscht ihr alles raus und lasst nur die letzte Zeile (generic) stehen und ändert die IP-Adresse auf die des Lancaches um (Beispiel war 192.168.1.2). Im zweiten Bereich der Config müsst ihr die Services hinterlegen, die ihr für das Lancache nutzen wollt, die Bezeichnungen für die Services findet ihr in der cache_domains.json einen Ordner weiter oben wo ihr gerade seid. In die zweiten "" hinter : schreibt ihr überall "generic" rein.


    Nun müsst ihr das dnsmasq script ausführen mit dem Command:

    Code
    $ bash create-dnsmasq.sh

    Ihr hab nach dem ausführen einen output Ordner innerhalb eures scripts Ordner. In diesem findet ihr eine diverse *.hosts Dateien, die ihr z.B. nach /etc/pihole/lancache verschiebt. Danach habt ihr noch eine lancache.conf Datei, diese müsst ihr öffnen und die Pfad für die *.hosts Dateien anpassen zu dem Pfad, wo ihr die hosts Dateien hinterlegt habt. Anschließend müsst ihr die Datei noch nach /etc/dnsmasq.d/ verschieben.


    Zu guter letzt müsst ihr noch Dnsmasq neustarten oder gleich den kompletten Raspberry Pi.


    So gesehen seid ihr jetzt fertig und könnt die IP-Adresse eures Pi-Holes als DNS-Server in eurem PC oder direkt im Router für das gesamte Netzwerk hinterlegen. Ich würde hierbei noch empfehlen den DNS-Cache eures PC´s zu clearen und danach Lancache-Tester in einem Privaten Tab zu öffnen um zu testen, ob euer Lancache ordnungsgemäß funktioniert (nicht wundern wenn manche Services Gelb sind bzw nicht alle IP´s korrekt aufgelöst wurden, das kann passieren und ist kein Problem)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!