ich kämpfe seit Tagen mit der Konfig des Pi-hole. Ich habe folgende Konstellation:
Fritzbox 7490 mit Freetz. Der DHCP der Fritzbox ist deaktiviert, stattdessen nutze ich dnsmasq von Freetz, damit ich ganz einfach IPs per MAC-Adressen zuordnen kann. Das funktioniert seit vielen Jahren und vielen gefreetzten Fritzboxen einwandfrei.
Jetzt habe ich einen Pi-Zero mit LAN-Breakout, Bullseye-Lite und Pi-hole 5.7 angeschlossen und konfiguriert. Funktioniert auch alles einwandfrei, nur leider werden die Clients nicht angezeigt. Es erscheint immer nur "fritz.box".
Ich habe tagelang das Netz durchsucht, wahrscheinlich hat das noch niemand mit dnsmasq in Freetz verbunden und darüber geschrieben, deshalb meine Anfrage. Wo habe ich den Fehler?
In der Fritzbox ist der Haken bei DHCP-Server aktivieren raus, unter DNS-Rebind-Schutz ist nichts eingetragen. Unter Freetz, DNSMASQ, Einstellungen:
Starttyp automatisch, Haken bei "vor multid starten"
"Der DNS Server ist gebunden an:" Port: 53, Domain: fritz.box
"DHCP-Server": aktiviert.
So funktioniert das seit vielen Jahren.
Den Pi-hole habe ich im dnsmasq von Freetz folgendermaßen eingebunden: Im Feld " Zusätzliche Kommandozeilen-Optionen (für Experten):" eingetragen: -R -S [IP des Pi-hole]
Im Pi-hole habe ich unter DNS folgendes eingestellt bzw. die Standard-Einstellungen beibehalten:
Upstrem-DNS-Server 2 Haken bei Google IPv4
Interface-Settings: Haken bei Respond only on Interface Eth0
Advanced DNS-Settings: Haken bei Punkt 1 und 2 "Never forward..."
Conditional Forwarding: KEIN Haken
DHCP ist ausgeschalten, das würde ich gern auf der Fritzbox belassen.
Habe ich einen Fehler in der Einstellung? Offenbar sieht Pi-hole nur die Fritte bei Anfragen und nicht die Clients. Lt. Beschreibungen im Netz müßte das ja mit der Fritte klappen, wahrscheinlich funkt mir hier der dnsmasq von Freetz dazwischen.
Hier liegt das Problem. In Deiner jetzigen Konfiguration passiert folgendes: dnsmasq auf der Fritzbox ist DHCP Server und verteilt an alle Geräte im Netzwerk die Adressen. Dabei verteilt er sich selbst auch als DNS Server (Standardeinstellung). Die Geräte stellen nun ihre DNS-Anfragen an deine Fritzbox, diese wiederum leitet sie (sozusagen stellvertretend) an Dein Pi-hole weiter. Dies führt unmittelbar zu drei Problemen:
Alle Anfragen an Dein Pi-hole kommen von der Fritzbox, daher
Das Pi-hole hat schlichtweg keine Möglichkeit zu sehen woher die Anfragen kommen. Dadurch funktionieren viele Möglichkeiten Deines Pi-hole nicht wie die individuellen Statistiken, aber auch pro-Gerät Block-/Freigabeeinstellungen
Die Statistiken auf Deinem Pi-hole sind verzerrt da nur dann Anfragen von der Fritzbox an Dein Pi-hole durchgeleitet werden, wenn dnsmasq auf der Fritzbox die Antwort nicht selbst im Cache hat.
Wenn Du eine Seite, die Du nicht blockiert haben möchtest, auf die Whitelist setzen willst oder - anders herum - eine Seite, die Du blockieren möchtest auf die Blacklist hinzufügst, dann kann es sehr (ggfs. Stunden) dauern bis das auf Deiner Fritzbox so ankommt (bis dahin kann die Domain im Cache liegen). Einzige Lösung ist hier jeweils dnsmasq einzeln oder die ganze Fritzbox neustarten zu müssen. Das ist nicht sehr praktikabel.
Es gibt nun drei Möglichkeiten:
Die einfachste ist den DHCP Server von Pi-hole zu verwenden. Dieser ist exakt der gleiche, den die Fritzbox über dnsmasq anbietet. Hier würden alle Einstellungen automatisch passen und alle oben genannten Probleme wären auf einen Schlag gelöst. Ich benutze den Pi-hole DHCP Server seit über fünf Jahren und hatte nicht einen Ausfall.
Du kann dnsmasq auf der Fritzbox anweisen die IP-Adressen der Geräte als Zusatzinformation mit an Dein Pi-hole zu senden. Die erreichst Du über die zusätzlichendnsmasq Einstellungen
--add-subnet=32,128 --add-mac
bei den zusätzlichen Kommandozeilen-Optionen auf Deiner Fritzbox.
Wenn Pi-hole diese Zusatzinformationen vorfindet, nutzt es sie um die Clientanfragen korrekt zuzuordnen. Die Probleme, die durch den vorgelagerten Cache entstehen (Punkte 2 & 3 oben) bleiben leider bestehen und ließen sich nur dann lösen, wenn der Cache auf der Fritzbox deaktivert werden würde. Das ist bei Betrieb der Router dnsmasq Instanz als DHCP Server aber auch ungünstig, da die Namensauflösung hier nicht mehr korrekt funktionieren würde.
Was uns zur dritten Lösung führt: Den dnsmasq auf der Fritzbox mit folgender zusätzlicher Kommandozeilenoption anweisen direkt das Pi-hole als DNS Server im Netzwerk zu verteilen:
--dhcp-option=6,192.168.2.123
(192.168.2.123 durch die statische IP Deines Pi-hole ersetzen). Alle Probleme oben gelöst. Aber auch ein neues geschaffen: Die Hostnames können nicht mehr über DHCP aufgelöst werden. Hierfür musst Du nun conditional forwarding aktivieren. Dies konfiguriert Dein Pi-hole so, dass Anfragen für interne IP Adressen nicht an
sondern an die dnsmasq Instanz auf Deiner Fritzbox gestellt werden. Die zu treffenden Einstellungen fürs Conditional Forwarding sollten selbsterklärend sein. Wenn nicht: Wir sind hier!
Option 1 ist die einfachste, Option 2 hat Nachteile und Option 3 ist etwas mehr zu konfigurieren, sollte aber alle Probleme zufriedenstellend lösen.
vielen Dank für die Ausführungen. Leider habe ich es nicht gelöst bekommen, evtl. habe ich auch etwas mißverstanden.
Ich habe Nr. 3 ausprobiert, habe unter Freetz und dnsmasq im Feld "Zusätzliche Kommandozeilenoptionen" meinen Eintrag "-S -R [IP von Pi-hole]" ersetzt gegen "
--dhcp-option=6,[IP von Pi-hole]" und zusätzlich im Pi-Hole unter Settings, DNS den Punkt "Use Conditional Forwarding" angehakt und im ersten Feld eingetragen 192.198.20.0/24, unter Router die 192.168.20.1 (IP meiner Fritte) und unter Local Domain Name "fritz.box".
Das Ergebnis ist, daß die DNS-Auflösung nicht mehr funktioniert.
Ich habe Variante 2 probiert, habe in Freetz unter "zusätzliche DNS" die IP des Pi-hole eingetragen und unter zusätzliche Optionen " --add-subnet=32,128 --add-mac".
Das Ergebnis ist, im Query-Log von Pi-hole bekomm ich nun statt "fritz.box" meinen tatsächlichen Client angezeigt und auch die URLs der aufgerufenen bzw. geblockten Seiten, was schon mal super ist. Nur leider leitet Pi-Hole diese Anfrage nicht mehr weiter, d.h. der Browser findet nur noch Seiten, die im DNS-Chache sind.
Im Freetz gibt es noch unter dnsmasq die 2 Punkte: "Reverse DNS-Anfragen für private IP-Adressen (RFC1918) nicht an andere DNS-Server (z.B. im VPN) weiterleiten." und "Adressen von Upstream Nameservern ablehnen, wenn sie in privaten IP-Bereichen sind.". Hier habe ich mit Haken rein und raus experimentiert, denn Pi-hole liegt ja im Privaten-IP-Bereich, es hat aber nichts geändert.
Irgendwo habe ich einen Denkfehler oder ein Verständnisproblem, nur wo?
Ich hatte ich vergessen zu erwähnen, dass Du alle Geräte einmal neu starten bzw. neu mit dem Netzwerk verbinden musst damit sie wissen, dass sie von nun an das Pi-hole fragen sollen. Das ließe sich ggf. über einen Fritzbox Neustart erzwingen. Ansonsten versuchen sie weiterhin die Fritzbox zu fragen, die sich aber nun nicht mehr zuständig fühlt und keine Antworten mehr heraus gibt (außer sie betreffen interne IP Adressen / Hostnames).
Das ist ein bisschen mysteriös, wie sieht das im Query Log aus? Hast Du mal einen anderen als Google's DNS Server im Pi-hole probiert?
Die anderen Optionen in der Fritzbox sind irrelevant.
So, gerade nochmal getestet. Variante 2 (--add-subnet=32,128 --add-mac) funktioniert einwandfrei, wenn ich einen anderen DNS anstatt Google auswähle, warum auch immer. Darauf wäre ich nun wirklich nicht gekommen.
Variante 3 (--dhcp-option=6,[IP von Pi-hole]) funktioniert leider nicht. Fritte neu gestartet, keine Änderung. PC neu gestartet, keine Änderung. DNS wird nicht aufgelöst.
Das Problem hier ist, dass dnsmasq so nun die internen Adressen auch an den DNS Server im Internet schickt. Manche ignorieren dass, andere (scheinbar inkl. Google) werden verwirrt und verwerfen die Anfragen statt sie zu beantworten. Wir haben da eine Option vorgesehen, die die Informationen entfernt bevor sie weitergeleitet werden, diese Änderungen wurden jedoch noch nicht im dnsmasq Projekt aufgenommen:
Somit scheint Punkt 3 immer noch der beste zu sein. Solltest Du noch Muße haben, können wir versuchen herauszufinden woran es liegt. Halten wir fest: Dein Pi-hole funktioniert an sich einwandfrei. Das klingt also so, als ob Deine Geräte im Netzwerk ein Problem damit haben, wenn Du ihnen das Pi-hole direkt als DNS Server mitteilst. Ich nehme immer noch an, dass da etwas hakt:
Kannst Du auf den Geräten nach dem Neustart verifizieren, dass sie tatsächlich die IP des Pi-hole (und been nicht mehr die Fritzbox) als DNS Server erhalten haben? Vielleicht ist das auch in der Konfigurationsoberfläche der Fritzbox/Freetz so gar nicht vorgesehen und der Haken bei "DHCP-Server" löst noch weitere Dinge im Hintergrund aus wie z.B. die Fritzbox als DNS-Server zu erzwingen.
Das ließe sich folgendermaßen auf dem Pi-hole ermitteln:
sudo pihole-FTL dhcp-discover
Unter "DHCP options" sollte die Zeile "dns-server" genau einmal auftauchen und auf die IP des Pi-hole zeigen.
Sollte dem nicht so sein, dann stimmt irgendwo etwas weiterhin mit den Einstellungen seitens Freetz/dnsmasq nicht. Du könntest in einem ersten Versuch die DHCP-Checkbox abwählen und eine entsprechende Konfiguration ebenfalls in der Kommandozeile vornehmen, z.B.
Natürlich hab ich dazu Muße, es muß doch herauszufinden sein
Also ich habe getestet. Variante 3 zeigt nach
sudo pihole-FTL dhcp-discover
schön unter DNS-Server die Adresse des Pi an, es kommen im Query-Log jedoch keinerlei Anfragen mehr an, nur noch unzählige unter Localhost die debian.pool.ntp.org zur Uhrzeitsync mit "Network error". Dabei ist es egal, ob ich im Freetz unter dnsmasq den DHCP deaktiviere und den Eintrag in der Kommandozeile setze ode es so lasse, wie es war. Kein Unterschied. Auch nach Rechner-Neustart und nach Neustart des Switches, an dem der Rechner und auch der Pi hängt, um dessen Cache als Ursache auszuschließen.
Kurios ist für mich in Variante 2, wo alles funktioniert, da zeigt mir
sudo pihole-FTL dhcp-discover
als DNS-Server die IP meiner Fritzbox und NICHT die des Pi. Aber es läuft definitiv über den Pi und alles funktioniert offenbar gut. Die Seiten werden gefiltert, im Query-Log taucht alles exakt auf und wenn ich den Raspi abziehe, laufen die DNS-Anfragen auch ins Leere, es geht also defintiv alles über den Pi, obwohl es hier unter DNS die IP der Fritzbox zeigt.
Ich würde es ja genau andersherum erwarten, bei funktionierender Einstellung IP des Pi und bei nicht funktionierender die der Fritzbox. Es ist aber genau umgedreht
Könntest Du in Variante 3 bitte noch einmal überprüfen, ob die Geräte das Pi-hole als DNS Server anzeigen? Der dhcp-discover Test suggeriert ja, dass dies so sein sollte. Dann gibt es aber keinen Grund mehr für
Moment, ...
... heißt das Dein Raspberry hat dann keine Internetverbindung mehr? Das würde natürlich erklären, warum er keine Namen auflösen kann. Könntest Du das bitte noch einmal überprüfen?
Sorry, war mein Fehler mit dem Network-Error, da war ich wohl zu schnell, das war wohl der Log vom Neustart des Switches. Kommando zurück.
Ich habs nochmal getestet, der Pi hat auch bei Variante 3 Netz und löst die DNS auf.
ping www.google.de
gibt die Netz-IP des Google-Servers und die Ping-Zeit exakt zurück. Also bis zum pi sollte es einwandfrei klappen.
Dabei ist mir aufgefallen, die Ping-Anfragen werden im Query-Log exakt mitgeloggt und laufen auch über den Pi ("OK, answered by dns.opendns.com") und kommen von Localhost. Opendns ist der in Pi-hole eingestellte DNS-Server. Also bis hierher offenbar alles perfekt.
Anfragen vom Browser des Rechners werden aber bei Variante 3 im Query-Log überhaupt nicht erfaßt. Sie erreichen also den Pi offenbar gar nicht.
Wenn das Pi-hole normal läuft wenn es über den Router geht, steht zu vermuten, dass es entweder am Rechner liegt oder dass die Freetz-Box lokalen DNS-Verkehr, der nicht an sie selbst oder durch sie selbst verursacht wurde, einfach wegwirft statt ihn weiterzuleiten. Wenn ich mich recht erinnere hatten wir das vor ein oder zwei Jahren schon einmal mit einem Google Nest-Router hier im Forum.
Ich kenne diese Einstellung nicht, aber das Name klingt verdächtig. Muss hier ggfs. die IP des Pi-hole eingetragen werden?
DNS-rebind-Schutz ist ein Standard-Feld der Fritzbox, hat nichts mit Freetz zu tun. Hier soll man bei Servern im eigenen Netz dessen Hostnamen eintragen. Hab ich mal probehalber mit dem Hostnamen des pi-hole gemacht, keine Änderung.
Hab auch in der Hilfe zu Freetz bzgl. dnsmasq unter packages/dnsmasq – Freetz nachgelesen, hab da nichts gefunden, wobei ich sicher auch längst nicht alles im Detail verstanden hab.
Edit: mit dem Rechner hat es definitiv nichts zu tun, Verhalten an mehreren Rechner gleich und auch an Android-Handys.
Dann benutz vielleicht statt dnsmasq auf der Fritzbox einfach die eh schon vorhandenen Boardfunktiontionen (wenn das geht). Schau hierfür hier vorbei: Fritz!Box (DE) - Pi-hole documentation
Damit funktioniert es auf jeden Fall (hundertfach erprobt).
Nein, u.a. deshalb freetz ich ja die Fritzboxen, weil der dort integrierte DHCP-Server "dumm" ist. Ich muß schon dnsmasq nutzen, weil ich nur dort einfach per Text-Datei jedem Client per MAC-Adresse die passende IP zuweisen kann. Sowas kann die Fritzbox leider von Hause aus nicht.
Ich müßte einfach mal den dnsmasq von Pi-hole probieren, wobei ich da eben leider nicht so einfach per Web-IF meine Hosts-Datei reinkopieren kann. Da muß ich umständlicher über SSH gehen und die Hosts-Datei bearbeiten. Das ist eben für mich ein Top-Feature von Freetz, was ich gern nutzen würde, das fehlt im Web-IF von Pi-Hole meiner Meinung nach.
Irgendwas stimmt da aber nicht. Sollte Freetz ein eigenes Forum haben, würde ich versuchen dort nachzuforschen. Das Problem ist ja nun recht simpel und schnell erklärt:
Du hast eine Freetz-Box mit dnsmasq, die DHCP mache und über DHCP-Option 6 den Geräten mitteilt, dass sie eine weitere dnsmasq Instanz im Netzwerk nutzen sollen.
Per dhcp-discover Funktion hast Du bestätigt, dass dies korrekt funktioniert, die Geräte erhalten den DNS-Server zugewiesen.
Jedoch kommt kein Datenverkehr hier an, er muss also auf Router-Level irgendwie verschwinden. Das kann eigentlich fast nur Absicht sein.
Interessant ist, dass der Verkehr einwandfrei ankommt wenn Du den gleichen DNS Server als Upstream Server für den Freetz-dnsmasq angibst. Das Pi-hole funktioniert also einwandfrei als DNS-Server.
Ich habe mir gerade meine Freetz-Hosts-Liste mittels Excel passend zum Pi-hole umgebaut und werde mal den dnsmasq vom Pi-hole ausprobieren. Die Liste habe ich prima mit nano in die "04-pihole-static-dhcp.conf" gebracht, wird auch nun im Web-IF vom dnsmasq des Pi korrekt angezeigt.
Was aber hier wieder nicht einstellbar ist, sind 2 IP-Bereiche, die vergeben werden sollen.
Beim Freetz-Web-IF hatte ich die Möglichkeit, 2 getrennte Bereiche zu vergeben:
Hier beim Pi habe ich leider nur einen Bereich. Da werde ich wohl die Geräte des ausgesparten Bereiches in die Client-Liste mit aufnehmen müssen, trotz fester IP.
Irgendwas ist immer...
Mit Freetz ist das so eine Sache, da gibts jetzt Freetz-NG, weil die Entwickler nicht mehr weitergemacht haben und alles auf neu steht, ist nicht so einfach, da ein Forum mit Kompetenz zu finden. Vor allem der Zeitfaktor...
Mit Pi-hole geht alles, wenn auch meist über das Webinterface. Nach viel Feedback wissen wir, dass Pi-hole oft das erste Projekt ist, dass Leute mit dem Raspberry ausprobieren. Meistens sogar das erste Projekt mit dem sie überhaupt mit Linux in Kontakt kommen. Klar, wenn man sich schon auskennt, dann sind gewisse zusätzliche Settings schick, bislang haben wir uns aber auf ein hoffentlich möglichst eingängiges und dennoch umfangreiches Menü beschränkt. Am Ende sind wir dann ja doch nur ein paar wenige Leute, alle mit Vollzeitjobs und man kann halt eben nur das machen wofür man Zeit hat.
Zurück zum Thema: Du kannst eine beliebige Konfigurationsdatei anlegen, z.B. /etc/dnsmasq.d/99-more-settings.conf und dort beliebige Konfigurationszeilen wie
dhcp-range=192.168.20.120,192.168.20.215,240h
einfach hinzufügen. Ein pihole-FTL dnsmasq-test und bei positiver Rückmeldung ein pihole restartdns später ist das dann aktiv. Stehen Deine Settings im Konflikt, kannst Du bspw. die entsprechende Funktion über das Webinterface deaktivieren und komplett selbst konfigurieren. Wir lassen bewusst sämtliche Freiheiten offen.
Da stellt sich die Frage, warum der Client weiterhin die FB als DNS Server nutzt, obwohl die IP des Pi-holes als DNS Server per DHCP verteilt wird. Du hast nicht zufällig im Client den DNS Server fest eingestellt?
Hm, naja, doch.
Der Client hat ne feste IP und da steht dann die IP des Clients, die Netzmaske, Standardgateway und bevorzugter DNS-Server. Der DNS-Server muß ja bei fester IP eingetragen werden und da steht dann natürlich auch die Fritzbox drinnen. Ich bin davon ausgegangen, daß die Fritzbox mein bevorzugter DNS-Server (aus Sicht des Client) ist und diese dann an den Pi-hole weitergibt. Ich war jetzt nicht davon ausgegangen, dort immer auch den Pi-hole eintragen zu müssen. Ist das der Fehler? Das wollte ich ja gerade nicht machen.
Dann müßte es aber doch an Clients mit dynamischer IP-Vergabe funktionieren. Das muß ich noch mal testen.