我想记录家庭无线网络中计算机的所有 DNS 查询。最好的方法是什么?
我知道的选项有:
使用 OpenDNS 并让它为我记录查询。但是,为了从他们的日志中生成报告,我必须使用支持 javascript 的无头浏览器登录他们的
stats
网页并将统计数据下载到脚本中。这很痛苦。使用 djbdns 或 dnsmasq 或某些缓存解析器(不是
bind
因为这让我害怕)运行我自己的 DNS 服务器,并让它生成日志文件。这里的问题是确保名称服务器保持运行并且日志滚动等。使用带日志记录的端口转发,并
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 文件
- 还有一些更无聊的事情我不会讲