diff --git a/cmd/cli/dns_proxy.go b/cmd/cli/dns_proxy.go index ad65209..5aa8e52 100644 --- a/cmd/cli/dns_proxy.go +++ b/cmd/cli/dns_proxy.go @@ -1249,8 +1249,12 @@ func (p *prog) reinitializeOSResolver(networkChange bool) { mainLog.Load().Debug().Msg("DNS reset completed") mainLog.Load().Debug().Msg("initializing OS resolver") - ns := ctrld.InitializeOsResolver() - mainLog.Load().Warn().Msgf("re-initialized OS resolver with nameservers: %v", ns) + ns := ctrld.InitializeOsResolver(true) + if len(ns) == 0 { + mainLog.Load().Warn().Msgf("no nameservers found, using existing OS resolver values") + } else { + mainLog.Load().Warn().Msgf("re-initialized OS resolver with nameservers: %v", ns) + } // start leaking queries immediately// start leaking queries immediately if networkChange { diff --git a/cmd/cli/prog.go b/cmd/cli/prog.go index b26b814..d7a9a95 100644 --- a/cmd/cli/prog.go +++ b/cmd/cli/prog.go @@ -268,7 +268,7 @@ func (p *prog) preRun() { func (p *prog) postRun() { if !service.Interactive() { p.resetDNS() - ns := ctrld.InitializeOsResolver() + ns := ctrld.InitializeOsResolver(false) mainLog.Load().Debug().Msgf("initialized OS resolver with nameservers: %v", ns) p.setDNS() p.csSetDnsDone <- struct{}{} diff --git a/resolver.go b/resolver.go index 650fd05..19ebc1f 100644 --- a/resolver.go +++ b/resolver.go @@ -130,8 +130,13 @@ func availableNameservers() []string { // // It's the caller's responsibility to ensure the system DNS is in a clean state before // calling this function. -func InitializeOsResolver() []string { - ns := initializeOsResolver(availableNameservers()) +func InitializeOsResolver(guardAgainstNoNameservers bool) []string { + nameservers := availableNameservers() + // if no nameservers, return empty slice so we dont remove all nameservers + if len(nameservers) == 0 && guardAgainstNoNameservers { + return []string{} + } + ns := initializeOsResolver(nameservers) resolverMutex.Lock() defer resolverMutex.Unlock() or = newResolverWithNameserver(ns) diff --git a/resolver_test.go b/resolver_test.go index de8cca0..e96e875 100644 --- a/resolver_test.go +++ b/resolver_test.go @@ -115,7 +115,7 @@ func Test_osResolver_InitializationRace(t *testing.T) { for range n { go func() { defer wg.Done() - InitializeOsResolver() + InitializeOsResolver(false) }() } wg.Wait()