all: allowing config defined discover ptr endpoints

The default gateway is usually the DNS server in normal home network
setup for most users. However, there's case that it is not, causing
discover ptr failed.

This commit add discover_ptr_endpoints config parameter, so users can
define what DNS nameservers will be used.
This commit is contained in:
Cuong Manh Le
2023-11-14 00:28:15 +07:00
committed by Cuong Manh Le
parent d01f5c2777
commit 180eae60f2
4 changed files with 68 additions and 21 deletions

View File

@@ -78,8 +78,9 @@ type osResolverResult struct {
err error
}
// Resolve performs DNS resolvers using OS default nameservers. Nameserver is chosen from
// available nameservers with a roundrobin algorithm.
// Resolve resolves DNS queries using pre-configured nameservers.
// Query is sent to all nameservers concurrently, and the first
// success response will be returned.
func (o *osResolver) Resolve(ctx context.Context, msg *dns.Msg) (*dns.Msg, error) {
numServers := len(o.nameservers)
if numServers == 0 {
@@ -269,11 +270,19 @@ func NewPrivateResolver() Resolver {
}
}
nss = nss[:n]
if len(nss) == 0 {
return NewResolverWithNameserver(nss)
}
// NewResolverWithNameserver returns an OS resolver which uses the given nameservers
// for resolving DNS queries. If nameservers is empty, a dummy resolver will be returned.
//
// Each nameserver must be form "host:port". It's the caller responsibility to ensure all
// nameservers are well formatted by using net.JoinHostPort function.
func NewResolverWithNameserver(nameservers []string) Resolver {
if len(nameservers) == 0 {
return &dummyResolver{}
}
resolver := &osResolver{nameservers: nss}
return resolver
return &osResolver{nameservers: nameservers}
}
func newDialer(dnsAddress string) *net.Dialer {