在我之前的文章中已经罗列了部分校园网的防代理检测技术,我们了解了校园网是如何知道我们存在共享上网行为的。那么接下来就探讨一下如何做到“反”防代理了。
而对于防检测,绝大部分校园网使用的是UA检测法、TTL检测法,少数会增加IP-id、时间戳等检测法,极少数会使用DPI抓包检测法。所以我们准备的推理解决方案是:
1.将多台设备发送的UA,修改为统一的值
2.重排IPv4数据包包头内的Identication(IP-id)字段
3.统一时间戳和TTL等
那么,该如何修改以上的信息,做到反防代理检测呢?
对于修改UA:
当前使用最广泛的修改UA方案是“UA to F”自编写插件,它是一个可以安装在OpenWrt的用户程序,能从防火墙中拿取流量,并进行识别和修改。因此,UA to F能够在修改所有端口的目标流量时,有较高的准确率和性能。缺点:UA toF依赖于netfilter或iptables,进行流量的重新定向,因此,与Clash等代理工具存在冲突,如果要使用Clash等工具,就要采用二级路由的形式。
更高阶的有 “UA to 3F”,它是一个依赖于Clash,它是一个依赖于Clash,自身作为socks5代理,对本机提供UA修改服务的方案。通过Clash,捕获全部的入站流量,再向3F转发潜在的HTTP流量,来进行UA的修改。因此,UA to 3F不仅能以Clash共存,还能修改全部的HTTP流量。同时,因为UA to 3F对外是一个定制的socks5代理,而在与Clash部署到同一路由设备时,就相当于将远程的代理服务器,转移到本地,来进行流量转发。所以,UA to 3F虽然依赖于Clash,但并不需要外部的远程代理服务器来进行加密代理转发。而且还有一个优点,就是它有一个基于Luci的Web界面,能自定义修改UA的内容。
对于IP-id检测法:
只修改UA是不够的,针对IPv4数据包包头内的Identication(IP-id)字段重排,则使用rkp-IPid模块,来修改IPv4数据包包头内的IP-id。这个模块可以通过数据包中的“mark值”,来判断要修改哪些信息。在用有IPid模块的OpenWrt上进行一些设置,就可以修改路由器发出的数据包,使校园网认为这些都是同一台设备发出的。之后就开始利用OpenWrt上强大的内置模块来进行“反“-防代理检测
对于时间戳检测法:
他们使用OpenWrt内置的NTP服务器,来给下游设备授时,尽可能做到时钟偏移统一。
对于TTL检测法:
使用OpenWrt上的一个防火墙组件「kmod-iptables-iport」,简单的配置-下,来修改发送出去的TTL。
对于FlashCookie检测法:
使用OpenWrt上的一个防火墙组件,用一句参数拒绝针对Flash的主动检测。
对于绑定认证的Mac地址检测法:
只需修改路由器上的Mac地址为验证上网的那台设备的(MAC地址)就可以了。
对于DPI检测法:
对于抓包应用层流量的DPI检测法,通过一些代理软件对“全局”流量进行加密,使进行检测的设备无法识别到任何特征。将多台设备的网络请求交给「代理服务器」,它会以“自己”的“身份”(IP)将网络请求对外发送:以隐藏来自多个IP地址的请求。(实际上起到路由的“三层”作用)使用代理服务器的「加密」功能对普通的Http报文进行加密,以应对User Agent检测法。同时还可以使用代理服务器的各种「「代理规则」来对“特殊流量”(如Q0、微信等一台设备只能存在一个的特征应用的流量)进行处理来绕过或防止DPI检测。所以这种方法几乎能防御任何“(用于)防代理(的)检测
实际解决方案–基于OpenWRT的反防范代理检测的方案:
在OpenWRT中,安装UA to F或UA to 3F来修改UA,安装rkp-IPid来修改IPid,用防火墙组件kmod-iptables-iport来修改TTL,用防火墙组件来拒绝Flash被检测到,用内置的NTP服务器来给下游设备授时,统一时间戳。值得注意的是,安装UA to F插件需要在编译OpenWrt时,更改内核设置,比较麻烦,故可以使用云端编译。