如何记录来自我的家庭网络的 DNS 查询?

如何记录来自我的家庭网络的 DNS 查询?

我想记录家庭无线网络中计算机的所有 DNS 查询。最好的方法是什么?

我知道的选项有:

  1. 使用 OpenDNS 并让它为我记录查询。但是,为了从他们的日志中生成报告,我必须使用支持 javascript 的无头浏览器登录他们的stats网页并将统计数据下载到脚本中。这很痛苦。

  2. 使用 djbdns 或 dnsmasq 或某些缓存解析器(不是bind因为这让我害怕)运行我自己的 DNS 服务器,并让它生成日志文件。这里的问题是确保名称服务器保持运行并且日志滚动等。

  3. 使用带日志记录的端口转发,并iptables在机器上运行,在记录每个查询后转发到 8.8.8.8:53(或其他)。这样做的好处是,我可以转发到强大的 DNS 服务器,而不是运行自己的服务器,但我认为记录的内容不会包含完整的 DNS 查询(似乎有一个 netfilter hack 可以做我想要的事情,但我不愿意为这个简单的项目修改我的内核)。

我是否还忽略了其他选择?

答案1

我相信有更好的方法来做到这一点,特别是如果你的路由器支持日志记录。

但是这里有一个您可以为每台机器使用的快速而简单的方法。

您可以使用Wireshark查看所有 DNS 查询。您可以在接口上运行捕获,然后过滤 DNS。以下是 DNS 捕获示例,已过滤 DNS:

在此处输入图片描述

有趣的是,您访问 superuser.com,它会查询一堆其他 StackExchange 网站。

答案2

很多NAS 盒,例如 Synology,实际上运行 Linux 并具有可用的 DNS 包。基于 Atom 或 ARM 的 NAS 不会消耗太多电量,您可以一直开着它。

或者,35 美元树莓派足以托管 DNS 和/或 DHCP 服务器。在很多优秀的发行版中,安装 logrotate 都很简单。如果您愿意,还可以让它每周给您发送一份摘要。

运行自己的缓存 DNS 是一个好主意,并且通常可以带来积极的好处,例如:

  • 降低 DNS 请求的延迟(如果最近看到过该请求)
  • 允许 DHCP DNS 注册
  • 运行自己的内部域,无需处理所有设备上的 hosts 文件
  • 还有一些更无聊的事情我不会讲

相关内容