Manually-added Blocked zone returns RCODE=Refused instead of NXDOMAIN — is this expected?
Running Technitium DNS Server in a cluster (dns1 + dns2). I added stun.l.google.com via the Blocked tab (top nav, not Settings → Blocking). The zone got auto-created with NS + SOA records pointing to dns1.home.arpa, no A or AAAA records, which matches what I'd expect for an empty Blocked-tab entry.
The Query Logs (Sqlite app) show this when a client queries the blocked domain:
Client: 10.99.0.11
Protocol: Udp
Response Type: Authoritative
RCODE: Refused
Domain: stun.l.google.com
Type: A (and AAAA)
So Technitium is responding authoritatively with RCODE=Refused — not NXDOMAIN, not NoError/NODATA.
I expected NXDOMAIN given:
- The zone exists locally as an empty zone (NS + SOA, no resource records)
- No "Allow Recursion Only For Private Networks" path is involved (the client is on RFC1918 10.0.0.0/8 and the log says response source is Authoritative, not Recursive)
- The CHANGELOG mentions: "Fixed critical bug in block list condition check causing server to respond with RCODE=Refused when only using Blocked zone. Added option to respond with RCODE=NxDomain for blocked domains instead of returning 0.0.0.0 address."
That changelog entry suggests there's a setting to control this, but I can't find a "Blocking Type" control in Settings → Blocking on my version. Some older Reddit threads mention a "Blocking Type" radio (NX Domain / Anyone Address / Custom Address), but on my UI that section doesn't appear that way.
Questions:
- Is Refused the expected/correct response code for a manually-added Blocked-tab entry on current versions of Technitium, or is there a setting I'm missing that would make it return NXDOMAIN?
- Is the "Blocking Type" setting that older posts reference still present in the current UI? If so, where? If not, what replaced it?
- Does the Blocking Type setting (if present) only apply to Block List Zone (URL-based lists) entries, or does it also affect the manually-added Blocked tab entries?
- The dashboard "Blocked" counter doesn't increment for these Refused responses — they show up under "Refused" instead. Is that the intended categorization, or should manually-blocked-zone Refused responses count toward the Blocked counter?
Functionally the block is working — the client (kvmd-janus on a GL.iNet KVM) makes a few retries on Refused then gives up, which is actually the desired behavior. But I'd like to understand the response code logic so I can configure it deliberately rather than accidentally.
Version: 14.3
Thanks!