With the latest Pi-hole Docker Release 2025.06.0 · pi-hole/docker-pi-hole · GitHub, I can confirm your issue.
With the following lines added to misc.dnsmasq_lines
:
rev-server=192.168.2.0/24,192.168.2.1
server=/fritz.box/192.168.2.1/
server=//192.168.2.1
server=/_msdcs.fritz.box/192.168.2.1
The resulting dnsmasq.conf looks like this (click for details)
$ sudo grep -v '^#\|^$' /etc/pihole/dnsmasq.conf
hostsdir=/etc/pihole/hosts
no-resolv
port=53
server=192.168.2.53#5335
cache-size=10000
localise-queries
log-queries=proto
log-async
log-facility=/var/log/pihole/pihole.log
bogus-priv
dnssec
trust-anchor=.,20326,8,2,E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D
trust-anchor=.,38696,8,2,683D2D0ACB8C9B712A1948B27F741219298D0A450D612C483AF444A4C0FB2B16
use-stale-cache=3600
interface=eth0
local=/home.arpa/
local=/pi.hole/
host-record=pi.hole,0.0.0.0
server=/test/
server=/localhost/
server=/invalid/
server=/bind/
server=/onion/
cache-rr=ANY
filter-rr=ANY
rev-server=192.168.2.0/24,192.168.2.1
server=/fritz.box/192.168.2.1/
server=//192.168.2.1
server=/_msdcs.fritz.box/192.168.2.1
Resolution of fritz.box
, smartphone.fritz.box
and _msdcs.fritz.box
is expected to go to 192.168.2.1
.
However, lookups for fritz.box
, smartphone.fritz.box
return with config is NXDOMAIN
:
$ dig +noall +comment +answer fritz.box
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 5831
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
2025-06-06 11:33:41.558 UDP 98 192.168.2.11/55980 query fritz.box from 192.168.2.11
2025-06-06 11:33:41.604 UDP 98 192.168.2.11/55980 config fritz.box is NXDOMAIN
$ dig +noall +comment +answer smartphone.fritz.box
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 7684
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
2025-06-06 11:34:01.921 UDP 99 192.168.2.11/60131 query smartphone.fritz.box from 192.168.2.11
2025-06-06 11:34:01.924 UDP 99 192.168.2.11/60131 config smartphone.fritz.box is NXDOMAIN
Only _msdcs.fritz.box
is actually forwarded:
$ dig +noall +comment +answer _msdcs.fritz.box
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 4684
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
2025-06-06 11:34:24.768 UDP 101 192.168.2.11/59910 query _msdcs.fritz.box from 192.168.2.11
2025-06-06 11:34:24.771 UDP 101 192.168.2.11/59910 forwarded _msdcs.fritz.box to 192.168.2.1
2025-06-06 11:34:24.775 UDP 102 dnssec-query[DS] box to 192.168.2.53#5335
2025-06-06 11:34:24.776 UDP 102 reply box is DS for keytag 62294, algo 8, digest 2
2025-06-06 11:34:24.777 UDP 102 reply box is DS for keytag 63242, algo 8, digest 2
2025-06-06 11:34:24.778 UDP 103 dnssec-query[DS] fritz.box to 192.168.2.53#5335
2025-06-06 11:34:24.779 UDP 103 reply fritz.box is truncated
2025-06-06 11:34:24.783 TCP 103 dnssec-query[DS] fritz.box to 192.168.2.53#5335
2025-06-06 11:34:24.786 TCP 104 dnssec-query[DNSKEY] box to 192.168.2.53#5335
2025-06-06 11:34:24.789 TCP 104 reply box is DNSKEY keytag 872, algo 8
2025-06-06 11:34:24.789 TCP 104 reply box is DNSKEY keytag 62294, algo 8
2025-06-06 11:34:24.790 TCP 104 reply box is DNSKEY keytag 25033, algo 8
2025-06-06 11:34:24.790 TCP 104 reply box is DNSKEY keytag 23355, algo 8
2025-06-06 11:34:24.793 TCP 103 reply fritz.box is no DS
2025-06-06 11:34:24.794 UDP 101 192.168.2.11/59910 validation result is INSECURE
2025-06-06 11:34:24.795 UDP 101 192.168.2.11/59910 reply _msdcs.fritz.box is NXDOMAIN
Now, I remove all those lines from misc.dnsmasq_lines
apart from server=/_msdcs.fritz.box/192.168.2.1
, and enable Conditional Forwarding with:
true,192.168.2.0/24,192.168.2.1,fritz.box
The resulting dnsmasq.conf looks like this (click for details).
hostsdir=/etc/pihole/hosts
no-resolv
port=53
server=192.168.2.53#5335
cache-size=10000
localise-queries
log-queries=proto
log-async
log-facility=/var/log/pihole/pihole.log
bogus-priv
dnssec
trust-anchor=.,20326,8,2,E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D
trust-anchor=.,38696,8,2,683D2D0ACB8C9B712A1948B27F741219298D0A450D612C483AF444A4C0FB2B16
use-stale-cache=3600
interface=eth0
rev-server=192.168.2.0/24,192.168.2.1
server=/fritz.box/192.168.2.1
server=//192.168.2.1
local=/home.arpa/
local=/pi.hole/
host-record=pi.hole,0.0.0.0
server=/test/
server=/localhost/
server=/invalid/
server=/bind/
server=/onion/
cache-rr=ANY
filter-rr=ANY
server=/_msdcs.fritz.box/192.168.2.1
As you can see, it contains the exact same lines, if in a different order.
With CF enabled, all lookups are forwarded as expected:
$ dig +noall +comment +answer fritz.box
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58021
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3
;; ANSWER SECTION:
fritz.box. 9 IN A 192.168.2.1
2025-06-06 11:57:48.478 UDP 97 192.168.2.11/47931 query fritz.box from 192.168.2.11
2025-06-06 11:57:48.531 UDP 97 192.168.2.11/47931 forwarded fritz.box to 192.168.2.1
2025-06-06 11:57:48.536 UDP 98 dnssec-query[DS] box to 192.168.2.53#5335
2025-06-06 11:57:48.538 UDP 98 reply box is DS for keytag 62294, algo 8, digest 2
2025-06-06 11:57:48.539 UDP 98 reply box is DS for keytag 63242, algo 8, digest 2
2025-06-06 11:57:48.540 UDP 99 dnssec-query[DS] fritz.box to 192.168.2.1
2025-06-06 11:57:48.544 Insecure reply received for DS fritz.box, assuming non-DNSSEC domain-specific server.
2025-06-06 11:57:48.544 UDP 99 reply fritz.box is no DS
2025-06-06 11:57:48.545 UDP 97 192.168.2.11/47931 validation result is INSECURE
2025-06-06 11:57:48.546 UDP 97 192.168.2.11/47931 reply fritz.box is 192.168.2.1
$ dig +noall +comment +answer smartphone.fritz.box
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57826
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3
;; ANSWER SECTION:
smartphone.fritz.box. 9 IN A 192.168.2.30
2025-06-06 11:57:54.211 UDP 100 192.168.2.11/35291 query smartphone.fritz.box from 192.168.2.11
2025-06-06 11:57:54.217 UDP 100 192.168.2.11/35291 forwarded smartphone.fritz.box to 192.168.2.1
2025-06-06 11:57:54.220 UDP 100 192.168.2.11/35291 validation result is INSECURE
2025-06-06 11:57:54.221 UDP 100 192.168.2.11/35291 reply smartphone.fritz.box is 192.168.2.30
$ dig +noall +comment +answer _msdcs.fritz.box
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 54687
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
2025-06-06 11:58:01.847 UDP 101 192.168.2.11/43245 query _msdcs.fritz.box from 192.168.2.11
2025-06-06 11:58:01.853 UDP 101 192.168.2.11/43245 forwarded _msdcs.fritz.box to 192.168.2.1
2025-06-06 11:58:01.858 UDP 101 192.168.2.11/43245 validation result is INSECURE
2025-06-06 11:58:01.859 UDP 101 192.168.2.11/43245 reply _msdcs.fritz.box is NXDOMAIN
It seems the 'true'
parameter in Conditional Forwarding controls some extra behaviour, in addition to writing lines to dnsmasq.conf
.
It's also strange that this doesn't affect server=/_msdcs.fritz.box/192.168.2.1
.
jlsherman02, would you happen to recall which version you have been running prior to upgrading?
@Developers, can you take a look here, please?