Resolvedor de horizonte dividido PowerDNS

Resolvedor de horizonte dividido PowerDNS

Procurei uma solução na web e encontrei vários tópicos com sugestões diferentes. A maior parte do que descobri usa LUA no resolvedor para retornar registros. Outras postagens sugerem o uso de backends GEO-IP ou Pipe. Todo o conteúdo que li usou

Estou curioso para saber se é possível, via LUA, alterar o Forwarder com base no alcance da rede ao invés de usar LUA para armazenar informações de zona.

Se eu conseguir que uma lógica semelhante à seguinte funcione, devo estar tudo pronto:

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;
}

Não vejo nenhum exemplo de LUA de pdns que demonstre a alteração de quaisquer configurações dentro do próprio PDNS e estou curioso para saber se isso é possível.

Responder1

Nem o PowerDNS Server nem o Recursor suportam configurações de horizonte dividido da mesma forma que o BIND.

Você pode contornar isso, por exemplo, executando o código Lua em seu recursor que fornece diretamente as respostas que você deseja que sejam veiculadas para uma sub-rede específica, por exemplo, mas como você já descobriu, não pode manipular para onde as consultas serão encaminhadas de Lua.

Uma adição relativamente nova à família de código PowerDNS é um balanceador de carga DNS que é programável em Lua que permite enviar consultas para diferentes servidores de nomes com base em praticamente tudo que o protocolo DNS permite. Verhttp://dnsdist.org/ehttps://github.com/PowerDNS/pdns/blob/master/pdns/README-dnsdist.md. O exemplo Split Horizon divide consultas recursivas e não recursivas, mas você também pode dividi-las dependendo do endereço de origem, por exemplo, por meio da função addPoolRule(netmask, pool).

Por falar nisso. o pessoal da Lua não gosta quando você escreve tudo em caixa alta. Verhttp://www.lua.org/about.html"O que há em um nome" ;-)

Responder2

Esta resposta apoia a sugestão do @ZaphodB de usardnsdist. Aqui está um dnsdist.confarquivo de exemplo que fará uma configuração de horizonte dividido, direcionando o tráfego para os servidores DNS do Google ou para os servidores DNS em sua rede local, dependendo do FQDN de destino. O dqobjeto é umPergunta DNS; sua função lua pode testar qualquer propriedade desse 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)

informação relacionada