路由器(软路由)屏蔽广告原理介绍
很多用户发现,很多网站的广告简直是丧心病狂,一半的网页都是广告,更有的是闪屏广告、跟随广告、弹窗广告、强制观看、隐私窃取类的恶性广告;本文就简单介绍下直接在路由器(软路由)里进行广告拦截(屏蔽),从而家里的电脑、手机、平板等设备都可以有效的去广告,还用户一个清爽的阅读、浏览效果。
PS:友好的、美观的、合适的广告不会对用户造成浏览的不便;相反,广告是一个网站、应用的大部分收入来源。
去广告常见技术实现方式
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方案一样,应用于整个家庭网络。
HomeLede固件采用AdGuardHome作为去广告方案,基于DNS技术实现。DNS技术特征是对请求的域名进行过滤,过滤的核心是规则文件。类似于杀毒软件的病毒库,AdGuardHome中可以挂载各类广告规则库。其准确度取决于规则库。
现在回顾一下开篇的问题。
为什么启动了去广告还是可以看到广告 规则库中没有屏蔽你看到的广告,或者这个广告和站点正文域名相同,AdGuardHome根本无法去掉。
广告升级了,目前规则库中并没有收录,无法屏蔽。
为什么有些站点显示不了了规则库误伤了一些"正常站点",或者是规则库认为你访问的是广告,而你自己不认为(其实你之前一直认为是正常内容其实是广告链接)
现在都是https了,去广告技术没用了基于DNS去广告方案,与使用协议无关。即使其他协议只要涉及到DNS解析也可以工作。
遇到访问不正常时怎么办
如果遇到站点访问不正常,想确认是否和去广告有关,怎么做?
http://192.168.1.1:3000 打开AdGuardHome管理界面(路由IP请根据实际情况修改)
用户密码都是root
首页,左上角接近Logo处,有”禁用保护“字样,点击即可禁用广告过滤,再次点击开始。
另外DNS缓存也可能会影响站点访问,任何人都可以胜任的清除方法:断开网络接口重连,重启电脑,重启路由。
软路由