Busqué una solución en la web y encontré numerosos hilos con diferentes sugerencias. La mayoría de los que he encontrado han estado usando LUA en el solucionador para devolver registros. Otras publicaciones sugieren usar backends GEO-IP o Pipe. Todo el contenido que he leído lo he usado.
Tengo curiosidad por saber si es posible, a través de LUA, cambiar el reenviador según el rango de red en lugar de usar LUA para almacenar información de zona.
Si puedo hacer que funcione una lógica similar a la siguiente, debería estar todo listo:
if sourceip comes from (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) {
forwarder = 192.168.0.1;
}else{
forwarder = 8.8.8.8;
}
No veo ningún ejemplo de LUA de pdns que demuestre cambiar alguna configuración dentro del propio PDNS, y tengo curiosidad por saber si eso es posible.
Respuesta1
Ni PowerDNS Server ni Recursor admiten las configuraciones de horizonte dividido como lo hace BIND.
Puede solucionarlo, por ejemplo, ejecutando código Lua en su recursor que proporciona directamente las respuestas que desea para una subred específica, por ejemplo, pero como ya descubrió, no puede manipular a dónde se reenviarán las consultas desde Lua.
Una adición relativamente nueva a la familia de códigos PowerDNS es un balanceador de carga DNS que es programable en Lua y que le permite enviar consultas a diferentes servidores de nombres basándose en casi cualquier cosa que permita el protocolo DNS. Verhttp://dnsdist.org/yhttps://github.com/PowerDNS/pdns/blob/master/pdns/README-dnsdist.md. El ejemplo de Split Horizon divide consultas recursivas y no recursivas, pero también puede dividirlas según la dirección de origen, por ejemplo, mediante la función addPoolRule(netmask, pool).
Por cierto. A la gente de Lua no le gusta que lo escribas todo en mayúsculas. Verhttp://www.lua.org/about.html"Lo que hay en un nombre" ;-)
Respuesta2
Esta respuesta respalda la sugerencia de @ZaphodB de utilizardnsdist. Aquí hay un dnsdist.conf
archivo de muestra que realizará una configuración de horizonte dividido, dirigiendo el tráfico a los servidores DNS de Google o a los servidores DNS de su red local, según el FQDN de destino. El dq
objeto es unPregunta DNS; su función lua puede probar cualquier propiedad de ese objeto.
-- bind to port 53 (default) on local machine.
-- setLocal clears existing, addLocal appends to existing
setLocal("127.0.0.1")
addLocal("10.22.222.222")
-- set up dns server pools
newServer({address="8.8.8.8",name="google8888",pool="google"})
newServer({address="8.8.4.4",name="google8844",pool="google"})
newServer({address="10.22.222.1",name="localdns1",pool="local"})
newServer({address="10.22.222.2",name="localdns2",pool="local"})
-- define split horizon policy
function splitHorizon(servers, dq)
if (string.find(dq.qname:toString(),'example.com.?$')) then
print("local address")
return leastOutstanding.policy(getPoolServers("local"), dq)
else
print("other address")
return leastOutstanding.policy(getPoolServers("google"), dq)
end
end
-- apply split horizon policy
setServerPolicyLua("splitHorizon", splitHorizon)