Wi-Fi & Network
Pi-hole isn't blocking ads
Find the path your devices use to bypass Pi-hole — wrong DHCP DNS, an IPv6 leak, browser DoH, hardcoded resolvers — and seal each one.
Problem summary
When Pi-hole runs but ads still show, the usual cause is not a broken blocklist — it's that some or all clients are reaching a different resolver. The job is to prove which bypass path is open, then close it.
On the Pi-hole dashboard, watch the query log while browsing on the affected device.
ipconfig /all (Windows) • Settings > Wi-Fi > (network) > details (macOS/iOS/Android)
The device's lookups appear in the log in real time, attributed to its IP.
If the device breaks when its hardcoded DNS is blocked, allow it as a documented exception rather than fighting it.
Layer path
Step-by-step runbook
Start here. Do each check in order, compare it to the expected result, and stop when the evidence explains the failure or the safe stop point applies.
Confirm Pi-hole is healthy first
Check: Open the dashboard; confirm FTL is running, blocklists are populated (gravity has domains), and lookups from a known-good wired client appear in the log.
Expected result: Pi-hole itself resolves and blocks for at least one client.
If not: If even a wired client isn't filtered, fix the Pi-hole install/upstream before chasing per-client bypasses.
Pin the bypass to one client and watch the log
Check: On the device that shows ads, browse while filtering the query log to its IP.
Expected result: Either its queries appear (blocklist/content problem) or they don't (routing/bypass problem) — this splits the whole diagnosis in two.
If not: If unsure which IP it is, check the device's network details first.
Verify the handed-out DNS for IPv4 and IPv6
Check: Read the client's active DNS via ipconfig /all or the OS network details; check the router's DHCP DNS option and whether it advertises an IPv6 DNS.
Expected result: The client shows the Pi-hole IP for both protocols.
If not: If a public resolver or rogue IPv6 DNS appears, correct DHCP/RA so Pi-hole is the only handed-out resolver.
Close the encrypted-DNS paths
Check: Disable browser Secure DNS/DoH, OS Private DNS, and (for home Wi-Fi) iCloud Private Relay on the affected device; note any always-on VPN.
Expected result: With encrypted-DNS off, the client's lookups now land in the Pi-hole log.
If not: If you can't change every device by hand, block DoH and redirect outbound port 53 at the firewall — see the force-through guide.
Handle hardcoded-DNS devices at the firewall
Check: For any device that still queries a public resolver directly, add a firewall rule to redirect or block its outbound DNS.
Expected result: The stubborn device now resolves through Pi-hole, or is a documented allow-listed exception.
If not: If blocking its DNS breaks the device, allow it explicitly rather than leaving the rule half-applied.
Separate 'unblockable' from 'unblocked'
Check: For remaining ads, compare the ad's source domain in the query log against your lists.
Expected result: Tracker/ad-network domains get added to a blocklist or regex; first-party/CDN ad domains are accepted as DNS-unblockable.
If not: Do not over-block content domains to chase first-party ads — you'll break the site instead.
Decision tree
If: The affected device's queries DO appear in the Pi-hole log.
Then: Pi-hole is in the path; this is blocklist coverage or unblockable content.
Action: Check the specific domain in the query log: if allowed, add a list/regex; if it's a content domain, accept it can't be DNS-blocked.
If: Queries do NOT appear, and the client's DNS is a public/ISP server.
Then: DHCP or IPv6 is handing out the wrong resolver.
Action: Set DHCP DNS (IPv4 and IPv6) to the Pi-hole address; disable any router-advertised non-Pi-hole IPv6 DNS.
If: Queries don't appear only in one browser.
Then: Browser DNS-over-HTTPS is bypassing the system resolver.
Action: Disable Secure DNS/DoH in that browser, or block DoH network-wide so it falls back to Pi-hole.
If: Queries don't appear only on mobile / only off-Wi-Fi.
Then: OS Private DNS, a VPN, or iCloud Private Relay is carrying DNS elsewhere.
Action: Turn the relevant bypass off for the home network, or accept that this traffic is intentionally outside Pi-hole.
If: One specific device ignores everything you set.
Then: It likely hardcodes a public resolver.
Action: Use the router/firewall to redirect or block its outbound port 53 (and DoH) — see the force-through-Pi-hole guide.
Safe stop: If the device breaks when its hardcoded DNS is blocked, allow it as a documented exception rather than fighting it.
Evidence table
| Symptom | Evidence to collect | Likely layer | Next action |
|---|---|---|---|
| Ads on one phone, fine on a laptop. | Phone Wi-Fi DNS setting + Private DNS/VPN/Private Relay state; query log filtered to the phone IP. | Client resolver / encrypted DNS | Point the phone at Pi-hole (disable Private DNS/Relay for home Wi-Fi) and confirm it now appears in the log. |
| Ads everywhere, nothing in the query log. | ipconfig /all or router DHCP settings showing the handed-out DNS; IPv6 RA DNS. | DHCP / IPv6 routing | Set DHCP DNS for IPv4 and IPv6 to Pi-hole; remove the rogue IPv6 resolver. |
| Tracker test domain is blocked, but page ads remain. | Query-log result for the tracker vs the ad's actual source domain. | Unblockable content domain | Accept the DNS-layer limit; use a browser content blocker for first-party ads. |
| Only Chrome/Edge/Firefox still shows ads. | Browser Secure DNS / DoH setting. | Browser DoH | Disable browser DoH or block it at the network so it falls back to the LAN resolver. |
| A TV stick or IoT device is never filtered. | Router/firewall logs of outbound port 53 to a public IP from that device. | Hardcoded public resolver | Redirect or block its outbound DNS at the firewall; allow as exception only if it breaks. |
Commands and settings paths
What DNS did this client get?
ipconfig /all (Windows) • Settings > Wi-Fi > (network) > details (macOS/iOS/Android)
Where: On the device that still sees ads, connected to home Wi-Fi.
Expected: DNS server(s) listed equal the Pi-hole IP, for both IPv4 and IPv6.
Failure means: A public/ISP resolver or an unexpected IPv6 DNS means DHCP or Router Advertisements are overriding Pi-hole.
Safe next step: Fix DHCP to hand out Pi-hole for both protocols, then re-run.
Is Pi-hole answering this client?
nslookup pi.hole (then nslookup a known-blocked tracker domain)
Where: On the affected client.
Expected: pi.hole resolves to the Pi-hole IP, and the blocked domain returns 0.0.0.0 / NXDOMAIN.
Failure means: If pi.hole fails to resolve, the client is not using Pi-hole as its resolver at all.
Safe next step: Return to the DHCP/IPv6 path before changing blocklists.
Are queries actually reaching Pi-hole?
Pi-hole dashboard > Query Log, filtered to the client IP
Where: In the Pi-hole admin UI while browsing on the client.
Expected: The client's lookups stream into the log attributed to its IP.
Failure means: An empty log for that client confirms a bypass (DoH, Private DNS, VPN, or hardcoded resolver).
Safe next step: Identify which bypass via the triage checks and close it.
Is a browser leaking via DoH?
Browser settings: Chrome/Edge 'Use secure DNS'; Firefox 'DNS over HTTPS'
Where: In each browser on the affected device.
Expected: Secure DNS/DoH is disabled or set to use the system resolver.
Failure means: An enabled DoH provider sends lookups to a public resolver, bypassing Pi-hole for that browser only.
Safe next step: Disable it (or block DoH network-wide) and re-test that browser.
Hardware and platform boundary
Change only when
- Consider AdGuard Home or NextDNS when you want native encrypted-DNS handling or cloud filtering on devices that leave the house — see the decision guide.
Evidence that matters
- Whether the platform can be the DHCP server (to force its own DNS), how it handles IPv6, and whether it filters encrypted DNS for you.
Evidence that does not matter
- Raw blocklist size — both Pi-hole and AdGuard Home block identically from the same lists; a bigger list is not better filtering.
Avoid
- Chasing YouTube/first-party ad blocking at the DNS layer, or stacking dozens of overlapping blocklists hoping to fix a bypass that's really a routing problem.
Related tool/checklist
Use the linked tool when you need a guided plan from your exact symptoms instead of a static checklist.
Device setup troubleshooterRelated problems
Last reviewed
2026-06-02 · Reviewed by HomeTechOps. Built from June-2026 web research verified against the Pi-hole v6 documentation, Mozilla's canary-domain guidance for Firefox DoH, and NextDNS/AdGuard Home references; intentionally honest that DNS filtering cannot remove first-party/CDN ads (YouTube) or traffic carried by VPN/iCloud Private Relay.
Sources/assumptions
- Assumes a working Pi-hole install (Core v6.x / FTL v6.x) reachable on a fixed LAN IP, and a home router you can administer.
- Pi-hole and any DNS filter block at the domain level only — they cannot remove first-party ads served from content domains (YouTube, most app ads) or anything that bypasses your DNS entirely.
- Verify current Pi-hole version and config-path behavior against the official docs before editing files — v6 moved settings to pihole.toml.
Source-backed checks
HomeTechOps turns official docs and conservative safety rules into a shorter runbook. These links are the source trail for the page direction.