openwrt 53 dns端口屏蔽以屏蔽广告
缘起
最近一段时间,发现家里的电视机pihole广告屏蔽不好用了,也没看到什么dns解析请求,但是广告它又回来了,属实是先看广告再看电视。
因此折腾看下是不是电视的视频软件启用了httpdns之类的技术。
折腾过程
tcmdump查看真实请求
网上查了下,openwrt内可以使用tcpdump查看网络流量,这样就能查看电视机的dns请求了。
# 安装tcpdumpopkg install tcpdump # 查看某个ip的网络请求 tcpdump |grep 192.168.1.33
通过这个命令,发现电视机有跨过局域网dns,直接请求腾讯、百度dns的情况,因此问题也就出在这里了,电视机不使用我们的pihole进行dns请求,广告过滤也就失效了。。
类似这样的请求:
185 > public-dns-a.baidu.com.53: 44659+ [b2&3=0x300] A? xxx.com. (47) > pdns.dnspod.cn.53: xxx.com. (47)
这样的话问题就表清楚啦,需要屏蔽局域网自行请求的dns,把对应的流量切断掉。
屏蔽向外网访问的dns请求端口
由于dns请求运行在53号端口,因此我们可以在openwrt的防火墙内,设置向外网的任意53号端口的流量drop掉就可以了。
但是神奇的问题出现了,设置了防火墙一直不生效,经过艰难的长时间的搜索,依然没发现原因。
而经过深入了解,openwrt的防火墙是基于iptables实现的,因此深入了解现在的规则才能解决。
最终发现了问题原因:http-dns-proxy
服务,开启了一个转发所有流量到本地53端口的操作,这样的话向外网的dns流量经过openwrt的53端口,最终还是完成了解析。
通过禁用http-dns-proxy后,53端口的屏蔽就生效了,至此问题解决。
总结
目前不少软件使用了httpdns、自行请求dns等方式,来绕过局域网的pihole之类的软件的广告过滤功能。
目前有效的屏蔽手段,也是得先在openwrt路由器内通过流量分析,确定软件使用的dns请求方式,最后在openwrt的防火墙内进行相关操作屏蔽处理。
参考资料
https://blog.csdn.net/chengxuyuanyonghu/article/details/51897666
http://blog.51yip.com/linux/1404.html
发表评论