我有一个运行 dnsmasq 的 OpenWRT 路由器。我想创建一个文件,其中包含通过路由器请求的每个域。我的输出应该如下所示:
google.com
cnn.com
wikipedia.com
news.google.com
gmail.com
理想情况下不会有任何重复。我可能会设置一个 cron 作业,在必要时删除重复项。现在我正在尝试找出一种记录它们的好方法。我查看了 dnsmasq 的选项。我发现了以下选项:
-q, --log-queries Log DNS queries.
-8, --log-facility=<facilty>|<file> Log to this syslog facility or file. (defaults to DAEMON)
--log-dhcp Extra logging for DHCP.
--log-async[=<integer>] Enable async. logging; optionally set queue length.
在 OpenWRT 上,这些设置似乎隐藏在 /etc/init.d/dnsmasq 文件中。我尝试设置它们,但没有成功。:-( 有没有更简单的方法来实现我的目标?
啊!通过一些小技巧,我能够让它写入日志文件。但是,它没有我创建此列表所需的数据。也许 dnsmasq 不能做我想要它做的事情?
答案1
您可以编辑配置文件:
vi /etc/dnsmasq.conf
# /etc/dnsmasq.conf
log-dhcp
log-queries
log-facility=/tmp/dnsmasq.log
或者编辑另一个配置文件:
vi /etc/config/dhcp
config dnsmasq
...
option logdhcp '1'
option logqueries '1'
option logfacility '/tmp/dnsmasq.log'
[请不要编辑这两个文件]
然后重启服务:
/etc/init.d/dnsmasq restart
可以使用以下方法实时解析日志文件tail+awk
:
$ vi dnsmasq.awk
#!/usr/bin/awk -f
BEGIN {
OFS = ",";
}
$5 == "query[A]" {
time = mktime( \
sprintf("%04d %02d %02d %s\n", \
strftime("%Y", systime()), \
(match("JanFebMarAprMayJunJulAugSepOctNovDec",$1)+2)/3, \
$2, \
gensub(":", " ", "g", $3) \
) \
);
query = $6;
host = $8;
print time, host, query;
}
$ chmod +x dnsmasq.awk
$ tail -f /tmp/dnsmasq.log | ./dnsmasq.awk
1468999090,192.168.1.100,google.com
1468999092,192.168.1.101,youtube.com
1468999095,192.168.1.102,facebook.com
1468999097,192.168.1.100,qa.sockets.stackexchange.com
更高级的方法是通过filebeat将日志实时发送到ELK。
答案2
您可以安装 tcpdump 并嗅探发往端口 53 的数据包
tcpdump -i eth0 -l -vvv dst host 192.168.1.100 and dst port 53 >> dump.log
此文件会快速增长,您的路由器会很快耗尽内存。使用 USB 棒保存日志可避免这种情况。
答案3
另外/etc/config/dhcp
:
config dnsmasq
[...]
option logqueries '1'
并重新启动 dnsmasq。
日志将写入系统日志,可logread -f
通过终端或 LuCi 查看。
答案4
假设您正在使用路由器,如果您想大量将日志写入内部闪存,这会缩短闪存的使用寿命,并可能使其变坏。
如果您不介意您的日志出现在第三方服务上,我可以建议您使用 OpenDNS 来实现您的目的吗?
从概念上来说
- 一旦您的路由器改变 WAN IP,它需要将您的新 IP 通知 OpenDNS。
- 您的路由器需要配置为使用 OpenDNS 服务器进行 DNS 查找。
- 尽管经过几个小时的延迟,您的网络的 DNS 查询历史记录仍会显示在 OpenDNS 仪表板上。在这里,您可以查看按最高顺序排列的域名查询次数,以及显示每小时查询次数的图表。
细节
引自我写的一个教程
OpenDNS DNS-O-Matic 设置
首先,我们需要在 DNS-O-Matic 和 OpenDNS 上有一个账户来维护日志。
- 注册一个 DNS-O-Matic (
www.dnsomatic.com
) 帐户。使用不带特殊字符的密码。据我记得,这会导致 OpenWRT 上的配置出现问题。您可以通过增加长度来弥补密码强度的损失。- 使用相同的登录凭据,登录 OpenDNS 仪表板 (
dashboard.opendns.com
)- 在“设置”下,为您的网络命名。我称之为“家庭”
- 设置:
<Your network label>
,选择此项- 点击统计和日志
- 启用统计和日志
- 返回 DNS-O-Matic
- 添加服务,OpenDNS
- 选择您的家庭网络
OpenWRT 配置
我们需要配置 OpenWRT 以便在公共 IP 地址发生变化时通过 DNS-O-Matic 服务更新 OpenDNS,例如由于路由器重启、WAN 链接断开并重新连接等。
注意:这些步骤适用于 OpenWRT Chaos Calmer。
重要提示:根据路由器上的可用空间,您可能不得不使用非 SSL 选项。
- 导航
System > Software
- 更新列表
- 如果您想使用 SSL,请安装
ca-certificates
并wget
- 如果您不想或无法使用 SSL,请安装
wget-nossl
- 安装
ddns-scripts
和luci-app-ddns
- 导航至服务 > 动态 DNS
- 添加新条目并调用它
dnsomatic
- 选择-自定义- DDNS服务提供商
- 将自定义更新网址设置为
http://[USERNAME]:[PASSWORD]@updates.dnsomatic.com/nic/update?hostname=all.dnsomatic.com&myip=[IP]&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG
不替换任何内容- 将主机名设置为
dnsomatic.com
- 输入你的用户名与密码
- 如果您使用 SSL 选项,请选中“使用 HTTP 安全”
- URL 的 [IP] 部分将按照‘高级设置’下的‘IP 地址源’和‘网络’字段的定义进行替换。
- 保存并应用