前言

自从开始用电脑时,就一直有浏览网页去广告的需求,记得最早是用的“瑞影”浏览器,算是IE套了壳,不过当时确实是可以满足去广告的需求。后来,知道了ABP插件,再后来则是知道了uBlock Origin插件,并一直使用至今。

在开始使用软路由之后,也看过一些在路由器层面去广告的方案,大体有这些,

  1. AdGuard Home,这个比较知名,我也有试过,但发现效果不行,可能是自己没找到好用规则的缘故。另外,AdGuard Home是基于DNS的方案,某些和网页使用同一域名的广告,就无法很好的去除,再者,即使能把广告去除,在网页上也能看到去除广告后留下的白框,体验不是很好。
  2. OpoenWrt的广告屏蔽大师Plus+,也有试过,感觉也没什么用。
  3. Koolproxy,这个停止更新了,因此也就没有再看。
  4. KoolproxyR,看代码仓库也是2年前的了,相关的资料看起来也不是很多,所以也就没有研究。

由于没有很好的方案,因此自己也就没有再继续研究,还是直接在网页端使用uBlock Origin插件了,也简单方便。

换了安卓手机后,知道有via、x浏览器这类去广告的浏览器,但使用发现无法将百度搜索结果中的广告链接去掉。因此想在手机端找个可以和PC端uBlock Origin相媲美的软件,最后发现了AdGuard,AdGuard与AdGuard Home不同,AdGuard Home只是一个DNS服务器,而AdGuard则是一个流量过滤器,基于一定的规则可以将符合规则的域名、链接、元素删除,甚至改写。

由于现在很多广告都是HTTPS协议,为了AdGuard能够过滤这些连接中的数据,需要安装AdGuard的证书,从网上看了一些相关的评论,自认为风险还可以接受。在使用了一段时间后,发现效果很不错,像自己比较诟病的百度搜索中的广告,都可以去除。于是,后来在想,可否将AdGuard用在整个家庭里,而不是每个客户端都要安装一个。

方案

后来自己还真想了个比较另类的方案。AdGuard支持Android、Windows、Mac以及IOS平台,其中Android、Windows设备比较好找,如果拿一台Android或是Windows设备作为代理服务器,在路由器上配置透明代理到这个设备上,在该设备上使用AdGuard全局过滤广告,这样不就可以全家去广告了吗。如果有科学上网需求,那么可以再设置为AdGuard的代理服务器。关于AdGuard代理服务器的设置,可以参考文章不必二选一!AdGuard 去除广告与 Clash 网络代理同时进行,这里不做过多说明。

整体的网络拓扑图如下。

具体来说,

  1. 上网设备,比如手机、PC等先连接到路由器。
  2. 路由器配置了透明代理,将所有的流量转发到本地的另一个设备上,这个设备可以是任何AdGuard客户端支持的平台设备,一般常用的是Android或是Windows。透明代理转发使用的协议可以随意,为了性能,可以用Sock5协议。
  3. Android(Winwdos)设备上部署了一个Sock5服务器,用于接收透明代理的流量。
  4. 接收后,流量要转发外网,由于开启了AdGuard,因此AdGuard会过滤设备所有的流量,这样Socks5服务器的流量就经过了AdGuard的过滤。
  5. 最后流量又回到了路由器,在路由器的透明代理规则中注意设置不对Android(Windows)设备生效,直接将流量转到外网。

关于设备的选择,我一开始倾向于使用windows,因为我有群晖,在上面安装一个windows虚拟机即可。但由于自己的群晖性能太差(暴风播酷云),在windows中加了AdGuard后,家里的网络性能变得非常差,于是只能选择Android设备。如果使用手机的话,一方面手机没有网线与路由器连接,稳定性欠佳,另一方面,手机的充电也是个问题,如果一直充电容易过充,发生爆炸就不太好了。想了想,发现自己当年买的斐讯N1还在吃灰,在这里刚好可以派上用场。将N1刷个电视盒子系统,妥妥的一个Android设备。

路由器使用OpenWrt系统,透明代理插件随意,理论上比较出名的那几个都可以。协议的话,自己选择了Sock5,在局域网内,就不需要加密了。

在N1上,使用Every Proxy作为Socks5代理服务器软件。由于N1不会一直连着屏幕,因此还需要一个远程控制软件,用于远程控制N1,这里自己使用的是scrcpy

最终自己的网络拓扑图如下,会稍微复杂一些。

上图中,所有的网线都在K2P上插着,所以OpenWrt与N1不是直接通信的,我这里省略了。

  1. K2P作为主路由,由于性能比较差,所以只用来做AP。
  2. 手机、PC设备通过无线与K2P连接,但网关实际上是群晖中的Openwrt,所有的流量都会到OpenWrt上。
  3. OpenWrt上配置透明代理,代理服务器是局域网中的斐讯N1,代理协议是Socks5,所有的流量都被封装成Sock5流量到N1的Every Proxy代理服务器上。
  4. Every Proxy向外请求的流量经过AdGuard的过滤,流量转发至外网,这里实际上是又到了OpenWrt。在OpenWrt上配置了不对N1进行透明代理的规则,那么流量将会真正的发到外网。
  5. 流量又到了K2P,但这次将经过猫,到达外网。

最后,为了能够让AdGuard过滤HTTPS的广告,需要在家里的各个设备(手机、PC)上安装AdGuard的证书。

效果

优点

  1. AdGuard的广告规则很完善,不用自己费心去找规则,也不用担心规则的维护问题。
  2. 测试百度、Youtube的广告都可以去掉。爱奇艺、腾讯视频的经测试可以去掉,不过这个自己倒是不在意,因为自己有会员。😄️

缺点

  1. 所有的设备都需要安装证书,虽然很信任AdGuard,但让家里所有的设备都信任它的证书,风险还是有的。
  2. 能感受到网络延迟,但尚在能接受的范围内。网速这块,自己是200M的宽带,开启透明代理与不开启,测试区别不大。
  3. 有时候不够稳定,使用mac的safari浏览器打开网页还是有广告,重启浏览器后再打开就没了。若是换成Edge,倒是一直没见过广告。
  4. 在配置前没有看好,以为配置好后也可以去除IOS下YouTube客户端中的广告,但发现自己想多了,AdGuard对IOS Youtube客户端中的广告也没辙。

最后

在使用了几天后,我还是放弃了这个方案,主要原因是发现意义不大🤷‍♂️。

对于手机来说,需要经常在外面使用,为了在外面过滤广告,还是需要手机上安装AdGuard客户端,如果手机上安装了,在回到家之后,手机上的流量需要经过两层过滤,这会严重影响网速。而对于笔记本来说,也是同样的场景,需要经常带到公司使用,因此还是也需要安装对应的客户端。对于台式电脑来说,这种方案倒是没问题,但现在台式电脑开机的机会并不多,如果只是为了台式机便在路由器上过滤广告的话,成本似乎很高。

从实用性的角度来看,在路由器上过滤广告的意义不大,纯粹是折腾的乐趣而已。