diff --git a/internal/resolver/iterative.go b/internal/resolver/iterative.go index 8f41b6d..d860aaf 100644 --- a/internal/resolver/iterative.go +++ b/internal/resolver/iterative.go @@ -13,7 +13,7 @@ import ( ) const ( - queryTimeoutDuration = 5 * time.Second + queryTimeoutDuration = 1 * time.Second maxRetries = 2 maxDelegation = 20 timeoutMultiplier = 2 @@ -291,8 +291,17 @@ func (r *Resolver) resolveNSIPs( return ips } -// resolveNSRecursive queries for NS records using recursive -// resolution as a fallback for intercepted environments. +// publicResolvers returns well-known public recursive DNS resolvers. +func publicResolvers() []string { + return []string{ + "1.1.1.1", // Cloudflare + "8.8.8.8", // Google + "9.9.9.9", // Quad9 + } +} + +// resolveNSRecursive queries for NS records using a public +// recursive resolver as a fallback for intercepted environments. func (r *Resolver) resolveNSRecursive( ctx context.Context, domain string, @@ -302,7 +311,7 @@ func (r *Resolver) resolveNSRecursive( msg.SetQuestion(domain, dns.TypeNS) msg.RecursionDesired = true - for _, ip := range rootServerList()[:3] { + for _, ip := range publicResolvers() { if checkCtx(ctx) != nil { return nil, ErrContextCanceled } @@ -323,7 +332,8 @@ func (r *Resolver) resolveNSRecursive( return nil, ErrNoNameservers } -// resolveARecord resolves a hostname to IPv4 addresses. +// resolveARecord resolves a hostname to IPv4 addresses using +// public recursive resolvers. func (r *Resolver) resolveARecord( ctx context.Context, hostname string, @@ -333,7 +343,7 @@ func (r *Resolver) resolveARecord( msg.SetQuestion(hostname, dns.TypeA) msg.RecursionDesired = true - for _, ip := range rootServerList()[:3] { + for _, ip := range publicResolvers() { if checkCtx(ctx) != nil { return nil, ErrContextCanceled }