在我刚入学时就对校园网不是很满意,因为校园网只支持单设备登录。也就是说,手机和电脑不能同时使用校园网的WIFI(当然在这学期校园网好像是支持了双设备的登录)。而且校园网公共WIFI的丢包情况很严重,在打游戏时经常发生“时间跳跃”。所以我编写了此篇优化指南。
一、使用路由器或网线解决丢包问题
使用路由器可以解决校园网丢包的问题。因为寝室里面带有网线接口,可以用网线连接电脑或者路由达到不连接校园网公共WIFI的情况下登录上网!(如果你没有多设备上网需求,看到这里就已经可以解决你的问题了)
如何使用路由器(点我点我)
一般路由器分为两个口,WAN口和LAN口。我们将网线两端分别插入墙上的网线接口和路由器的WAN口,再登录路由器后台(路由器后台以及登录的账号密码一般可以在路由器机身的贴纸上找到)将IP的获取方式改成DHCP(动态IP)就可以了
二、关于校园网的多设备使用的设想
怎么破解校园网的多设备使用呢?我在万能的哔哩哔哩寻找了一番,还是让我找到了解决方法!
首先我们要知道:
- 校园网是怎么检测多设备上网的?
- 怎么使用设备跳过这些检测?
- 如何实现校园网账号的自动登录?
这个视频刚好解答了我的疑惑:
“校园网是怎么知道我在多设备上网的?“
可以知道校园网检测有五种主流方法:
- TTL检测法
原理:TTL(Time To Live)是数据包在网络中传输时的生存时间,每经过一个路由器,TTL值就会减1。通过分析TTL值的变化,可以判断数据包经过了多少个路由器,从而推测网络路径。就像快递包裹上的“剩余派送次数”,每经过一个快递站点,次数就减1。使用手机热点,以及虚拟机都会使TTL的值发送变化。通过TTL值的变化,就可以知道用户是否存在共享上网的行为。 - UA检测法
原理:UA(User Agent)是用户设备的标识信息,包含了操作系统、浏览器类型等信息。通过分析UA字符串,可以识别用户使用的设备类型和浏览器版本。就像身份证上的信息,通过查看身份证,可以知道一个人的姓名、性别、出生日期等基本信息。所以你在不同设备发送的不同数据,就会让系统检测到共享上网行为。 - 时间戳检测法
原理:时间戳是数据包发送或接收的时间标记。通过比较不同时间戳之间的差异,可以计算网络延迟、数据传输速度等指标。就像打卡机记录上下班时间,通过比较打卡时间,可以计算出员工的工作时长。如果多个时间戳之间差异过大,那么共享上网就会被发现。 - IPID检测法
原理:IPID(IP Identification)是IP数据包的标识符,用于区分不同的数据包。通过分析IPID的变化规律,可以判断数据包是否来自同一主机或网络。就像超市商品的条形码,每个商品都有唯一的条形码,通过扫描条形码,可以区分不同的商品。如果发现不来自同一主机,即存在共享上网行为。 - DPI检测法
原理:DPI(Deep Packet Inspection)是深度包检测技术,通过分析数据包的内容,可以识别应用类型、协议类型等信息。就像海关检查行李,通过打开行李仔细检查,可以知道里面装了什么物品。
当然,要连接校园网必须要先认证。我们学校用的是锐捷的网页认证(如下图)
目前知道了校园网的检测方法和认证方式,就可以得到以下思路。
- 先解决网页认证,使路由器能与校园网连接
- 通过统一不同设备的UA,使得
UA检测失效 - 让路由器为连接WIFI的设备授时,使
时间戳检测法失效 - 修改包头文件内的ipid,使得
IPID检测法失效 - 修改TTL值统一,使
TTL检测法失效 - 至于
DPI检测法,成本太高,学校大概率不会采用
三、多设备使用的实现
有着这么多检测方式,并且需要认证上网。使用一般的路由设备肯定难以实现,但是使用虚拟机处理这些流量又太浪费电脑性能。
这时候就需要我们的英雄”OpenWrt“出来救场了
OpenWrt 是一款专为嵌入式网络设备设计的开源Linux发行版,其核心目标是为路由器、物联网网关等设备提供高度可定制、可扩展的操作系统。
这里为什么要选择OpenWrt呢
因为OpenWrt可以直接刷写在部分路由器上,使用我们只需要购买一个支持刷写OpenWrt固件的路由器就可以通过OpenWrt的软件仓库安装我们所需的软件包了。并且因为是Linux系统,还可以在上面部署更多有用的小项目。(也可以解锁一种神秘的上网方式)。
所以我购买了一款路由器JCG Q30 Pro并为它刷入了此款固件(只要设备有着网口和无线网卡,并且可以安装OpenWrt就可以实现下文功能)
所以我们可以通过安装不同的插件解决校园网的认证和检测
1.校园网自助认证
使用MentoHUST这个插件,可以根据你所提供的账号模拟锐捷的认证过程,从而实现校园网认证的自动化。
2.统一不同的UA
在这里我使用的是UA3F插件,其实还有一个叫UA2F的插件可以使用,但是在路由器性能足够的情况下,选择UA3F更好,因为UA3F不与本地代理冲突而且可以自定义UA内容哦!比如我这里改成了FFF-114514-OvO
这样在同一局域网内所有设备的UA都变成了这一串字符,在系统看来被视为同一台设备,自此UA检测就此解决
3.让路由器来当授时服务器
因为OpenWrt固件自带NTP服务,所以按照图片设置就可以统一时间戳
4.解决IPID检测法
这里采用CHN-beta开发的rkp-ipid这个软件包,在路由系统内安装这个插件,并进行部分设置,就能修改路由器发送出去的数据包,让其不被检测到。
5.对于TTL检测法
安装并使用OpenWrt的防火墙组件iptables-mod-ipopt
在本地启动脚本输入这串规则iptables -t mangle -A POSTROUTING -j TTL –ttl-set 64
就可以让通过防火墙的流量TTL值都被修改为64
6.编译固件
说了这么多,但是自己购买的设备从哪里获取OpenWrt固件,又怎样安装这些软件包呢?
当然是靠自己编译了!不过这里不采用本地编译的方式,因为大部分人不想也不会专门开一个Linux虚拟机来编译一个路由器固件。所以可以采用ImmortalWrt的云编译(点击进入,可能需要特殊网络环境)ImmortalWrt是OpenWrt的一个分支对中国用户更加友好,预装国内软件包,支持更多中国品牌的路由器。
这里我以我购买的JCG Q30 Pro做例子,在自定义预安装软件包内安装这些用于防检测的软件包(注意软件包之间需要用空格隔开)然后点击请求构建
使用UA3F所需软件包(高性能路由才推荐使用)
luci-app-ttyd luci-app-argon-config iptables-mod-filter iptables-mod-ipopt iptables-mod-u32 iptables-nft ipset iptables-mod-conntrack-extra
使用UA2F所需软件包(适合低性能小内存路由如mt7921系列)
luci-app-ttyd luci-app-argon-config iptables-mod-filter iptables-mod-ipopt iptables-mod-u32 iptables-nft ipset iptables-mod-conntrack-extra ua2f luci-app-ua2f luci-i18n-ua2f-zh-cn
在这里kmod-ipt-ipopt被我删除了,因为在编译时加上这个软件包就会编译失败,可能是软件源里面没有这个软件包,删除后正常编译固件就行,再加上一般情况下不会对ipid做出检测。如有需要这个软件包可以后面自己添加
在编译完成后选择Sysupgrade映像下载
7.安装固件
现在有了编译好的固件,该怎么刷写到路由器内去呢?首先我们要刷入“不死”boot或者uboot
但这步要看你自己选用的是什么路由器,我这里给出小米CR660X系列和JCG Q30 Pro的刷写教程链接,其他型号可自行去互联网中寻找(JCG Q30 Pro在2024年7月份后生产的疑似因为闪存更换,无法使用下面的教程)
2024年CR660X/TR60X刷机工具,无需另外一台设备-小米无线路由器及小米网络设备-恩山无线论坛
8.重启进入后台
刷写完成后重启路由器并且连上WIFI(此时WIFI名称应该已经变更,并且处于无密码状态。 同时你需要手动认证一次校园网)在浏览器输入192.168.1.1就可以进入后台(可以试着直接点击登录,如需要密码,极大可能是password)
9.安装部分软件包以及完善设置(这部分UA2F和3F通用)
进入后台,选择系统-软件包 点击更新列表后在过滤器输入mentohust并将下图三个软件包都安装
安装完后,来到服务-MentoHUST就可以看到MentoHUST的主界面
由于安装UA3F并不像UA2F一样简单(其实也不难),我先给出UA2F的配置方法(脚本同时会将其他插件一并设置好)来到系统-启动项-本地启动脚本,将脚本复制到exit 0之前并保存重启即可
添加到启动项 #开机自启UA2F service ua2f start service ua2f enable #防火墙: iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53 iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53 # 防 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 # 由于本校局域网是 A 类网,所以我将这一条注释掉了,具体要不要注释结合你所在的校园网内网类型 # 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 # 防时钟偏移检测 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 # 通过 iptables 修改 TTL 值 iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64 # iptables 拒绝 AC 进行 Flash 检测 iptables -I FORWARD -p tcp --sport 80 --tcp-flags ACK ACK -m string --algobm --string " src=\"http://1.1.1." -j DROP
UA3F版安装(有耐心就很容易)
这里会给出安装UA3F的详细安装教程
首先打开系统-终端。这样就会进入我们熟悉的终端,输入登录路由器后台时的用户名(一般是root)回车
然后再输入密码-回车
先安装curl
输入opkg install curl然后回车
然后再安装ShellClash,从下面三个链接中选择一个回车运行就可以开始安装。
github源(可能需要特殊网络环境)
export url='https://raw.githubusercontent.com/juewuy/ShellCrash/master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
jsDelivrCDN源
export url='https://fastly.jsdelivr.net/gh/juewuy/ShellCrash@master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
私人源
export url='https://gh.jwsc.eu.org/master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
在输入这串后选择稳定版-在/etc目录中安装-输入1确认安装
安装完成后在终端输入crash
再输入1选择路由设备配置局域网透明代理-输入0不使用更新订阅服务-然后输入1导入一份配置文件
在弹出的选项中输入2在线获取完整配置文件-再输入1确认。在完整链接中输入并回车,然后再输入1确认导入:
https://cdn.jsdelivr.net/gh/SunBK201/UA3F@master/clash/ua3f-cn.yaml
以上界面输入两次0就可以退出到程序主菜单
来到主菜单后输入9并回车就可以进入这个页面
输入2后将内核切换为Meta。
在ShellCrash的主菜单中选择2-内核功能设置
1-切换防火墙运行模式为Redir模式
4-只代理常用端口(将此选项关闭)
回到主菜单后选择1-启动/重启服务
最后一步安装UA3F,依次在运行下面的代码
opkg update
opkg install curl libcurl luci-compat
export url='https://blog.sunbk201.site/cdn' && sh -c "$(curl -kfsSl $url/install.sh)"
service ua3f reload
uci set ua3f.enabled.enabled=1
uci commit ua3f
service ua3f start
到这里UA3F的安装也就完成了,输入reboot或者手动重启路由器进入后台,在服务-UA3F就可以看到UA3F已经生效
然后此时,来到系统-启动项-本地启动脚本,将适用于UA3F的脚本复制到exit 0之前保存即可
# 启动 UA3F
uci set ua3f.enabled.enabled=1
uci commit ua3f
service ua3f enable
service ua3f start
#防火墙:
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
# 防 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
# 由于本校局域网是 A 类网,所以我将这一条注释掉了,具体要不要注释结合你所在的校园网内网类型
# 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
# 防时钟偏移检测
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
# 通过 iptables 修改 TTL 值
iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64
# iptables 拒绝 AC 进行 Flash 检测
iptables -I FORWARD -p tcp --sport 80 --tcp-flags ACK ACK -m string --algobm --string " src=\"http://1.1.1." -j DROP
这时候无论你是UA2F还是UA3F都应该可以看到服务选项卡下有两个插件MentoHUST UA2F/UA3F。
MentoHUST配置在上文早已提及
接下来就是为自己的无线网络改名和设置密码了,这里直接给出图文教程
此时我们保存并执行最后一步,开启NTP服务器授时(上文)就可以开启网上冲浪之旅了!
访问ua.233996.xyz,可以查看自己的UA是否修改成功!
后记:
其实还可以通过多线多拨,用两个账号两台路由使校园网60mpbs的速率变成120mbps,但是我试验之后觉得一般人实在用不上,而且效果并没有想象中那么好,就不在这里提出了。有感兴趣的可以去搜索多线多拨和负载均衡来自己探索
这种技术不会抢占学校的服务器资源,所以实现起来不需要感到有心理负担
如果你跟着这篇文章可以完成以上步骤,那你已经从这篇文章中学到了很多哦。
实践出真知。
感谢:
SunBK201’s Blog | CHN-beta | YeWenXuan64的个人空间 | Zxilly
2025/3/4 13:12
这篇文章写了很久才写完 ̄﹃ ̄,里面的技术其实很有趣。截图都是我自己本地实操安装了OpenWrt以及相关插件截下来的。有人能从中学到知识,解决现实的问题。我也会觉得断断续续写了几天的努力会很值得。这些防-反代理技术全靠大佬们的努力。我只不过将这些东西糅合到一起做一个教程。
6