One potential issue with DNSSEC is packet size. Some nameservers use a buffer that's too small to contain a full DNSSEC response, some resolvers also allocate a buffer that's too small. I believe both Asus and I should be using the buffer size with optimal compatibility at this point in dnsmasq, but I can't speak for Stubby.
Here is my question to Quad9 and their reply. I'm not a DNSSEC expert, so if you have a suggestion for a follow-up question, that would be nice. Thanks. BTW, I didn't notice any issues with other domains with DNSSEC enabled except
business.comcast.com. I'm sure there must be others.
Question:
After doing some reading online, I have some questions. Other DNS providers have no issue with enabling DNSSEC at the router / forwarder. I’ve read that Quad9’s implementation validates there is no DNS interception between Quad9 and the authoritative DNS. But that does not mean there couldn't be DNS interception between Quad9 and the user if required to keep DNSSEC disabled on their end as specified by Quad9. Unless I'm missing something – I’m a bit confused. I hope you can shed some light on this confusion. Thank You.
Quad9 Response:
While, in theory, DNSSEC
should work at the client/forwarder level, in practice, it causes subtle problems like this. While there are certainly some thousands, tens of thousands, or hundreds of thousands of devices using Quad9 with DNSSEC enabled on the forwarder or client level, there are always little issues like these that crop up. [Like breaking major websites such as business.comcast.com]
DNSSEC validation is critically time sensitive. Devices without a real-time clock (RTC), or rather, a CMOS/watch battery, to keep extremely accurate time, will experience clock drift, and even some amount of milliseconds can start throwing BOGUS responses. The most-common occurrence of this is running DNS forwarders, like Pi-Hole, on a Raspberry Pi, which has no real-time clock. I have no idea whether your router has a real-time clock; I assume yes, but I thought this was an important point anyway.
Another issue is very-low TTL resource records (RRs). Anything under 60 seconds. While the forwarder/client device is asking the recursive service (Quad9) to manually re-fetch the DNSSEC records, that the TTL of the original RR could've expired during that time, causing a SERVFAIL. If that were to happen on the Quad9 side, our recursive software would hold your query until a fresh DNSSEC validation is initiated. <60s TTLs are unfortunately more common, and with that, comes more problems. As it is, one of the CNAMEs in the DNS lookup in your use case has a 20s TTL: e26014.dscx.akamaiedge.net. That DNSSEC failure would then be cached for a small amount of time, and the cycle repeats. By not caching DNSSEC failures, with would reduce these issues, but would open ourselves to various attacks vectors.
The last issue is that, it's frankly a massive waste of resources. Forwarders or clients doing their own DNSSEC validation greatly increases the cost of the DNSSEC validation for each domain which is DNSSEC-signed. Quad9's stance is: "If you don't trust Quad9 to perform DNSSEC validation, you should be running your own recursor".
With regards to the security aspect of this (MITM), the answer is
Encrypted DNS [like DoT or DoH ],
not DNSSEC on the client/forwarder. Encrypted DNS cannot be tampered with (MITM), unless that device is part of a corporate network which uses MITM as a security mechanism, in which case, that's a completely different topic.
Also See: Costs and Benefits of Local DNSSEC Validation
https://cyounkins.medium.com/costs-and-benefits-of-local-dnssec-validation-53c72ca9059b