Skip to content

Disable "nameserver ADDRESS refused to do a recursive query" for conditional forwarders #2836

@JulioQc

Description

@JulioQc

Versions

  • Pi-hole: 6.4.1
  • Web: 6.5
  • FTL: 6.6

Platform

  • OS and version: Debian 13

  • Platform: Proxmox

  • Pi-hole (192.168.0.7) → Unbound (recursive resolver)

  • AD DNS (192.168.0.2):

    • Authoritative for localdomain.ca
    • No root hints
    • Forwards unknown domains → Pi-hole
  • Pi-hole:

    • Conditional forwarding enabled for localdomain.ca → 192.168.0.2

Expected behavior

Conditional forwarders should be treated as authoritative-only servers for their domain.

  • Queries for the configured domain (e.g. localdomain.ca) should be forwarded
  • These servers should not be used for recursive queries
  • A REFUSED response for recursion should not mark the server as unreliable

Actual behavior / bug

Pi-hole (FTL/dnsmasq) sends recursive queries to a conditional forwarder (AD DNS).

  • AD DNS correctly responds: REFUSED (no recursion enabled for external domains)
  • Pi-hole logs: nameserver 192.168.0.2 refused to do a recursive query
  • After repeated events, Pi-hole stops forwarding queries to that server

Result:

  • Local domain resolution fails (NXDOMAIN)
  • Restarting pihole-FTL restores functionality temporarily

Steps to reproduce

Configure Pi-hole conditional forwarding:

  • Domain: localdomain.ca
  • Target: 192.168.0.2 (AD DNS)

Ensure AD DNS:

  • Is authoritative for the domain
  • Does NOT perform recursion (disable recursion in DNS server settings )

Generate mixed DNS traffic:

  • Local queries (e.g. host.localdomain.ca)
  • External queries (e.g. google.ca)

Observe Pi-hole logs:

  • refused to do a recursive query

After some time:

  • Local domain stops resolving via Pi-hole
  • Restarting Pi-hole restores it temporarily

Additional context

Conditional forwarders appear to be treated as general upstream resolvers under certain conditions, causing:

  • Incorrect recursive queries
  • Misinterpretation of REFUSED as failure
  • Temporary upstream suppression

Suggested fix / behavior change

  • Do not send recursive queries to conditional forwarders
  • Treat REFUSED as expected for authoritative servers
  • Do not penalize / suppress conditional forwarders based on recursion refusal

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions