openwrt+pi-hole dns广告过滤
缘起
最近在折腾局域网广告过滤的方案,同时也折腾了在黑群辉上部署openwrt虚拟机、docker安装pi-hole的一系列东西,这下过年终于闲下来,记录一下~~~
折腾过程
adblock 安装
首先openwrt上安装adblock插件即可进行过滤了,这个不多讲,因为网上博文也很多,按如下命令安装即可
opkg install adblock luci-app-adblock luci-i18n-adblock-zh-cn
安装完成后,在openwrt的界面服务-->广告拦截
里就可以设置了,里边内置了二十几个列表,可以按需启用下,如果全部启用内存会很大,建议启用前面几个通用的,加上cn区域的即可。
pi-hole安装
pi-hole的安装方式也很多,包括使用docker、debian系统等,我这里使用了docker安装。
安装方法同样不赘述,网上有很多,记得把/etc/pihole 和/etc/dnsmasq.d映射到主机上,这样配置文件就不会随docker的升级卸载而丢失了。
安装完成后,pi-hole就有内置的一个列表,但是还是有其他很优秀的列表的,如下的一些列表建议大家添加使用。
https://raw.githubusercontent.com/AdAway/adaway.github.io/master/hosts.txt https://filters.adtidy.org/windows/filters/15.txt https://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/android-tracking.txt https://gitlab.com/andryou/block/raw/master/kouhai-compressed-domains https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-domains.txt https://raw.githubusercontent.com/anudeepND/blacklist/master/adservers.txt https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/hosts.txt https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt https://block.energized.pro/bluGo/formats/domains.txt https://block.energized.pro/blu/formats/domains.txt https://block.energized.pro/porn/formats/domains.txt https://block.energized.pro/ultimate/formats/domains.txt https://block.energized.pro/unified/formats/domains.txt https://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/AmazonFireTV.txt https://raw.githubusercontent.com/KodoPengin/GameIndustry-hosts-Template/master/Main%20template/hosts https://raw.githubusercontent.com/stopgaming/pihole-blocklist/master/game.txt https://mirror.cedia.org.ec/malwaredomains/justdomains https://raw.githubusercontent.com/notracking/hosts-blocklists/master/dnscrypt-proxy/dnscrypt-proxy.blacklist.txt https://abp.oisd.nl/ https://openphish.com/feed.txt https://phishing.army/download/phishing_army_blocklist_extended.txt https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt https://easylist-downloads.adblockplus.org/easylistczechslovak+easylist.txt https://easylist-downloads.adblockplus.org/easylistgermany+easylist.txt https://easylist-downloads.adblockplus.org/easylistspanish+easylist.txt https://raw.githubusercontent.com/finnish-easylist-addition/finnish-easylist-addition/master/Finland_adb.txt https://easylist-downloads.adblockplus.org/liste_fr.txt https://easylist-downloads.adblockplus.org/abpindo+easylist.txt https://easylist-downloads.adblockplus.org/easylistitaly+easylist.txt https://raw.githubusercontent.com/List-KR/List-KR/master/filter.txt https://easylist-downloads.adblockplus.org/easylistdutch+easylist.txt https://raw.githubusercontent.com/PolishFiltersTeam/KADhosts/master/KADhosts_without_controversies.txt https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-pihole-filters/hostfile.txt https://easylist-downloads.adblockplus.org/rolist+easylist.txt https://easylist-downloads.adblockplus.org/ruadlist+easylist.txt https://raw.githubusercontent.com/bigdargon/hostsVN/master/hosts https://www.shallalist.de/Downloads/shallalist.tar.gz https://www.shallalist.de/Downloads/shallalist.tar.gz https://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/SmartTV.txt https://raw.githubusercontent.com/Dawsey21/Lists/master/main-blacklist.txt https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn-social/hosts https://www.stopforumspam.com/downloads/toxic_domains_whole.txt https://dsi.ut-capitole.fr/blacklists/download/blacklists.tar.gz https://dsi.ut-capitole.fr/blacklists/download/blacklists.tar.gz https://v.firebog.net/hosts/static/w3kbl.txt https://someonewhocares.org/hosts/hosts https://winhelp2002.mvps.org/hosts.txt https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy.txt https://pgl.yoyo.org/adservers/serverlist.php?hostformat=nohtml&showintro=0&mimetype=plaintext
过程中的问题
pi-hole请求记录没有主机名称
通过上面的设置,整体有两层的广告过滤,pi-hole和adblock,拓扑如下
但是经过上面的设置后,发现pi-hole可以正常的解析域名,但是本地的各个客户端都显示成192.168.1.5这种ip地址,不是具体的hostname,比如ipad
这些,不方便查看。
最后经过N多的折腾,发现如下的配置可以解决这个问题:
1、openwrt的DHCP/DNS
设置里,不转发本地网络的反向查询
设置为关闭,这样的话就能根据ip反查hostname了
2、pi-hole里,取消勾选Never forward reverse lookups for private IP ranges
,这样的话,pi-hole就可以反查域名啦
经过上面设置,pi-hole里能够正常的显示hostname啦
pi-hole 服务端不能解析域名
经过一番折腾网络,发现另一个问题,pi-hole在增加桥接网卡后,不能解析了。
经过分析,是默认pi-hole只处理eth0网络接口的dns,其他网络接口默认是不能用的,因此如下设置即可:
settings --> DNS --> Listen on all interfaces
dns请求循环调回问题
最近分析日志发现,有部分从openwrt服务端到pi-hole的dns请求,这很不正常,因为dns请求是从pi-hole向openwrt发出的,如果还反过来,就相当于循环了,这肯定会影响速度。
通过分析openwrt的日志以及配置发现,openwrt由于我是单臂路由,localhost的dns获取的也是局域网的pi-hole地址,而默认opnewrt也会查询localhost接口上的dns,因此会存在回向循环的情况。
openwrt上通过如下方法即可解决:
注意: 这里的命令是一次性的,可以把这两行命令加入到/etc/rc.local
文件里,这样每次开机就生效了。
# 设置本地接口的dns地址 uci set network.loopback.dns=192.168.1.1 # 提交变化 uci commit
dns多个地址冲突问题
由于这次试用群辉虚拟机的openwrt和nas上的openwrt,但是镜像用的同一个,最近发现了诡异的问题:dns请求非常不稳定,一次好一次不好的
经过分析,是由于两台虚拟机都在运行,且镜像一致,都是静态ip,地址也一样,导致了局域网的网络传输就不行了,dns 非常不稳定的情况。关闭一个就可以了。
总结
在局域网搞广告过滤是很有必要的,最近搞了下,发现10~20%的dns解析都被过滤了,这些全是收集各种数据的东西。
另外,pi-hole现在是个比较优秀的dns过滤软件,可以很好的可视化过滤情况,同时资源消耗也是比较小的。
参考资料
https://photosmind.com/docker-pihole/
https://www.lujun9972.win/blog/2020/12/05/使用pi-hole屏蔽广告/index.html
发表评论