This commit is contained in:
Alex Yang
2026-04-05 03:19:53 +08:00
parent 2c0c1733d9
commit d3e22a2631
+10 -14
View File
@@ -1209,17 +1209,13 @@ func (s *Server) forwardDNSRequestWithCache(r *dns.Msg, domain string) (*dns.Msg
if opt := r.IsEdns0(); opt != nil { if opt := r.IsEdns0(); opt != nil {
// 保留客户端的 UDP 缓冲区大小 // 保留客户端的 UDP 缓冲区大小
udpSize = opt.UDPSize() udpSize = opt.UDPSize()
// 移除现有的EDNS记录,以便重新添加
for i := range r.Extra {
if r.Extra[i] == opt {
r.Extra = append(r.Extra[:i], r.Extra[i+1:]...)
break
}
}
} }
// 添加EDNS记录,设置适当的UDPSize和DO标志 // 创建请求的副本,避免修改原始请求
r.SetEdns0(udpSize, doFlag) query := r.Copy()
// 在副本上添加 EDNS 记录,设置适当的 UDPSize 和 DO 标志
query.SetEdns0(udpSize, doFlag)
// DNSSEC专用服务器列表,从配置中获取 // DNSSEC专用服务器列表,从配置中获取
dnssecServers := s.config.DNSSECUpstreamDNS dnssecServers := s.config.DNSSECUpstreamDNS
@@ -1307,7 +1303,7 @@ logger.Debug("并行查询超时设置", "domain", r.Question[0].Name, "defaultT
client.Timeout = defaultTimeout // 使用配置的超时时间 client.Timeout = defaultTimeout // 使用配置的超时时间
// 发送请求并获取响应,确保服务器地址包含端口号 // 发送请求并获取响应,确保服务器地址包含端口号
response, rtt, err := client.Exchange(r, normalizeDNSServerAddress(server)) response, rtt, err := client.Exchange(query, normalizeDNSServerAddress(server))
responses <- serverResponse{response, rtt, server, err} responses <- serverResponse{response, rtt, server, err}
// 将客户端实例放回池中(不重置 Timeout,因为下次使用时会重新设置) // 将客户端实例放回池中(不重置 Timeout,因为下次使用时会重新设置)
@@ -1411,7 +1407,7 @@ logger.Debug("并行查询超时设置", "domain", r.Question[0].Name, "defaultT
client.Timeout = defaultTimeout client.Timeout = defaultTimeout
// 只向一个服务器发送请求 // 只向一个服务器发送请求
response, rtt, err := client.Exchange(r, normalizeDNSServerAddress(fastestServer)) response, rtt, err := client.Exchange(query, normalizeDNSServerAddress(fastestServer))
// 将客户端实例放回池中 // 将客户端实例放回池中
s.clientPool.Put(client) s.clientPool.Put(client)
@@ -1512,7 +1508,7 @@ logger.Debug("并行查询超时设置", "domain", r.Question[0].Name, "defaultT
} }
// 发送请求并获取响应,确保服务器地址包含端口号 // 发送请求并获取响应,确保服务器地址包含端口号
response, rtt, err := client.Exchange(r, normalizeDNSServerAddress(server)) response, rtt, err := client.Exchange(query, normalizeDNSServerAddress(server))
responses <- serverResponse{response, rtt, server, err} responses <- serverResponse{response, rtt, server, err}
}(upstream) }(upstream)
} }
@@ -1821,7 +1817,7 @@ logger.Debug("并行查询超时设置", "domain", r.Question[0].Name, "defaultT
UDPSize: s.resolver.UDPSize, UDPSize: s.resolver.UDPSize,
Timeout: defaultTimeout, Timeout: defaultTimeout,
} }
response, rtt, err := client.Exchange(r, normalizeDNSServerAddress(selectedDnssecServer)) response, rtt, err := client.Exchange(query, normalizeDNSServerAddress(selectedDnssecServer))
resultChan <- struct { resultChan <- struct {
response *dns.Msg response *dns.Msg
rtt time.Duration rtt time.Duration
@@ -1924,7 +1920,7 @@ logger.Debug("并行查询超时设置", "domain", r.Question[0].Name, "defaultT
UDPSize: s.resolver.UDPSize, UDPSize: s.resolver.UDPSize,
Timeout: defaultTimeout, // 使用配置的超时时间 Timeout: defaultTimeout, // 使用配置的超时时间
} }
resp, rtt, e := tempResolver.Exchange(r, normalizeDNSServerAddress(localServer)) resp, rtt, e := tempResolver.Exchange(query, normalizeDNSServerAddress(localServer))
resultChan <- struct { resultChan <- struct {
response *dns.Msg response *dns.Msg
rtt time.Duration rtt time.Duration