Skip to content

Commit

Permalink
fix resolver fallback
Browse files Browse the repository at this point in the history
  • Loading branch information
ginuerzh committed May 1, 2022
1 parent 9954001 commit 59db789
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions resolver/resolver.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,20 +123,30 @@ func (r *resolver) resolve(ctx context.Context, server *NameServer, host string)
}

if server.Prefer == "ipv6" { // prefer ipv6
mq := dns.Msg{}
mq.SetQuestion(dns.Fqdn(host), dns.TypeAAAA)
ips, err = r.resolveIPs(ctx, server, &mq)
if err != nil || len(ips) > 0 {
if ips, err = r.resolve6(ctx, server, host); len(ips) > 0 {
return
}
return r.resolve4(ctx, server, host)
}

// fallback to ipv4
if ips, err = r.resolve4(ctx, server, host); len(ips) > 0 {
return
}
return r.resolve6(ctx, server, host)
}

func (r *resolver) resolve4(ctx context.Context, server *NameServer, host string) (ips []net.IP, err error) {
mq := dns.Msg{}
mq.SetQuestion(dns.Fqdn(host), dns.TypeA)
return r.resolveIPs(ctx, server, &mq)
}

func (r *resolver) resolve6(ctx context.Context, server *NameServer, host string) (ips []net.IP, err error) {
mq := dns.Msg{}
mq.SetQuestion(dns.Fqdn(host), dns.TypeAAAA)
return r.resolveIPs(ctx, server, &mq)
}

func (r *resolver) resolveIPs(ctx context.Context, server *NameServer, mq *dns.Msg) (ips []net.IP, err error) {
key := resolver_util.NewCacheKey(&mq.Question[0])
mr := r.cache.Load(key)
Expand Down

0 comments on commit 59db789

Please sign in to comment.