在 PC 上,屏蔽浏览器广告可以用 Adblock 之类的插件,但手机上各种 APP 总有层出不穷的广告。我们可以用树莓派搭建一个自己的 DNS 服务器,把广告域名解析进黑洞,于是眼不见心不烦了。本文主要参考资料:

基于树莓派的全能广告屏蔽助手 —— Pi-hole - 少数派
前言Pi-hole是一款开源且免费的DNS沉洞服务器(DNSsinkhole),能够在不安装任何客户端侧软件的前提下为设备提供网络内容屏蔽服务,非常轻量易用。搭配上家中吃灰已久的树莓派,我们就能够轻松 ...

安装 Pi-hole

  首先,由于 Git 基本上是被墙了的状态,我们没法直接用官方提供的那句指令来安装。我本地有 v2ray,先把它设置为允许局域网连接,然后我们在树莓派上走代理。采用 proxychains:

apt install proxychains
nano /etc/proxychains.conf
▲ 安装并配置 proxychains

  在 [ProxyList] 里面加入 socks5 代理地址。最后如下:

[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks5 	192.168.0.105 10808     # 笔记本电脑上的 socks5

  运行 proxychains curl www.google.com 成功获取网站内容,说明我们 proxychains 配置成功了。接下来下载安装脚本并运行:

proxychains curl -sSL https://install.pi-hole.net -o install-pi-hole.sh
chmod +x install-pi-hole.sh
proxychains ./install-pi-hole.sh

  期间所有的配置按 recommended 做即可。把 web UI 打开,方便我们之后的管理。最后就成功了,图如下:

▲ 成功安装。图源:少数派

  我安装完成之后的图与上面的不太一样,还提供了初始的 admin 密码,这里我们先记下来。另外,web UI 默认起在 80 端口,仅允许通过 IP 或者 http://pi.hole 访问;但我 80 端口是被 nginx 占用的,因此暂且起不来 web UI.

  解决方法是,由于 Pi-hole 是用 lighthttpd 起的 web UI 服务,我们只需要把端口号改成别的,再反代就行了。改端口的指令如下:

cp /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.backup
sed -ie 's/= 80/= 8093/g' /etc/lighttpd/lighttpd.conf
/etc/init.d/lighttpd restart

  此时,用 192.168.0.101:8093 已经可以访问 Pi-hole 的管理界面了,不过我们反代一下,用 pi.hole 域名访问。nginx 配置如下:

server {
    listen 80;

    server_name pi.hole;

    location / {
        proxy_pass http://127.0.0.1:8093/;
        proxy_set_header Host $http_host;
        proxy_set_header x-forwarded-for  $remote_addr;
    }
}
▲ nginx 反代 Pi-hole 的 web 管理端

  改掉笔记本电脑上的 hosts,我们进入管理界面:

▲ Pi-hole 的 web UI

配置拦截域名

  Pi-hole 是国外软件,默认带几条规则表,不太适合中国特色互联网。我们需要换用国内常用的广告域名列表。一番搜索之后我们找到了两个比较全的:

https://gitee.com/privacy-protection-tools/anti-ad/raw/master/domains.txt
https://share.is26.com/subscribe/adblock.hosts

  在 Group Management -> Adlists 里面,为 Default 规则组添加这两个表,并关闭其余的(因为更新起来非常耗时,且效果不大):

▲ 添加中国特色广告域名表

  在 Tools -> Update Gravity 里面点一下“Update”,开始更新屏蔽域名表:

▲ 更新屏蔽域名

  于是导入了 67782 条规则。

实际测试

  手机连接 Wifi,把 DNS 服务器设为树莓派的 IP 地址,也就是 192.168.0.101 之后,即可体验 Pi-hole 的去广告、DNS缓存服务。

  DNS 去广告不仅适用于浏览器,也适用于各种 APP。想去广告,只需要找几个靠谱的广告域名表、把内网的树莓派作为 DNS 服务器,还是很方便的。

▲ 广告域名解析的拦截日志