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 if server.Prefer == "ipv6" { // prefer ipv6
mq := dns.Msg{} if ips, err = r.resolve6(ctx, server, host); len(ips) > 0 {
mq.SetQuestion(dns.Fqdn(host), dns.TypeAAAA)
ips, err = r.resolveIPs(ctx, server, &mq)
if err != nil || len(ips) > 0 {
return 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 := dns.Msg{}
mq.SetQuestion(dns.Fqdn(host), dns.TypeA) mq.SetQuestion(dns.Fqdn(host), dns.TypeA)
return r.resolveIPs(ctx, server, &mq) 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) { func (r *resolver) resolveIPs(ctx context.Context, server *NameServer, mq *dns.Msg) (ips []net.IP, err error) {
key := resolver_util.NewCacheKey(&mq.Question[0]) key := resolver_util.NewCacheKey(&mq.Question[0])
mr := r.cache.Load(key) mr := r.cache.Load(key)