记录一次防长沙理工大学校园网共享检测的经历
前情提要
刚入学校,大部分新生都会办理校园网服务。长沙理工大学的校园网分为两种:
在图书馆办理校园网账号,30一个月,在办理页面上带宽显示30Mbps(我没试过)
在三大运营商(电信,移动,联通)下办理学生流量卡,分为28元、58元、68元三个套餐。其中28的套餐为单独一张流量卡,总共240G流量;58元套餐为办理流量卡和校园网一台设备使用;68元套餐为办理流量卡和校园网两台设备使用。
目前我在学校办理的套餐为58一个月的电信套餐。对于其中的校园网部分,有两种方法接入校园网:
连接校园的
csust-dx
WIFI,其中的DHCP服务器分配学校内网IPv4,DHCPv6服务器分配教育网公网IPv6,之后需要通过网页门户认证后才可接入互联网接入宿舍的有线网络,使用PPPoE进行认证,获取学校的内网IPv4和内网IPv6(无公网IPv6)
由于我有多台电子设备(一台电脑,一个平板,两部手机),而学校的校园网只能一台设备使用,如果电脑认证了校园网,之后再使用手机认证,则电脑会掉线,需要重新认证。
如果使用电脑接入校园网,再在电脑上开启热点,使用手机或者平板连接。立马就会被校园网封禁,如下:
经过测试,校园网共享上网封禁是封禁认证设备的MAC地址,而不是账号。因此,可以通过更换MAC地址重新上线,而无需等待30分钟,但此时仍无法使用热点来共享上网。
最后,通过查询一些网上的资料[1][2],还有与学长的交流[3],最终我成功实现了多个终端使用校园网共享上网。
我的配置
首先,你需要一个可以刷入OpenWRT系统的路由器;
其次,你需要一个可以流畅运行OpenClash的路由器。
我一开始只考虑了前者,于是购买了Xiaomi Redmi AC2100路由器,但是RM2100路由器的性能无法运行OpenClash。
于是最终我采用了N100软路由,使用RM2100路由器作为AP。
架构图如下:
我目前在N100主机上配置了PVE,OpenWrt运行在其虚拟机中。
因为配置了PVE,所以我可以在主机上安装Ubuntu服务器,fnOS的NAS系统。
当然,如果你只是需要防检测的话,无需像我这样搞两台设备,一台性能较好的路由器足矣。
正式教程
准备
选择一台性能足够强,且能够刷入OpenWrt的路由器(具体选择哪些路由器可以在网上查询)
准备好路由器后,可以在网上查找相关教程,刷入OpenWrt
配置OpenWrt
拨号上网
进入网络-接口
中,配置wan口,选择协议为PPPoE
在用户名和密码处填入你的校园网账号密码
随后保存并应用即可
当你看到pppoe-wan中10开头的IPv4地址时,说明已经成功拨号连上校园网
此时,虽然已经连上了校园网,但并没有实现防检测功能。以此,此时路由器只能连接一台设备,如果再连接一台设备,很快就会被封禁
所以,接下来我们需要配置相关防检测的插件
防检测操作
统一TTL
使用ssh登录路由器,安装相关软件包
opkg update
opkg install iptables-mod-ipopt
如果你是nftables防火墙,还需要安装
opkg install iptables-nft
这个软件包可以在nftables防火墙下使用iptables
安装完成后,在系统-启动项
中添加如下代码
iptables -t mangle -I POSTROUTING -o br-lan -j TTL --ttl-set 128
保存后重启路由器,即可实现统一TTL
安装OpenClash
推荐按照OpenClash官方的安装步骤进行,链接https://github.com/vernesong/OpenClash/releases
安装后,添加你机场的配置文件,然后运行Clash即可
你的Clash正常运行之时,也就是完成防检测操作之时
配置DNS服务器
此时,如果需要访问如xk.csust.edu.cn等网站,路由器无法解析出正确的IP地址
我们可以通过安装smartdns来解决这个问题
同样,推荐按照smartdns官方的安装步骤进行,链接https://pymumu.github.io/smartdns/install/openwrt
安装后,设置本地端口为6053端口(其他未占用端口也行)
然后添加上游DNS服务器,分别为10.255.255.25
和 10.255.255.26
如图
然后取消勾选自动设置Dnsmasq
,然后保存并运用即可。
接下来在OpenClash中添加上游DNS服务器
进入服务-OpenClash-覆写设置-常规设置
,在其中的设置自定义上游DNS服务器
中添加127.0.0.1,端口为刚才设置的端口(6053)。接下来再重启OpenClash即可。
接下来,就可以正常访问各种校内资源了。
意外情况
如果你遇到了意外情况,被检测到了共享上网
修改wan口的mac地址重新拨号即可,无需等待30分钟。当然也可以使用此脚本自动上线
脚本如下
#!/bin/sh
DATE=$(date +%Y-%m-%d-%H:%M:%S)
interface=eth0
current_mac=$(ifconfig ${interface} | grep "HWaddr" | awk '{print$5}')
new_mac=$(dd if=/dev/random bs=1 count=3 2>/dev/null | hexdump -C | head -1 | cut -d' ' -f2- | awk '{ print "34:36:3b:"$1":"$2":"$3 }')
tries=0
while [[ $tries -lt 3 ]]; do
if /bin/ping -c 1 223.5.5.5 >/dev/null; then
echo --- exit ---
exit 0
fi
tries=$((tries + 1))
done
echo ${DATE} block detected, replacing mac address >>watchdog.log
ifconfig down ${interface}
sleep 1
ifconfig ${interface} hw ether ${new_mac}
sleep 1
ifconfig up ${interface}
echo ${DATE} old address ${current_mac} has been replaced with ${new_mac} >>watchdog.log
保存到/root/net_watchdog.sh
,然后配置如下Crontab任务(使用crontab -e)配置,也可以在OpenWrt后台界面(系统-计划任务
)中添加
* * * * * sh /root/net_watchdog.sh
在此之后
这里算是一些闲话了,
我的日记
刚进学校,我就尝试使用UDP53绕过校园网认证,可惜学校的校园网大概是设置了防火墙,我无法访问外网。
然后,我只能正常办理校园网了,但是发现不能多台设备使用。
于是,我购买了RM2100路由器,手动编译lean的OpenWrt(LEDE),其中安装了ua2f,rkp-ipid,iptables-mod-ipopt。
为何选择lean的固件,是因为其中闭源WiFi固件速率更快。
配置好后,每个插件都正常运行,也能够统一User Agent,统一TTL
然并卵。。有了UA2F可以有效防检测,但是不能完全有效防检测。
如果不装任何防检测插件,只要路由器上连接了多台设备就会立马被检测
装了UA2F后,不会立即被检测了,但是差不多隔30分钟~2小时不等,就会被检测到。
然后听说UA2F有概率漏包,于是安装OpenClash/ShellCrash
然而,这RM2100路由器带不动这俩家伙。。。
于是我花大价钱,买了个N100软路由(一般用不到这么高配置,我这纯粹是折腾玩一步到位了)
然后配置了ShellCrash+UA3F(https://sunbk201public.notion.site/UA3F-Clash-16d60a7b5f0e457a9ee97a3be7cbf557)
虽然同样能修改UA,但是还是会被检测到,情况和之前使用UA2F差不多!!
哎,没办法,再向学长求助,然后现在你们看到的就是学长传授给我的方法了。
检测内容
以下探究学校的校园网系统到底通过检测什么东西来判断是否存在共享行为。
首先是TTL,这点是很大概率存在的
然后是UA,这点存疑,毕竟使用UA2F或者UA3F的时候有一定的防检测能力
接下来是DPI(wxid),通过检测包中的wxid来判断是否存在多个微信,这点我不太确定,因为我只有一个微信
对于UA检测存疑,我的观点如下:
就算是使用了OpenClash,但是在Rule模式下,没有命中规则的HTTP包还是以明文方式发送出去。例如我在路由器的wan口抓包
plink.exe -batch -ssh -pw "YOUR_ROUTERS_PASSWORD" root@192.168.5.1 "tcpdump -n -i eth1 -s 0 -w - " | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -
然后还是可以在Wireshark中看到不同UA的HTTP包
明显出口的流量有多个UA ,但是不会被封,只能说,可能这就是魔法吧
所以其实我也不知道学校的校园网究竟检测的是什么内容。。。