From dacc67e50f13f6cb4a9395c1c6d4f63c5511d8df Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Wed, 19 Mar 2025 21:40:53 +0700 Subject: [PATCH] Using LAN servers from OS resolver for private resolver So heavy functions are only called once and could be re-used in subsequent calls to NewPrivateResolver. --- resolver.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/resolver.go b/resolver.go index 3da2574..bece9c0 100644 --- a/resolver.go +++ b/resolver.go @@ -478,10 +478,10 @@ func lookupIP(domain string, timeout int) (ips []string) { ProxyLogger.Load().Debug().Msgf("Initialize OS resolver in lookupIP") or = newResolverWithNameserver(defaultNameservers()) } - resolverMutex.Unlock() - nss := *or.lanServers.Load() nss = append(nss, *or.publicServers.Load()...) + resolverMutex.Unlock() + resolver := newResolverWithNameserver(nss) ProxyLogger.Load().Debug().Msgf("resolving %q using bootstrap DNS %q", domain, nss) timeoutMs := 2000 @@ -575,12 +575,13 @@ func NewBootstrapResolver(servers ...string) Resolver { // // This is useful for doing PTR lookup in LAN network. func NewPrivateResolver() Resolver { - - logger := *ProxyLogger.Load() - - Log(context.Background(), logger.Debug(), "NewPrivateResolver called") - - nss := defaultNameservers() + resolverMutex.Lock() + if or == nil { + ProxyLogger.Load().Debug().Msgf("Initialize new OS resolver in NewPrivateResolver") + or = newResolverWithNameserver(defaultNameservers()) + } + nss := *or.lanServers.Load() + resolverMutex.Unlock() resolveConfNss := nameserversFromResolvconf() localRfc1918Addrs := Rfc1918Addresses() n := 0