exv*_*nce 15 networking dns openwrt dnsmasq
我有一个运行 dnsmasq 的 OpenWRT 路由器。我想创建一个文件,其中包含通过路由器请求的每个域。我的输出应该是这样的:
google.com
cnn.com
wikipedia.com
news.google.com
gmail.com
Run Code Online (Sandbox Code Playgroud)
理想情况下不会有任何重复。我可能可以设置一个 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.
Run Code Online (Sandbox Code Playgroud)
在 OpenWRT 上,这些设置似乎隐藏在 /etc/init.d/dnsmasq 文件中。我尝试设置它们但没有任何运气。:-( 有没有更简单的方法来实现我的目标?
啊! 通过一点技巧,我能够将其写入日志文件。但是,它没有创建此列表所需的数据。也许 dnsmasq 不能做我想做的事?
kev*_*kev 20
您可以编辑配置文件:
vi /etc/dnsmasq.conf
# /etc/dnsmasq.conf
log-dhcp
log-queries
log-facility=/tmp/dnsmasq.log
Run Code Online (Sandbox Code Playgroud)
或者编辑另一个配置文件:
vi /etc/config/dhcp
config dnsmasq
...
option logdhcp '1'
option logqueries '1'
option logfacility '/tmp/dnsmasq.log'
Run Code Online (Sandbox Code Playgroud)
然后重启服务:
/etc/init.d/dnsmasq restart
Run Code Online (Sandbox Code Playgroud)
日志文件可以实时解析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
Run Code Online (Sandbox Code Playgroud)
更高级的方法是通过 filebeat 将日志实时发送到 ELK。
您可以安装 tcpdump 并嗅探到端口 53 的数据包
tcpdump -i eth0 -l -vvv dst host 192.168.1.100 and dst port 53 >> dump.log
Run Code Online (Sandbox Code Playgroud)
这个文件会增长得非常快,你的路由器会很快耗尽内存。使用 U 盘保存日志可以防止这种情况发生。
小智 2
添加/etc/config/dhcp
:
config dnsmasq
[...]
option logqueries '1'
Run Code Online (Sandbox Code Playgroud)
并重新启动 dnsmasq。
日志将写入系统日志,可logread -f
在终端中或通过 LuCi 查看。
归档时间: |
|
查看次数: |
38948 次 |
最近记录: |