Resolución de horizonte dividido PowerDNS

Resolución de horizonte dividido PowerDNS

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.confarchivo 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 dqobjeto 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)

información relacionada