最近购入了Photonicat这款随身软路由Wi-Fi用来方便在寝室和室外网络进行无缝切换。突然想起来之前还有一篇计划的校园网多设备共享blog还没有写,于是补下这篇文章。
关于本校的校园网,相信大家都知道是禁止单一账号下多设备同时访问互联网的,具体表现为 单个账号只有两台设备能同时接入互联网,这给我们一些拥有多设备的同学带来了很大的不便,因此不少同学想到了使用家用路由器的方式来解决这个为问题,然而校园网会进行共享上网检测,一旦发现一个 IP 下有多个不同设备的流量,就会封禁账号 半到一 小时不等。 因此针对本校校园网共享上网检测机制进行了研究分析,并针对该机制提出了一些解决方案。
校园网络概况
到寝室端:寝室楼宇H3C交换机->寝室内端口
认证系统:WeNet与校园网融合WebPortal认证
防火墙:未知/深信服/网瑞达

补充说明一下,大一大二(2020-2022上半年)的时候内网访问是不设限制的,即获取到10网段的ip后即可以访问大内网任意一台设备,因此在策略升级前可以使用HTTP/SOCKS5或任何代理、VPN协议连接到寝室内设立的网关服务器,网络中心仅仅做了DNS劫持而已。2022下半年开始任意端口均无法ping通(但是苹果APN推送正常,待探究),并且内网速度也限制到协议套餐速度,此前的方法已无法使用。
为什么要禁止多设备共享上网?
与西安地区垄断二手网络提供商WeNet进行合作并签署了排他协议。其50Mbps网络月费50~60且限两个设备,而100M网络则高达79每月。PS:79的套餐三大运营商都免费送百兆甚至千兆网络了……
校园网共享上网检测机制的研究
- 基于 IPv4 数据包包头内的 TTL 字段的检测
- 基于 HTTP 数据包请求头内的 User-Agent 字段的检测
- DPI (Deep Packet Inspection) 深度包检测技术
- 基于 IPv4 数据包包头内的 Identification 字段的检测
- 基于网络协议栈时钟偏移的检测技术
- Flash Cookie 检测技术
基于 IPv4 数据包包头内的 TTL 字段的检测
存活时间(Time To Live,TTL),指一个数据包在经过一个路由器时,可传递的最长距离(跃点数)。 每当数据包经过一个路由器时,其存活次数就会被减一。当其存活次数为0时,路由器便会取消该数据包转发,IP网络的话,会向原数据包的发出者发送一个ICMP TTL数据包以告知跃点数超限。其设计目的是防止数据包因不正确的路由表等原因造成的无限循环而无法送达及耗尽网络资源。
这是一个比较有效且合理的检测技术,IPv4数据包下存在 TTL(Time To Live)这一字段,数据包每经过一个路由器(即经过一个网段),该TTL值就会减一。
不同的操作系统的默认 TTL 值是不同的,Windows 是 128, macOS/iOS、Linux 是 64。
因此如果我们自己接入路由器到校园网,我们的通过路由器的数据包会变为 127 或 63,一旦校园网抓包检测到这种数据包TTL不是128或64,就会判定为用户接入了路由器。
基于 HTTP 数据包请求头内的 User-Agent 字段的检测
HTTP 数据包请求头存在一个叫做 User-Agent 的字段,该字段通常能够标识出操作系统类型,例如:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36 Edg/89.0.774.45
Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405
校园网会通过多次抓包检测此字段,若发现同时出现例如Windows NT 10.0和iPad 的字段,则判定存在多设备上网。
DPI (Deep Packet Inspection) 深度包检测技术
这个检测方案比较先进,检测系统会抓包分析应用层的流量,通过对应用行为的深入研究,发现部分应用在与外部服务器通信时会出现一串特征码,该特征码具备能够唯一确定一台PC的特性,因此可以识别某个host后是否有一张小型局域网。

具体可参考:基于 DPI 技术的网络共享设备检测方法及系统
此种方式已确认在锐捷相关设备上应用,当由于此项功能极耗费性能,因此有些学校可能不会开启此项功能。
基于 IPv4 数据包包头内的 Identification 字段的检测
IP 报文首部存在一个叫做 Identification 的字段,此字段用来唯一标识一个 IP 报文,在实际的应用中通常把它当做一个计数器,一台主机依次发送的IP数据包内的 Identification 字段会对应的依次递增,同一时间段内,而不同设备的 Identification 字段的递增区间一般是不同的,因此校园网可以根据一段时间内递增区间的不同判断出是否存在多设备共享上网。
具体可以参考此专利:基于 IPID 和概率统计模型的 NAT 主机个数检测方法
经过SunBK201的抓包分析,Windows 的 TCP/IP 协议栈对 Identification 字段的实现是递增,而 iOS 的实现是保持全 0,因此校园网是否使用了该检测机制有待商榷。
基于网络协议栈时钟偏移的检测技术
不同主机物理时钟偏移不同,网络协议栈时钟与物理时钟存在对应关系,不同主机发送报文频率与时钟存在统计对应关系,通过特定的频谱分析算法,发现不同的网络时钟偏移来确定不同主机。
具体可以参考此专利:一种基于时钟偏移的加密流量共享检测方法与装置
不过这种方法存在较高的误报率,因此一般不会随意采用。

Flash Cookie 检测技术
该技术已经用不到了,Flash 都凉了… 不过还是提一下。 Flash Cookie 会记录用户在访问 Flash 网页的时候保留的信息,只要当用户打开浏览器去上网,那么就能被 AC 记录到 Flash Cookie 的特征值,由于 Flash Cookie 不容易被清除,而且具有针对每个用户具有唯一,并且支持跨浏览器,所以被用于做防共享检测。
具体参考:深信服防共享测试指导书
防共享上网检测的解决方案(普适)
对于校园网重重的检测,我们似乎已经不可能从终端级提出一个完美的解决方案,因此,下面的解决方案都是基于网关级的。简单来说,我们需要在路由器上动手脚。
路由器固件我们选择 OpenWrt,这是一个开源的路由器系统,允许我们自定义其系统内核以及添加自定义插件。
针对基于 IPv4 数据包包头内的 TTL 字段的检测的解决方案
应对思路很简单:修改 TTL 为固定值。
# 在 OpenWrt 上安装必要的软件包
opkg update && opkg install iptables-mod-ipopt kmod-ipt-ipopt
# 加入以下防火墙规则
iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64
针对基于 HTTP 数据包请求头内的 User-Agent 字段的检测的解决方案
路由器伪装
# 安装 Privoxy 软件包
opkg update
opkg install privoxy luci-app-privoxy luci-i18n-privoxy-zh-cn
# 将局域网内的 HTTP 请求转发到 Privoxy 代理服务器上
iptables -t nat -N http_ua_drop
iptables -t nat -I PREROUTING -p tcp --dport 80 -j http_ua_drop
iptables -t nat -A http_ua_drop -m mark --mark 1/1 -j RETURN
iptables -t nat -A http_ua_drop -d 0.0.0.0/8 -j RETURN
iptables -t nat -A http_ua_drop -d 127.0.0.0/8 -j RETURN
iptables -t nat -A http_ua_drop -d 192.168.0.0/16 -j RETURN
iptables -t nat -A http_ua_drop -p tcp -j REDIRECT --to-port 8118
移动端伪装
这应该是最容易操作的方法,也可能是有效的方法。
以 Quantumult X 为例,只需在重写规则里面加入一条:
http:// url request-header (\r\n)User-[A|a]gent:.+(\r\n) request-header $1User-Agent: $2
iOS 客户端 Quantumult X、Shadowrocket、Surge 等都支持重写功能。macOS 可以使用 Surge。
由于客户机上长时间开启代理较为耗电,可以在 OpenWrt 中使用 OpenClash/ShellClash 进行网关级修改。
针对基于 IPv4 数据包包头内的 Identification 字段的检测的解决方案
应对思路:修改所有数据包的 ID 字段为递增。
我们使用 rkp-ipid 这一内核模块进行修改。
git clone https://github.com/CHN-beta/rkp-ipid.git package/rkp-ipid
make package/rkp-ipid/compile V=sc
针对基于网络协议栈时钟偏移的检测技术的解决方案
应对思路:在局域网中建立 NTP 服务器统一时间戳
进入 OpenWrt 系统设置, 勾选 Enable NTP client(启用 NTP 客户端)和 Provide NTP server(作为 NTP 服务器提供服务)
NTP server candidates(候选 NTP 服务器)四个框框分别填写:
进入 OpenWrt 防火墙设置,在 自定义设置 中填入以下内容:
确认效果:在 Windows 电脑上,打开控制面板,在右上角查看方式处选择小图标,然后点击“日期和时间”。点击 Internet 时间 -> 更改设置,点几次“立即更新”,直到提示“时钟在 xxx 与 xxx 同步成功”。这时,暂时地拔掉墙上接口与路由器之间的网线(断开了外网的连接),再点一次“立即更新”,应该仍然提示成功,这说明 NTP 请求已经被劫持到了路由器自身而不是外网。然后把网线插回。
注意,这个方法有可能造成某些服务loop异常,并不推荐使用。
针对 Flash Cookie 检测技术的解决方案
应对思路:iptables 拒绝 AC 进行 Flash 检测
针对 DPI (Deep Packet Inspection) 深度包检测技术的解决方案
应对思路:加密数据包。
我们无法通过修改数据包来防止 DPI 检测,因此加密是最好的手段。
防共享上网检测的解决方案(嘻科)
其实嘻科的网络拓扑十分混乱,没有强制要求寝室安装或不安装路由器,只要求可以存在处于桥模式的无线路由器在寝室内的安装,因此TTL检测显然并没有启用。根据一年的使用来看,学校似乎只开启了HTTP抓包检测,并没有涉及到其他的检测,因此有如下两个非常简单的解决方案:
- 不在校园网环境访问HTTP网页
- 加密流量
最后
对于认为折腾软路由等太过麻烦的同学,可以直接对自己的流量进行全加密,前提是你的有充足的解密代理服务器。
这里推荐AnyLink SSL VPN。它基于类Cisco SSL VPN协议开发,属于VPN级别而非代理,因此理论上代理全部的流量。使用DTLS协议时,其理论速度可以非常接近物理网络限制上限。并且由于其协议在办公场景的广泛使用,对于防火墙的干扰有一定的抵抗能力。
如果都不想折腾的话,建议直接使用5G随身Wi-Fi+副卡以脱离校园网络监管。PS,福建地区有些私网4G家宽套餐非常便宜,网速也不差,可以达到LTE标称速度约150Mbps;如果网络支持,载波聚合能够达到更高速度。
anylink (this link opens in a new window) by bjdgyc (this link opens in a new window)
AnyLink是一个企业级远程办公 ssl vpn 软件,可以支持多人同时在线使用。基于 openconnect 协议开发,并且借鉴了 ocserv 的开发思路,可以完全兼容 AnyConnect 客户端。
参考
https://blog.sunbk201.site/posts/crack-campus-network