Skip to content

Local host overrides for public domain intermittently ignored with DNSSEC enabled, clients receive upstream NXDOMAIN instead of local answer #2841

@old-square-eyes

Description

@old-square-eyes

Versions

  • Pi-hole: v6.4.1
  • Web: v6.5
  • FTL: v6.6

Platform

  • OS and version: Debian-based Linux on multiple hosts
  • Platform: Native installs on multiple LAN hosts / VMs

Expected behavior

A hostname configured as a local Pi-hole override should be answered locally every time, regardless of which LAN client asks the question.

If a local host record exists for a name under a public domain, Pi-hole should return the configured local A record instead of falling through to upstream/public recursion. In short, the override should actually override.

Related issues:

Actual behavior / bug

The same Pi-hole server returns different answers for the same locally configured hostname depending on which client asks.

For the same query name and same Pi-hole IP:

  • querying from the Pi-hole host itself returns NOERROR with the configured local A record
  • querying from another Linux LAN client returns NXDOMAIN with the public authoritative SOA for the parent domain

This should not happen for a local host override.

Important context: this setup worked until a few weeks ago, and the breakage appears to line up with recent Pi-hole v6-era behavior changes around local DNS / local-domain handling. Similar reports describe local DNS records or split-DNS forwarding working before upgrade and failing afterward:

I initially suspected DNSSEC because disabling DNSSEC made some cases start working again, but the client-dependent behavior still reproduces even after:

  • setting dns.domain.name = ""
  • setting dns.dnssec = false
  • setting dns.localise = false

Steps to reproduce

Steps to reproduce the behavior:

  1. Configure local host overrides in Pi-hole for names under a public domain, for example:
    • host-a.example.test -> 10.0.10.10
    • node-1.lab.example.test -> 10.0.20.20
  2. Confirm the records exist in FTL config under dns.hosts.
  3. From the Pi-hole host itself, query the Pi-hole LAN IP:
    • dig @10.0.20.53 node-1.lab.example.test
  4. Observe NOERROR with the configured local A record.
  5. From another Linux client on the LAN, query the same Pi-hole IP for the same name:
    • dig @10.0.20.53 node-1.lab.example.test
  6. Observe NXDOMAIN with the public SOA for example.test instead of the local A record.

Optional additional attempts that did not resolve the issue:

  1. Disable DNSSEC
  2. Set dns.domain.name to an empty string
  3. Set dns.localise to false
  4. Restart pihole-FTL
  5. Repeat the same tests
  6. Observe that the same client-dependent mismatch can still occur

References:

Debug Token

  • URL: Please replace with your pihole -d upload token

Screenshots

If applicable, add screenshots to help explain your problem.

Additional context

This was reproduced across multiple Pi-hole instances configured as LAN DNS servers.

The local records were present in pihole-FTL --config under dns.hosts, so this does not appear to be a missing-record problem. Pi-hole’s FTL config docs describe these as local host mappings managed by FTL:

Behavior differed between clients:

  • macOS with Firefox appeared to continue working
  • Linux clients, including Home Assistant OS and another Linux machine, hit the failing path

The strongest evidence is that the same Pi-hole server returned different results for the same query at nearly the same time:

From the Pi-hole host:

dig @10.0.20.53 node-1.lab.example.test
-> NOERROR
-> ANSWER SECTION: node-1.lab.example.test. 0 IN A 10.0.20.20

From another Linux client:

dig @10.0.20.53 node-1.lab.example.test
-> NXDOMAIN
-> AUTHORITY SECTION: example.test. IN SOA <public authoritative SOA>

This makes it look like Pi-hole/FTL is varying behavior by client/query path, or incorrectly bypassing local host overrides for some clients. Recent v6 reports about local entries returning NXDOMAIN unexpectedly seem related.

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions