Pi-hole 搭建去广告 DNS 服务器

来自:https://www.ruanx.net/pi-hole/

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

 

安装 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 服务器,还是很方便的。

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

没有评论: