update
This commit is contained in:
+10
-14
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user