IPv6 Conditional Forwarding zu FRITZ!Box funktioniert nicht vollständig

Hallo zusammen,

ich nutze ein Pi-hole-Setup mit Unbound (nach der offiziellen Anleitung aus den Pi-hole Docs) und einer FRITZ!Box als Router und DHCP-Server.
Alle DNS-Anfragen gehen standardmäßig über Unbound ins Internet; nur lokale DNS-Namen (*.fritz.box) sollen über Conditional Forwarding an die FRITZ!Box weitergeleitet werden.

Setup:

  • FRITZ!Box: DHCP + lokale Namensauflösung

  • Pi-hole: DNS-Server im LAN

  • Unbound: lokal auf Pi-hole (127.0.0.1#5335)

  • Conditional Forwarding (laut offizieller Pi-hole-Empfehlung eingerichtet):

    • IPv4 → 192.168.178.0/24192.168.178.1 → funktioniert einwandfrei

    • IPv6 → fd6a:xxxx:xxxx::/64fd6a:xxxx:xxxx::1 → funktioniert nicht zuverlässig

Symptom:

  • Lokale Hostnamen (über IPv4) werden korrekt aufgelöst.

  • IPv6-Hosts im LAN hingegen werden teilweise nicht aufgelöst.

  • Wenn ich ein nslookup auf eine IPv6-Adresse mache und explizit die FRITZ!Box als DNS-Server angebe (nslookup <host> fd6a:xxxx:xxxx::1), funktioniert die Auflösung.

    • Ich habe zum Beispiel die IPv6 der Fritz!Box genommen und diese konnte nicht sauber aufgelöst werden.
  • Das Verhalten deutet darauf hin, dass das IPv6-Conditional-Forwarding im aktuellen Release nicht zuverlässig aktiv ist.

Versionen:

  • Pi-hole Core: v6.1.4

  • FTL: v6.2.3

  • Web Interface: v6.2.1

  • FRITZ!Box: aktuelle Firmware

  • Unbound: nach offizieller Pi-hole-Anleitung eingerichtet

Frage:
Ist das ein bekanntes Problem mit IPv6-Conditional-Forwarding in Pi-hole v6?
Gibt es eine empfohlene Syntax oder einen Workaround, um IPv6-Forwarding (z. B. bei FRITZ!Box-Netzen mit /64) zuverlässig zu aktivieren?

https://tricorder.pi-hole.net/3HUsOFoF/

Der Befehl "nslookup fritz.box" funktioniert in meiner Config einwandfrei im Terminal (Putty) und in der Powershell (Win11).

Der Name wird aufgelöst (fritz.box), dazu die FD28:xxxx und 2001:xxxx Adressen und natürlich die IPv4 192.168.178.1

Mal sehen, was der Support im Tricorder File sehen kann.

Hi, mach mal ein

nslookup fritz.box

und dann ein

nslookup

auf jede angezeigte IP

und bei den IP’s die einen Fehler werfen machst du

nslookup <IP> <IP FritzBox>

Ich denke, du an deiner Annahme ist etwas dran.

Name: fritz.box
Address: 192.168.178.1
Name: fritz.box
Address: fd28:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
Name: fritz.box
Address: 2001:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx

pi@pihole:~ $ nslookup 192.168.178.1
1.178.168.192.in-addr.arpa name = fritz.box.

pi@pihole:~ $ nslookup fd28:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
** server can't find x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa: NXDOMAIN

pi@pihole:~ $ nslookup 2001:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
** server can't find x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.1.0.0.2.ip6.arpa: NXDOMAIN

pi@pihole:~ $ nslookup fd28:x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x. 192.168.178.1
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = fritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = www.fritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = fritzbox.internal.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = fritzbox.home.arpa.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = myfritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = www.myfritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = fritz.nas.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = www.fritz.nas.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = fritz-nas.fritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = fritz-nas.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = wpad.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = wpad.fritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = 192-168-178-1.fritz.box.

pi@pihole:~ $ nslookup 2001:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx 192.168.178.1
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.1.0.0.2.ip6.arpa name = fritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.1.0.0.2.ip6.arpa name = www.fritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.1.0.0.2.ip6.arpa name = fritzbox.internal.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.1.0.0.2.ip6.arpa name = fritzbox.home.arpa.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.1.0.0.2.ip6.arpa name = myfritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.1.0.0.2.ip6.arpa name = www.myfritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.1.0.0.2.ip6.arpa name = fritz.nas.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.1.0.0.2.ip6.arpa name = www.fritz.nas.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.1.0.0.2.ip6.arpa name = fritz-nas.fritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.1.0.0.2.ip6.arpa name = fritz-nas.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.1.0.0.2.ip6.arpa name = wpad.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.1.0.0.2.ip6.arpa name = wpad.fritz.box.

und noch einer

pi@pihole:~ $ nslookup fd28:x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x fd28:x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = fritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = www.fritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = fritzbox.internal.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = fritzbox.home.arpa.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = myfritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = www.myfritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = fritz.nas.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = www.fritz.nas.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = fritz-nas.fritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = fritz-nas.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = wpad.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = wpad.fritz.box.
x.x.x.x.x.x.x.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x.x.x.x.x.x.x.8.2.d.f.ip6.arpa name = 192-168-178-1.fritz.box.

Danke für die Bestätigung. Mir ist das aufgefallen, da ich Probleme hatte einige Clients an der IPv6 Adresse aufzulösen. Aktuell sieht es zwar in der PiHole Web UI gut aus, keine Clients ohne Hostnamen, aber generell gibt es das Problem der Namensauflösung noch.

Ich habe alle meine Clients in meinem Netzwerk mit festen IP Adressen in der Fritzbox versehen und diese IPv4 und die IPv6 FE80 Adressen in die Host Datei geschrieben. Damit passt dann die Zuordnung und das Reporting im Webinterface.
Ist nach dieser Erkenntnis wahrscheinlich ein unbewusster Workaound, aber funzt schon lange und zuverlässig.

Folgendes ist mir gerade aufgefallen. Die IPv6 Adresse wird hier anscheinend gelegentlich verwendet, aber der DNS Name ist nicht aufgelöst.

Bei mir schon.
Wie schon geschrieben, ich verteile über die Fritzbox die FE80 Adresse und hab sie auch bei den DNS Server Einstellungen bei IPv6 angegeben.
Alle anderen FD28 oder FD80 Adressen funktionieren nicht eindeutig oder über längere Zeit. Das Ergebnis sieht man dann in den Top Clients mit IPv6 Adresse, die ohne Namen auftauchen.

Ob das an Pihole oder der Fritzbox liegt, kann ich nicht sagen.

Meiner Einschätzung nach am PiHole. Wenn ich einen lookup mache und die Antwort des PiHole nicht funktioniert, aber bei der FB doch, dann sehe ich den Fehler beim PiHole.

Ich habe gestern alle IPv6 Adressen auf FD28 umgestellt und die Zuordnung in der Host Datei entfernt.

Ergebnis: Funktioniert. Auch im Terminal oder in der Powershell unter Windows.

Never forward reverse lookups for private IP ranges muss aber disabled sein.

Alte IPv6 Datensätze werden zwar noch als lange Adresse angezeigt, aber nach einem Tag sind sie aus der Top Liste verschwunden.

Du hast da einen guten Punkt vorgebracht, der mich zum Grübeln gerade bringt.

Ich habe „natürlich“ beide „never forward“ haken drin, weil bislang mein Gedanke war, diese requests will ich ja nicht an unbound oder einen externen upstream schicken.

Mir ist aber gerade nicht klar, wie sich das bei conditional forwarding verhält ?

Mir auch nicht so recht.

Lass den unteren Haken mal weg und probier es mal aus. In der Shell bekommst du ja gleich das Ergebnis.

Hab noch keine Kombination gefunden, in der ein NSLOOKUP dieselben Ergebnisse wie bei der FB liefert.

Sonst keiner vom Projekt hier, der was sagen kann ?

bump

Conditional Forwarding ist zunächst einmal keine vorgefertigte Funktion, sondern eine optionale Einstellung, deren Parameter von Dir selbst vorgegeben werden.

Wie sieht denn Deine Konfiguration aus: Bitte lade ein Debug Log hoch und poste hier anschließend nur die Token-URL.
Das Token generierst Du über

sudo pihole -d

Falls Pi-hole als Docker-Container läuft:

docker exec -it <pihole-container-name-or-id> pihole -d

wobei Du <pihole-container-name-or-id> passend ersetzt.

In beiden Varianten ist die Frage nach dem Upload am Ende des Vorgangs zu bejahen.

Danke

https://tricorder.pi-hole.net/jMCNcw1y/

Dein Debug Log zeigt, dass Conditional Forwarding für das IPv6-ULA-Prefix aktiviert ist:

     revServers = [
       "true,192.168.178.0/23,192.168.178.1,fritz.box",
       "true,fd<redacted>5::/64,fd<redacted>5::6<redacted>3,fritz.box"
     ] ### CHANGED, default = []

Sofern Pi-hole auch Rückwärtsanfragen für LLAs und GUAs an die Fritzbox weiterleiten soll, müssten auch für diese jeweils Einträge definiert werden.

Das ist aber nur eingeschränkt möglich bzw sinnvoll.
Für LLAs liefern Fritzboxen häufig keine Namensauflösung, und für öffentliche IPv6-Adressen mit GUA-Prefix sind strenggenommen öffentliche DNS-Server autoritativ (also die DNS-Server des ISPs, der das GUA-Prefix vergibt).

Die Fritzbox liefert für Rückwärtsanfragen zu GUAs zwar auch u.U. Namen aus, würde dadurch aber ggf. öffentlich vorhandene DNS-Einträge verschatten (das könnte z.B. unerwünscht sein, wenn ein Client in Deinem Netzwerk über einen DynDNS-Dienst aufgelöst werden soll).

Die Konfiguration eines Eintrags für das von der Fritzbox verwaltete GUA-Prefix wäre außerdem ständig zu aktualisieren, sobald sich das vom ISP zugeteilte GUA-Prefix ändert. Das kann je nach Vertrag regelmässig passieren (in D z.B. oft einmal täglich), und/oder nach einem Router-Neustart oder einer sonstigen Leitungsunterbrechung.

Bist Du zwingend auf die Rückwärtsauflösung von IPv6-Adressen zum GUA-Präfix Deiner Fritzbox angewiesen?
Dann könntest Du möglicherweise Conditional Forwarding abschalten und stattdessen die Fritzbox als Pi-holes einzigen Upstream einstellen, und die bisherigen Pi-hole-Upstreams (in Deinem Fall unbound) als Upstream Deiner Fritzbox.
Dazu müsstest Du dann allerdings auch Deine unbound-Konfiguration anpassen, sofern öffentliche DNS-Anfragen weiterhin über unbound laufen sollen.

Vielen Dank für die sehr ausführliche Analyse und Rückmeldung.

So wichtig ist es mir nicht, wichtig war mir zu verstehen, warum das nicht funktioniert und ob ich gegebenenfalls eine Fehlkonfiguration vorliegen habe.

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.