宿舍网络自由:Dell Wyse 3040 软路由实战 GiWiFi 校园网逆向与自动保活
宿舍网络自由:Dell Wyse 3040 软路由实战 GiWiFi 校园网逆向与自动保活
学校的校园网太几把贵了,一个月49块,这次国庆返校把家里吃灰的路由器拿学校看能不能连上校园网,试了试连倒是能连上但是老断,上游应该是有多设备检测,想着手里还有个吃灰的小主机就折腾了一下
一、 硬件选型与网络拓扑
1. 硬件:Dell Wyse 3040 与 TP路由器
这次选用的软路由载体是矿渣/办公淘汰界的经典神机 —— Dell Wyse 3040 瘦客户机:
- CPU:Intel Atom x5-Z8350(4 核心 4 线程,x86_64 纯正架构)
- 内存:2GB DDR3L
- 内置闪存:板载 8GB eMMC
- 网络接口:单口千兆 RJ45(Realtek RTL8111/8168)
- 扩展接口:1x USB 3.0、3x USB 2.0、2x DisplayPort
- 功耗与发热:整机日常待机仅 3W~5W,纯被动散热无风扇,7x24 小时开机几乎不耗电且零噪音。
相比普通几十块钱的 MT7621 路由器(内存通常只有 64M/128M,跑不动复杂解释器),Wyse 3040 拥有完整的 x86_64 架构和 2GB 大内存,系统空闲内存高达 1.6GB,能够轻松跑原生 Python 3、OpenSSL、Docker、AdGuardHome 去广告和各类科学分流工具。
2. 组网架构设计:单网口旁路由 + 旁路网关全局接管
由于 Wyse 3040 只有单千兆网口,无需花冤枉钱买外接 USB 网卡,最稳定成熟的玩法是:
普通无线路由器做接入网关与 Wi-Fi AP + Wyse 3040 做旁路网关。
物理接线与双向网络拓扑
1. 硬件线路图
2. 逻辑双向流量走向图 (Mermaid 架构)
graph TD
subgraph 校园网服务端
Gateway[校园网 AC/BRAS 网关]
PortalServer[GiWiFi 认证服务器 172.31.0.50]
Internet((互联网 Internet))
end
subgraph 宿舍普通无线路由器
RouterWAN[WAN 口 172.20.x.x]
RouterLAN[LAN 口 192.168.1.1]
WifiAP[宿舍 Wi-Fi / AP 发射]
end
subgraph Dell Wyse 3040 旁路由
Wyse[Dell Wyse 3040 192.168.1.254]
Watchdog[认证看门狗 gwifi_login.py]
Defense[防检测核心: TTL=64 + NAT Masquerade]
end
subgraph 宿舍终端设备
Clients[手机 / iPad / 笔记本 / 台式机]
end
%% 日常上网流向 (蓝色链路)
Clients -->|1. 默认网关指向 1.254| Wyse
Wyse -->|2. 抹除特征 + 锁定 TTL=64| Defense
Defense -->|3. 转发至路由器 LAN| RouterLAN
RouterLAN -->|4. 出口路由| RouterWAN
RouterWAN -->|5. 正常外网流量| Gateway --> Internet
%% 认证保活流向 (橙色链路)
Watchdog -.->|嗅探外网 ping 223.5.5.5 失败| Watchdog
Watchdog -.->|自动触发 AES 加密登录| RouterLAN
RouterLAN -.-> RouterWAN -.->|POST /loginAction 认证 WAN IP| PortalServer
PortalServer -.->|放行通过| Gateway
3. 为什么这个拓扑最稳定?(双轨分离机制)
- 控制面(认证保活):Wyse 3040 独立在后台与
172.31.0.50对话,负责把路由器的 WAN 口 IP 变成“已认证白名单”; - 数据面(全屋转发):路由器负责 Wi-Fi 空口吞吐,Wyse 3040 负责在局域网内部做 TTL 篡改和 NAT 折叠,两台设备各司其职,吞吐量不打折。
核心网络参数规划
- 普通无线路由器:
- LAN IP:
192.168.1.1 - DHCP 服务:开启,但在 DHCP 高级设置中,将 默认网关 改为
192.168.1.254,主 DNS 改为192.168.1.254。
- LAN IP:
- **Wyse 3040 (iStoreOS)**:
- 静态 IP:
192.168.1.254(掩码255.255.255.0,网关192.168.1.1,DNS223.5.5.5); - DHCP 服务:关闭(勾选忽略此接口,防止双 DHCP 打架);
- 开启 NAT 伪装(masquerade):这是旁路由成功的灵魂,能防止同网段不对称路由丢包。
- 静态 IP:
三、 逆向:深入 GiWiFi (gportal) 认证协议
以现场抓包的山东工程职业技术大学(网关代号 jn_sdgc)GiWiFi 系统为例,其 Portal 网关位于内网 http://172.31.0.50。
1. 抓包网络流与重定向分析
当未认证设备尝试访问外网(如 http://www.baidu.com)时,网关的接入控制器(AC)会拦截请求并返回 302 重定向:
1 | |
- **
wlanuserip(如172.20.59.194)**:校园网 DHCP 分配给接入设备的内网 IP,也是认证成功后防火墙决定放行的对象; - **
wlanacname(jn_sdgc)**:区域接入控制器代号。
在网页上点击登录时,浏览器向鉴权接口发出 POST 请求:
- 接口:
http://172.31.0.50/gportal/Web/loginAction - 载荷结构:
1
data=<超长Base64密文>&iv=519607541ee5a1df
2. 前端 JS 逆向:定位加密算法
审查 Portal 页面的 JavaScript 源码,在内联脚本中直接发现了核心加密函数 cryptoEncode:
1 | |
整个加密算法直接明牌暴露:
- 算法:AES-128-CBC;
- **密钥 (Key)**:前端硬编码常量字符串 **
"1234567887654321"**; - **偏移量 (IV)**:前端动态生成的 16 字符 Hex 字符串(如
519607541ee5a1df); - 填充方式:ZeroPadding(零填充),即若明文长度不是 16 的倍数,在尾部全部填充
\x00直到对齐。
3. 解密还原与表单明文审计
使用 Python 对抓包截获的 data 密文进行反解:
1 | |
成功完整解密出原始表单结构:
1 | |
至此,整个协议链条完全理清:
- 网页返回的
sign是单次会话防重放签名; - 设备指纹被伪装成
Windows NT 10.0PC 端; - 只需要动态获取
sign,填入账号密码,做一次 AES-128-CBC ZeroPadding 加密,再 POST 到/gportal/Web/loginAction即可实现脱机免浏览器鉴权!
四、 软路由端全自动认证与看门狗落地
Wyse 3040 搭载的 iStoreOS 采用了最新的 Alpine apk 包管理体系。在 Wyse 3040 终端中执行以下命令装载环境:
1 | |
我们编写了一个轻量级、零第三方 Python 库依赖(纯调用系统级 OpenSSL 实现加解密)的自动化认证看门狗守护脚本,保存在 /root/gwifi_login.py。每个函数与参数均附带详尽注释:
1 | |
开机自启配置
编辑 Wyse 3040 的 /etc/rc.local,在 exit 0 前加入以下指令:
1 | |
现在,即便宿舍半夜断电、断网重拨,开机后 Wyse 3040 都会在后台默默拉起看门狗,30 秒内秒级自愈。
五、 宿舍防封与多设备对抗机制
宿舍挂路由器最怕被运营商多设备检测抓现行。针对校园网常见的特征探测,我们在软路由上构建了四重防御体系:
1. 认证层:单点代登
在登录报文里,Wyse 3040 永远将自身伪装为单一的 Windows NT 10.0 桌面终端。网关数据库里记录的永远只有 1 台电脑在线,其他手机和平板根本不产生鉴权请求。
2. 路由层:TTL 跳数绝对锁定
普通路由器 NAT 转发时会将 IP 包的 TTL 减 1(64 变成 63,128 变成 127),运营商网关一旦抓到 63/127 会立刻断定下挂了路由器。
我们在 Wyse 3040 的防火墙自定义规则中加入:
1 | |
无论内网挂了多少台设备,所有出网的数据包 TTL 统一被强行改写为标准的 64,彻底抹平多跳路由特征。
3. 系统层:禁用 TCP Timestamps
不同设备的操作系统时钟频率(晶振斜率)不同,深度包检测系统会通过 TCP 时间戳统计多设备并发。
在 Wyse 3040 执行:
1 | |
直接关闭 TCP 时间戳,彻底切断时钟特征探测。
4. 应用层:旁路由 NAT 折叠
全宿舍设备连上普通路由器的 Wi-Fi,数据包全部自动下发到旁路网关 192.168.1.254,经过 NAT Masquerade 伪装后由单一出口统一转发出去,合多为一。