使用 pihole 分配上游DNS和去广告的一点心得

  • fennng 

因为要控制家里小朋友上 Youtube 的时间, 所以我之前用 nextDNS 服务来限制小朋友看视频的时段。因为免费的 nextDNS 用量有限,所以我在路由器上强制小朋友的电脑走 nextDNS, 其它设备则还是走原来的DNS。 但是因为前几天手践升级了华硕 RT-AX86U的固件,导至无线发射功能坏了。 只好换回了宽带公司给的路由器, 但是这个路由器功能非常有限,没办法按 mac 地址来强行使用 nextDNS, 于是我就想到了自建一个DNS,然后从自建的DNS里按 MAC 地址来分配上游DNS。 最开始使用的是 dnsmasq, 最后折腾了下发现 pihole 有网页界面,于是开始使用 pihole.

我在香橙派上安装了 pihole, 是用pihole 的脚本安装的。 用 docker 版本碰到 dhcp 不能启用的问题, 一启用就显示 connection lost, 实际就是后台 dnsmasq 崩溃了。 不使用 dhcp的话,是不能按 mac 地址来分配 Dns的。 因为 dnsmasq 并没有按MAC地址或IP地址来选择上游DNS的功能, 只能在 分配 IP地址的时候,按MAC地址分配不同的DNS。 毕竟它只是一个DNS和DHCP服务器,不是网关。

Pihole 的界面里不能设置按MAC 地址来分配DNS, 只能设置静态IP。 所以需要在 /etc/dnsmasq.d/ 自建一个文件如 03-custom-dhcp.conf, 在里面加入分配的规则。 我的经验是对要分配定制DNS的设备, IP也在这里一起分配,不要让IP自动,也不要用PIhole 的网页去设置静态IP。

内容像这样

#custom DHCP configuration for specific MAC address
dhcp-option=tag:customdns1,option:dns-server,45.90.28.247,45.90.30.247
dhcp-host=BC:D0:74:0D:FE:7E,set:customdns1,192.168.1.4
dhcp-host=60:1A:C7:86:B0:DF,set:customdns1,192.168.1.5
dhcp-host=74:84:69:5B:DF:79,set:customdns1,192.168.1.6

启用 DHCP的话,要先给 Pihole 的机子手动设置一个静态IP, 然后禁用路由器原本的DHCP功能。

这样就会根据设备的MAC地址把 nextDNS的 IP分配出去。 我就能让小朋友的设备使用 nextDNS. nextDNS 可以控制小朋友上 Youtube 的时间, 还能过虑不健康的内容。 当然,还能过滤广告。

我今天心血来潮想看看 nextDNS 过虑广告的能力, 于是找到这个网站。

https://d3ward.github.io/toolz/adblock

测试发现 nextDNS可以过虑 69%的广告。

于是我就好奇 pihole 能过滤多少。测试了一下发现 pihole 自带的 adlists 过虑的还没有 nextDNS多。 于是我就上网找了另一个 adlists 加进去。 就是这个 https://raw.githubusercontent.com/hagezi/dns-blocklists/main/adblock/pro.txt,  更多的 adlists 可以在 https://github.com/hagezi/dns-blocklists  找到。 我只用了上面那个。 然后就惊奇的发现可以过虑 95%的广告, BONUS!

我又测了下直接用路由器做为DNS, 发现只能过虑 4%的广告。

现在家里就有几乎无广告的上网环境了, 小朋友的设备会分配到 nextDNS的DNS。 其它设备则会用 pihole做为DNS。

然后我又在香橙派上安装了 wireguard, 这样可以让手机在外面上网的时候 VPN到家里使用 PIHOLE, 这样手机上也没有广告。 不过宽带商提供的路由器实在太垃圾, 连 NAT端口映射都很难弄, 必需设置一个白名单IP, 也就是只有一个IP能使用我的VPN。。。太恶心了,所以我后来干脆就没有设置 NAT。 直接设置了一个 FRPC 内网穿透,把 wireguard的端口给穿透到我一台VPS上了。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注