在 PowerDNS 中跟踪 DNS 查询

在 PowerDNS 中跟踪 DNS 查询

我正在考虑设置一个 PowerDNS 服务器来处理几百个区域。我想跟踪每个区域和记录的“使用情况”,即每天对每个区域的查询次数。

我在文档或 Google 中找不到有关如何实现此目的的任何详细信息。我不熟悉 PowerDNS,但认为需要自定义 PipeBackend?PipeBackends 是否会替换标准 MySQL 后端,还是仅用于未解析的查询?

答案1

PowerDNS 目前无法做到这一点。有外部工具,例如差分扫描可以通过 pcap 进行统计。

如果您为此编写了一个自定义(管道)后端,它必须替换您的 mysql-backend - 您无法告诉 powerdns 将一个后端的结果通过另一个后端提供。从这个意义上讲,“pipebackend”可能有点令人困惑。

请注意,您从后端(自定义后端或 mysql 查询日志)执行的任何统计信息都会受到 PowerDNS 内部(可选但推荐的)数据包和查询缓存的影响。

因此,现在我建议使用类似差分扫描

答案2

至于管道后端问题:

所有后端都按照启动语句中给出的顺序来处理查询。一旦后端响应与查询匹配的数据,所有剩余的后端将不再被询问。因此,如果您放置一个仅用于生成统计数据而不预先回答任何问题的管道后端,您将捕获对您的名称服务器的所有查询,但 PowerDNS 能够从其数据包和查询缓存中回答的查询除外。

答案3

也许最好的选择是在 PowerDNS 缓存选项(数据包和查询缓存)之前添加一个 LUA 钩子。这样,您可以为日志记录创建一个 LUA 脚本,并让后端回答查询。这样,您可以使用缓存(以获得出色的性能)并使用经过测试的后端(gmysql)进行响应。如果日志记录会严重减慢您的系统速度,您甚至可以包含一些代码来停止日志记录。

如果我没记错的话,缓存之后已经有一个可用的 LUA 钩子。它可用于您所需的内容以及速率限制(当需要时)。

相关内容