2 pi-holes als DNS mit UXG-Lite

Es gibt 16 Antworten in diesem Thema, welches 6.861 mal aufgerufen wurde. Der letzte Beitrag () ist von DKeppi.

  • Hallo Zusammen,

    bin ganz neu hier, Unifi Nutzer seit ca. 6 Jahren und aus Wien/Österreich.

    Starte hier mal gleich mit einem Thema zu meinem neuen UXG-Lite als Ersatz für das alte USG-3P :winking_face:

    Ich habe 2 PiHoles am Laufen welche ich über 2 Container (https://hub.docker.com/r/shirom/pihole-sync) miteinander abgleiche.
    Nun möchte ich dass sämtlicher DNS Verkehr in meinem Netz nur über die beiden PiHoles läuft.


    Dazu habe ich in den DHCP Einstellungen des Heim & VPN Netzwerks als DNS Server meine beiden PiHole IPs angegeben.
    Soweit so gut :smiling_face:

    Zusätzlich hatte ich in meinem alten USG immer diese config.gateway.json, welche ja nun mit dem UXG-Lite nicht mehr funktioniert:


    Ich habe diverse Foren durchforstet und bin schlussendlich auf das hier gestoßen:
    https://www.reddit.com/r/pihol…ck_in_pihole_unbound_for/

    Habe somit folgende Regeln angelegt (PiHole's ist eine Gruppe mit meinen beiden IPs 192.168.178.5 und 192.168.178.6, HEIM & VPN Netzwerk eine Gruppe mit den ensprechenden CIDR notations der beiden Netze & DNS Port's eine Gruppe mit den Ports 53 und 853)



    Kann zumindest sagen das ein manueller DNS mit zB. 1.1.1.1 geblockt, aber eben auch nicht umgeleitet wird zu den PiHole's :neutral_face:


    REICHT DAS ALSO, SODASS ICH WIEDER DASSELBE HABE WIE ZUVOR UND SÄMTLICHER DNS VERKEHR ÜBER DIE PIHOLE'S LÄUFT

    ODER FEHLT ETWAS / IST ETWAS ZUVIEL? :thinking_face:


    Danke für eure Hilfe.

    Grüße
    DKeppi

    3 Mal editiert, zuletzt von DKeppi ()

  • Scheinbar ist sowas hier die einzige Lösung den DNS Verkehr aufs PiHole umzuleiten
    https://schinckel.net/2020/07/…s-traffic-to-the-pi.hole/

    Allerdings bei jedem Update/Reboot der UXG-Lite wieder weg...


    Was ich mich nun allerdings noch frage, wie müsste der Befehl bei mir aussehen, da ich als destination ja 2 IPs will
    Wäre das dann so zu lösen, vielleicht kann da ja jemand helfen?


    Code
    PiHole2 tcp/udp
    iptables -t nat -A PREROUTING -i br0 ! -s 192.168.178.5,192.168.178.6 -p tcp --dport 53 -j DNAT --to 192.168.178.5
    iptables -t nat -A PREROUTING -i br0 ! -s 192.168.178.5,192.168.178.6 -p udp --dport 53 -j DNAT --to 192.168.178.5
    
    # PiHole2 tcp/udp
    iptables -t nat -A PREROUTING -i br0 ! -s 192.168.178.5,192.168.178.6 -p tcp --dport 53 -j DNAT --to 192.168.178.6
    iptables -t nat -A PREROUTING -i br0 ! -s 192.168.178.5,192.168.178.6 -p udp --dport 53 -j DNAT --to 192.168.178.6
    
    iptables -t nat -A POSTROUTING -j MASQUERADE

    Einmal editiert, zuletzt von razor () aus folgendem Grund: Ein Beitrag von DKeppi mit diesem Beitrag zusammengefügt.

  • Moin,

    ich in meinem alten USG immer diese config.gateway.json,

    Aber nicht mit was du da einkopiert hast, das ist nichtmal valides JSON


    ! -s 192.168.178.5,192.168.178.6

    Wird nicht gehen, die Negation (also das !) dürfte keine IP Liste zulassen sondern nur einzelne Werte / Netze

    Da is wohl ein IPset fällig das dann referenziert wird.


    wie müsste der Befehl bei mir aussehen, da ich als destination ja 2 IPs will
    Wäre das dann so zu lösen, vielleicht kann da ja jemand helfen?

    Grundlagen von IPTables & ipset lernen und Verstehen. Sonst hat das kein sinn und du kopierst weiterhin

    irgendwelche Zweiteiler in dein System und wunders sich dann warum nichts mehr geht.


    Iptables ketten werden solange abgearbeitet bis eine zutrifft. Es wird hier also

    niemals der zweite Satz überhaupt in frage kommen.


    für ein „Loadbalancing" braucht du das „statistic“ Modul von IPtables. damit gehts

    und du kannst gesichtet oder per Zufall dinge aufteilen.

    Google mal nach Loadbalancing und iptables.. da gibt es hundert Beispiele...


    Allerdings bei jedem Update/Reboot der UXG-Lite wieder weg...

    Wie schaut den dein Startscript aus ? oder denkst du das die regeln sich automatisch

    irgendwo einbrennen ?



    Aber so ganz allgemein, warum der Stress und den Clients nicht gleich den richtigen DNS

    geben ? Du versuchst außerdem was am unifi System vorbei zu bauen. Die Reglen werden als „letztes“

    hinzugefügt also auch erst nach dem Unifi regeln abgearbeitet hat. Wenn das schon was drinnen steht

    was zutreffen könnte werden die auch niemals nicht erreicht.


    Das Masquerading.. Wozu ? Warum sollten die anfragen dann ausschauen als ob sie von Router kommen ?

    Warum eine Maskierung ohne Interface, Richtung und Ziel? Das wird dann jedes Vlan mit jedem Vlan maskiert

    und alles wird so aussehen als wenn es von der Router IP kommt.

    Zum Glück werden die WAN-IP schon vorher von UniFi angefangen, sonst wär' auch Essig mit Internet...

  • ich versteh schon was DKeppi will aber ich scheitere auch regelmäßig daran das fest reinzubekommen in mein Unifi Setup.


    Es geht vor allem um die Geräte vor allem im IoT Bereich die häufig Hardcoded DNS Einträge haben und somit trotz des PiHoles "nach Hause telefonieren".

    Fernseher von Samsung waren da ein gutes Beispiel und alle möglichen China Gadgets, denen kommt man auch nur über Netzwerksniffing auf die Spur.

    Ich packe die daher mittlerweile in ein eigenes VLAN bei dem ich nahezu alles verbiete.


    Ein paar Ideen bekommt man mit den Suchbegriffen "Redirect DNS" bzw. "Destination NAT" bei den gängigen Suchmaschinen aber eine vernünftige Lösung mit Fallback DNS habe ich auch noch nicht gefunden

  • Aber nicht mit was du da einkopiert hast, das ist nichtmal valides JSON

    Ja sorry das fehlt ein { am Anfang. Mein Fehler :winking_face:


    Wird nicht gehen, die Negation (also das !) dürfte keine IP Liste zulassen sondern nur einzelne Werte / Netze

    Da is wohl ein IPset fällig das dann referenziert wird.

    OK verstehe, so eine Liste geht also nur im positiven Fall...schade!


    Grundlagen von IPTables & ipset lernen und Verstehen. Sonst hat das kein sinn und du kopierst weiterhin

    irgendwelche Zweiteiler in dein System und wunders sich dann warum nichts mehr geht......

    Ich will wenns geht jetzt keine Ausbildung zum Netzwerktechniker machen, sondern eigentlich nur Unterstützung bei meinem speziellen Fall :winking_face:
    Abgesehen davon bin ich eher der GUI Typ und halte mich bei Dingen die über die Shell gemacht werden meistens nach Wikis oder anderen Hilfestellungen. Nachdem das so über die GUI nicht klappt muss ich diesen Weg gehen...

    Wie schaut den dein Startscript aus ? oder denkst du das die regeln sich automatisch

    irgendwo einbrennen ?

    Das wäre dann der nächste Schritt, alles zu seiner Zeit! :winking_face:


    Aber so ganz allgemein, warum der Stress und den Clients nicht gleich den richtigen DNS

    geben ?

    Ich verteile die beiden DNS IPs über den DHCP an alle Geräte. Trotzdem gibt es gerne mal Hardware, die das ignoriert und somit meine PiHoles umgeht. Aktuell werden diese Anfragen blockiert, ich würde sie aber gerne an die PiHoles weiterleiten...

    Das Masquerading.. Wozu ?

    Wie gesagt, ich habe mich da einer Quelle bedient -> https://github.com/stevejenkin…-dns-to-dual-piholes.json
    Ich ging davon aus, dass dieses Masquerading nowendig sein!


    Hab jetzt noch diesen Beitrag gefunden -> DNS-Redirect auf pi-hole
    Dort ist auch eine externe Seite verlinkt die ein Masquerade mit einer IP range macht, ist wohl eher das was es braucht denk ich.

    Trotzdem frag ich mich weiterhin wie das mit mehreren PiHoles funktionieren soll.
    Momentan fällt mir nur ein, keepalived auf beiden zu installieren, so hat man 1 Virtuelle IP die dann auf beide PiHoles verteilt.
    Ist aber auch schwer umzusetzen mit PiHole in Docker Containern - ein Update und alles ist wieder weg :frowning_face:

    Einmal editiert, zuletzt von razor () aus folgendem Grund: Ein Beitrag von DKeppi mit diesem Beitrag zusammengefügt.

  • Ich bin wieder einen Schritt weiter und habe über die per GUI gesetzten Regeln rausgefunden, wie die Groups heißen die ich erstellt habe!

    PiHoles: UBIOS_660e6f29337f6f546e45690f

    DNS Ports: UBIOS_660e7168337f6f546e45694d


    Diese müsste ich jetzt eigentlich nur mehr mit der Lösung von UHT kombinieren:
    RE: DNS-Redirect auf pi-hole


    Das würde soweit mal funktionieren:

    Code
    iptables -t nat -A PREROUTING -i br0 -p udp -m set ! --match-set UBIOS_660e6f29337f6f546e45690f src -m set ! --match-set UBIOS_660e6f29337f6f546e45690f dst --dport 53 -j DNAT --to-destination 192.168.178.5:53


    Jetzt frag ich mich nur wie ich den --to-destination Part mit meinem UBIOS_660e6f29337f6f546e45690f setze, ggf. sogar mit dem UBIOS_660e7168337f6f546e45694d als Portangabe, weil das 53 und 853 beinhaltet.






    Der POSTROUTING Part klappt bereits (muss natürlich auch mit tcp gsetzt werden) :winking_face:

    Code
    iptables -t nat -A POSTROUTING -m set ! --match-set UBIOS_660e6f29337f6f546e45690f src -m set --match-set UBIOS_660e6f29337f6f546e45690f dst -p udp --dport 53 -j MASQUERADE

    Ich denke ich habe die Lösung (ohne Port 853):

    Code
    iptables -t nat -A PREROUTING -i br0 -p udp -m set ! --match-set UBIOS_660e6f29337f6f546e45690f src -m set ! --match-set UBIOS_660e6f29337f6f546e45690f dst --dport 53 -j DNAT --to-destination 192.168.178.5-192.168.178:53

    Dasselbe natürlich noch mit tcp!

    4 Mal editiert, zuletzt von razor () aus folgendem Grund: 2 Beiträge von DKeppi mit diesem Beitrag zusammengefügt.

  • Danke für den Hinweis gierig! Ich prüfe das mal und schau was ich machen kann.


    Muss mich jetzt aber ohnehin zuerst noch um ein Script kümmern - überlebt wohl den Reboot/das Update nicht! :frowning_face:

    Evtl. über die crontab und dem /data Verzeichnis...


    Meine Lösung ist wie folgt...

    in /data/custom/DNStoPiHole.sh

    in /etc/cron.d/DNStoPiHole

    Code
    ## run the DNStoPiHole script
    MAILTO=""
    @reboot root /data/custom/DNStoPiHole.sh

    Danach ein


    Code
    service cron reload

    Reboot probiert, leider noch ein Problem:


    2024-04-10T16:37:25+02:00 UXG-Lite cron[1413]: Error: bad username; while reading /etc/cron.d/DNStoPiHole

    EDIT:
    Hab das Skript vom vorigen Post etwas abgespeckt, jetzt scheint es zu funktionieren!!!


    EDIT2: gierig - Die Group Bezeichnungen sind nach dem Reboot immer noch dieselben :smiling_face:

    Einmal editiert, zuletzt von razor () aus folgendem Grund: 2 Beiträge von DKeppi mit diesem Beitrag zusammengefügt.

  • Ich fasse nochmal zusammen was ich gemacht habe:


    1.) Beide PiHole IP's als DNS Server in den beiden VLANs HEIM & VPN hinterlegt, damit sie per DHCP verteilt werden.

    GAST lasse ich bei mir offen und ohne AdBlocker.

    Die WAN seitigen DNS Server sind auf Standard, habe aber zusätzlich unter Settings - Security den DNS Shield mit Manuell & Cloudflare aktiviert! Gehe auch in den PiHoles über Cloudflare mit DoT :winking_face:


    2.) Group mit meinen beiden PiHole IPs angelegt (von Vorteil wenn die IP's angrenzend sind, da sonst der Part --to-destination ein Problem wird)
    Im Unifi Network: Settings - Profiles - IP Group - Create New


    3.) Per SSH auf die UXG-Lite und mittels ipset list die GroupID herausfinden.


    4.) In /data/custom/ (Unterordner custom muss vorher mit mkdir angelegt werden) ein Script erstellen -> zB. mit vi DNStoPiHole.sh

    Die beiden Variablen an die eigenen Bedürfnisse anpassen!

    Die komplette Regel wird vorab mittels -C Befehl abgefragt (vor dem Doppelpipe ||) und nur angelegt wenn Sie noch nicht vorhanden ist (nach dem Doppelpipe ||)!

    5.) In /etc/crontab/ folgenden Eintrag machen

    Pfad wieder an die eigenen Bedürfnisse anpassen!

    Code
    *  *    * * *   root /data/custom/DNStoPiHole.sh

    6.) Danach ein service cron reload


    7.) Checken ob in /var/log/cron.log ein Fehler angezeigt wird.

    Falls ja, File in /etc/cron.d/ auf Fehler prüfen und erneut ein service cron reload durchführen.


    8.) Max. 1 min. warten und die Regeln sollten vorhanden sein!


    Hoffe es funktioniert bei euch auch :winking_face:


    P.S.: Die 4 Firewall Regeln die ich über die GUI am UXG-Lite angelegt habe, habe ich als zusätzliche Einschränkung gelassen!

    9 Mal editiert, zuletzt von DKeppi ()

  • Hallo Zusammen,

    leider funktionierte das mit dem Reboot und dem File in /etc/cron.d nicht - auch nicht wenn ich es regelmäßig ausführen wollte :frowning_face:

    Idee war von hier geklaut: https://github.com/StoneLabs/unifi-uxg-dnsmasq

    Habe daher die Anleitung etwas angepasst und gehe nun den Weg über die /etc/crontab und dem Aufruf des Scripts im Minutentakt (mit @reboot funktioniert das auch hier nicht). Jetzt klappt es auch nach einem Reboot und die maximale Minute die man warten muss ist OK!

    6 Mal editiert, zuletzt von DKeppi ()

  • LOL.....

    das ist 1zu1 quasi mein script, andere Pfade aber das ist hab ich mal verbrochen als

    Quick workaround..... gut das er wenigstens die quelle dafür angegeben hat :smiling_face:


    btw:

    Ich warte nun 30 Sekunden, weil der CRON schneller beim reboot startet als der kram fertig ist

    und töte nur den nötigen DNSMASQ (über das PID file) statt stumpf alles Instanzen zu killen.


  • Interessant!
    Scheinbar funktioniert also @reboot im cron schon und es liegt an der Kombination mit den iptables Einträgen.

    Nunja, jetzt wo alles Reboot sicher ist bin ich zufrieden.

    Hoffe es überlebt auch ein Update!

  • Soeben gesehen, dass mit UniFi Network Application 8.3.20 folgendes kommt:


    • Added support for custom Network Address Translation rules on UniFi Gateways*
    • Source and Destination NAT - Specific translation between one or more IP addresses.
    • Masquerade NAT - Translate to the main (primary) IP address associated with an interface.

      *One-to-one translation of IP addresses between subnets (NETMAP) requires a UniFi (Cloud) Gateway with version 4.0.6 or newer. Drag and drop sorting of NAT rules is scheduled for the next release.
  • Schön, mit der Version 8.3.28 habe ich jetzt diese NAT Regeln über die GUI gesetzt:


    Redirect Port 53



    Redirect Port 853


    Masquerade

  • Ich hab inzwischen die UCG-Ultra und dort auch die NAT-Regeln getestet. Da mein PI-Hole aber in einem extra Netz sitzt, benötige ich die Masquerade-Regel nicht. Hab allerdings für jedes VLAN eine eigene Regel erstellt. Funktioniert soweit ganz gut und der Umweg über die .json mit der USG3P ist endlich Geschichte.

  • Kann ich jetzt mit der neuen Version auch mein Modem vor der UXG erreichen?

    UXG = 192.168.1.1

    Modem = 192.168.0.1

    Da fragst du leider den Falschen, ich war froh das mit den PiHoles hinzubekommen nach etwas Selbststudium in dem Thema.
    Habe selbst auch kein Modem hinter der UXG, nur das ONT vom Provider. Kann da leider nicht helfen.

    Aber ich weiß dass es dazu bereits Threads gibt, zB. den hier: Zugriff auf Router hinter Gateway
    Ich würde dort mal nach Hilfe fragen :winking_face: