Zhe's Vision

Hi, nice to meet you.

记录一次防长沙理工大学校园网共享检测的经历

Zhe_Learn's Avatar 2024-10-20

  1. 1. 前情提要
  2. 2. 我的配置
  3. 3. 正式教程
    1. 3.1. 准备
    2. 3.2. 配置 OpenWrt
      1. 3.2.1. 拨号上网
    3. 3.3. 防检测操作
      1. 3.3.1. 统一 TTL
      2. 3.3.2. 安装 OpenClash
    4. 3.4. 配置 DNS 服务器
    5. 3.5. 意外情况
  4. 4. 在此之后
    1. 4.1. 我的日记
    2. 4.2. 检测内容
  5. 5. 参考文献

前情提要

刚入学校,大部分新生都会办理校园网服务。长沙理工大学的校园网分为两种:

  1. 在图书馆办理校园网账号,30 一个月,在办理页面上带宽显示 30Mbps(我没试过)
  2. 在三大运营商(电信,移动,联通)下办理学生流量卡,分为 28 元、58 元、68 元三个套餐。其中 28 的套餐为单独一张流量卡,总共 240G 流量;58 元套餐为办理流量卡和校园网一台设备使用;68 元套餐为办理流量卡和校园网两台设备使用。

目前我在学校办理的套餐为 58 一个月的电信套餐。对于其中的校园网部分,有两种方法接入校园网:

  1. 连接校园的csust-dxWIFI,其中的 DHCP 服务器分配学校内网 IPv4,DHCPv6 服务器分配教育网公网 IPv6,之后需要通过网页门户认证后才可接入互联网
  2. 接入宿舍的有线网络,使用 PPPoE 进行认证,获取学校的内网 IPv4 和内网 IPv6(无公网 IPv6)

由于我有多台电子设备(一台电脑,一个平板,两部手机),而学校的校园网只能一台设备使用,如果电脑认证了校园网,之后再使用手机认证,则电脑会掉线,需要重新认证。

如果使用电脑接入校园网,再在电脑上开启热点,使用手机或者平板连接。立马就会被校园网封禁,如下:

1729135961949.jpg

经过测试,校园网共享上网封禁是封禁认证设备的 MAC 地址,而不是账号。因此,可以通过更换 MAC 地址重新上线,而无需等待 30 分钟,但此时仍无法使用热点来共享上网。

最后,通过查询一些网上的资料[1][2],还有与学长的交流[3],最终我成功实现了多个终端使用校园网共享上网。

我的配置

首先,你需要一个可以刷入 OpenWRT 系统的路由器;

其次,你需要一个可以流畅运行 OpenClash 的路由器。

我一开始只考虑了前者,于是购买了 Xiaomi Redmi AC2100 路由器,但是 RM2100 路由器的性能无法运行 OpenClash。

于是最终我采用了 N100 软路由,使用 RM2100 路由器作为 AP。

架构图如下:

IMG_20241016_191743.jpgIMG_20241016_191814.jpg

我目前在 N100 主机上配置了 PVE,OpenWrt 运行在其虚拟机中。

因为配置了 PVE,所以我可以在主机上安装 Ubuntu 服务器,fnOS 的 NAS 系统。

当然,如果你只是需要防检测的话,无需像我这样搞两台设备,一台性能较好的路由器足矣。

正式教程

准备

选择一台性能足够强,且能够刷入 OpenWrt 的路由器(具体选择哪些路由器可以在网上查询)

准备好路由器后,可以在网上查找相关教程,刷入 OpenWrt

配置 OpenWrt

拨号上网

进入网络-接口 中,配置 wan 口,选择协议为 PPPoE

在用户名和密码处填入你的校园网账号密码

随后保存并应用即可

当你看到 pppoe-wan 中 10 开头的 IPv4 地址时,说明已经成功拨号连上校园网

QQ20241020-004730.png

此时,虽然已经连上了校园网,但并没有实现防检测功能。以此,此时路由器只能连接一台设备,如果再连接一台设备,很快就会被封禁

所以,接下来我们需要配置相关防检测的插件

防检测操作

统一 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.2510.255.255.26

如图

QQ20241020-010434.png

然后取消勾选自动设置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

1729358145862.jpg

然并卵。。有了 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 包

photo_2024-10-10_13-37-36.jpg

明显出口的流量有多个 UA ,但是不会被封,只能说,可能这就是魔法吧

所以其实我也不知道学校的校园网究竟检测的是什么内容。。。

参考文献

  1. https://www.sunbk201.site/posts/crack-campus-network
  2. https://sunbk201public.notion.site/UA3F-Clash-16d60a7b5f0e457a9ee97a3be7cbf557
  3. https://blog.l3zc.com/2023/09/csust-network-guide
This article was last updated on days ago, and the information described in the article may have changed.