修复Got recursion not available from *.*.*.*
This commit is contained in:
+18
-3
@@ -579,11 +579,13 @@ func (s *Server) initRequestInfo(w dns.ResponseWriter, r *dns.Msg) *requestInfo
|
||||
|
||||
// checkRequestConditions 检查请求条件,返回是否需要提前响应
|
||||
func (s *Server) checkRequestConditions(w dns.ResponseWriter, r *dns.Msg, startTime time.Time, reqInfo *requestInfo) bool {
|
||||
// 检查是否是AAAA记录查询且IPv6解析已禁用
|
||||
// 检查是否是 AAAA 记录查询且 IPv6 解析已禁用
|
||||
if reqInfo.qType == dns.TypeAAAA && !s.config.EnableIPv6 {
|
||||
// 返回空的成功响应,而不是NXDOMAIN
|
||||
// 返回空的成功响应,而不是 NXDOMAIN
|
||||
response := new(dns.Msg)
|
||||
response.SetReply(r)
|
||||
// 设置递归可用标志
|
||||
response.RecursionAvailable = true
|
||||
response.SetRcode(r, dns.RcodeSuccess)
|
||||
w.WriteMsg(response)
|
||||
|
||||
@@ -605,7 +607,9 @@ func (s *Server) checkRequestConditions(w dns.ResponseWriter, r *dns.Msg, startT
|
||||
if r.RecursionDesired == false {
|
||||
response := new(dns.Msg)
|
||||
response.SetReply(r)
|
||||
// 不再硬编码RecursionAvailable,使用默认值或上游返回的值
|
||||
// 设置递归可用标志
|
||||
response.RecursionAvailable = true
|
||||
// 不再硬编码 RecursionAvailable,使用默认值或上游返回的值
|
||||
response.SetRcode(r, dns.RcodeRefused)
|
||||
w.WriteMsg(response)
|
||||
|
||||
@@ -859,6 +863,10 @@ func (s *Server) handleUpstreamRequest(w dns.ResponseWriter, r *dns.Msg, startTi
|
||||
// 确保响应的Question部分与客户端请求的Question部分匹配
|
||||
response.Question = r.Question
|
||||
|
||||
// 设置递归可用标志(因为我们的 DNS 服务器支持递归查询)
|
||||
response.RecursionAvailable = true
|
||||
response.RecursionDesired = r.RecursionDesired
|
||||
|
||||
// 修复:如果响应包含记录,确保Rcode为成功
|
||||
hasValidRecords := false
|
||||
|
||||
@@ -1006,6 +1014,11 @@ func (s *Server) handleUpstreamRequest(w dns.ResponseWriter, r *dns.Msg, startTi
|
||||
func (s *Server) handleHostsResponse(w dns.ResponseWriter, r *dns.Msg, ip string) {
|
||||
response := new(dns.Msg)
|
||||
response.SetReply(r)
|
||||
// 设置递归可用标志
|
||||
response.RecursionAvailable = true
|
||||
// 不再硬编码 RecursionAvailable,使用默认值或上游返回的值
|
||||
// 设置递归可用标志(因为我们的 DNS 服务器支持递归查询)
|
||||
response.RecursionAvailable = true
|
||||
// 不再硬编码 RecursionAvailable,使用默认值或上游返回的值
|
||||
|
||||
if len(r.Question) > 0 {
|
||||
@@ -2032,6 +2045,8 @@ func (s *Server) forwardDNSRequestWithCache(r *dns.Msg, domain string) (*dns.Msg
|
||||
// 所有上游服务器都失败,返回服务器失败错误
|
||||
response := new(dns.Msg)
|
||||
response.SetReply(r)
|
||||
// 设置递归可用标志
|
||||
response.RecursionAvailable = true
|
||||
|
||||
response.SetRcode(r, dns.RcodeServerFailure)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user