fix resolver fallback

This commit is contained in:
ginuerzh
2022-05-01 20:54:45 +08:00
parent 99540014d0
commit 59db7898d8

View File

@ -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)