From 382deb32729f7e0666d9a96eb0d10e3a037440d8 Mon Sep 17 00:00:00 2001 From: epipho Date: Fri, 22 May 2015 18:10:27 -0400 Subject: [PATCH 1/2] Compress all DNS responses to prevent them from going over the 512 byte limit from RFC 1035 --- command/agent/dns.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/command/agent/dns.go b/command/agent/dns.go index 2a8d8dd5c301..3dbe7c0eafa5 100644 --- a/command/agent/dns.go +++ b/command/agent/dns.go @@ -180,6 +180,7 @@ func (d *DNSServer) handlePtr(resp dns.ResponseWriter, req *dns.Msg) { // Setup the message response m := new(dns.Msg) m.SetReply(req) + m.Compress = true m.Authoritative = true m.RecursionAvailable = (len(d.recursors) > 0) @@ -249,6 +250,7 @@ func (d *DNSServer) handleQuery(resp dns.ResponseWriter, req *dns.Msg) { // Setup the message response m := new(dns.Msg) m.SetReply(req) + m.Compress = true m.Authoritative = true m.RecursionAvailable = (len(d.recursors) > 0) @@ -776,6 +778,7 @@ func (d *DNSServer) handleRecurse(resp dns.ResponseWriter, req *dns.Msg) { var err error for _, recursor := range d.recursors { r, rtt, err = c.Exchange(req, recursor) + r.Compress = true if err == nil { // Forward the response d.logger.Printf("[DEBUG] dns: recurse RTT for %v (%v)", q, rtt) @@ -792,6 +795,7 @@ func (d *DNSServer) handleRecurse(resp dns.ResponseWriter, req *dns.Msg) { q, resp.RemoteAddr().String(), resp.RemoteAddr().Network()) m := &dns.Msg{} m.SetReply(req) + m.Compress = true m.RecursionAvailable = true m.SetRcode(req, dns.RcodeServerFailure) resp.WriteMsg(m) From 41b6bce6d7cf44f462d8e97138bcb5f951d4bc03 Mon Sep 17 00:00:00 2001 From: epipho Date: Wed, 24 Jun 2015 18:58:45 -0400 Subject: [PATCH 2/2] Fix panic where r.Compress would be set before checking for errors. --- command/agent/dns.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/agent/dns.go b/command/agent/dns.go index 3dbe7c0eafa5..1beea8371bde 100644 --- a/command/agent/dns.go +++ b/command/agent/dns.go @@ -778,8 +778,8 @@ func (d *DNSServer) handleRecurse(resp dns.ResponseWriter, req *dns.Msg) { var err error for _, recursor := range d.recursors { r, rtt, err = c.Exchange(req, recursor) - r.Compress = true if err == nil { + r.Compress = true // Forward the response d.logger.Printf("[DEBUG] dns: recurse RTT for %v (%v)", q, rtt) if err := resp.WriteMsg(r); err != nil {