all: fix OS resolver looping issue on Windows

By making dnsFromAdapter ignores DNS server which is the same IP address
of the adapter.

While at it, also changes OS resolver to use ctrld bootstrap DNS only if
there's no available nameservers.
This commit is contained in:
Cuong Manh Le authored and Cuong Manh Le committed 2024-05-24 18:20:49 +07:00
1 parent 96085147ff
commit 19020a96bf
3 files changed
+32 -33

No files matched your search

+14 -2
View File
@@ -507,7 +507,7 @@ func initCLI() {
iface = runningIface(s)
tasks := []task{
{s.Stop, false},
{func() error { p.resetDNS(); return nil }, false},
{func() error { resetDnsNoLog(p); return nil }, false},
{s.Start, true},
}
if doTasks(tasks) {
@@ -887,7 +887,10 @@ NOTE: Uninstalling will set DNS to values provided by DHCP.`,
sc := &service.Config{}
*sc = *svcConfig
sc.Executable = bin
s, err := newService(&prog{}, sc)
readConfig(false)
v.Unmarshal(&cfg)
p := &prog{router: router.New(&cfg, runInCdMode())}
s, err := newService(p, sc)
if err != nil {
mainLog.Load().Error().Msg(err.Error())
return
@@ -931,6 +934,7 @@ NOTE: Uninstalling will set DNS to values provided by DHCP.`,
}
tasks := []task{
{s.Stop, false},
{func() error { resetDnsNoLog(p); return nil }, false},
{s.Start, false},
}
if doTasks(tasks) {
@@ -2541,3 +2545,11 @@ func runningIface(s service.Service) string {
}
return ""
}
// resetDnsNoLog performs resetting DNS with logging disable.
func resetDnsNoLog(p *prog) {
lvl := zerolog.GlobalLevel()
zerolog.SetGlobalLevel(zerolog.Disabled)
p.resetDNS()
zerolog.SetGlobalLevel(lvl)
}