AdGuard Home 广告拦截效果

OpenWrt: OpenClash + AdGuardHome + MosDNS + IPv6 共存配置

现在你拥有透明代理 + 去广告,再也不用给 shell 单独设置代理、给 npm / maven / pip 换源了。一次设置全设备享受,愉快冲浪吧!

作者Ridd Ma

阅读量...
发布于2023/5/19 06:52
更新于2023/6/3 10:29

前言

折腾了很久的最终配置,同时实现:

  • OpenClash 透明代理
  • 海外 v4 + 教育网 v6 双栈共存
  • MosDNS 防污染
  • AdGuard Home DNS 去广告
  • 802.11r 单 SSID 双频快速切换(将在另一篇 cover)

已相对稳定运行两个月。若有纰漏,敬请指正。

省流:53 端口 dnsmasq -> 7874 端口 OpenClash -> 5335 端口 AdGuard Home -> 5300 端口 MosDNS。

注:稳定运行 OpenClash + AdGuardHome + MosDNS 需至少 512MB 的内存,不推荐在低端设备上使用。256MB 内存的设备(在红米 AX6S 上测试)可以仅使用 OpenClash + MosDNS,利用 MosDNS 自带的广告过滤功能,经测试可以稳定运行。同时开 OpenClash + AdGuardHome 极易爆内存杀进程。

MosDNS 配置

MosDNS 是一个插件式 DNS 转发器。用户可以根据需要拼接插件,定制自己的 DNS 处理逻辑。

安装

安装 mosdnsluci-app-mosdns 软件包。本文所用版本:mosdns v5.1.3、luci-app-mosdns v5.1.3。

配置

MosDNS 采用插件化设计,可以完全自定义 DNS 处理逻辑、支持广告过滤、GeoIP 和 GeoSite 匹配,配置非常灵活也较为复杂,文档在这。省流可以直接使用 luci-app-mosdns 的内置预设配置,带有较完善的功能。

基本选项,不勾选“DNS 转发”(将手动设置转发逻辑)和“本地 DNS”(从 WAN 接口获取上游 DNS 服务器用于境内解析,若容易被运营商污染可以使用“自定义配置文件”并修改上游 DNS);设置一个合适的监听端口(如 5300),之后要将 AdGuard Home 的上游 DNS 设置为该地址。

高级设置中的内容按需更改。

MosDNS 配置MosDNS 配置

AdGuard Home 配置

AdGuard Home 是一款全网广告拦截与反跟踪软件。在您将其安装完毕后,它将保护您所有家用设备,同时您不再需要安装任何客户端软件。随着物联网与连接设备的兴起,掌控您自己的整个网络环境变得越来越重要。

安装

AdGuard Home(以下简称 AGH)是一个独立运行软件,拥有自己的控制台页面。若想通过 LuCI 进行一些配置,可以在 这个 GitHub 仓库 下载 luci-app-adguardhome。注意此仓库年久失修,不保证新版兼容性。在 AdGuard Home v0.107.29 和 OpenWrt eSir 2023v1 上测试正常。

luci-app-adguardhome 的界面luci-app-adguardhome 的界面

若不需要 LuCI 界面,也可以直接通过 shell 安装。以下内容由 ChatGPT 翻译自 OpenWrt 官网

自 21.02 版本以来,有一个官方的 AdGuard Home 软件包可以通过 opkg 安装。

已确认 21.02 版本的 opkg 软件包也可在 19.07 上使用,但需要通过 SSH 或 SCP 传输正确的 ipk 文件,并手动使用 opkg 进行安装,因为该软件包不在 19.07 软件包存储库中。

当使用官方软件包时,所需依赖项(ca-bundle)将自动解决和安装。

1opkg update 2opkg install adguardhome

默认情况下,官方 OpenWrt 软件包使用以下路径和目录:

AdGuardHome 应用程序将被安装到 /usr/bin/AdGuardHome
主要 adguardhome.yaml 配置文件存储在 /etc/adguardhome.yaml 中。
默认工作目录是 /var/adguardhome(默认情况下,/var 是指向 /tmp 的符号链接)。
可以在 /etc/config/adguardhome 中配置工作目录。
提供了一个 init.d 脚本,在 /etc/init.d/adguardhome 处。
默认配置的工作目录意味着重启后查询日志和统计信息将丢失。为避免这种情况,请配置持久性存储路径(例如 /opt/mnt),并相应地更新工作目录。

要使 AdGuard Home 在启动时自动启动并开始服务:

1service adguardhome enable 2service adguardhome start

拦截器设置

AGH 安装完成后从默认的 <路由器 ip>:3000 进入配置页面,设置 DNS 监听端口为 5335(或者其他你喜欢的)。每个设置选项的功能可以参照 这个链接,其实这个软件的大部分设置我们都用不到(AGH 甚至还有 DHCP 服务器功能),只需要在 过滤器-DNS黑名单 中添加黑名单拦截即可。

AGH 设置 DNS 黑名单AGH 设置 DNS 黑名单

拦截规则非常消耗内存,低性能设备需要控制拦截器加载条数。256MB 内存设备推荐规则控制在 7 万条左右,只开启 anti-AD 即可。

DNS 设置

因为要共存 IPv6,注意取消勾选 禁用IPv6 地址的解析。可选择关闭缓存。**上游 DNS 服务器只填一个(如 127.0.0.1:5300),即 MosDNS 的监听地址。**其余全部保持默认即可。

AGH 设置 - DNS 设置AGH 设置 - DNS 设置

AGH 设置 - DNS 设置AGH 设置 - DNS 设置

OpenClash 配置

安装

一般固件都有打包,若无可查看 官方文档

首先确认使用版本,新版或旧版的界面可能有所不同。

本文所用版本本文所用版本

OpenClash 基础操作若不会可以参考 这个教程

设置

插件设置

基础设置,建议使用 Redir-Host,相较 Fake-IP 虽然理论速度慢但更加稳定,Fake-IP 可能存在 SSH 连接问题。不同模式可参照 官方文档(已过时)

模式设置模式设置

流量控制设置,不勾选绕过大陆的原因是希望所有请求都走接下来的 AdGuard Home 和 MosDNS。

流量控制设置流量控制设置

DNS 设置,选择“使用 dnsmasq 转发”将会在 OpenClash 启动时修改“网络-DHCP/DNS-基本设置-DNS 转发”的规则,将本机 53 端口的 DNS 请求转发到 OpenClash 监听的 7874(默认)端口,而在 OpenClash 关闭时将会删除这条规则。

DNS 设置DNS 设置

重要,不勾选“代理 IPv6 流量”、勾选“允许 IPv6 类型 DNS 解析”。“允许 IPv6 类型 DNS 解析”实际上和“网络-DHCP/DNS-高级设置-禁止解析 IPv6 DNS 记录”是联动的设置项。

IPv6 设置IPv6 设置

覆写设置

DNS 设置,只勾选“自定义 DNS 服务器”,下方自定义上游服务器,在 NameServer、Fallback、Default-NameServer 三项中都启用 127.0.0.1:5335(AdGuard Home 的监听地址) 的 UDP 规则。

这种配置的一个缺点是 AdGuard Home 日志里看到的设备请求来源全是 127.0.0.1,但是无伤大雅。

DNS 覆写设置DNS 覆写设置

运行效果

去广告测试

可以用 Test Ad BlockAdBlock Tester 这两个网站检测去广告效果。

须知 AGH 这种 DNS 过滤器从原理上只能拦截识别为广告域名的请求,对于例如 YouTube 手机 App 端这种,广告和数据同域名的就无能为力了。而且 AGH 也没法像浏览器插件那样操纵网页 DOM 树,对于页面上碍眼的元素无能为力。但 AGH 胜在对终端用户完全透明,可以让家人无感知地享受到更清爽的网络环境。

以下是在红米 AX6000,AGH 加载约 10 万条规则、两个网站仅开启路由器 AdGuard Home 和开启路由器 AdGuard Home + 浏览器 uBlock Origin 的测试结果。Test Ad Block 这种非常吃规则数量的测试,AGH 加载规则过少,相较开启浏览器插件效果显著下降。但总体而言还是不错的,反正配都配了,总不能不用)差强人意吧。

AdBlock Tester 仅开启路由器 AdGuard Home 得分 47AdBlock Tester 仅开启路由器 AdGuard Home 得分 47

AdBlock Tester 开启路由器 AdGuard Home + 浏览器 uBlock Origin 得分 96AdBlock Tester 开启路由器 AdGuard Home + 浏览器 uBlock Origin 得分 96

Test Ad Block 仅开启路由器 AdGuard Home 过滤 16%Test Ad Block 仅开启路由器 AdGuard Home 过滤 16%

Test Ad Block 开启路由器 AdGuard Home + 浏览器 uBlock Origin 过滤 88%Test Ad Block 开启路由器 AdGuard Home + 浏览器 uBlock Origin 过滤 88%

性能测试

走这么一套下来还是能跑满千兆带宽。

BUPT 内网测速下行 1000M / 上行 860MBUPT 校园网内网测速下行 1000M / 上行 860M

中科大 v6 测速下行 1000M / 上行 870M中科大 v6 测速下行 1000M / 上行 870M

南大这个速度很低,应该是他们服务器的瓶颈。

南大 v4 测速下行 370M / 上行 370M南大 v4 测速下行 370M / 上行 370M

别说油管 8K 了,哪天开 16K 都稳稳的。

代理服务器香港节点测速下行  680M / 上行 780M代理服务器香港节点测速下行 680M / 上行 780M

我的软路由是 OpenWrt 虚拟机,CPU 是 16C32T 的 AMD EPYC 7282,分了 4 个核心(线程)给 OpenWrt。内存是 2GB、存储是 8GB。这个配置纯纯 overkill,实际上 Zen2 这么强(相对于软路由而言)的架构只需要单核 + 512MB 内存就够了。

测速时 CPU 负载约 20%测速时 CPU 负载约 20%

OpenWrt 软路由配置OpenWrt 软路由配置


现在你拥有透明代理 + 去广告,再也不用给 shell 单独设置代理、给 npm / maven / pip 换源了。一次设置全设备享受,愉快冲浪吧!

以上。