更新 dns/server.go

This commit is contained in:
2026-04-04 18:05:32 +00:00
parent d4c15f83b3
commit 759633b11f
+23 -5
View File
@@ -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响应更快