@@ -463,6 +463,7 @@ func (r *resolver) LocalLookup(q []byte) ([]byte, string, error) {
463463 return nil , NoDNS , errResolverClosed
464464 }
465465
466+ loopingBack := settings .Loopingback .Load ()
466467 defaultIsSystemDNS := false
467468 if dtr , _ := r .Get (x .StrOf (Default )); dtr != nil {
468469 // todo: a better way to determine whether Default is SystemDNS
@@ -472,13 +473,13 @@ func (r *resolver) LocalLookup(q []byte) ([]byte, string, error) {
472473
473474 // including dns64 and/or alg
474475 ans , tid , err := r .forward (q , protect .UidSelf , Default )
475- if defaultIsSystemDNS {
476+ if ! defaultIsSystemDNS || loopingBack {
476477 return ans , tid , err
477478 } // else: retry with Goos/System, if needed
478479
479480 // msg may be nil
480481 if msg := xdns .AsMsg (ans ); err != nil || xdns .IsNXDomain (msg ) || ! xdns .HasRcodeSuccess (msg ) {
481- log .I ("dns: nxdomain via Default (err? %v); using Goos for %s" , err , xdns .QName (msg ))
482+ log .I ("dns: nxdomain via Default (err? %v); attempting Goos for %s" , err , xdns .QName (msg ))
482483 ans , tid , err = r .forward (q , protect .UidSelf , Goos ) // Goos is System; see: determineTransport
483484 } // else: rcode success and nil err; do not fallback on Goos/System
484485
0 commit comments