<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><blockquote type="cite" class="">What I still need to test is if this script actually works and what will happen if the followupFunction also returns NXDOMAIN, if it hit the Lua script again then nothing else is needed, else I’ll need to add more logic to keep going with a chopOff() until the zone’s ‘root' wildcard record is found.<br class=""></blockquote><blockquote type="cite" class=""><blockquote type="cite" class="">Otherwise, as you suggested yourself, dnsdist is very powerful.  (You definitely don't want to use a recursor as your authoritative server though)<br class=""><br class=""></blockquote></blockquote>I’ve since tried dnsdist and it can only spoof requests, not answers. So now I’m having a go at using a recursor in front of the authoritative server to see if I can get things working that way and this seems promising, if it weren’t for a weird error message I can’t make any sense of.<br class=""><br class=""><blockquote type="cite" class="">Maybe if I add some examples:<br class=""><br class="">1.2.3.4.5.6.e164.arpa. NAPTR “some text with sip call routing info: AAA”<br class="">*.4.5.6.e164.arpa. NAPTR “some different sip call routing info: BBB”<br class=""><br class="">A query for 9.9.9.4.5.6.e164.arpa. will result in BBB<br class="">A query for 1.2.3.4.5.6.e164.arpa. yields AAA<br class="">A query for 3.3.3.4.5.6.e164.arpa. yields NXDOMAIN<br class=""><br class="">The above is all according to RFC and expected PowerDNS behaviour.<br class=""></blockquote><br class="">My pdns-recursor Lua script:<br class=""><br class="">-- nxdomain runs after no result is found.<br class="">function nxdomain(dq)<br class="">  dquery = newDN(dq.qname:toString())<br class="">  pdnslog("nxdomain called for: "..dquery:toString())<br class="">  if dq.qtype == pdns.NAPTR then<br class="">    pdnslog("Search parent wildcard record")<br class="">    if dquery:countLabels() == 12 then<br class="">      dquery:chopOff()<br class="">    end<br class="">    if dquery:countLabels() > 9 then<br class="">      dquery:chopOff()<br class="">    end<br class="">    cname = dquery:toString()<br class="">    pdnslog("Returning CNAME for: "..cname)<br class="">    dq.addAnswer(pdns.CNAME, cname)<br class="">    dq.rcode = 0 -- make it a normal answer<br class="">    dq.followupFunction = "followCNAMERecords"<br class="">    return true<br class="">  end<br class="">  return false<br class="">end<br class=""><br class="">The issue is the addAnswer line, it takes at least 2 parameters according to: <a href="https://doc.powerdns.com/recursor/lua-scripting/dq.html" class="">https://doc.powerdns.com/recursor/lua-scripting/dq.html</a> <br class="">:addAnswer(type, content[, ttl, name])<br class=""><br class="">But I keep getting this in the precursor logs, what on earth is the last line on about?! I can’t find anything related to this online:<div class=""><br class=""></div><div class=""><div class=""><font face="Courier New" class="">Jun 10 01:19:09 web08.ixbru.ipnexia.com pdns_recursor[1662087]: nxdomain called for: 3.1.1.0.0.5.6.7.8.9.e164.arpa.</font></div><div class=""><font face="Courier New" class="">Jun 10 01:19:09 web08.ixbru.ipnexia.com pdns_recursor[1662087]: Search parent wildcard record</font></div><div class=""><font face="Courier New" class="">Jun 10 01:19:09 web08.ixbru.ipnexia.com pdns_recursor[1662087]: Returning CNAME for: 1.0.0.5.6.7.8.9.e164.arpa.</font></div><div class=""><font face="Courier New" class="">Jun 10 01:19:09 web08.ixbru.ipnexia.com pdns_recursor[1662087]: STL error (3.1.1.0.0.5.6.7.8.9.e164.arpa/NAPTR from 10.*.*.*:46622): [string "chunk"]:27: Unable to convert parameter from number to PN12RecursorLua411DNSQuestionE</font></div><br class="">Line 27 refers to `<span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class="">dq.addAnswer(pdns.CNAME, cname)`, is this a bug?</span></div></body></html>