From cb14992ddccc72dda2bceb9b0372e1916110a34e Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Fri, 4 Oct 2024 14:37:27 +0700 Subject: [PATCH] Ignore local addresses for OS resolver Otherwise, DNS loop may be triggered if requests are forwarded from ctrld to OS resolver. --- resolver.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/resolver.go b/resolver.go index e9cfd99..f058e75 100644 --- a/resolver.go +++ b/resolver.go @@ -58,7 +58,16 @@ func defaultNameservers() []string { // calling this function. func InitializeOsResolver() []string { or.nameservers = or.nameservers[:0] + // Ignore local addresses to prevent loop. + regularIPs, loopbackIPs, _ := netmon.LocalAddresses() + machineIPsMap := make(map[string]struct{}, len(regularIPs)) + for _, v := range slices.Concat(regularIPs, loopbackIPs) { + machineIPsMap[net.JoinHostPort(v.String(), "53")] = struct{}{} + } for _, ns := range defaultNameservers() { + if _, ok := machineIPsMap[ns]; ok { + continue + } if testNameserver(ns) { or.nameservers = append(or.nameservers, ns) }