PowerDNS 水平分割解析器

Mic*_*ser 2 domain-name-system split-dns powerdns

我在网上寻找解决方案,并发现了许多具有不同建议的线程。我发现大部分都是在解析器上使用 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;
}
Run Code Online (Sandbox Code Playgroud)

我没有从 pdns 中看到任何 LUA 示例来演示如何更改 PDNS 本身内的任何设置,并且我很好奇这是否可能。

小智 5

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 “名称的含义”;-)