前言

Pi-hole 是一款开源且免费的 DNS 沉洞服务器(DNS sinkhole),能够在不安装任何客户端侧软件的前提下为设备提供网络内容屏蔽服务,非常轻量易用。搭配上家中吃灰已久的树莓派,我们就能够轻松打造属于自己的广告屏蔽助手。
官网的介绍中,Pi-hole 主要具有以下优点:

  • 易于安装和配置(号称 10 分钟安装配置一条龙)。
  • 全平台,广告屏蔽服务可作用于任何设备,包括PC、手机、平板电脑。
  • 轻量,对硬件要求极低。
  • 功能稳定且强大,能轻松 hold 住百万级别的请求。
  • 提供了美观的 Web 数据监控仪表盘。
  • 开源且免费。

原料

  • 树莓派开发板一块
  • 支持自定义 DNS 的路由器

安装

首先我们需要将树莓派接入路由器,有线或无线均可,然后远程登录到树莓派上:

(因为本篇不是树莓派基础教程,因此不再赘述如何 ssh 到树莓派上)

Pi-hole 提供了一键安装脚本:

curl -sSL https://install.pi-hole.net | bash

输入并回车即可看到 Pi-hole 的logo:

相对于纯命令行界面,Pi-hole 提供了相对友好的安装引导:

配置

1. 网络配置

首先选择网络接口,此处因为我的树莓派是通过网线连接到路由器,因此选择 eth0 接口

接下来选择 DNS 提供商,视个人网络情况,可选择 Cloudflare 或 Google

接下来选择规则列表,维持默认的全选即可

最后选择 IP 协议,维持默认的全选即可

2. Web 控制台配置

一路回车之后,我们来到了 Web 管理员控制台的配置项,Web 管理员控制台是我们后续配置拦截规则、查看拦截日志等功能的必备入口,因此此处维持默认的 On 即可。

接下来的 Web Server 也必须同样选择 On,除非你想自己配置一个 Web Server。

接下来的选项一路<确定>回车即可

等待几分钟后,我们会在终端中看到如下信息:

至此,我们的 Pi-hole 就已经配置好了。

3. 登录管理员控制台

根据完成界面输出的提示,我们可以使用:http://树莓派IP/admin 来登录 Pi-hole 的管理员控制台,首次登录后界面如下:

此时的界面为未登录状态,点击左侧的Login选项,登录管理员账号后(密码可在安装完成后的提示信息页面找到),即可看到完整的管理员控制台了:

4. 路由器 DNS 设置

前言中提到过,「Pi-hole 是一款开源且免费的 DNS 沉洞服务器」,因此 Pi-hole 需配合路由器使用才能达到最大功效。

不同的路由器有不同的配置界面,本文将以笔者自用的「华硕路由器+梅林固件」环境为例进行讲解。

登录路由器管理后台后,选择「内部网络(LAN)」 - 「HCP 服务器」,并将 DNS Server 配置为树莓派的 IP 地址:

保存并应用后即可生效。

然后我们就可以在 Pi-hole 的管理员后台中看到请求日志了:

5. 拦截规则配置

由于 Pi-hole 国外开发的软件,因此其默认内置的拦截规则可能并不符合国情,所以很多小伙伴在完成配置之后,会发现很多国内网站的广告完全没有被屏蔽。请坐和放宽,接下来我们就要完成中国特色的反广告规则配置。

首先在当前目录下,使用 Vim 创建一个脚本文件:

vim adblock.sh

然后输入以下内容并保存:

curl -s -L https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt https://easylist-downloads.adblockplus.org/malwaredomains_full.txt https://easylist-downloads.adblockplus.org/fanboy-social.txt > adblock.unsorted

sort -u adblock.unsorted | grep ^\|\|.*\^$ | grep -v \/ > adblock.sorted

sed 's/[\|^]//g' < adblock.sorted > adblock.hosts

rm adblock.unsorted adblock.sorted

然后执行 bash ./adblock.sh,稍等一会(几秒钟)之后,即可在当前目录下生成一个 adblock.hosts:

使用 pwd 命令获取当前路径,在我本机上路径为 /home/pi

接下来返回 Pi-hole 的管理员后台,依次点击「Settings」- 「Blocklists」,然后在输入框中填入以下地址,其中「home/pi」为上一步获取到的当前路径。

file:///home/pi/adblock.hosts

查看更新日志,即可看到本地的 adblock.host 已经被正确解析并应用了:

6. 最后的最后,上一张效果图

使用前:

使用后:

题图来自 Pi-hole 官网