[Pdns-users] Version 4.x split horizon

Daniel Miller dmiller at amfes.com
Mon Aug 7 20:37:47 UTC 2017


I've had a long-running v3 recursor that I just migrated to v4.0.  I was 
using a Lua script, specifically the preresolve function, to implement 
split-horizon functionality.  This worked great - but the new syntax for 
v4.x threw me for a bit.

I've got it working now - and in a far simpler and more elegant script 
which I really appreciate.  My whole script is now:

lanDomains = newDS()
lanDomains:add(dofile("/etc/powerdns/lanDomains"))

function preresolve(dq)
     if(dq.qtype==pdns.A and lanDomains:check(dq.qname)) then
         dq:addAnswer(pdns.A,"192.168.0.4")
         return true
     end
     return false
end

and the "lanDomains" file looks like:

return{
"internaldomain1",
"internaldomain2",
<...>
}

I love it - simple, and an easy way to update with any changes. It so 
happens that I'm re-directing everything to the same address - but I 
could easily adapt to handle multiple internal servers. This works 
because all internal clients use this recursor and have no need to know 
the external IP - and any external queries go to the authoritative 
server and aren't affected by the recursor.  As far as I know - this is 
the correct PowerDNS way to implement this.  But...

Logically - it seems to me I could/should accomplish the same thing by 
using the preoutquery() function.  Functionally - that turns out not to 
be the case (I tried using identical code, just changed the name from 
preresolve()).  So - am I misunderstanding the role of preoutquery()?

-- 
Daniel



More information about the Pdns-users mailing list