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,拓扑如下

host
pi-hole
adblock
114.114.114.114

但是经过上面的设置后,发现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


发表评论

必填

选填

选填

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