fix resolver fallback
This commit is contained in:
@ -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)
|
||||||
|
Reference in New Issue
Block a user