On 5/8/25 16:06, Simon Kelley wrote:
On 5/4/25 18:29, Dominik Derigs wrote:
Hey Simon and list readers,
we are seeing an interesting report, first the log file:
Apr 21 19:00:01 dnsmasq[310194]: query[PTR] 1.1.0.10.in-addr.arpa from
127.0.0.1
Apr 21 19:00:01 dnsmasq[310194]: forwarded 1.1.0.10.in-addr.arpa to
10.0.1.1
Apr 21 19:00:01 dnsmasq[310194]: dnssec-query[DS] 10.in-addr.arpa to
8.8.4.4
Apr 21 19:00:01 dnsmasq[310194]: Insecure DS reply received for 10.in-
addr.arpa, check domain configuration and upstream DNS server DNSSEC
support
Apr 21 19:00:01 dnsmasq[310194]: reply 10.in-addr.arpa is BOGUS DS -
not secure
Apr 21 19:00:01 dnsmasq[310194]: validation 1.1.0.10.in-addr.arpa is
BOGUS
Relevant config lines are:
no-resolv
bogus-priv
server=8.8.8.8
server=8.8.4.4
rev-server=10.0.1.0/24,10.0.1.1
server=/fritz.box/10.0.1.1
dnssec
trust-anchor=.,<the default value)
In the context of bogus-priv - is it actually expected that DNSSEC-
related queries are sent to non-local servers? My interpretation is
that they shouldn't be sent upstream here...
Best,
Dominik
This is a bit weird.
First, the bogus-priv thing. Without the
rev-server=10.0.1.0/24,10.0.1.1
line, then bogus-priv would have stopped the query going upstream,
but rev-server... gives us permission to send it to 10.0.1.1, so bogus-
priv is not relevant.
In previous releases, because the query is being sent to a domain-
specific server, dnsmasq would not have attempted to do DNSSEC
validation, unless there was a configured DS record for the domain. In
2.92 that changes to allow validation in the case that there's a chain-
of-trust through the DNS tree into the data from the domain-specific
server. The code handles the case where there's a non-secure answer from
a domain-specific server.
This works pretty well, and in fact it works in this case if you change
the rev-server line to
rev-server=10.0.1.0/8,10.0.1.1
now, dnsmasq will send the DS query for 10,in-addr.arpa to 10.0.1.1, get
an unsigned answer, log a warning and continue.
Because the prefix is 24, in your case, the query goes to 8.8.8.8, and
then we hit something strange. in-addr.arpa is DNSSEC signed and 10.in-
addr.arpa is NXDOMAIN. We'd therefore expect a signed answer proving
that 10.in-addr.arpa doesn't exist.
If you ask the authoritative servers for in-addr.arpa for the DS record
for 10.in-addr.arpa, you do, indeed get a signed answer saying it
doesn't exist.
If you ask 8.8.8.8 or 1.1.1.1, you get an unsigned answer that says it
doesn't exist. That's what trips things up. My guess is that we're
tripping over code in the big public nameservers that stops them
spamming the in-addr.arpa nameservers with all the millions of pointless
and erroneous reverse lookups for RFC1918 addresses that escape into the
public DNS. It's not at all sensible to trust non-signed non-existence-
of-DS answers from non-domain-specific upstream servers. That provides a
trivial way to bypass all of DNSSEC.
I guess we could solve this by making bogus-priv add the equivalent of
local=/10.in-addr.arpa/
local=/168.192.in-addr.arpa/
etc
to the config, but only for DNSSEC, basically the same low-down trick
that Google and Cloudflare are playing.
TL;DR
Change the prefix length in rev-server to 8 and it all works fine. If we
want to avoid tripping up on this, we may need to play tricks.
Any suggestions welcome.
Cheers,
Simon.
https://thekelleys.org.uk/gitweb/?p=dnsmasq.git;a=commit;h=8ddabd11bcd948d13b88f0ccbfe2e319fc042e40
Looks like a good solution to me, and certainly fixes the immediate problem.
Cheers,
Simon.
_______________________________________________
Dnsmasq-discuss mailing list
[email protected]
https://lists.thekelleys.org.uk/cgi-bin/mailman/listinfo/dnsmasq-discuss