From d10e6d02924c70207d4f7ffebbd9274abc41aaa9 Mon Sep 17 00:00:00 2001 From: Wim Date: Mon, 21 May 2018 22:27:41 +0200 Subject: [PATCH] Do reverse service lookup only if address doesn't match node --- agent/dns.go | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/agent/dns.go b/agent/dns.go index 7e4b816f96..27c14f429b 100644 --- a/agent/dns.go +++ b/agent/dns.go @@ -208,27 +208,30 @@ func (d *DNSServer) handlePtr(resp dns.ResponseWriter, req *dns.Msg) { } } - // lookup the service address - serviceAddress := dnsutil.ExtractAddressFromReverse(qName) - sargs := structs.ServiceSpecificRequest{ - Datacenter: datacenter, - QueryOptions: structs.QueryOptions{ - Token: d.agent.tokens.UserToken(), - AllowStale: d.config.AllowStale, - }, - ServiceAddress: serviceAddress, - } + // only look into the services if we didn't find a node + if len(m.Answer) == 0 { + // lookup the service address + serviceAddress := dnsutil.ExtractAddressFromReverse(qName) + sargs := structs.ServiceSpecificRequest{ + Datacenter: datacenter, + QueryOptions: structs.QueryOptions{ + Token: d.agent.tokens.UserToken(), + AllowStale: d.config.AllowStale, + }, + ServiceAddress: serviceAddress, + } - var sout structs.IndexedServiceNodes - if err := d.agent.RPC("Catalog.ServiceNodes", &sargs, &sout); err == nil { - for _, n := range sout.ServiceNodes { - if n.ServiceAddress == serviceAddress { - ptr := &dns.PTR{ - Hdr: dns.RR_Header{Name: q.Name, Rrtype: dns.TypePTR, Class: dns.ClassINET, Ttl: 0}, - Ptr: fmt.Sprintf("%s.service.%s", n.ServiceName, d.domain), + var sout structs.IndexedServiceNodes + if err := d.agent.RPC("Catalog.ServiceNodes", &sargs, &sout); err == nil { + for _, n := range sout.ServiceNodes { + if n.ServiceAddress == serviceAddress { + ptr := &dns.PTR{ + Hdr: dns.RR_Header{Name: q.Name, Rrtype: dns.TypePTR, Class: dns.ClassINET, Ttl: 0}, + Ptr: fmt.Sprintf("%s.service.%s", n.ServiceName, d.domain), + } + m.Answer = append(m.Answer, ptr) + break } - m.Answer = append(m.Answer, ptr) - break } } }