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.
This commit is contained in:
Cuong Manh Le authored and Cuong Manh Le committed 2025-03-26 23:18:21 +07:00
1 parent c60cf33af3
commit dacc67e50f
1 file changed
+9 -8
+9 -8
View File
@@ -478,10 +478,10 @@ func lookupIP(domain string, timeout int) (ips []string) {
ProxyLogger.Load().Debug().Msgf("Initialize OS resolver in lookupIP") ProxyLogger.Load().Debug().Msgf("Initialize OS resolver in lookupIP")
or = newResolverWithNameserver(defaultNameservers()) or = newResolverWithNameserver(defaultNameservers())
} }
resolverMutex.Unlock()
nss := *or.lanServers.Load() nss := *or.lanServers.Load()
nss = append(nss, *or.publicServers.Load()...) nss = append(nss, *or.publicServers.Load()...)
resolverMutex.Unlock()
resolver := newResolverWithNameserver(nss) resolver := newResolverWithNameserver(nss)
ProxyLogger.Load().Debug().Msgf("resolving %q using bootstrap DNS %q", domain, nss) ProxyLogger.Load().Debug().Msgf("resolving %q using bootstrap DNS %q", domain, nss)
timeoutMs := 2000 timeoutMs := 2000
@@ -575,12 +575,13 @@ func NewBootstrapResolver(servers ...string) Resolver {
// //
// This is useful for doing PTR lookup in LAN network. // This is useful for doing PTR lookup in LAN network.
func NewPrivateResolver() Resolver { func NewPrivateResolver() Resolver {
resolverMutex.Lock()
logger := *ProxyLogger.Load() if or == nil {
ProxyLogger.Load().Debug().Msgf("Initialize new OS resolver in NewPrivateResolver")
Log(context.Background(), logger.Debug(), "NewPrivateResolver called") or = newResolverWithNameserver(defaultNameservers())
}
nss := defaultNameservers() nss := *or.lanServers.Load()
resolverMutex.Unlock()
resolveConfNss := nameserversFromResolvconf() resolveConfNss := nameserversFromResolvconf()
localRfc1918Addrs := Rfc1918Addresses() localRfc1918Addrs := Rfc1918Addresses()
n := 0 n := 0