{"record":{"id":"ee05254cb99e23df","repo":"thanos-io/thanos","slug":"resolution-against-server-s-for-s","errorCode":null,"errorMessage":"resolution against server %s for %s","messagePattern":"resolution against server (.+?) for (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/discovery/dns/miekgdns/lookup.go","lineNumber":105,"sourceCode":"//     (RCODE==SUCCESS, ANCOUNT > 0);\n//  2. \"yes, I know that name, but it has no records of the requested type\"\n//     (RCODE==SUCCESS, ANCOUNT==0); or\n//  3. \"I know that name doesn't exist\" (RCODE==NXDOMAIN).\n//\n// A non-viable answer is \"anything else\", which encompasses both various\n// system-level problems (like network timeouts) and also\n// valid-but-unexpected DNS responses (SERVFAIL, REFUSED, etc).\nfunc lookupFromAnyServer(name string, qtype dns.Type, conf *dns.ClientConfig) (*dns.Msg, error) {\n\tclient := &dns.Client{}\n\n\tvar errs []error\n\n\t// TODO(bwplotka): Worth to do fanout and grab fastest as golang native lib?\n\tfor _, server := range conf.Servers {\n\t\tservAddr := net.JoinHostPort(server, conf.Port)\n\t\tmsg, err := askServerForName(name, qtype, client, servAddr, true)\n\t\tif err != nil {\n\t\t\terrs = append(errs, errors.Wrapf(err, \"resolution against server %s for %s\", server, name))\n\t\t\tcontinue\n\t\t}\n\n\t\tif msg.Rcode == dns.RcodeSuccess || msg.Rcode == dns.RcodeNameError {\n\t\t\treturn msg, nil\n\t\t}\n\t}\n\n\treturn nil, errors.Errorf(\"could not resolve %s: no servers returned a viable answer. Errs %v\", name, fmtErrs(errs))\n}\n\nfunc fmtErrs(errs []error) string {\n\tb := bytes.Buffer{}\n\tfor _, err := range errs {\n\t\tb.WriteString(\";\")\n\t\tb.WriteString(err.Error())\n\t}\n\treturn b.String()","sourceCodeStart":87,"sourceCodeEnd":123,"githubUrl":"https://github.com/thanos-io/thanos/blob/35b8b991177def87ed52dcf10f9b6d87f07282c8/pkg/discovery/dns/miekgdns/lookup.go#L87-L123","documentation":"This is a wrapping applied to every individual error encountered while querying one DNS server during lookupFromAnyServer. Each failure to exchange a query with a server (timeout, connection error, malformed reply) is wrapped with the server address and queried name, collected, and later surfaced in the aggregated messages of errors 562/564.","triggerScenarios":"askServerForName returns an error for servAddr net.JoinHostPort(server, conf.Port) — e.g. UDP/TCP timeout, ICMP port unreachable, or connection refused — for any server iterated in conf.Servers.","commonSituations":"Dead or misconfigured nameserver entry in resolv.conf; DNS port blocked by network policy; IPv6 nameserver unreachable from an IPv4-only pod; transient CoreDNS restarts.","solutions":["Identify the failing server from the wrapped message ('resolution against server X for Y') and test it directly with dig @X Y","Remove or fix unreachable nameserver entries in resolv.conf","Check network policies/firewalls allow UDP/TCP 53 to the resolver","Ensure the resolver IP is valid for your network (no stale VPN or cluster-DNS addresses)"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"conn, err := net.DialTimeout(\"udp\", net.JoinHostPort(server, \"53\"), 2*time.Second)\nif err != nil { /* server unreachable; fix resolv.conf or routing before lookups */ } else { conn.Close() }","typeGuard":null,"tryCatchPattern":"if err != nil && strings.Contains(err.Error(), \"resolution against server\") {\n    logger.Warn(\"DNS server failing\", \"err\", err) // treat per-server; retry whole lookup\n}","preventionTips":["Periodically health-check each nameserver listed in resolv.conf","Remove stale nameserver entries (old VPN adapters, decommissioned cluster DNS IPs)","Ensure dual-stack correctness (IPv6 resolvers only if the host has IPv6 routes)","Configure a generous timeout on the Resolver to tolerate slow servers"],"tags":["dns","network","server-unreachable"],"backgroundTag":"dns-server-unreachable","analyzedSha":"35b8b991177def87ed52dcf10f9b6d87f07282c8","analyzedAt":"2026-09-07T01:49:59.689Z","contentChangedAt":"2026-09-07T01:49:59.689Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}