在小主机上搭建pihole,改造为去广告神器
以下内容转自微信公众号「缪博士的日常」,微信ID:miaosw1989
前些天,我给ZTE小主机加装散热风扇,小主机一直开机运行到现在,非常稳定。
这个小主机可靠稳定的承担下载机的工作,帮我下载很多大文件。
今天,我决定给它再安排一个广告拦截的工作。
于是,我在该小主机上部署去广告神器:「pihole」。

pihole与adguradhome的工作原理类似,本质上都是DNS服务器。
用户访问网站的基本过程是在浏览器中输入网站域名,然后DNS服务器将该域名解析为一组IP地址,引导用户的访问该IP地址上的Web服务。
传统DNS服务器对用户的域名解析请求来者不拒,其中,就包括各类广告域名的DNS解析请求。
不同于传统DNS服务器,pihole与adguradhome的手上有广告域名的黑名单,通过对比用户的DNS域名解析请求,甄别出广告域名的DNS请求后,将空IP或无效IP返给用户。
这样用户无法访问广告域名,进而实现拦截广告的作用。
adguradhome通常需占用小主机的多个端口,但pihole可被分配独立IP,进而节约小主机端口资源。
而且,个人认为pihole的UI界面比adguardhome的界面更清爽和简明。
于是,我选择在小主机上安装pihole作为家庭局域网设备的DNS服务器,改善上网体验,减少广告干扰。
我采用docker的方式在小主机上部署pihole,以下是具体步骤:
1. 在docker上配置虚拟网段macnet,包括:
a. 应用finalshell软件登录小主机;
b. 输入以下命令,开启网卡混杂模式;
ip link set eth0 promisc on
这步很关键,如未开启混杂模型,则pihole无法接收外部的DNS域名查询请求

c. 登录小主机的openwrt后台,选择「服务→docker→网络→新建」,在该页面中填入以下信息后再提交,生成名为macnet的虚拟网段。其中,网关和子网应根据小主机所处网段决定,我家局域网的网段是10.10.10.1~10.10.10.255,分配的独立IP也应在该网段。
所以,下图中子网和网关分别填写10.10.10.0/24和10.10.10.1。

2. 登录小主机的openwrt后台,选择「服务→docker→镜像」,在页面的「拉取」左框中填写pihole/pihole后,再点击拉取,进而下载pihole的安装镜像;

3. 应用finalshell软件登录小主机,在挂载的移动硬盘中,新建名为pihole的文件夹,并在该文件夹下再新建名为data和config的子文件夹,用于存放pihole的数据和配置文件;

4. 登录小主机的openwrt后台,选择「服务→docker→容器→添加」,在该页面中填入下图中的信息后再提交。
其中,容器名可以自己指定,我这里填写pihole;
docker镜像就选择之前下载的pihole镜像;
网络项选择之前新建的docker虚拟网段macnet;
在IP地址项填入为pihole分配的IP:10.10.10.114;
在绑定挂载项分别填入以下两条命令,将移动硬盘上的data和config的子文件夹分别指向pihole的数据和配置文件夹;
/mnt/sdc/pihole/config:/etc/pihole
/mnt/sdc/pihole/data:/etc/dnsmasq.d

5. 成功提交pihole容器后,在新页面中选择pihole容器,再点击启动,就能在浏览器中输入pihole的IP地址10.10.10.114/admin,访问pihole的管理后台;

6. 初次登录pihole后台时,需重置登录密码,步骤如下:
a. 在openwrt后台,选择「服务→docker→容器」,点击pihole容器,然后点击「控制台→连接」;
b. 在命令行界面中输入sudo pihole -a -p后回车,就能重置pihole登录密码;

至此,就可在小主机成功部署pihole容器,并通过事先分配的IP地址10.10.10.114和登录密码,访问pihole后台。
在pihole后台中,需点击「Settings→DNS」,设置上游DNS地址。
我选择OpenDNS和湖北电信的DNS服务器作为pihole的上游DNS,并保存。

接下来,需告诉pihole广告域名黑名单,我这里推荐antiad v4广告域名黑名单,它号称中文区命中率最高。
我们百度搜索antiad v4后,点击第二个搜索结果,就可进入广告域名的发布界面,选取并复制pihole对应的广告域名链接后,在pihole的UI界面中选取「Adlists→Add a new adlist」,在对话框中填入刚才复制的连接,另一个comment对话框可以任意填写。



点击「Add」,再点击「Tools→Update Gravity」,pihole就可拉取并保存广告域名黑名单。

最后,我们在PC端的IP地址栏自定义DNS服务器中,填入pihole的IP地址10.10.10.114并保存后,电脑的所有域名查询请求都将被pihole过滤,进而起到广告拦截的作用。

在手机端,一样可使用pihole的广告拦截功能。
以小米手机为例,将手机接入与pihole相同的局域网,选中连接的WIFI,在IP设置栏中选择「静态」后,在DNS1栏中填入pihole的IP地址10.10.10.114后保存。那么小米手机的所有域名查询请求也会被pihole过滤,进而起到广告拦截的作用。

下图是我在使用pihole几天后的广告拦截记录一览图,可以看到,我在各时段的DNS域名查询请求,允许和被拦截的域名请求等数据。

自从使用pihole后,我的电脑再没出现弹窗广告,上网体验改善不少。
小伙伴们觉得广告拦截软件对你有用吗?欢迎在评论区留下你的意见。
感谢各位小伙伴能看到这里,希望这篇推文对你们有帮助,下期推文再见。
