前言
如题,这是本人的校园网折腾记录,在润泽公寓测试可用,顺枫宿舍理论通用,但是没有测试过。
此处的的破解其实指的是共享网络,我校的校园网限制只能同时两台设备在线(手机+电脑),但我认为这是不合理的,首先就不说在宿舍用智能家居了,就连多一个 Pad 就很难上网。所以这个时候就需要通过路由器来实现多设备上网了,但是如果使用市面上普通的路由器,用不了多久校园网账号就会被封禁。
为什么校园网禁止多设备上网?
校园网的运行,维护,扩建,都需要资金。
如果不禁止多设备上网,那么一个宿舍只要一个人买了校园网,全宿舍都能用,只能赚一个人的钱;
禁止多设备上网,可以多赚几份套餐钱,作为校园网维护和扩建的费用。
另外,限制共享上网可以分流,让没有购买校园网的同学使用移动数据,减轻校园网压力。
校园网是如何检测共享上网的?
- IPv4 TTL 字段检测:TTL(Time To Live)是 IP 协议中防止数据包无限循环的字段,每经过一个路由节点值减 1
- 不同系统的默认初始 TTL 值不同:
- Windows: 128 → 经过路由器后显示为 127
- Linux/Android: 64 → 经过路由器后显示为 63
- 运营商发现同一 IP 的 TTL 值混合出现(如同时有 127 和 63),即可判定存在多设备
- HTTP 数据包 User-Agent 字段的检测:
- HTTP 协议头部包含浏览器标识(如
User-Agent: Chrome/Windows
) - 即使 HTTPS 加密内容,TLS 握手前的 SNI(Server Name Indication)和 User-Agent 仍是明文
- 运营商统计同一 IP 下不同 User-Agent 的数量(如同时出现 Chrome、Safari)
- HTTP 协议头部包含浏览器标识(如
- IPv4 数据包包头的 Identification 字段检测:不同设备Identification不同。
- Windows全局连续递增(每次+1)|| 1001 → 1002 → 1003 → …
- Linux按协议独立递增(TCP/UDP 各自计数)||TCP: 2001 → 2002; UDP: 3001 → 3002
- iOS/macOS未分片时固定为 0
- Android随机化或按协议递增 || 可能为 0x3A4F → 0x1B22
- 时钟偏移检测
- 设备通过 NTP(网络时间协议)同步时间时,会暴露本地时钟误差
- 不同设备的硬件时钟误差不同(通常 ±0.5 秒到 5 秒)
- 运营商分析 NTP 请求的时间戳,若同一 IP 下存在多个时钟源特征,则判定共享
- Flash Cookie 检测(基本淘汰)
- 早期运营商通过 Flash 插件生成的共享存储标识(.sol 文件)追踪设备
- 早期运营商通过 Flash 插件生成的共享存储标识(.sol 文件)追踪设备
- DPI 深度包检测(我们学校应该没用,这个部署起来挺贵的)
- 运营商通过流量特征识别共享:
- 并发连接数:单个用户通常 <100,共享用户可能 >500
- 协议混合度:同时存在游戏(UDP)、视频(TCP)、P2P 等流量
- 心跳包频率:多个设备的心跳包(如微信、邮箱客户端)周期性发送
理论应对策略
首先需要购买一个能够支持刷机的路由器,刷机的大致流程:
- 自行编译路由器的OpenWrt固件,或者下载别人已经编译好的固件
- 如果是自行编译,那么以下依赖缺一不可:
luci-app-ua2f ua2f kmod-rkp-ipid iptables-mod-filter iptables-mod-u32 iptables-mod-conntrack-extra iptables-mod-ipopt kmod-ipt-u32 kmod-ipt-ipopt kmod-ipt-filter iptables-mod-extra kmod-ipt-extra iptables-nft ip6tables-nft kmod-ipt-nfqueue iptables-mod-nfqueue - 获取路由器SSH的登录权限
- 在SSH中刷入Uboot/Breed
- 然后在Uboot/Breed中刷入OpenWrt固件
- 在OpenWrt中进行防检测操作
对于TTL检测:修改TTL为固定值
# 在 OpenWrt 上安装必要的软件包
opkg update && opkg install iptables-mod-ipopt kmod-ipt-ipopt
# 加入以下防火墙规则
iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64
对于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
# 设置所有发出的数据包的 IPID 为递增
iptables -t mangle -N IPID_MOD
iptables -t mangle -A FORWARD -j IPID_MOD
iptables -t mangle -A OUTPUT -j IPID_MOD
iptables -t mangle -A IPID_MOD -d 0.0.0.0/8 -j RETURN
iptables -t mangle -A IPID_MOD -d 127.0.0.0/8 -j RETURN
# iptables -t mangle -A IPID_MOD -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A IPID_MOD -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A IPID_MOD -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A IPID_MOD -d 255.0.0.0/8 -j RETURN
iptables -t mangle -A IPID_MOD -j MARK --set-xmark 0x10/0x10
对于时钟偏移检测:
应对思路:在局域网中建立 NTP 服务器统一时间戳
进入 OpenWrt 系统设置, 勾选 Enable NTP client(启用 NTP 客户端)和 Provide NTP server(作为 NTP 服务器提供服务)
NTP server candidates(候选 NTP 服务器)四个框框分别填写:
ntp1.aliyun.com, time1.cloud.tencent.com, stdtime.gov.hk, pool.ntp.org
进入 OpenWrt 防火墙设置,在 自定义设置 中填入以下内容:
# 防时钟偏移检测
iptables -t nat -N ntp_force_local
iptables -t nat -I PREROUTING -p udp --dport 123 -j ntp_force_local
iptables -t nat -A ntp_force_local -d 0.0.0.0/8 -j RETURN
iptables -t nat -A ntp_force_local -d 127.0.0.0/8 -j RETURN
iptables -t nat -A ntp_force_local -d 192.168.0.0/16 -j RETURN
iptables -t nat -A ntp_force_local -s 192.168.0.0/16 -j DNAT --to-destination 192.168.1.1
# 最后的 192.168.1.1 需要修改为路由器网关地址
对于Flash Cookie检测:
# iptables 拒绝 AC 进行 Flash 检测
iptables -I FORWARD -p tcp --sport 80 --tcp-flags ACK ACK -m string --algo bm --string " src=\"http://1.1.1." -j DROP
对于DPI检测:
这个得用UA3F+Clash加密数据包,不过我校大概率没有DPI检测
实际折腾历程
选择路由器:
一开始我选择的是网上风评不错的小米AX3000T,搭载来自MTK的MT7981B处理器。买回来之后才发现24年8月之后生产的AX3000T更换了交换机芯片,刷OpenWrt会导致网口全部失效。
退货,去闲鱼上买了个24年五月份生产的机器,刷入OpenWrt部署UA3F+ShellClash,可以防检测。但是缺点很多:
- 每隔3天校园网就会下线,需要重新输入账号密码登陆(原因未知)
- 路由器内存(RAM,共256MB)占用过高,经常已使用90%+
- 路由器CPU性能不足以带动UA3F+Clash,平均负载频繁2.0+
由上导致的问题就是校园网不稳定,经常卡顿、掉线。于是选择将小米AX3000T在闲鱼售出,购入红米AX6,相较于小米AX3000T,红米AX6有以下几点优势
- 搭载IPQ8071A,四核 A53 1.4GHz,性能至少是MT7981B的两倍;
- 内存(RAM)容量提升到512MB,同样翻倍;
- 恩山论坛上有已经编译好的UA2F固件,可以直接刷入,不需要自己再编译了
刷机过程:
- 使用一键获取SSH工具,解锁SSH
- 参考红米AX6 OPENWRT扩容刷机及Uboot刷机,以及红米 ax6 uboot,刷入Uboot
- 在Uboot中刷入恩山论坛的固件,然后按照作者的提示进行路由器配置
至此,已经可以完全防止校园网检测,通过User-Agent Display网站,显示UA2F已经正常工作。
UA2F的默认UA会导致酷安App无法正常加载图片,将UA修改为:
Mozilla/5.0 (Window NT 10.0;Win64; x64)+CoolMarket/15.1.0-2502241-universal,就可以让酷安正常加载图片
UA2F有两个缺点,一是不能够很好的防止DPI检测,二是不能和Clash在同一设备上部署,于是我加了个斐讯N1,刷入iStoreOS作为旁路由,将ShellClash部署到斐讯N1上,实现科学上网。相比于将UA3F+ShellClash都部署在主路由器上,分开部署让路由器的负载小了很多。
优化改进方向:
现在的校园网似乎每隔10来天就会掉线,需要重新认证,后续可以考虑部署校园网认证脚本。
参考:
【正片】面对校园网的多设备检测,「我」的解决方案是——_哔哩哔哩_bilibili
小米/红米ax路由器全系万能一键ssh工具(支持ax6 , ax6s , ax5jdc , ax3000 , CR880X)-小米无线路由器及小米网络设备-恩山无线论坛
红米ax6 ssh获取教程一键 不用op路由器 成功版本已经测试-小米无线路由器及小米网络设备-恩山无线论坛
红米AX6 Openwrt刷机教程(解锁步骤AX6000、AX9000通用)_哔哩哔哩_bilibili
玩透红米AX6 OPENWRT扩容刷机及Uboot刷机_哔哩哔哩_bilibili
牛牛牛