darvaza.org/resolver
Pluggable DNS resolver library with forwarding, iterative, and parallel lookup strategies built on miekg/dns.
Pluggable DNS resolver library built on miekg/dns. Defines the Resolver, Lookuper, and Exchanger interfaces that decouple DNS consumers from the transport and resolution strategy.
Three resolver constructors cover the common cases:
SystemResolver wraps net.Resolver,
NewResolver delegates to any Lookuper,
and NewRootResolver performs iterative resolution from the
root servers.
Lookuper implementations§
| Lookuper | Description |
|---|---|
| SingleLookuper | Forwards queries to a single Client |
| MultiLookuper | Fans out to multiple lookupers, returns the first response |
| RootLookuper | Iterative resolution from root nameservers |
| SingleFlight | Deduplicates identical concurrent queries |
Well-known recursive resolvers (Google, Cloudflare, Quad9) are available as one-liner constructors.
Client middleware§
| Middleware | Description |
|---|---|
| Auto | Selects protocol by server prefix (udp://, tcp://, tls://), retries truncated UDP as TCP |
| SingleFlight | Per-server deduplication with short-lived caching |
| WorkerPool | Concurrency limiter for exchange calls |
| NoAAAA | Strips AAAA records for IPv4-only environments |
Additional packages§
- The pkg/server package
provides a DNS server handler on top of any
LookuperorExchanger. - The pkg/reflect package provides optional logging middleware using darvaza.org/slog.
- The pkg/errors package provides standard net.DNSError wrappers with dns.Msg conversion.
See also§
- Network helpers — darvaza.org/x/net
- Structured logging — darvaza.org/slog
- DNS library — miekg/dns