diff --git a/nameserver/dns.go b/nameserver/dns.go index 7e5f2be3..26dea56b 100644 --- a/nameserver/dns.go +++ b/nameserver/dns.go @@ -134,6 +134,10 @@ func (d *DNSServer) handleLocal(defaultMaxResponseSize int) func(dns.ResponseWri } addrs := d.ns.Lookup(hostname) + if len(addrs) == 0 { + d.errorResponse(req, dns.RcodeNameError, w) + return + } response := dns.Msg{} response.RecursionAvailable = true @@ -233,12 +237,8 @@ func (d *DNSServer) handleRecursive(client *dns.Client, defaultMaxResponseSize i d.ns.debugf("error trying %s: %v", server, err) continue } - if response.Rcode != dns.RcodeSuccess && !response.Authoritative { - d.ns.debugf("non-authoritative error trying %s: %v", server, response.Rcode) - continue - } d.ns.debugf("response: %+v", response) - response.SetReply(req) + response.Id = req.Id if err := w.WriteMsg(response); err != nil { d.ns.infof("error responding: %v", err) } diff --git a/test/250_dns_lookup_2_test.sh b/test/250_dns_lookup_2_test.sh deleted file mode 100755 index aa7c283b..00000000 --- a/test/250_dns_lookup_2_test.sh +++ /dev/null @@ -1,16 +0,0 @@ -#! /bin/bash - -. ./config.sh - -C1=10.2.0.78 - -start_suite "Cross host dns-lookup" - -weave_on $HOST1 launch -weave_on $HOST2 launch $HOST1 - -start_container $HOST1 $C1/24 --name c1 - -assert "weave_on $HOST2 dns-lookup c1" $C1 - -end_suite diff --git a/test/250_dns_negative_test.sh b/test/250_dns_negative_test.sh new file mode 100755 index 00000000..f89b6698 --- /dev/null +++ b/test/250_dns_negative_test.sh @@ -0,0 +1,12 @@ +#! /bin/bash + +. ./config.sh + +start_suite "Negative DNS queries" + +weave_on $HOST1 launch +start_container_with_dns $HOST1 --name c1 +assert_raises "exec_on $HOST1 c1 dig A foo.weave.local | grep 'status: NXDOMAIN'" +assert_raises "exec_on $HOST1 c1 dig A foo.invalid | grep 'status: NXDOMAIN'" + +end_suite