常见的软路由去广告原理及避坑指南
互联网广告无处不在,也是很多站点的收入来源,良性的广告环境有利于站点,用户。需要抵制的是恶意,强制观看,隐私窃取类的恶性广告。
使用去广告技术的用户大多会问这样问题:
- 为什么启动了去广告还是可以看到广告
- 为什么有些站点显示不了了
- 现在都是https了,去广告技术没用了
去广告常见技术实现方式
- DNS过滤(典型:AdGuardHome)
- 把广告相关的DNS请求禁止,只允许非广告请求通信
- 拦截发生在网络请求开始之前
- 适合于路由器等设备,一次设置,全家庭内网生效
- 无需对接入家庭内网设备有特殊设置
- 仅能通过域名进行广告识别,对于广告域名与内容域名相同的无能为力,无法针对页面内容过滤
- 浏览器插件(典型:AdBlock)
- 根据浏览器发出的请求地址、返回页面内容过滤广告
- 拦截发生在网络请求开始之前与请求结束之后
- 仅适用于网页浏览器,其他非浏览器应用无效
- 每个设备,每种浏览器都需要额外安装插件
- 可以对域名,请求,网页内容进行广告识别
- 流量过滤(典型:KoolProxyR)
- 类似一个全局过滤器,全网流量都通过这个过滤器。针对加密请求(如https等),需要采用类似中间人攻击(MIMT)方式进行拦截。
- 拦截发生在请求开始之前、之后
- 适合于路由器等设备,一次设置,全家庭内网生效
- 需要为客户端安装假证书(实现MIMT解密流量)
- 可以对域名、请求,页面内容进行广告识别
以上所有技术方式,拦截时机及识别点越多,理论效果越好。但还有一个最为重要的内容没有提到——规则库。
类似于杀毒软件,杀毒效果依赖于核心病毒库的质量,去广告效果也依赖于其规则库的质量。
维护去广告规则库,其难度相比于病毒库难度高很多,病毒产生速度相对稳定,但广告不是。全球几千万站点,每天上百亿次广告展现,频繁变更的广告植入方式,规则库维护难度是十分巨大的。
另外,互联网的核心思路是羊毛出在猪身上。站点运营需要成本,不在用户身上收钱,站点只能依靠其他方向获取收入,广告就是其中的主要来源。因此,对于去广告技术,几乎所有站点都是抵制的(典型地,KoolShare论坛就是禁止类似技术讨论的)。为了保证收益,它们会根据去广告技术的发展不断变更广告插入方式,从而规避去广告软件的运作。所以,广告与去广告一直是在不断斗争中发展的。因为广告植入方式发生变化,一个有效的屏蔽规则很可能在一夜之间完全失效,或者某些站点可以让你即使屏蔽了广告展示,仍然要等待固定时间才能获取内容(典型视频站点)。
从长远来说,广告有利于现在互联网站点的生存,对用户是有利的(如果所有站点都赚不到钱,最终只能关门,利益受损的还是最终用户)。对于笔者自己,我认为需要屏蔽的实际上是恶意的,带有强迫,诱导性质的广告,木马钓鱼链接,隐私收集类的垃圾信息。对那些对日常生活,娱乐,学习帮助很大的站点,能出资支持,或者主动点击广告表达支持,帮助站点发展更好,才是双赢的做法。
去广告技术原理
上网过程,从技术上来说是浏览器通过HTTP协议从远程服务器传回内容并显示的过程。浏览器需要建立TCP连接与服务器相连,连接通常有很多。广告请求与我们普通请求在传输方式上并没有区别,混杂在正常请求中。
如何拦截广告?分两步
- 识别
- 拦截
识别就是从HTTP请求中识别出那些是广告请求。目前我们还不能很简单的通过返回内容来判断,这个HTTP请求是不是一个广告(AI成熟后应该有可能)。现行的技术只能从请求地址上做文章。上网请求URL(地址)中包含域名及具体访问资源的路径,现在可以比较容易的通过域名及访问资源路径判断这个请求的性质,目前可见的类似方式都是走这个识别思路。
识别出来了,接下来就是拦截了。拦截分两种:
(1)域名方式。上网请求实际分两步,第一步,通过DNS解析域名返回目标服务器IP,第二步,通过IP建立到远程服务器的TCP连接,使用HTTP传送内容。域名方式就是在DNS做文章,发现请求是广告请求就直接返回域名不存在或者一个无效IP,阻止TCP连接建立。这种方式优点在于简便,快速,不介入正常TCP连接。缺点是DNS只能获得域名,却不能获得完整的URL地址,因此无法对一些URL特征进行过滤。好在现在广告普遍都是植入式,也就是普通站点嵌入一个指向广告的链接,通常广告都有相对清晰的域名(通常广告域名与访问站点域名不通),所以可以取得不错的效果。这也是现在绝大多数方案的原理。
(2)流量过滤方式。典型的如著名的koolProxyR。相当建立了一个TCP代理,所有流量走代理,代理可以拿到所有请求的URL,根据规则决定是否放行这些请求。 优点是这种方式有可能获取完整请求,可以进行超过域名的过滤,甚至等AI成熟后识别内容。但也有缺陷,性能损失是一个,但绝对不是大问题。最大问题是现在网站基本上都是HTTPS请求,浏览器会校验目标网站证书,判断是否连接到了真正的地址。这也使得传统的HTTP劫持几乎没有生存余地了,即使强行让浏览器连接到假网站地址,但假网站也造不出真网站的证书,浏览器也会报警。目前日益普及的HTTPS严重影响了koolProxyR类似过滤方案,因为它代理了浏览器发起的请求,它只是一个到真正服务器的中转,因为连接内容完全是加密的,它无法看懂,甚至连网址都无法获得,导致它无法进行拦截。
当然,koolProxyR类似方案可以通过为每个目标网站制造一个假证书的方式,伪装成浏览器想访问的真网站,从而对URL及内容进行过滤,但这里会造成额外问题。
- 需要为所有网站伪造证书,伪造证书的根证书比如放到每个浏览器的信任根里。通常家里会有很多设备上网,PC还好,平板,手机,家用摄像头、PS4、XBOX等等就麻烦了。当然,还可以为这些设备设置白名单,就是不过滤,但无形中还是增加了维护难度。
- 某些应用不接受伪造证书。典型金融类应用,各种支付,网银,银行应用,部分电商,它们会严格校验服务器的证书链,伪造证书根本不被接受。这类应用在koolProxyR之类环境下是无法工作的。
所以,流量过滤方式不再是一个去广告的优选方式了,基于域名的方案已经成为主流。
当然,还有一些基于浏览器插件的方案,也很有效,浏览器插件可以做到对域名,URL,甚至页面内容精细化过滤。但问题是只能适用于浏览器,通常还是PC端,并不能像DNS方案一样,应用于整个家庭网络。
软路由固件采用AdGuardHome作为去广告方案,基于DNS技术实现。DNS技术特征是对请求的域名进行过滤,过滤的核心是规则文件。类似于杀毒软件的病毒库,AdGuardHome中可以挂载各类广告规则库。其准确度取决于规则库。
现在回顾一下开篇的问题。
- 为什么启动了去广告还是可以看到广告
规则库中没有屏蔽你看到的广告,或者这个广告和站点正文域名相同,AdGuardHome根本无法去掉。
广告升级了,目前规则库中并没有收录,无法屏蔽。
- 为什么有些站点显示不了了规则库误伤了一些”正常站点”,或者是规则库认为你访问的是广告,而你自己不认为(其实你之前一直认为是正常内容其实是广告链接)
- 现在都是https了,去广告技术没用了基于DNS去广告方案,与使用协议无关。即使其他协议只要涉及到DNS解析也可以工作。
遇到访问不正常时怎么办
如果遇到站点访问不正常,想确认是否和去广告有关,怎么做?
打开AdGuardHome管理界面(路由IP请根据实际情况修改)
首页,左上角接近Logo处,有”禁用保护“字样,点击即可禁用广告过滤,再次点击开始启用去广告功能。或者在过滤器-自定义过滤规则,把浏览不正常的网站添加到排除规则。
另外DNS缓存也可能会影响站点访问,任何人都可以胜任的清除方法:断开网络接口重连,重启电脑,重启路由。
原文地址:https://github.com/xiaoqingfengATGH/HomeLede/wiki/%E6%BC%AB%E8%B0%88%E5%8E%BB%E5%B9%BF%E5%91%8A%EF%BC%8C%E5%8E%9F%E7%90%86%E5%8F%8A%E9%81%BF%E5%9D%91%E6%8C%87%E5%8D%97
本文摘自:https://wp.gxnas.com/8370.html,感谢原作者