我在网上四处寻找解决方案,并发现了许多带有不同建议的线程。我发现的大部分都在解析器上使用 LUA 来返回记录。其他帖子建议使用 GEO-IP 或 Pipe 后端。我读过的所有内容都用过
我很想知道是否有可能通过 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;
}
我没有看到任何来自 pdns 的 LUA 示例可以证明更改 PDNS 本身内的任何设置,并且我很好奇这是否可能。
PowerDNS Server 和 Recursor 都不支持像 BIND 那样的水平分割设置。
您可以通过例如在您的递归器中运行 Lua 代码来解决它,该代码直接提供您希望为特定子网提供的答案,但是您已经发现您无法操纵查询将从 Lua 转发到的位置。
PowerDNS 系列代码中一个相对较新的补充是 DNS 负载均衡器,它在 Lua 中是可编程的,它使您能够根据 DNS 协议允许的任何内容发送查询来执行不同的名称服务器。请参阅http://dnsdist.org/和https://github.com/PowerDNS/pdns/blob/master/pdns/README-dnsdist.md。拆分水平线示例拆分递归和非递归查询,但您也可以根据源地址拆分它,例如通过 addPoolRule(netmask, pool) 函数。
顺便提一句。当你把它全部大写时,Lua 人不喜欢它。见http://www.lua.org/about.html “名字里有什么” ;-)
这个答案支持@ZaphodB 使用dnsdist的建议。这是一个示例
dnsdist.conf
文件,它将执行水平分割设置,根据目标 FQDN 将流量定向到 Google 的 DNS 服务器或本地网络中的 DNS 服务器。dq
对象是一个DNS Question;您的 lua 函数可以针对该对象的任何属性进行测试。