Hi. After upgrading to IPFire 203 we are experiencing DNS issues. I’m not a DNS expert so have been doing my best to diagnose with the help of AI, which I’ve then used to write this summary (it probably explains the issue better than I can myself). APoligies if this offends…
Summary
DNS resolution of www.office.com fails with SERVFAIL, while the apex domain office.com and other domains resolve normally.
Our IPFire (Core 203) forwards queries to Google DNS (8.8.8.8 and 8.8.4.4).
Knot rejects a valid NSEC response beneath tm.svc.cloud.microsoft with:
EDE: 12 (NSEC Missing)
Google DNS validates the same response successfully. Disabling checking for an individual query with +cd also succeeds. Clearing the complete Knot cache did not resolve the problem.
Basic reproduction
Run locally on the affected IPFire machine:
nslookup office.com
nslookup www.office.com
Results:
office.com → resolves successfully
www.office.com → SERVFAIL
www.office.com follows this CNAME chain:
www.office.com
→ officehomemcm.anc.tm.svc.cloud.microsoft
→ officehomemcm.afdcafe.tm.svc.cloud.microsoft
→ home-office365-com.b-0004.b-msedge.net
→ b-0004.b-msedge.net
Diagnostic evidence
A normal local query fails:
dig www.office.com A
Result:
status: SERVFAIL
EDE: 12 (NSEC Missing)
Disabling DNSSEC checking for the query succeeds:
dig +cd www.office.com A
Querying the configured upstream resolvers directly also succeeds:
dig @8.8.8.8 www.office.com A
dig @8.8.4.4 www.office.com A
The failure can be reproduced more specifically:
dig tm.svc.cloud.microsoft NS +dnssec
Result:
status: SERVFAIL
EDE: 12 (NSEC Missing)
The same local query succeeds with validation disabled:
dig +cd tm.svc.cloud.microsoft NS +dnssec
It returns a signed NSEC proof containing:
tm.svc.cloud.microsoft.
NSEC \000.tm.svc.cloud.microsoft. RRSIG NSEC
Google DNS validates that proof successfully and sets the AD flag:
dig @8.8.8.8 tm.svc.cloud.microsoft NS +dnssec
The cloud.microsoft chain of trust validates successfully locally:
dig cloud.microsoft DS +dnssec
dig cloud.microsoft DNSKEY +dnssec
Both return NOERROR with the AD flag.
The complete resolver cache was cleared:
kresctl cache clear .
The failure reproduced immediately afterward, so it is not a cache issue.