Сопоставитель расщепленного горизонта PowerDNS

Я осмотрел сеть для решения и нашел многочисленные потоки с различными предложениями. Большинство которых я нашел, использовал LUA на сопоставителе для возврата записей. Другие сообщения предлагают использовать бэкенды Канала или геоIP. Все содержание, которое я считал, использовало

Мне любопытно знать, возможно ли это через LUA для изменения Средства передачи на основе сетевого диапазона вместо того, чтобы использовать LUA, чтобы хранить зональную информацию.

Если я могу заставить логику, подобную следующему работать, я должен быть все установлен:

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

Я не вижу примеров LUA от pdns, которые демонстрируют изменение любых настроек в самом PDNS, и любопытно, если это даже возможно.

1
задан 18 June 2015 в 21:04
2 ответа

Ни сервер PowerDNS, ни Рекурсор не поддерживают настройки разделения горизонта, как это делает BIND.

Вы можете обойти это, например, запустив код Lua в вашем рекурсоре, который напрямую предоставляет ответы, которые вы хотите обслуживать, например, для конкретной подсети, но, как вы уже выяснили, вы не можете управлять тем, куда будут перенаправляться запросы из Lua.

Относительно новым дополнением к семейству кода PowerDNS является балансировщик нагрузки DNS, который программируется в Lua и позволяет отправлять запросы различным серверам имен практически на основе всего, что позволяет протокол DNS. См. http://dnsdist.org/ и https://github.com/PowerDNS/pdns/blob/master/pdns/README-dnsdist.md . Пример Split Horizon разделяет рекурсивные и нерекурсивные запросы, но вы также можете разделить его в зависимости от исходного адреса, например, с помощью функции addPoolRule (netmask, pool).

Btw. Людям Lua не нравится, когда вы пишете заглавными буквами. См. http://www.lua.org/about.html «Что в имени»; -)

2
ответ дан 3 December 2019 в 20:51

Этот ответ поддерживает предложение @ZaphodB использовать dnsdist. Вот пример файла dnsdist.conf, который будет выполнять настройку разделенного горизонта, направляя трафик либо на DNS-серверы Google, либо на DNS-серверы в вашей локальной сети в зависимости от целевого полного доменного имени. Объект dq является DNS-вопросом; функция lua может выполнять тестирование по любому свойству этого объекта.

-- 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)
0
ответ дан 19 April 2021 в 22:16

Теги

Похожие вопросы