From fa732408121c4ecd3b87002e2f06382af28e9abd Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Tue, 14 Jul 2015 16:44:21 +0000 Subject: [PATCH] Copy dns requests and give them a fresh id when doing recursive queries. --- nameserver/dns.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nameserver/dns.go b/nameserver/dns.go index c2868aa2..9108b9a6 100644 --- a/nameserver/dns.go +++ b/nameserver/dns.go @@ -227,7 +227,9 @@ func (d *DNSServer) handleRecursive(client *dns.Client, defaultMaxResponseSize i } for _, server := range d.upstream.Servers { - response, _, err := client.Exchange(req, fmt.Sprintf("%s:%s", server, d.upstream.Port)) + reqCopy := *req + reqCopy.Id = dns.Id() + response, _, err := client.Exchange(&reqCopy, fmt.Sprintf("%s:%s", server, d.upstream.Port)) if err != nil || response == nil { d.ns.debugf("error trying %s: %v", server, err) continue @@ -237,6 +239,7 @@ func (d *DNSServer) handleRecursive(client *dns.Client, defaultMaxResponseSize i continue } d.ns.debugf("response: %+v", response) + response.SetReply(req) if err := w.WriteMsg(response); err != nil { d.ns.infof("error responding: %v", err) }