Pi-hole / Troubleshooting

Pi-hole Installed but Clients Get No DNS Response

Separate clients bypassing Pi-hole from Pi-hole answering nothing by checking FTL state, a direct query, the upstream path, port 53 ownership, and the effective client resolver before any upstream or DHCP change.

The official Pi-hole command reference documents the diagnostic surface used on this page: status and query probes, the debugger, and the reloadlists and reloaddns subcommands. Notably, pihole reloaddns flushes and reloads the FTL DNS cache and does not re-read configuration files, so it cannot apply configuration edits.[1]

Two boundaries in this diagnosis come straight from official Pi-hole documentation rather than inference. The Docker Tips and Tricks page states that the systemd-resolved stub listener will prevent Pi-hole from listening on port 53, with a documented drop-in fix. The Post-Install page states that the network must be configured so DHCP clients use Pi-hole as their DNS server, offering the built-in DHCP server or manual per-device setup as alternatives.[2][3]

Applicability

Products
Pi-hole
Scope
For Pi-hole v6.x (Core, FTL, and Web with pihole.toml-based configuration, per the FTL Configuration Reference) on a bare-metal host or in Docker, where clients are expected to use Pi-hole as their DNS resolver but receive no answer. Version 5 paths are excluded and must be version-gated out wherever configuration differs. This page does not cover blocklist curation, web-interface-only failures with working DNS, or upstream-provider outages as the primary subject.[1][3][5]
Last verified

Symptoms

  • DNS queries sent to the Pi-hole address receive no response or time out, while the Pi-hole host itself is up. Clients that were never configured to use Pi-hole, and therefore bypass it entirely, are a different observation that this page separates first.[1][3]

Quick diagnosis

Separate clients bypassing Pi-hole from Pi-hole answering nothing by probing FTL, the direct query, the upstream path, port 53, and the effective client resolver.

Read-only

Confirm Pi-hole FTL reports a running state

Use the documented pihole status probe to confirm the service state before any deeper check. Run it in the environment where Pi-hole executes: on the bare-metal host directly, or inside the Pi-hole container/runtime using the deployment's documented access method — never as a container command run on the Docker host shell. A stopped FTL explains every downstream symptom and must be handled before upstream, port, or client reasoning begins.[1]

pihole status
Safe / low risk

Send one direct query to Pi-hole and one past it

Run two probes in two different environments. First, from a client, query a test name at the Pi-hole address: this proves whether the client can reach Pi-hole. Second, from the Pi-hole runtime itself (the bare-metal host, or inside the Pi-hole container/runtime using the deployment's documented access method), query the same name at a configured upstream: this proves whether Pi-hole can reach the upstream. If the client-side Pi-hole query answers, the fault is in what clients use; if the client query is silent but the runtime-side upstream query answers, the fault is at the Pi-hole host level; if the runtime-side upstream query is also silent, the fault is upstream or in basic outbound connectivity.[1][4]

dig @<pihole-ip> <test-name>
dig @<upstream-ip> <test-name>
Read-only

Do not change upstreams, resolvers, or DHCP before classification

Do not edit the upstream list, disable stub resolvers, or change DHCP-advertised DNS before the probes separate an FTL outage, a port conflict, an upstream failure, and a client bypass. A change made before classification can move every client at once without fixing the actual boundary.[1]

Interactive troubleshooter

Your answers stay in this browser tab. The tool does not connect to your systems or send diagnostic results.

Guided check / step 1

Safe diagnostic guidance

Are clients failing to get DNS answers they expect through Pi-hole?

Confirm the subject is missing DNS answers for clients that should use Pi-hole. A blocklist dispute, a web-interface problem with working DNS, or an upstream outage affecting everything equally is a different observation.[1]

Read the complete diagnostic tree without using the controls
  1. Are clients failing to get DNS answers they expect through Pi-hole?

    Confirm the subject is missing DNS answers for clients that should use Pi-hole. A blocklist dispute, a web-interface problem with working DNS, or an upstream outage affecting everything equally is a different observation.[1]

    • Yes, clients get no DNS answerDoes Pi-hole FTL report a running DNS state?
    • No, a different observationInvestigate the actual DNS observation
  2. Does Pi-hole FTL report a running DNS state?

    Use the documented status surface. A stopped service explains everything downstream and is handled first; only a running service continues to query-level reasoning.[1]

    • Yes, FTL is runningDoes a client-side query addressed to Pi-hole answer?
    • No, the service is stoppedReturn the stopped DNS service through documented control
    • Cannot confirm the service stateCollect a Pi-hole DNS evidence packet
  3. Does a client-side query addressed to Pi-hole answer?

    From a client, send one query straight at the Pi-hole address. An answer means the client can reach Pi-hole and the fault is in what the clients actually use; silence continues toward the Pi-hole-runtime upstream branch.[1]

    • Yes, the client reaches Pi-hole and it answersDo the failing clients actually use Pi-hole as their resolver?
    • No answer from Pi-holeDoes a query from the Pi-hole runtime to an upstream answer?
    • Probe result is unclearCollect a Pi-hole DNS evidence packet
  4. Does a query from the Pi-hole runtime to an upstream answer?

    From the Pi-hole runtime itself (the bare-metal host, or inside the Pi-hole container/runtime using the deployment's documented access method), query a configured upstream directly. An answer there isolates the fault to the Pi-hole host level; silence there points at the upstream path or basic outbound connectivity instead. A client-side upstream query does not prove this, because it runs in a different network context.[4]

    • Yes, the runtime reaches the upstreamDoes the documented stub resolver hold port 53 on this host?
    • No, the upstream is silent from the runtimeCorrect the unreachable upstream path
    • Probe result is unclearCollect a Pi-hole DNS evidence packet
  5. Does the documented stub resolver hold port 53 on this host?

    Check which process owns port 53. This branch applies specifically to hosts running the systemd-resolved stub listener documented as preventing Pi-hole from binding port 53; other port owners need their own investigation.[2]

    • Yes, the documented stub holds itFree port 53 using the documented stub procedure
    • No, port 53 ownership is fineCollect a Pi-hole DNS evidence packet
    • Cannot confirm port ownershipCollect a Pi-hole DNS evidence packet
  6. Do the failing clients actually use Pi-hole as their resolver?

    Read the effective resolver on a failing client and the DHCP-advertised DNS. The official setup expects DHCP clients to use Pi-hole; clients with another resolver bypass it no matter how healthy it is.[3]

    • No, they use another resolverDirect the bypassing clients at Pi-hole
    • Yes, they use Pi-hole and still failCollect a Pi-hole DNS evidence packet
    • Cannot confirm the effective resolverCollect a Pi-hole DNS evidence packet
  7. Return the stopped DNS service through documented control

    Start the DNS service through the deployment's documented service control and re-run the status probe plus one direct query. Upstreams, ports, and clients do not change on this branch.[1]

  8. Correct the unreachable upstream path

    Replace the failing upstreams with working documented options through the deployment's configuration surface, then verify with a direct upstream query followed by a direct Pi-hole query. Record the prior list for rollback.[4]

  9. Free port 53 using the documented stub procedure

    Disable the stub listener with the documented drop-in, repoint the host resolver symlink, and restart the stub service exactly as documented. This branch never applies to hosts without that resolver.[2]

  10. Direct the bypassing clients at Pi-hole

    Configure the router so DHCP clients use Pi-hole, enable the built-in DHCP server only after disabling DHCP on the router, or set individual devices manually as a last resort — after read-only proof of the bypass.[3]

  11. Investigate the actual DNS observation

    A blocklist dispute needs allowlist and query-log investigation. A web-interface failure with working DNS needs web-server investigation. An everything-equally-down outage needs upstream and connectivity investigation.[1]

  12. Collect a Pi-hole DNS evidence packet

    Preserve the release line, the FTL status output, both direct-probe results, the port 53 ownership, the effective client resolver with the DHCP advertisement, and the configured upstreams. Send the sanitized evidence to the operator; no documented branch remains.[1]

Detailed diagnosis

Read-only

1. Establish whether FTL DNS is running

Confirm through the documented status surface whether pihole-FTL is running and serving DNS. A stopped service is the first branch and exits the deeper tree; only a running service continues to query-level reasoning.[1]

Read-only

2. Compare the client-to-Pi-hole probe against the Pi-hole-runtime upstream probe

Run the two probes in their separate environments. The client-to-Pi-hole query proves the client can reach Pi-hole. The Pi-hole-runtime upstream query (run on the bare-metal host, or inside the Pi-hole container/runtime using the deployment's documented access method) proves Pi-hole can reach its upstream. Client queries answering while clients still fail points at client configuration; the client probe silent while the runtime upstream probe answers points at the Pi-hole host level; the runtime upstream probe also silent points upstream or at basic outbound connectivity.[1][4]

Read-only

3. Check who owns port 53 on the Pi-hole host

When Pi-hole is silent but the upstream answers, check which process holds TCP and UDP port 53 on the host. The documented systemd-resolved case applies specifically to hosts running that stub resolver (notably Ubuntu and Fedora derivatives, including Docker hosts): its stub listener prevents Pi-hole from binding port 53. Do not generalize this branch to hosts without that resolver.[2]

Read-only

4. Verify the resolver the failing client actually uses

When Pi-hole answers direct queries but clients still fail, read the effective resolver on a failing client and the DHCP-advertised DNS before changing anything. The official Post-Install page expects DHCP clients to use Pi-hole, with the built-in DHCP server or manual per-device setup as documented alternatives; prefer this read-only verification over editing DHCP first.[3]

Supported scenarios

These observations narrow the next investigation; they do not establish a unique cause.

pihole-FTL is not running or not serving DNS

With the DNS service stopped, every client query fails regardless of upstreams, ports, or client configuration. The documented status surface reports this state directly.[1]

How to check: Confirm the stopped state through the status probe before touching upstreams, ports, or clients.[1]

Another resolver holds port 53 on the Pi-hole host

The official Docker Tips and Tricks documentation states that the systemd-resolved stub listener prevents Pi-hole from listening on port 53, so queries never reach FTL even though the service may otherwise be healthy. This branch applies to the documented stub-resolver case, not to arbitrary port conflicts.[2]

How to check: Confirm which process holds port 53 and confirm the host runs the documented stub resolver before applying its documented fix.[2]

Pi-hole cannot complete recursion through its upstreams

Pi-hole forwards client queries to its configured upstream servers, chosen at setup from the documented provider options. When direct upstream queries also fail, or the configured upstreams are unreachable or wrong, Pi-hole has no complete answer to return.[4]

How to check: Confirm direct upstream queries fail or the configured upstream list is unreachable or incorrect, while Pi-hole itself is running and bound.[4][1]

Failing clients are not actually using Pi-hole

The official Post-Install documentation expects the network to direct DHCP clients to Pi-hole; clients with another advertised resolver, hardcoded device DNS, or encrypted-DNS bypass never send their queries to Pi-hole, so no Pi-hole-side fix can change their behavior.[3]

How to check: Read the effective resolver on a failing client and the DHCP-advertised DNS to confirm Pi-hole is absent before changing any network configuration.[3]

Next actions and procedure boundaries

Safe / low risk

Stopped FTL: return the DNS service through the deployment's documented control

If the status probe shows the service stopped, start it through the deployment's documented service control (system service on bare metal, container restart policy on Docker) and re-run the status probe plus one direct query. This corrects only a stopped service; it does not change upstreams, ports, or clients.[1]

Safe / low risk

Stale cache behavior: flush and reload the FTL DNS cache

Where the failure follows list or cache changes rather than a stopped service, flush and reload the FTL DNS cache with the documented pihole reloaddns subcommand, run in the environment where Pi-hole executes (on the bare-metal host, or inside the Pi-hole container/runtime using the deployment's documented access method). Note its documented limit: it does not re-read configuration files, so it cannot apply upstream or structural edits.[1]

pihole reloaddns
Potentially disruptive

Broken upstream path: correct the configured upstreams

Replace the unreachable or incorrect upstream servers with working ones chosen from the documented upstream options, using the deployment's documented configuration surface (the FTL configuration reference documents the v6 config file format; apply edits through that surface), then verify with a Pi-hole-runtime upstream query followed by a client query to Pi-hole. Apply any required service handling only through the deployment's documented service control.[4][5][1]

Before changing anything

Risk
Changing upstreams alters name resolution for every client using Pi-hole. A wrong or unreachable replacement extends the outage to the whole network instead of fixing it.[4]
Safer check
Prove with direct queries that the current upstreams fail while Pi-hole is running and bound. Record the current upstream list before editing.[4][1]
Expected result
After the correction, direct upstream queries and direct Pi-hole queries both answer, and client queries resume without per-device workarounds.[4]
Backup / recovery access
Record the full prior upstream configuration so it can be restored exactly.[4]
Rollback
Restore the recorded prior upstream list if resolution does not recover, then re-run the paired direct probes before further changes.[4]
Potentially disruptive

Stub-resolver conflict: free port 53 per the documented stub procedure

Only on hosts running the documented systemd-resolved stub listener that prevents Pi-hole from binding port 53: disable the stub listener with the documented drop-in, repoint the host resolver symlink as documented, and restart the stub service. This branch never applies to hosts without that resolver.[2]

sudo sh -c 'mkdir -p /etc/systemd/resolved.conf.d && printf "[Resolve]\nDNSStubListener=no\n" | tee /etc/systemd/resolved.conf.d/no-stub.conf'
sudo sh -c 'rm -f /etc/resolv.conf && ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf'
systemctl restart systemd-resolved

Before changing anything

Risk
Reconfiguring the host resolver changes name resolution for the host itself. A wrong edit can leave the Pi-hole host without working DNS, which also blocks repair downloads and debug-log uploads.[2]
Safer check
Confirm the stub listener actually holds port 53 and confirm the host runs the documented resolver. Record the current resolver configuration before editing.[2]
Expected result
After the change, port 53 is free for Pi-hole to bind, the host still resolves names, and direct Pi-hole queries answer.[2]
Backup / recovery access
Record the prior stub configuration and resolver symlink target so both can be restored exactly.[2]
Rollback
Remove the drop-in, restore the prior resolver symlink, and restart the stub service to return the host to its recorded prior resolver state.[2]
Potentially disruptive

Client bypass: direct clients at Pi-hole through documented setup

After read-only proof that failing clients use another resolver, direct them at Pi-hole using the documented Post-Install options in order: configure the router so DHCP clients use Pi-hole, or enable the built-in DHCP server after disabling DHCP on the router, or set individual devices manually as a last resort.[3]

Before changing anything

Risk
Changing DHCP-advertised DNS or enabling a second DHCP server affects every device on the network. Two active DHCP servers in particular can break addressing for all clients.[3]
Safer check
Prove with effective-resolver reads that the failing clients bypass Pi-hole. Record the current DHCP DNS advertisement and confirm exactly one DHCP server will remain active.[3]
Expected result
After the change, failing clients show Pi-hole as their effective resolver and their queries appear answered in Pi-hole.[3]
Backup / recovery access
Record the prior DHCP DNS advertisement and DHCP server assignment so the previous network configuration can be restored.[3]
Rollback
Restore the recorded prior DHCP DNS advertisement and server assignment if clients do not recover, then re-read the effective resolver before further changes.[3]
Read-only

If no branch matches: preserve the evidence

Record the installed Pi-hole release line, the FTL status output, the paired direct-probe results, the port 53 ownership, the effective client resolver and DHCP advertisement, and the configured upstreams. Send the sanitized evidence to the operator; the official references describe no procedure for a failure outside these branches.[1]

Warnings and boundaries

Do not treat pihole reloaddns as a configuration reload: the official command reference states it flushes and reloads the DNS cache without re-reading configuration files, so upstream or structural edits need their own documented application path.[1]
Do not generalize the systemd-resolved stub procedure beyond its documented case. It applies to hosts running that stub listener; on other systems the port owner and the correct procedure differ.[2]

Sources

Links were reviewed on 2026-09-07. Reachability and automated validation do not replace editorial verification of each claim.

  1. The pihole Command
    Pi-hole · Tier A · accessed 2026-09-07
  2. Tips and Tricks (Docker)
    Pi-hole · Tier A · accessed 2026-09-07
  3. Post-Install
    Pi-hole · Tier A · accessed 2026-09-07
  4. Upstream DNS Providers
    Pi-hole · Tier A · accessed 2026-09-07
  5. Pi-hole FTL Configuration Reference
    Pi-hole · Tier A · accessed 2026-09-07