多项修复

This commit is contained in:
Alex Yang
2026-04-04 12:25:49 +08:00
parent 429b2331fb
commit 63464df2f0
4 changed files with 3353 additions and 4 deletions
+22 -4
View File
@@ -1556,17 +1556,35 @@ func (s *Server) forwardDNSRequestWithCache(r *dns.Msg, domain string) (*dns.Msg
dnssecServerForResponse = resp.server
}
// 如果响应成功或为NXDOMAIN
// 如果响应成功或为 NXDOMAIN
if resp.response.Rcode == dns.RcodeSuccess || resp.response.Rcode == dns.RcodeNameError {
// 按Rcode分类添加到不同列表
// 按 Rcode 分类添加到不同列表
if resp.response.Rcode == dns.RcodeSuccess {
successResponses = append(successResponses, resp.response)
} else {
nxdomainResponses = append(nxdomainResponses, resp.response)
}
// 快速返回逻辑:找到第一个有效响应或更快的响应
if resp.response.Rcode == dns.RcodeSuccess {
// 简化的快速返回逻辑:找到第一个成功响应或更快的响应
// 对于不验证 DNSSEC 的域名,直接返回第一个成功响应
if noDNSSEC {
// 不验证 DNSSEC 的域名:直接返回第一个成功响应
if !hasBestResponse || resp.rtt < fastestRtt {
fastestResponse = resp.response
fastestRtt = resp.rtt
fastestServer = resp.server
fastestDnssecServer = dnssecServerForResponse
fastestHasDnssec = false
// 立即发送结果,快速返回
resultChan <- struct {
response *dns.Msg
rtt time.Duration
usedServer string
usedDnssecServer string
}{fastestResponse, fastestRtt, fastestServer, fastestDnssecServer}
}
} else if resp.response.Rcode == dns.RcodeSuccess {
// 优先选择带有DNSSEC的响应
if containsDNSSEC {
// 如果这是第一个DNSSEC响应,或者比当前最快的DNSSEC响应更快