Skip to content

DNSSEC validation fails for belastingdienst.nl with EDE 22/23 and ConnectionReset, while direct TCP queries succeed #1700

@Tankdoz

Description

@Tankdoz

When DNSSEC validation is enabled, Technitium DNS Server fails to resolve the domain “belastingdienst.nl” (dutch tax service). The server repeatedly returns SERVFAIL together with EDE 22 (No Reachable Authority) and EDE 23 (Network Error: ConnectionReset).
When DNSSEC validation is disabled, the domain resolves immediately without any issues.
The failure only occurs during recursive DNSSEC validation performed by Technitium.
Direct TCP queries from the host system and from inside the Docker/LXC container to the authoritative nameservers of belastingdienst.nl succeed without any problems.
This strongly suggests that the issue is inside Technitium’s DNSSEC validation path (EDNS negotiation, fallback logic, or handling of large DNSSEC responses), not in the network.

Environment

  • Technitium DNS Server version: 14.3
  • Deployment:
  • Node 10: Docker (raspberry-pi)
  • Node 14: Docker (VM proxmox)
  • Node 15: LXC (LXC proxmox, primary node)
  • Cluster mode enabled
  • DNSSEC validation enabled → failure
  • DNSSEC validation disabled → works
  • All nodes show identical behavior

Observed behavior
With DNSSEC enabled, queries for belastingdienst.nl return:

  • SERVFAIL
  • EDE 22 (No Reachable Authority)
  • EDE 23 (Network Error: ConnectionReset)
  • EDE 13 (Cached Error)
  • EDE 3 (Stale Answer)
    This happens for both A and AAAA queries.

Expected behavior
Technitium should be able to perform full DNSSEC validation for belastingdienst.nl, including:

  • DS lookup at the root zone
  • DS lookup at the .nl zone
  • DNSKEY lookup at belastingdienst.nl
  • EDNS negotiation
  • TCP fallback for large DNSSEC responses

What works

  • Direct TCP queries from the host (outside Technitium)
    Running a TCP query directly to the authoritative nameserver (for example 85.159.100.53) returns a correct NOERROR response with the A record for belastingdienst.nl.
  • Direct TCP queries from inside the Docker container
    Running the same query inside the Technitium container also returns a correct NOERROR response.
  • With DNSSEC disabled in Technitium
    Queries to belastingdienst.nl resolve instantly and correctly.
    This confirms that:
  • TCP/53 works
  • UDP works
  • The authoritative nameservers respond correctly
  • The network path is fine
  • Only Technitium’s DNSSEC validation path fails

Reproduction steps

  • Enable DNSSEC validation in Technitium
  • Ensure no forwarders are configured (recursive mode)
  • Query “belastingdienst.nl” through Technitium
  • Observe SERVFAIL with EDE 22 and EDE 23
  • Disable DNSSEC validation
  • Query again → domain resolves normally

Analysis
Because:
• direct TCP queries work from host and container
• UDP works
• TCP/53 is not blocked
• MTU issues are unlikely (large DNSSEC responses succeed directly)
• only Technitium’s recursive DNSSEC validation fails

…it appears to be an issue in Technitium’s DNSSEC validation logic, possibly involving:
• EDNS buffer size negotiation
• fallback to TCP
• handling of large DNSSEC responses
• retry logic between root → .nl → belastingdienst.nl
• or interaction with the recursive resolver’s selection logic

Request
Could you investigate whether Technitium’s DNSSEC validation path has an issue when resolving belastingdienst.nl, especially around EDNS handling or TCP fallback during DNSSEC validation?
I can provide logs or packet captures if needed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions