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