How would you differentiate a client-side DNS resolution problem from the authoritative or upstream DNS server itself being unreliable?
Short Answer
Query the same name directly against multiple different resolvers (the client's configured resolver, a known-reliable public resolver like 8.8.8.8, and the domain's actual authoritative nameserver directly) from the same client — if only the client's configured resolver fails while the others succeed consistently, the problem is client-side (local resolver config, local network path to that specific resolver); if the failure is consistent even querying the authoritative server directly, the problem is genuinely upstream/authoritative.
Detailed Explanation
The isolation technique works by holding the client constant and varying only which resolver answers the query — whichever resolver(s) the failure follows tells you where in the chain the actual problem sits.
Symptoms
- DNS lookups for a specific name fail or time out intermittently.
- Uncertainty about whether the cause is local (client, local resolver, local network) or remote (upstream resolver, authoritative server).
Possible Causes
- Client-side: local resolver misconfiguration, local network path issues to the configured resolver specifically, conntrack/UDP issues (as covered in the NodeLocal DNSCache context) affecting only traffic to the local resolver.
- Server-side: the authoritative nameserver for the domain being unreliable, network issues between the client's resolver and the authoritative server, or the upstream resolver itself (if using a third-party public resolver) having its own problems.
Investigation Steps
- Query the failing name against the client's currently-configured resolver directly and repeatedly (
dig @<configured-resolver> <name>in a loop) to reproduce and quantify the failure rate. - Query the same name, from the same client, against a different, known-reliable resolver (a public resolver like 8.8.8.8 or 1.1.1.1) the same number of times — if this consistently succeeds while the configured resolver fails, the problem is specific to that resolver or the path to it, not the domain's DNS setup itself.
- Query the same name directly against the domain's actual authoritative nameservers (found via
dig NS <domain>, then querying those specific servers directly, bypassing any intermediate resolver) — if this also fails consistently, the problem is genuinely at the authoritative/upstream level, not anything client-side. - If the configured resolver specifically fails while others succeed, check the network path to that resolver specifically (packet loss, latency) and its own configuration/logs if it's a resolver you control.
Commands
dig @<configured-resolver-ip> <domain>
for i in $(seq 1 20); do dig @<configured-resolver-ip> <domain> +short +time=2 +tries=1 || echo "FAILED attempt $i"; done
dig @8.8.8.8 <domain>
dig NS <domain>
dig @<authoritative-ns-from-above> <domain>
Resolution
If the failure isolates to the client's specific configured resolver, the fix is on that side — correcting resolver configuration, addressing local network path issues, or replacing an unreliable resolver with a more reliable one (public resolver, or fixing whatever's wrong with a self-hosted one like NodeLocal DNSCache or CoreDNS). If the failure reproduces even querying the authoritative server directly, the fix is entirely outside the client's control — this needs to be escalated to whoever manages the authoritative DNS infrastructure (the domain's DNS provider, or an internal team if it's an internal authoritative zone), since no client-side change can fix a genuinely unreliable authoritative server.
Prevention
- Configure multiple resolvers (not just one) in client DNS configuration where the platform supports automatic failover, so a single resolver's unreliability doesn't cause total resolution failure.
- Monitor resolver health and latency proactively (from representative client locations) rather than only discovering resolver unreliability when someone notices resolution failures.
- For domains you control, monitor authoritative nameserver health and latency directly, independent of any specific client's experience.
Interview Follow-Up Questions
- How would you distinguish a genuinely unreliable authoritative server from a transient issue that happened to occur during your specific test window?
- How would you build ongoing, automated monitoring for this specific isolation technique, rather than doing it manually during each incident?
- How does this investigation change if DNSSEC validation is involved, given validation failures can look similar to resolution failures?
Key Takeaways
- Querying the same name against multiple different resolvers (configured, a known-reliable public one, and the authoritative server directly) isolates whether the failure is client-side or genuinely upstream.
- A failure specific to the client's configured resolver, while others succeed, points to local resolver/network issues.
- A failure that reproduces even querying the authoritative server directly means the problem is genuinely outside client-side control.
- This same client-side-vs-server-side isolation technique generalizes to most "works sometimes, fails other times" networking symptoms, not just DNS specifically.
References
Last updated August 21, 2026 · Last reviewed August 21, 2026