dnstap 是一个灵活且结构化的二进制日志格式,用于 DNS 软件1。它使用 Protocol Buffers 以与实现无关的格式对 DNS 软件内部发生的事件进行编码。
dnstap 能够对服务器交换的任何 DNS 消息进行编码,并记录有关远程计算机(IP 地址、端口)和时间的信息。它包括客户端查询和响应,还包括从其他名称服务器请求的代理请求或其他信息。
此示例显示了 dnstap 命令行工具的输出,可以从中了解 dnstap 能够提供的信息类型
type: MESSAGE
message:
type: CLIENT_RESPONSE
socket_family: INET
socket_protocol: UDP
query_address: 127.0.0.1
query_port: 47969
response_message: |
;; opcode: QUERY, status: NOERROR, id: 47163
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;example.org. IN A
;; ANSWER SECTION:
example.org. 86339 IN A 93.184.216.34
dnstap 插件 已被添加到 CoreDNS-010 中。目前它只能记录客户端级别的消息。正在实施用于记录其他类型的交换行为的日志记录。
dnstap 插件与 dnstap 命令行工具配合使用。它们使用套接字进行通信:只要该工具处于监听状态,插件就会发送日志。
要开始使用 dnstap 插件,请将其添加到服务器块中的 Corefile
dnstap /tmp/dnstap.sock full
如果将 `full` 选项给到 dnstap 插件,你还可以包括 DNS 消息的完整(二进制)数据。现在你可以使用 dnstap 工具从 CoreDNS 写入的套接字进行读取。
$ dnstap -u /tmp/dnstap.sock
或在 dnstap 套接字上进行监听,并将消息有效负载存储到二进制 dnstap 格式日志文件
$ dnstap -u /tmp/dnstap.sock -w /tmp/july.dnstap
然后以 YAML 格式读取 7 月的日志
$ dnstap -r /tmp/july.dnstap -y