FZU NMSL

名词解释

开源路由器操作系统 OpenWrt

OpenWrt 是一款被广泛使用的开源路由器操作系统,可适用于多种路由器和嵌入式设备。

引导程序 Breed

Breed 是 OpenWrt 中的一个引导程序,类似于路由器上的 BIOS 或 UEFI。可以通过 Breed 为路由器刷写 OpenWrt 操作系统。

Breed 能够协助用户在路由器上安装或更新 OpenWrt 操作系统。如果需要安装 OpenWrt 操作系统,可使用 Breed 启动路由器并将 OpenWrt 固件文件上传至路由器进行安装。

防火墙检测手段规避方法

TTL修改

TTL(Time to Live)是计算机网络中常用的概念,表示在网络传输中,数据包可以经过的最大路由器跳数。每经过一个路由器,TTL 值减1,当 TTL 值降为0时,数据包被丢弃,以避免网络出现无限循环。

若宿舍网络中存在路由器,数据包通过路由器时 TTL 跳数会比正常设备发出的数据包 TTL 少1。

我们可以通过修改 TTL 来规避校园网防火墙的检测。

可通过添加 iptables 规则来实现:

iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64

该规则能够将转发出路由器的数据包的 TTL 加1,起到隐藏路由器存在的作用。

该 iptables 规则被内置于下载页面提供的 OpenWrt 系统中。

用户代理修改

用户代理(User-Agent)是 HTTP 协议中的一个头部字段,用于描述发送请求的客户端信息。当浏览器向服务器发送请求时,会在请求头中包含 User-Agent 字段,以告知服务器使用何种客户端软件(比如浏览器)发送请求。

User-Agent 字段通常包含了客户端的操作系统信息、浏览器的名称和版本、以及其他一些描述客户端的信息。服务器可以使用 User-Agent 字段来判断用户的设备类型、浏览器版本等信息,以便提供更适合用户的网页内容和服务。

防火墙可以根据 User-Agent 判断一个 IP 下是否有多台设备存在。

由于 HTTPS 对请求头进行了加密,我们无需担心 HTTPS 请求会暴露设备的 User-Agent。

我们可以使用UA2F 这款 Openwrt 插件将 HTTP 请求的 User-Agent 修改,起到隐藏路由器下设备指纹信息的作用。

可参考 OpenWrt 编译与防检测部署教程 防火墙配置一节。

下载页面提供的 Openwrt 系统已内置 UA2F 插件,并已向系统添加其需要的配置。

HTTP 包加密【可选】

为了更加彻底地解决 User-Agent 的问题,可以将所有的 HTTP 请求加密后发送到校园网之外的设备,再连接至互联网。

但是,这种方法需要较多的配置,并会对网络的可用性造成较大的影响,因此仅作为可选项,并未附带在下载页面提供的 Openwrt 系统中。

如果想要使用此方法,可以参考文章 OpenWrt 编译与防检测部署教程 中提供的具体配置。

声明

路由器刷机有一定风险,若操作不当可能导致路由器无法正常工作。

请事先备份路由器系统后再进行刷机操作。

Openwrt 系统刷写

1.在下载页面下载对应型号的 OpenWrt 固件。

2.将路由器连接到电脑,使用网线将电脑与路由器连接起来。路由器端的网线请连接路由器的 LAN 口。

3.拔出路由器的电源。对于大多数路由器,按住 Reset 按钮(或使用细长物体戳进 Reset 孔按下按钮),保持按钮按下状态插入电源线。等待五秒后放开 Reset 按钮。此时路由器进入 Breed 模式。

4.在电脑上打开一个浏览器,输入路由器的 IP 地址(一般为 192.168.1.1),打开 Breed Web 界面。

5.在 Breed 界面中找到“固件升级”的选项,点击“上传” 按钮,选择之前下载好的 OpenWrt 固件并上传。若需要选择固件类型,请勾选“固件”。

6.等待固件上传完成后,选择“刷写”按钮,开始刷写 OpenWrt 固件。

7.等待刷写过程完成后,路由器将自动重启。路由器启动时间较长,请等待至少五分钟。若刷写后路由器无法启动,请尝试拔出电源重启路由器。

Openwrt 系统的默认账号为 root,默认密码为 password。进入管理后台(192.168.1.1)之后请尽快修改管理员密码、Wi-Fi 名称与密码。

经验分享

经过数天的测试,我们修改了TTL和HTTP包的用户代理后,偶尔会被防火墙探测并封禁(每天1次,每次持续10分钟)。我们认为这样的可用时间是可以接受的,因此我们不再采用更激进的防探测技术。

我们进一步尝试后发现,在登录页面开启“本机无感认证”可以进一步增强网络的稳定性,减少掉线和封禁的情况。我们需要更多时间来验证其有效性。下面的自动登录脚本中已包含开启“本机无感认证”的代码。

校园网自动登录【可选】

我们可以在 Openwrt 路由器中设置定时脚本,实现校园网的自动登录功能。

请注意,要实现该功能,需要先通过浏览器抓取登录请求。抓取操作需要一定的技术,但只要按照下述教程操作,就可以顺利完成抓取。

1.打开浏览器,访问上网认证页面。

2.按下 F12 或在设置中打开“开发者工具”。

3.在控制台中选择网络(Network)选项卡。

Chrome (Edge) 浏览器:勾选“保留日志”选项。

Firefox 浏览器:在右上角设置(齿轮按钮)中勾选“持续记录”。

4.输入账号密码,点击登录。

Chrome (Edge) 浏览器:在开发者工具的网络选项卡中找到名为 "/InterFace.do?method=login" 的请求。右键点击该请求,选择“复制-复制为cURL”。将复制下来的内容保存下来,并记为请求1。

Firefox 浏览器:在开发者工具的网络选项卡中找到名为 "/InterFace.do?method=login" 的请求。右键点击该请求,选择“复制值-复制为cURL命令”。将复制下来的内容保存下来,并记为请求1。

5.如果已经打开了“本机无感认证”,请先关闭它。保持开发者工具和网络选项卡打开,在浏览器中打开“本机无感认证”。

6.在网络选项卡中找到名为 "InterFace.do?method=registerMac" 的请求,同上述步骤,复制该请求的 cURL 命令,并记为请求2。

以下是自动登录脚本的模板:

#!/bin/bash
code=$(curl -I -m 10 -o /dev/null -s -w %{http_code} https://www.baidu.com)
if [ $code != "200" ]
then
    message=$(【请求1】)
    echo "$message"
    logger -t FZU_NET "Try to login..."
    code2=$(curl -I -m 10 -o /dev/null -s -w %{http_code} https://www.baidu.com)
    if [ $code2 != "200" ]
    then
        logger -t FZU_NET "May be banned!!!!!"
        logger -t FZU_NET "$message"
    else
        logger -t FZU_NET "Login successfully"
        【请求2】
fi
else
    echo "Network OK"
    logger -t FZU_NET "Network OK"
fi
    

请将【请求1】与【请求2】(包括中文括号)两处文字替换为前面获取到的 cURL 命令。

7.通过 SSH 连接 Openwrt 系统,命令为 ssh [email protected],默认密码为 password,若修改了管理员密码,则密码为修改后的管理员密码。

输入命令 touch auto_login.sh 创建自动登录脚本。使用命令 vim auto_login.sh 开始编辑脚本内容。

进入编辑模式,请按下 i 键。粘贴上述脚本内容,将【请求1】和【请求2】分别替换为前面获取到的 cURL 命令。编辑完成后,请按下 esc 键退出编辑模式,并输入 :wq 命令保存并退出 vim。

8.输入命令 echo "*/2 * * * * bash /root/auto_login.sh" >> /etc/crontabs/root,将自动执行命令传入系统。该命令会每两分钟执行一次登录脚本。如果您想修改执行时间,请参考 crontab 教程进行修改。

执行命令 crontab -l 可以查看已配置的定时任务。

参考资料

OpenWrt 编译与防检测部署教程
校园网路由器多设备伪装指北
关于某大学校园网共享上网检测机制的研究与解决方案
ISP 可以用哪些手段检测到用户在使用路由器共享网络?用户可以规避吗?
宿舍路由器检测对策
绕过校园网分享限制,构建愉快的宿舍网络环境