Skip to main content

Test DNS Answers, Not Just DNS Server Availability

GuideWritten by oncall.fyi editorialPublication approved by Burak YApproval recorded 12 September 2026
Sources and verification
Source dates
Oldest source check: 12 September 2026.
Technical verification
Separate technical verification has not been recorded.

Publication approval and technical verification are recorded separately. Automated link checks establish reachability, not accuracy. A checked example verifies only its stated test cases, not the whole article or your production setup.

In short

Query the intended resolver directly and compare the answer with an explicit policy. Use one controlled blocked name and one allowed name, and test the required record types. A DNS response alone does not prove filtering works. Pi-hole blocking modes can return different valid outcomes, so match the configured mode and report success only after both policy checks pass.

Key takeaways

  • A responding DNS server can still apply the wrong policy.
  • Blocked does not always mean an A record containing 0.0.0.0.
  • Use controlled test names and query the resolver you intend to verify.

Define policy checks with stable fixtures

Create or choose a domain you control for the allowed test. Add a second controlled test name to the block policy. Document the expected A and AAAA behavior and the client group to which the probing host belongs. An arbitrary advertising domain can disappear or change behavior, making a monitor fail for a reason unrelated to your resolver.

The allowed test proves that resolution still works. The blocked test proves that the configured policy is enforced for that client. Using only the blocked name can miss a resolver that returns the same failure for every query.

Query the intended resolver explicitly

From the same network and client policy group as the users you want to represent, collect the response code, answer section, and timing. These BIND dig commands (opens in a new tab) illustrate the request shape; replace the documentation addresses and names with your test fixtures.

bash
dig @192.0.2.53 blocked.monitor.example A +time=2 +tries=1
dig @192.0.2.53 allowed.monitor.example A +time=2 +tries=1
dig @192.0.2.53 blocked.monitor.example AAAA +time=2 +tries=1

Do not infer success solely from dig exiting normally: a received DNS error is still a response. Inspect the DNS result and compare the expected answer set, handling order and any deliberately allowed values. For a production script, use a DNS library or structured parser rather than searching arbitrary output for the substring 0.0.0.0.

Match the configured blocking mode

Pi-hole documents multiple blocking modes (opens in a new tab), including NULL, NXDOMAIN, and NODATA. NULL uses unspecified addresses; other modes deliberately produce different response shapes. A check written for NULL will incorrectly flag a correctly configured NXDOMAIN policy.

TestExpected evidence
Allowed A lookupApproved address set or controlled alias chain
Blocked A lookupOutcome prescribed by configured blocking mode
Blocked AAAA lookupCorresponding IPv6 policy outcome
Resolver unavailableTimeout or explicit transport failure
Filtering disabled in a test policyBlocked fixture check fails

Keep the policy expectation under review alongside resolver configuration. If split DNS or per-client groups are intentional, test each important group separately rather than declaring one answer universally correct.

Report both failure and silence

Run the checks with a bounded total duration and send a success heartbeat only if all required assertions pass. An outside deadline should detect when the scheduled checker stops. Include the failed fixture category and response code in the alert, but avoid publishing internal hostnames or the heartbeat secret.

A Pi-hole API endpoint may provide useful supplementary state, but an API reporting that blocking is enabled does not prove a client received the expected answer. Historical API examples can also use authentication that changed between releases. Prefer the actual DNS behavior for the functional assertion and verify any API integration against the deployed version.

Finally, stop the test resolver or isolate the checker from it during a maintenance exercise. Verify that the alarm can leave through an independent resolution path; otherwise the system can correctly detect a DNS failure while being unable to tell anyone.

Did this help?

Your answer helps us improve this guide. We save only the page and your choice for 30 days.

No name, email, or incident details are requested.

Sources

Vendor facts change. Each source below shows the date this page last checked it.

  1. Pi-hole DNS blocking modes Pi-hole. Checked 12 September 2026.
  2. BIND dig reference ISC. Checked 12 September 2026.

Related

One practical idea, occasionally

The On-Call Brief: short field notes, templates, and operational lessons.

Follow the field guide

Email subscriptions are not open yet. Read new guides in your feed reader — no email address needed.

Subscribe with RSS