更新 dns/server.go
This commit is contained in:
+23
-5
@@ -1568,10 +1568,27 @@ logger.Debug("并行查询超时设置", "domain", r.Question[0].Name, "defaultT
|
||||
}
|
||||
|
||||
// 简化的快速返回逻辑:找到第一个成功响应或更快的响应
|
||||
// 对于不验证 DNSSEC 的域名,直接返回第一个成功响应(只发送一次)
|
||||
if noDNSSEC && !bestResponseSent {
|
||||
// 不验证 DNSSEC 的域名:直接返回第一个成功响应
|
||||
if fastestResponse == nil || resp.rtt < fastestRtt {
|
||||
// 对于不验证 DNSSEC 的域名,直接返回第一个成功响应(只发送一次)
|
||||
if noDNSSEC && !bestResponseSent {
|
||||
// 不验证 DNSSEC 的域名:返回第一个包含有效记录的成功响应
|
||||
if fastestResponse == nil || resp.rtt < fastestRtt {
|
||||
// 检查响应是否包含有效记录
|
||||
hasValidRecords := false
|
||||
if len(resp.response.Answer) > 0 {
|
||||
hasValidRecords = true
|
||||
} else if len(resp.response.Ns) > 0 {
|
||||
hasValidRecords = true
|
||||
} else if len(resp.response.Extra) > 0 {
|
||||
for _, rr := range resp.response.Extra {
|
||||
if rr.Header().Rrtype != dns.TypeOPT {
|
||||
hasValidRecords = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 只有包含有效记录才返回
|
||||
if hasValidRecords {
|
||||
fastestResponse = resp.response
|
||||
fastestRtt = resp.rtt
|
||||
fastestServer = resp.server
|
||||
@@ -1587,7 +1604,8 @@ logger.Debug("并行查询超时设置", "domain", r.Question[0].Name, "defaultT
|
||||
}{fastestResponse, fastestRtt, fastestServer, fastestDnssecServer}
|
||||
bestResponseSent = true
|
||||
}
|
||||
} else if resp.response.Rcode == dns.RcodeSuccess && !bestResponseSent {
|
||||
}
|
||||
} else if resp.response.Rcode == dns.RcodeSuccess && !bestResponseSent {
|
||||
// 优先选择带有DNSSEC的响应
|
||||
if containsDNSSEC {
|
||||
// 如果这是第一个DNSSEC响应,或者比当前最快的DNSSEC响应更快
|
||||
|
||||
Reference in New Issue
Block a user