{"record":{"id":"c1643a593a41af2e","repo":"TechnitiumSoftware/DnsServer","slug":"all-name-servers-failed-to-answer-the-request-qu","errorCode":null,"errorMessage":"All name servers failed to answer the request '{question}'. Received last response with RCODE={rcode}{metadata}","messagePattern":"All name servers failed to answer the request '(.+?)'\\. Received last response with RCODE=(.+?)(.+?)","errorType":"exception","errorClass":"DnsServerException","httpStatus":null,"severity":"error","filePath":"DnsServerCore/Dns/DnsServer.cs","lineNumber":5051,"sourceCode":"                        }, RECURSIVE_RESOLUTION_TIMEOUT);\n                    }\n                }\n                else\n                {\n                    //do default recursive resolution\n                    response = await DefaultRecursiveResolveAsync(question, eDnsClientSubnet, dnsCache, dnssecValidation, skipDnsAppAuthoritativeRequestHandlers);\n                }\n\n                switch (response.RCODE)\n                {\n                    case DnsResponseCode.NoError:\n                    case DnsResponseCode.NxDomain:\n                    case DnsResponseCode.YXDomain:\n                        taskCompletionSource.SetResult(new RecursiveResolveResponse(response, response));\n                        break;\n\n                    default:\n                        throw new DnsServerException(\"All name servers failed to answer the request '\" + question.ToString() + \"'. Received last response with RCODE=\" + response.RCODE.ToString() + (response.Metadata is null ? \".\" : \" from: \" + response.Metadata.NameServer));\n                }\n            }\n            catch (Exception ex)\n            {\n                if (_resolverLog is not null)\n                {\n                    string strForwarders = null;\n\n                    if (conditionalForwarders is not null)\n                    {\n                        //empty conditional forwarder array is used to force recursive resolution\n                        if (conditionalForwarders.Count > 0)\n                        {\n                            foreach (DnsResourceRecord conditionalForwarder in conditionalForwarders)\n                            {\n                                NameServerAddress nameServer = (conditionalForwarder.RDATA as DnsForwarderRecordData).NameServer;\n\n                                if (strForwarders is null)","sourceCodeStart":5033,"sourceCodeEnd":5069,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Dns/DnsServer.cs#L5033-L5069","documentation":"Thrown during recursive resolution after querying upstream name servers when the final response RCODE is anything other than NoError/NxDomain/YXDomain (e.g. ServerFailure, Refused, NotImplemented). It indicates the upstream could not (or refused to) answer the query, after retries.","triggerScenarios":"All configured forwarders/roots returned a non-terminal RCODE; network reachability problems; upstream rate-limiting or RPZ; DNSSEC validation failures producing ServFail; authoritative server misconfiguration.","commonSituations":"Forwarder IPs wrong or unreachable; ISP DNS blocking; firewall dropping large (TCP/UDP 53 or DoT) packets; upstream under DDoS; recursion/forwarder loop; EDNS0 buffer-size fragmentation; DNSSEC clock skew breaking validation.","solutions":["Switch or add reliable forwarders (e.g. 1.1.1.1, 8.8.8.8, 9.9.9.9) and retry.","Check the resolver log (_resolverLog) for the specific name server and RCODE; the message includes the last NS.","Verify outbound DNS (UDP/TCP 53, and DoT 853 if used) is not firewalled.","Disable DNSSEC validation temporarily to isolate a validation vs. transport issue.","Run a direct query (dig @<ns> <name>) to confirm the upstream's behavior outside the server."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"// Pre-flight: test forwarder reachability before relying on it\nasync Task<bool> ForwarderReachable(IPAddress ip)\n{\n    try { using var u = new UdpClient(); await u.Client.ConnectAsync(new IPEndPoint(ip, 53), TimeSpan.FromSeconds(2)); return true; }\n    catch { return false; }\n}","typeGuard":null,"tryCatchPattern":"try { return await server.ResolveAsync(question); }\ncatch (DnsServerException ex) when (ex.Message.Contains(\"All name servers failed\")) { log.Warn(\"Upstream failed; retrying with fallback resolvers\"); /* switch forwarders, then retry once */ }","preventionTips":["Configure multiple diverse forwarders.","Monitor the resolver log for repeated ServFail/Refused.","Keep DNSSEC clocks in sync and validate upstream reachability."],"tags":["recursion","forwarder","network","rcode","dnssec"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}