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


发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。