diff --git a/doh-client/client.go b/doh-client/client.go index e8e1d61..3fbd228 100644 --- a/doh-client/client.go +++ b/doh-client/client.go @@ -273,7 +273,7 @@ func (c *Client) handlerFunc(w dns.ResponseWriter, r *dns.Msg, isTCP bool) { } else { reply, _, err = c.tcpClient.Exchange(r, upstream) } - if err == nil || err == dns.ErrTruncated { + if err == nil { w.WriteMsg(reply) return } diff --git a/doh-client/ietf.go b/doh-client/ietf.go index 85a9a34..df18d82 100644 --- a/doh-client/ietf.go +++ b/doh-client/ietf.go @@ -205,7 +205,7 @@ func (c *Client) parseResponseIETF(ctx context.Context, w dns.ResponseWriter, r fullReply := new(dns.Msg) err = fullReply.Unpack(body) - if err != nil && err != dns.ErrTruncated { + if err != nil { log.Println(err) req.reply.Rcode = dns.RcodeServerFailure w.WriteMsg(req.reply) diff --git a/doh-server/server.go b/doh-server/server.go index 7508aee..22ffce3 100644 --- a/doh-server/server.go +++ b/doh-server/server.go @@ -251,14 +251,14 @@ func (s *Server) doDNSQuery(ctx context.Context, req *DNSRequest) (resp *DNSRequ req.currentUpstream = s.conf.Upstream[rand.Intn(numServers)] if !s.conf.TCPOnly { req.response, _, err = s.udpClient.Exchange(req.request, req.currentUpstream) - if err == dns.ErrTruncated { + if err == nil && req.response != nil && req.response.Truncated { log.Println(err) req.response, _, err = s.tcpClient.Exchange(req.request, req.currentUpstream) } } else { req.response, _, err = s.tcpClient.Exchange(req.request, req.currentUpstream) } - if err == nil || err == dns.ErrTruncated { + if err == nil { return req, nil } log.Printf("DNS error from upstream %s: %s\n", req.currentUpstream, err.Error())