开始之前
笔者就读于一所名不见经传的双非大学,没有精力也没有兴趣深入了解中国校园网总体的发展模式和现状,因而这篇文章所叙述的校园网环境状况可能并不适用于其他学校,文章内的所有评价也仅代表笔者有限的个人视角。阅读过程中如有不适可自行跳转到自己需要的部分进行阅读即可。
另外,此反检测方案有一定成本,如果没有合适的服务器(节点)请参考这篇文章编译固件及后续设置
背景
先粗略介绍一下本校的校园网基本状况:我校校园网由移动联通电信三方混合供应,不允许学生从校外办理宽带使用,校园宽带强行绑定一张校园卡,月租为59每月,但校园网宽带连接后需要使用学号进行身份认证,但同一学号仅支持两个设备在线(一般为电脑/手机),笔者对这个价格其实没有意见,但限制的设备数对笔者而言实在有些捉襟见肘。因而开始研究如何使用路由器进行网络共享。
过程
首先需要明确的是,在考虑校园网的设备共享检测之前,我们首先需要解决一个问题:如何使我们的路由器具有完成校园网认证的能力? 在Windows环境下进行常规认证时我们需要在网页进行认证(如深蓝)或下载某些认证客户端(如锐捷)进行认证,对于网页,我们可以使用Python程序解决,对于客户端我们同样可以使用插件解决,但想要在路由器中安装Python或插件都需要一个相对开放的系统,而大多数路由器的原厂系统显然不在此列,因此我们需要为路由器重新刷写一个系统,这里以Openwrt为例
解锁SSH(Telnet)
想要自由刷写路由器内的文件我们首先要获得SSH权限,这一步各个路由器各有不同,已知的是几乎大部分小米路由器都有成熟的解锁SSH(Telnet))的方案(没有的话也有申请解锁的官方渠道),因此这部分的教程笔者会列出几个后文提到的路由器型号的教程,其他型号的路由器建议自行在Bing或Google搜索 “路由器型号+解锁SSH”如果还未购买路由器建议看看斐讯K2P/小米R3G/小米(红米AC2100)这几个型号,解锁方式都不算复杂
对于Xiaomi/Redmi AC2100:可以参考这篇文章 (参照此教程可以跳过下一步刷写Breed的步骤)
对于小米路由器3g可以参考这篇文章
对于斐讯K2P可以参考这篇文章
刷入Breed
Breed 是国内个人 hackpascal 开发的闭源 Bootloader,也被称为“不死鸟”
因为有些官方升级固件自带 bootloader,如果从官方固件升级,会导致现有 bootloader 被覆盖。而当 Breed 更新固件时,它会自动删除固件附带的引导加载程序,因此可以防止 Breed 被覆盖
令人遗憾地是,Breed的刷入在不同路由器下同样也有所不同,因此同样放上几个型号的刷入教程供各位参考
对于小米路由器3g可以参考这篇文章
对于斐讯K2P可以参考这篇文章
警告
上面列出的大部分教程中都有备份原固件这一步,为了确保安全请务必进行备份
云编译OpenWRT
选择你的路由器型号
点击自定义固件
在此处填入如下包名
信息
本校校园网认证使用旧版算法的锐捷客户端,因此采用mentohust模拟认证客户端,如果你的学校采用网页认证可能需要加入Python3软件包并寻找合适的认证代码,如果mentohust不适用你的学校的锐捷客户端,那么学校可能是采用了新版算法,请参考Minieap项目。
之后点击构建,等待构建完成后下载留存文件
通过Breed刷入OpenWRT
首先在openwrt.ai中下载临时镜像
接着将路由器WAN口连接至电脑,按住路由器复位键后插入电源
进入192.168.1.1 Breed后台
单击固件备份,点击EEPROM
警告
EEPROM文件记录着此台路由器特有信息,请一定要进行备份
固件更新
,选择刚刚下载的临时镜像并上传,刷入完成后重启
待路由器重启完成后进入后台(默认为10.0.0.1)
用户名root,密码默认为password或root
进入路由器后台后单击 系统-备份与升级-刷写固件
之后选择上一步中云编译得到的固件,上传后刷入
重启后OpenWRT刷入完成
部署Mentohust认证
完成基本设置后,在侧边栏中选择 服务
-Mentohust
点击启用,输入ISP(学校)给你的用户名和密码,接口如果不是WAN的话记得改成WAN
在 高级设置
将客户端版本号更改为你的学校使用的客户端版本号,我这边是4.99
某些学校开启了客户端验证的话可能需要抓包生成DataPack文件以及锐捷客户端的依赖文件,具体请自行搜索 “mentohust抓包”/“锐捷客户端验证”等关键词
选择保存并应用后检查上方 日志界面中是否输出信息,并确认路由器是否可以上网
部署反检测
经过实践,本校在不久前部署了设备共享检测方案,如果你的路由器进行上一步动作后可以正常使用则不必进行后面的动作
考虑到成本问题,这里推荐优先使用比较常用的UA2F+防火墙规则的反检测方案,但云编译固件需要的软件包和本教程有所不同
请参考这篇文章
若不想使用此方案或效果不佳,你需要拥有自己的服务器节点或海外服务器节点的订阅链接,具体操作如下:
警告
进行下面的步骤之前,您需要确保自己拥有至少一个公网服务器 节点 或 订阅链接
进入路由器后台,点击服务-终端,输入你的路由器管理员用户名(root)和密码
输入以下代码
export url='https://fastly.jsdelivr.net/gh/juewuy/ShellCrash@master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
选择 1 公测版,
选择 1 安装在 /etc 目录
,选择 1 确认
。安装完成之后,运行 crash
命令,选择 1 路由设备配置局域网透明代理
,选择 0 不启用推荐的自动任务配置
,选择 0 不导入配置文件
,选择 0 不立即启动服务
,此时会进入 ShellCrash 的主菜单,选择 0 退出脚本
。
接下来,在终端输入 crash
呼出主菜单,输入 9 更新/卸载
, 2 切换内核文件
3 Meta内核
,此时Shellcrash会自动下载内核文件并安装,选择 0不保留相关数据库文件
之后请获取一份用于反检测的配置文件,这里给出SunBK大佬的懒人配置,使用记事本直接复制粘贴或是用其他方式下载源文件
找到其中这段代码:
#--------------------------------------------------------------------------------------#
proxies:
#--------------------------------------------------------------------------------------#
proxy-providers:
Global-ISP:
type: http
url: ""
在 url:
后的 ""
内填入你的节点订阅链接,更改文件以后缀名为 config.yaml
,保存文件
进入OpenWRT管理界面,登录后点击 系统
-文件助手
,在文件列表中选择 tmp
目录,将刚刚保存的 config.yaml
上传至目录
之后重新在服务-终端中登录并执行 crash
命令,选择 6 导入配置文件
-4 本地上传完整配置文件
,根据提示确认 导入配置文件
导入完成后会返回主界面,输入1来重启crash服务,等待片刻后服务会成功重启,待网络连接正常后反检测部署完成
若此步骤出现问题,可参考文章中的 故障排查
部分
防火墙配置
在确保Shellcrash可以正常运行后,
首先在终端中输入以下代码
|
|
若代码不输出错误则进行下一步,若输出错误敬请确认自己的网络环境是否可以直连外网
进入OpenWRT 网络-防火墙-自定义规则中添加以下规则
|
|
对于某些学校,可能还需要:
|
|
故障排查
性能问题导致的服务重启或无法启动
按上面的步骤配置完成后,若你使用的路由器性能较低,大概率会出现重启Crash服务很久没有可用网络连接或无法启动Crash主服务的问题
出现此问题的原因是配置文件存在过滤广告的规则而部分路由器性能(内存)无法运行如此庞大的规则判定
出现此情况后,可尝试删除
Advertising:
type: http
behavior: domain
path: ./RuleSet/Advertising.yaml
url: https://cdn.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/Advertising/Advertising_Domain.yaml
interval: 86400
Advertising-antiAD:
type: http
behavior: domain
path: ./RuleSet/Advertising-antiAD.yaml
url: https://anti-ad.net/clash.yaml
interval: 86400
以及:
# Advertising & Hijacking & Privacy
- DOMAIN-SUFFIX,loli.net,CN # SM.MS
- DOMAIN,click.simba.taobao.com,CN # Web Recommend
- RULE-SET,Advertising,REJECT
- RULE-SET,Advertising-antiAD,REJECT
删除后,请重新进行上传及导入配置文件的步骤。
精简配置文件后,Shellcrash应该可以稳定运行。
Steam下载流量
Steam下载服务器的流量有概率会从你的服务器进行转发,为了节省流量,你可能需要设置直连规则,规则的位置需要在配置文件中以下字段的上方。
# UA
- DST-PORT,80,Switch
- DST-PORT,8080,Switch
提示:连接的steam下载服务器链接可以通过Shellcrash的本地面板中通过观察流量的方式得到服务器链接,并编写形如下文的规则
- DOMAIN-SUFFIX,得到的下载服务器链接,DIRECT
写在最后的一些思考
动手写这篇文章之前,笔者其实一直在思考一个问题,对于校园网来说,如此大费周章地部署多设备共享检测的意义究竟在哪?
明面上的原因似乎很简单,无非是政府在 教科信厅函〔2021〕33号中提出的
六、保障校园网络绿色安全稳定
高等学校应严格按照《中华人民共和国网络安全法》《中华人民共和国数据安全法》《中华人民共和国个人信息保护法》等法律法规和政策文件要求,落实各项安全防护要求;应对本单位主管的信息系统(网站)统一分配IP(网络互联协议)地址和域名,建立校园局域网的出口集中管理机制;严格落实互联网访问实名认证制度,规范外来访客网络访问管理,实行上网地址统一管理和网络准入统一认证制度。
但仔细想想,只靠这样的说法似乎也站不住脚,以笔者本人为例,困扰我的并非认证制度,而是学校校园网中心一刀切式的将设备数限制在一个电脑和一个手机,对于笔者这种多设备同时使用的学生而言,切换设备联网需要来回认证着实是造成了很多困扰,而限制设备个数,检测路由器这样的手段,其实也并非是政府提出的,防止网络被共享并用于非法活动这个原因显然也说不过去,因为哪怕使用路由器,WLAN的信号范围显然十分有限,最多满足一个寝室的上网需求,在监管上并没有带来可见的风险。
显然,此类型的共享检测系统之所以诞生并迅速在全国各大高校里普及还存在别的原因
在著名校园网络共享检测方案供应商深澜软件的官网上,有这样一段话
目前,大多高校数宽带业务都是基于包月或者按照时间计费的形式开展的,沿用了家庭用户的计费方式,而且考虑到学生的支付能力比较低,定价也一般比家庭用户要低。事实上,高校学生用户利用宽带计费技术的不足,往往以个人的名义申请宽带而几户共用,并且分摊费用,给运营商造成了巨大的经济损失,在高校网络付费用户和非法接入用户的比例从1:2 到1:10 不等。
Srun 防代理系统是一款针对宽带共享接入管理设计和开发的网络行为分析及管理网关设备,通过基于DPI深度包检测的应用层特征报文分析,提供用户共享私接行为的实时控制和监控,避免共享接入行为带来的潜在风险和损失,使运营商的网络运营更加健康有序和可持续发展。
虽然有些夸大其词的嫌疑,但不可否认的是这方面的问题的确存在,如果暂不考虑校园网的设备限制,以本校不久前翻修的校园网的质量(常时速度在300Mbps到500Mbps左右)来看,29元的大流量和高通话卡+30元每月的宽带费用着实是不算昂贵,若是以一个寝室为一个单位缴纳网络费用,似乎的确达不到目前宽带资费的平均水平。
从这个角度看,付费制校园网认证系统对于同时在线的网络设备数限制就合理了起来,若不对其加以限制,必然会出现学生之间共享网络的情况,造成学校方面在网络服务收入方面的损失,乃至收不回成本,而若是对有需要的学生网开一面放宽设备数限制,又势必会出现难以识别学生的申请究竟是个人需要还是借此共享网络,从而产生纠纷和困难,这种吃力不讨好的事情大部分高校自然是唯恐避之不及。
但另一方面的问题在于,校园网由于其面向的对象,天生应具有教育属性,要求每个学生每月支付宽带费用甚至还需要开通一张(可能)用不到的校园卡,以达到运营商和学校期望的“合理网络费用”似乎本身就是一种不合理,再结合每年开学时本校某些学院甚至将办校园卡作为报到流程的一个必须环节,这其中的是非,显然就有些耐人寻味了。
如此看来,无论是谋求共享网络的学生,亦或是想收回网络供应成本的学校和老师,似乎都有其道理,但笔者个人还是希望,中国大学各个环节上的决策者和负责人能保留对学生的一份理解,至少,不要把原本提供给学生的服务做成了赚钱的生意。毕竟,大部分人曾经都是学生,只是他们中的某些人成为了厉害的大人,离这个身份越来越远,从而忘记了这一点罢了。