最近更新于 2023-06-01 11:43
刷 Breed 恢复控制台:
- 红米 AC2100:https://blog.iyatt.com/?p=6839
- Newifi R6830: https://blog.iyatt.com/?p=7038
- 极路由 4 增强版:https://blog.iyatt.com/?p=7377
适配的路由器:
- 红米 AC2100(2022.10.6)
- 极路由 4 增强版(2023.3.9)
- Phicomm K2(2022.10.5)
- Newifi R6830(2022.10.5)
- Phicomm K2p(2022.10.1)
- Newifi3 (2022.10.1)
- 小米路由器 3 Pro(2022.10.1)
- 大麦 DW22D(2022.9.25)
编译主体步骤(实际调整看本篇日志):https://blog.iyatt.com/?p=6906
固件下载:
User-Agent 检测网站:
在此感谢使用到的开源项目:
学校宽带登录地址:http://202.202.145.132/
2022.8.30
时隔多年,学校的校园网系统更新了。花溪校区全面更换光纤,移动和电信一起合资布设了宽带设备,宿舍有 WiFi6 覆盖。电信旧有宽带系统“创翼”将于 9 月末弃用,新登录系统使用锐捷(如下图)。

采用的是 WEB 页面认证,按照通知所说,支持一台电脑和一部移动设备同时在线,一般来说校园网都会限制多设备使用,比如开热点。
今天是新宽带试运行的第二天,我先测试了下电脑开热点。直接使用系统的热点功能虽然可以开启,但是连上WiFi却没网。我换用的 360 免费 WiFi 校园专版测试,可以开 WiFi 给多台设备使用。但是考虑到360 WiFi可能有技术应对校园网,还不能判断是否会检测多设备。

我又尝试了用树莓派(Linux 小电脑)登录校园网,然后开热点,连上的多台设备也都能使用,那就意味着可能是没有多设备检测。
然后我准备尝试编译 OpenWrt 添加锐捷登录协议,在和一个朋友交流时,给我提出了一种方式让我尝试:路由器克隆电脑的 MAC,电脑跳出登录页面后正常登录操作。结果真的可以工作,能不能长时间保持连接还待观察。

大致原理就是路由器 WAN 口直连接入学校校园网,校园网给路由器分配了一个 IP,然后电脑(用手机也可以操作)连接在路由器上间接接入校园网。此时校园网识别到的接入的设备就是路由器,然后因为登录要在电脑上进行,猜想可能会记录登录设备的 MAC 地址绑定登录状态,所以就先把电脑的 MAC 地址给路由器使用。然后在电脑上进行正常登录操作,数据经由路由器发送出去,校园网那边就会认为是路由器登录的(把路由器当作登录的电脑或手机)。路由器访问互联网后,连接在上面的设备也能间接访问互联网,绕过一个账号只能登录两台设备的限制,实现多设备上网。(后面测试发现不用克隆 MAC 也行)
所以操作的话,就是把路由器外网连接类型设成动态IP(截图为老毛子固件)

在电脑连上路由器的时候应该会跳出校园网的登录界面,如果关了,可以打开地址 202.202.145.132 ,正常登录就可以了,登录后可以关闭页面


然后所有连接到路由器上的设备都能上网了。
————————————————————————————————————————————————————
2022.9.1
锐捷限制一个账号登录两台设备,今天我测试了两个路由器使用一个账号,同时测速发现两台路由器都能达到办理套餐的带宽。意味着限速不是针对账号的,而是对每台设备的。
2022.9.3
今天下午开始,第一次出现路由器掉线的情况,掉线后尝试重新登录时提醒如下图:

后面频繁出现了很多次,每次被限制时间不定。
2022.9.4
查阅了网上很多资料,结合测试,推测这个“代理上网”识别是基于 UA 检测的,UA 中带有操作系统名,如果同时出现多个,那么就能判断出一个设备联网共享给多个设备使用。
经过通宵的折腾(编译红米 AC2100 的 OpenWrt 固件),一直搞到中午,终于弄出一个没掉线的固件了,主要通过替换 UA 避免检测。
详情:https://blog.iyatt.com/?p=6906
2022.9.5
今天我用别人的号测试电脑和手机同时间访问 http 网页,结果没出现掉线的情况,结合昨天有人给我说他在比我更早之前就被检测到代理上网然后禁止登录。我做了一个推测:
校园网是随机抽查部分用户检测,只要检测到一次,那么后面就会专门盯着你的账号。毕竟要分析你的上网特征也是要消耗服务器资源的,对全部上网用户同时检测服务器压力山大。
我也了解到一些用户在使用虚拟机和安卓模拟器时也会被检测到代理上网,这个其实很好理解。你登录的电脑把网络共享给虚拟机和安卓模拟器使用,两边的网络服务通信时,UA 可能不一样,特征和使用路由器很像,校园网就一棒子打死。
————————————————————————————————————
继 https://blog.iyatt.com/?p=6906 (初版)编译固件
红米 AC2100 固件(2022-9-5_lede20220716):
初版固件是基于原版 OpenWrt 编译,可扩展的功能较少,当然固件文件也较小,是考虑到实验性以及为了适配 PHICOMM K2 路由器(只有 8M 闪存)(以前我卖过很多“校园网”路由器,都是 K2 的,可提供升级服务)。所以只需要保证校园网基本的支持就行,K2 路由器闪存勉强够用,也就暂时不再考虑更新 K2 的固件了。
从这里开始采用 lede,这个版本是基于 OpenWrt 开发的,含有更丰富的功能模块,体验比原版更好,采用的分支为 20220716。
- 修改了 lede/package/base-files/files/etc/rc.local,将防 UA2F、TTL、NTP、FLASH 检测相关的防火墙配置预写入系统,不再需要刷机后手动设置,做到开箱即用
- 修改了 lede/package/lean/default-settings/files/zzz-default-settings(lede 的默认设置文件),去除了 lede 的默认密码(留空),将 UA2F 首次启用相关命令写入,不再需要刷机后手动执行,做到开箱即用
- 去掉了部分默认勾选编译的应用(我认为用不上的),另外添加了应用,最终编译的应用如图:

网络 -> Turbo ACC 网络加速

2022.9.8


——————————————————————————————————————————
晚上的时候,提出这个方案的学弟联系我测试(因疫情还没返校,我是暑假留校的)。他搭建了一个 VPN 服务端,然后我电脑连接网线不登陆宽带认证,直接使用 OpenVPN 客户端通过 53 端口连接服务器,成功上网。


——————————————————————————————————————
针对 2022.9.5 版固件发现问题(仅红米 AC2100 的固件),路由器断电后开机或重启,WiFI 不会自启动。
打开系统->启动项,翻到下面本地启动脚本

在最后一行的 exit 0 前面行添加下面内容,点击提交。
# 2.4GHz ip link set ra0 up brctl addif br-lan ra0 # 5GHz ip link set rai0 up brctl addif br-lan rai0
2022.9.10
固件下载地址(2022-9-10_lede20220716):
- 去除了上一版的部分功能,主要保留的功能有 UPNP 、KMS 和 Turbo ACC。
- 解决 2022.9.8 发现的 WiFI 不自启动的问题,修改后默认只启动 5GHz,如果要设置 2.4GHz 自启动,请自行修改 系统–>启动项–>本地启动脚本,解开对应部分的注释。

2022.9.11
- 红米 AC2100(2022-9-11_lede20220716):去除预置配置中关于 rkp-ipid 的部分:编译时并没有添加 rkp-ipid 模块,防火墙无需配置。
- Lenovo Y1 Newifi R6830(2022-9-11-openwrt22.03):新增固件,刷 Breed 参考:https://blog.iyatt.com/?p=7038。固件基于 OpenWrt 编译(lede 上测试 UA2F 功能失败,最终在 OpenWrt 上成功)。刷机启动后,进入管理后台,打开服务->终端,登录后执行 ./enable_ua2f,启用 UA2F 模块。
- Phicomm K2(2022-9-11-openwrt22.03):更新固件,本来不打算更新的了。但是第一版用于测试的要刷机后手动输入代码配置太麻烦,还是要预置配置更方便使用。这里采用的和上面 Lenovo Y1 一样的源码和配置编译的,操作完全一样。
2022.9.13
- Newifi R6830(2022-9-13_lede20220716_Newifi-R6830)(废弃,不要用): 这次成功测试了 lede,添加了 Turbo ACC,但是发现如果启用了软件流量分载,UA 替换模块就不会工作。还不只有这个问题,我测速发现严重掉速,可能 1Mbps 都达不到。后面我编译了不含 Turbo ACC 的固件,测试还是有严重的掉速问题,并且负载依然也比较高,因此决定放弃在 Newifi R6830 上使用 lede 版本。(上传的是含 Turbo ACC 的固件,有兴趣的可以自己测试)
2022.9.14
双网叠加测试,详情:https://blog.iyatt.com/?p=7154
2022.9.15
单线多拨测试,详情:https://blog.iyatt.com/?p=7213
2022.9.16
有计划研究一下 Web 认证进行过程,然后应该可以使用 cURL 进行 POST 实现登录,即可以做到路由器自动尝试登录,不再需要打开浏览器手动操作。
进展见:https://blog.iyatt.com/?p=7288
因为是 Web 认证,登录相关的实现完全可以在网页代码里看到,但是我不会 Javascript,暂时也没有时间去慢慢分析,所以暂且搁置。
2022.9.17
下午测试的时候开始出现两个路由器不能同时在线的情况(双网叠加用一个账号不行了,单线多拨估计也一样),然后我又试验了手机和电脑(可以),手机和平板电脑(不可以),电脑和平板电脑(不可以),这nm啥情况,我有点迷。
我也没太多时间,所以目前的情况暂时要搁置一下了。
2022.9.19 – 2022.9.20
根据 17 号测试的情况,判断应该是根据登录时浏览器的 UA 进行区分的,19号下午测试,发现 Linux 系统的电脑也无法与手机同时在线。我就专门整理了一下我测试使用的设备浏览器的 UA,然后准备重新编译固件修改 UA2F 模块的代码,不再全部改为 FFFFF….,而是全部换成手机的 UA,那么应该可以解决两个路由器无法同时在线的问题。
不过我想得太天真了,从下午一直折腾到凌晨都没达到我预期的效果,或者说到最后什么都没搞出来。一方面是很久没写 C 语言了,改 UA2F 的时候,还犯了几次基础语法错误。另一方面关于 UA 替换实现的部分使用的第三方库,以前没了解过,改的时候很懵逼,不断尝试修改-编译-刷路由器-登录测试 UA,到后面逐渐意识到如果要改成我所想的全部替换成一样的指定 UA(UA2F 本身是将 UA 改为浏览器 UA 等长度的 FFFFF…..),那就必须得大改,结构框架修改。最后还是放弃了,没那个时间去慢慢研究。
Ubuntu 20.04 – 谷歌浏览器
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
Windows 11 – Edge 浏览器
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.42
Windows 11 – 谷歌浏览器
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
小米平板 5 Pro – 谷歌浏览器
Mozilla/5.0 (Linux; Android 11; M2105K81AC) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36
小米平板 5 Pro – 内置浏览器
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/534.24 Device/elish Model/M2105K81AC XiaoMi/MiuiBrowser/14.6.74
红米 Note11 Pro – 谷歌浏览器
Mozilla/5.0 (Linux; Android 12; 21091116C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Mobile Safari/537.36
红米 Note11 Pro – 内置浏览器
Mozilla/5.0 (Linux; U; Android 12; zh-cn; 21091116C Build/SP1A.210812.016) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.116 Mobile Safari/537.36 XiaoMi/MiuiBrowser/16.0.26 swan-mibrowser
2022.9.20
在放弃之后的凌晨,我决定进一步优化一下固件。有些设置直接在编译前的源文件上修改,刷好固件就不用再手动修改了。
- Newifi R6830(2022-9-20_openwrt22.03_newifi-r6830):时区改为中国,NTP 服务器换为国内的,启用“作为 NTP 服务器”。开启 WiFi,名字为 OpenWrt,加密方式 WPA2-PSK,密码为 12345678。管理页面主题修改,去掉之前添加的主题,只保留默认的。删掉我之前添加的关于 UA2F 防火墙相关的配置,使用的新版 UA2F 本身就会自动配置。
- Phicomm K2(2022-9-20_openwrt22.03_k2):同上
- Redmi AC2100(2022-9-20_lede20220716_redmi-ac2100):启用作为 NTP 服务器。UA2F 同上。
2022.9.21
- 极路由 4 增强版 HC5962(2022-9-21_lede20220716_hiwifi-hc5962):新增固件,刷 Breed 参考:https://blog.iyatt.com/?p=7377。固件编译配置大致同 2022.9.20 红米 AC2100 固件。
2022.9.22
目前所有路由器前一版固件均存在问题,由于我的失误,错误地以为 UA2F 已经包含了所有的防火墙配置(TTL、时钟偏移…)。刚才无意间翻看 UA2F 的源码,在启动项配置部分发现里面应该只含有了 UA2F 的部分。另外为了以防万一,还是准备加入 rkp-ipid 模块。趁着睡觉之前争取编译完。
- 启动项预置,在 package/base-files/files/etc/rc.local 添加
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53 iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53 # 防 IPID 检测 iptables -t mangle -N IPID_MOD iptables -t mangle -A FORWARD -j IPID_MOD iptables -t mangle -A OUTPUT -j IPID_MOD iptables -t mangle -A IPID_MOD -d 0.0.0.0/8 -j RETURN iptables -t mangle -A IPID_MOD -d 127.0.0.0/8 -j RETURN # 由于本校局域网是 A 类网,所以我将这一条注释掉了,具体要不要注释结合你所在的校园网内网类型 # iptables -t mangle -A IPID_MOD -d 10.0.0.0/8 -j RETURN iptables -t mangle -A IPID_MOD -d 172.16.0.0/12 -j RETURN iptables -t mangle -A IPID_MOD -d 192.168.0.0/16 -j RETURN iptables -t mangle -A IPID_MOD -d 255.0.0.0/8 -j RETURN iptables -t mangle -A IPID_MOD -j MARK --set-xmark 0x10/0x10 # 防时钟偏移检测 iptables -t nat -N ntp_force_local iptables -t nat -I PREROUTING -p udp --dport 123 -j ntp_force_local iptables -t nat -A ntp_force_local -d 0.0.0.0/8 -j RETURN iptables -t nat -A ntp_force_local -d 127.0.0.0/8 -j RETURN iptables -t nat -A ntp_force_local -d 192.168.0.0/16 -j RETURN iptables -t nat -A ntp_force_local -s 192.168.0.0/16 -j DNAT --to-destination 192.168.1.1 # 通过 iptables 修改 TTL 值 iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64
- 源码添加 rkp-ipid
Kernel modules–>Other modules–>kmod-rkp-ipid
git clone https://github.com/CHN-beta/rkp-ipid.git package/rkp-ipid --depth=1
更新固件:
- 红米 AC2100:2022-9-22_lede20220716_redmi-ac2100
- 极路由 4 增强版:2022-9-22_lede20220716_hiwifi-hc5962
- Newifi R6830:2022-9-22_openwrt22.03_newifi-r6830
- Phichom K2:2022-9-22_openwrt22.03_newifi-k2
红米 AC2100 添加 MentoHUST 插件测试
# MentoHUST git clone https://github.com/KyleRicardo/MentoHUST-OpenWrt-ipk.git package/mentohust --depth=1 # luci-app-mentohust git clone https://github.com/BoringCat/luci-app-mentohust.git package/luci-app-mentohust --depth=1
编辑 package/mentohust/Makefile,删除这两行(两个插件有同样的文件会冲突,这里放弃 MentHUST 的文件,使用 luci-app-MentHUST 的)

测试的情况是 ping 网站没问题,也没丢包,QQ 可以收发消息,但是就网页打不开。一般这种情况都会考虑 DNS 的问题吧,但是 ping 都能获取 IP,而且还有数据了,应该就不是这个问题了。我也尝试修改过 DNS,依然没用。

我暂时没有时间测试了,有兴趣的可以自己试一试。
红米 AC2100 固件: 2022-9-22_lede20220716_redmi-ac2100_MentoHUST
为了后面方便测试,这里新编译的固件同时包含了 UA2F、MentoHUST、macvlan、mwan3。
红米 AC2100 :2022-9-22_lede20220716_redmi-ac2100_all
极路由 4 增强版:2022-9-22_lede20220716_hiwifi-hc5962_all
2022.9.23
- 有够奇怪的,今天测试又可以两台路由器同时在线了。

- 目前测试的情况都还好,不过注意,使用路由器的时候,手机/电脑就不要直连校园网登录了,特别是在路由器和校园网直连之间切换的时候有可能触发“检测到代理上网行为,已被禁止上网”
针对 lede 编译的固件:
- 不再添加 Turbo ACC 及包含的模块(影响 UA2F 模块)
- 不再将防检测相关的防火墙配置预置到启动项,而是预置到防火墙自定义规则对应的配置文件中。编辑 package/lean/default-settings/files/zzz-default-settings,找到下面内容所在位置
echo 'iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53' >> /etc/firewall.user echo 'iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53' >> /etc/firewall.user echo '[ -n "$(command -v ip6tables)" ] && ip6tables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53' >> /etc/firewall.user echo '[ -n "$(command -v ip6tables)" ] && ip6tables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53' >> /etc/firewall.user
接着下一行开始添加
echo '# 防 IPID 检测' >> /etc/firewall.user echo 'iptables -t mangle -N IPID_MOD' >> /etc/firewall.user echo 'iptables -t mangle -A FORWARD -j IPID_MOD' >> /etc/firewall.user echo 'iptables -t mangle -A OUTPUT -j IPID_MOD' >> /etc/firewall.user echo 'iptables -t mangle -A IPID_MOD -d 0.0.0.0/8 -j RETURN' >> /etc/firewall.user echo 'iptables -t mangle -A IPID_MOD -d 127.0.0.0/8 -j RETURN' >> /etc/firewall.user echo '# 由于本校局域网是 A 类网,所以我将这一条注释掉了,具体要不要注释结合你所在的校园网内网类型' >> /etc/firewall.user echo '# iptables -t mangle -A IPID_MOD -d 10.0.0.0/8 -j RETURN' >> /etc/firewall.user echo 'iptables -t mangle -A IPID_MOD -d 172.16.0.0/12 -j RETURN' >> /etc/firewall.user echo 'iptables -t mangle -A IPID_MOD -d 192.168.0.0/16 -j RETURN' >> /etc/firewall.user echo 'iptables -t mangle -A IPID_MOD -d 255.0.0.0/8 -j RETURN' >> /etc/firewall.user echo 'iptables -t mangle -A IPID_MOD -j MARK --set-xmark 0x10/0x10' >> /etc/firewall.user echo '# 防时钟偏移检测' >> /etc/firewall.user echo 'iptables -t nat -N ntp_force_local' >> /etc/firewall.user echo 'iptables -t nat -I PREROUTING -p udp --dport 123 -j ntp_force_local' >> /etc/firewall.user echo 'iptables -t nat -A ntp_force_local -d 0.0.0.0/8 -j RETURN' >> /etc/firewall.user echo 'iptables -t nat -A ntp_force_local -d 127.0.0.0/8 -j RETURN' >> /etc/firewall.user echo 'iptables -t nat -A ntp_force_local -d 192.168.0.0/16 -j RETURN' >> /etc/firewall.user echo 'iptables -t nat -A ntp_force_local -s 192.168.0.0/16 -j DNAT --to-destination 192.168.1.1' >> /etc/firewall.user echo '# 通过 iptables 修改 TTL 值' >> /etc/firewall.user echo 'iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64' >> /etc/firewall.user
红米 AC2100: 20220923_lede20220716_redmi-ac2100
极路由 4 增强版: 20220923_lede20220716_hiwifi-hc5962(该路由器偶尔存在死机重启的情况,不知道是我路由器硬件的问题,还是固件问题)
Newifi R6830: 20220923_lede20220716_newifi-r6830
Phicomm K2: 20220923_lede20220716_k2(又测试了一下使用 lede,效果惨不忍睹,废弃版本)
50M 宽带分别使用上面四种路由器固件的测速:




最后一个可以明显看出ji了
2022.9.24
计划全部从 lede 转为 openwrt。
基础共有配置:
- 采用 openwrt 源码分支 v22.03.0
git clone https://github.com/openwrt/openwrt.git --depth=1 --branch=v22.03.0
- 编辑 package/base-files/files/etc/rc.local,写入
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53 iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53 # 防 IPID 检测 iptables -t mangle -N IPID_MOD iptables -t mangle -A FORWARD -j IPID_MOD iptables -t mangle -A OUTPUT -j IPID_MOD iptables -t mangle -A IPID_MOD -d 0.0.0.0/8 -j RETURN iptables -t mangle -A IPID_MOD -d 127.0.0.0/8 -j RETURN # 由于本校局域网是 A 类网,所以我将这一条注释掉了,具体要不要注释结合你所在的校园网内网类型 # iptables -t mangle -A IPID_MOD -d 10.0.0.0/8 -j RETURN iptables -t mangle -A IPID_MOD -d 172.16.0.0/12 -j RETURN iptables -t mangle -A IPID_MOD -d 192.168.0.0/16 -j RETURN iptables -t mangle -A IPID_MOD -d 255.0.0.0/8 -j RETURN iptables -t mangle -A IPID_MOD -j MARK --set-xmark 0x10/0x10 # 防时钟偏移检测 iptables -t nat -N ntp_force_local iptables -t nat -I PREROUTING -p udp --dport 123 -j ntp_force_local iptables -t nat -A ntp_force_local -d 0.0.0.0/8 -j RETURN iptables -t nat -A ntp_force_local -d 127.0.0.0/8 -j RETURN iptables -t nat -A ntp_force_local -d 192.168.0.0/16 -j RETURN iptables -t nat -A ntp_force_local -s 192.168.0.0/16 -j DNAT --to-destination 192.168.1.1 # 通过 iptables 修改 TTL 值 iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64
- 创建文件 files/root/setups,并添加可执行权限,写入
#!/bin/ash # 时区设置 uci set system.@system[0].timezone=CST-8 uci set system.@system[0].zonename=Asia/Shanghai uci commit system # WiFi 区域设置 uci set wireless.radio0.country='CN' uci set wireless.radio1.country='CN' uci commit wireless wifi # UA2F 配置 uci set ua2f.enabled.enabled=1 uci set ua2f.firewall.handle_fw=1 uci set ua2f.firewall.handle_tls=1 uci set ua2f.firewall.handle_mmtls=1 uci set ua2f.firewall.handle_intranet=1 uci commit ua2f service ua2f enable service ua2f start echo "设置完成!"
- 编辑 package/base-files/files/bin/config_generate
# 找到 set system.ntp.enable_server='0' 改为 set system.ntp.enable_server='1' # 找到 add_list system.ntp.server='0.openwrt.pool.ntp.org' # add_list system.ntp.server='1.openwrt.pool.ntp.org' # add_list system.ntp.server='2.openwrt.pool.ntp.org' # add_list system.ntp.server='2.openwrt.pool.ntp.org' 改为 add_list system.ntp.server='ntp.aliyun.com' add_list system.ntp.server='time1.cloud.tencent.com' add_list system.ntp.server='time.ustc.edu.cn' add_list system.ntp.server='cn.pool.ntp.org'
- 编辑 package/kernel/mac80211/files/lib/wifi/mac80211.sh
# 找到 set wireless.radio${devidx}.disabled=1,改为 set wireless.radio${devidx}.disabled=0 # 找到 set wireless.default_radio${devidx}.encryption=none 改为 set wireless.default_radio${devidx}.encryption=psk2 # 接着下一行添加(设置初始 WiFi 密码) set wireless.default_radio${devidx}.key=12345678
最终固件:
红米 AC2100: 20220924_openwrt22.03.0_redmi-ac2100
极路由 4 增强版: 20220924_openwrt22.03.0_hiwifi-hc5962
Newifi R6830: 20220924_openwrt22.03.0_newifi-r6830
Phicomm K2: 20220924_openwrt22.03.0_k2
刷入固件启动后,进入路由器管理 http://openwrt.lan,登录服务->终端,执行命令 ./setups 完成初始配置后即可使用。
2022.9.25
为一个校友适配的 DomyWifi DW22D(大麦),采用编译方案同 2022.9.24。


固件名:20220925-openwrt22.03.0-domiwifi-dw22d
2022.9.28
Phicomm K2p(20220928-openwrt-22.03.0-phicomm-k2p):新增固件,编译配置同 2022.9.24。
2022.9.29
新增 Newifi3 和 小米 3 Pro,编译配置同 2022.9.24,分别为:
- 20220929-openwrt-22.03.0-newifi3
- 20220929-openwrt-22.03.0-mi3pro
2022.10.1
- 在 2022.9.24 基础上,修改 files/root/setups 写入的内容,添加修改软件源的指令
#!/bin/ash # 时区设置 uci set system.@system[0].timezone=CST-8 uci set system.@system[0].zonename=Asia/Shanghai uci commit system # WiFi 区域设置 uci set wireless.radio0.country='CN' uci set wireless.radio1.country='CN' uci commit wireless wifi # UA2F 配置 uci set ua2f.enabled.enabled=1 uci set ua2f.firewall.handle_fw=1 uci set ua2f.firewall.handle_tls=1 uci set ua2f.firewall.handle_mmtls=1 uci set ua2f.firewall.handle_intranet=1 uci commit ua2f service ua2f enable service ua2f start # 将软件源修改为国内的阿里云 sed -i 's_downloads.openwrt.org_mirrors.aliyun.com/openwrt_' /etc/opkg/distfeeds.conf echo "设置完成!"
- 红米 AC2100 和极路由 4 增强版去除带宽监控器
固件名:
- 极路由 4 增强版: 20221001-openwrt-22.03.0-hiwifi-hc5962
- 红米 AC2100: 20221001-openwrt-22.03.0-redmi-ac2100
- 小米路由器 3 Pro: 20221001-openwrt-22.03.0-mi3pro
- Newifi 3: 20221001-openwrt-22.03.0-newifi3
- Phicomm K2p: 20221001-openwrt-22.03.0-k2p
2022.10.4
现在宽带似乎限制的是账号的总速度,而不是每个登录设备的速度。
刚才我电脑为了下载东西,切换了一个路由器连接,但是我室友使用的另外一个路由器,突然网络就变卡了。然后我用手机连接那个路由器测速,发现速度真的降了。然后这边我把下载限速之后,再测速,速度就上去了。
也不排除是因为我两个路由器网线连在同一个 AP 上,速度受到了影响。
另外前几天发现可以两个有线 + 一个无线登录同一个账号了
2022.10.5
突然意识到在 K2 上使用最新版的 OpenWrt 似乎不太合适,换下思路,改用旧版本,内核会更小,更为精简,或许就正常了。
这里采用 OpenWrt 19.07.10 版本
git clone https://github.com/openwrt/openwrt.git --depth=1 --branch=v19.07.10
因为这个版本的 OpenWrt 中 libnetfilter-queue 不符合 UA2F(20220902T135035)要求,编译会报错,需要进行一定的修改。所以我在安装 feeds 后,将原来的 package/libs/libnetfilter-queue 删除,然后从 OpenWrt 22.03.0 的 feeds/packages/libs/libnetfilter-queue 复制过来到 package/libs 目录下。
编辑 package/UA2F/files/ua2f.config,将 option enabled ‘0’ 改为 option enabled ‘1’,即默认启用 UA2F,刷好固件开机直接登录宽带使用就行。
Phicomm K2:20221005-openwrt-19.07.10-k2
Newifi R6830:20221005-openwrt-19.07.10-newifi-r6830(同上编译配置)
根据用户反馈,红米 AC2100 会出现死机的情况,在被检测出代理上网之前就会出现无法进入路由器管理页面的情况。
今天我测试的时候发现,在路由器一段时间内没有联入 Internet 时,也会发生死机。
然后我设置将系统日志保存到文件,以便死机再开机后能看到先前的日志内容,发现每次死机前都出现一堆下面箭头所指的内容。

后面推测是 mwan3 模块的问题,在软件包中搜索卸载掉 mwan3 和 macvlan 之后就没有出现死机的情况了。mwan3 和 macvlan 是之前测试多拨的时候添加的,macvlan 用来虚拟网卡,mwan3 用来负载均衡,主要问题应该就是 mwan3 的,不过 macvlan 留着也没啥用了,直接一起卸载了就是。
2022.10.6
针对红米 AC2100 和极路由 4 增强版进行调整,重新克隆源码进行配置编译。
不再添加 mwan3 和 macvlan,避免死机的问题。
大体编译配置同 2022.9.24,但将 /files/root/setups 改为 /files/root/start,编写内容如下:
#!/bin/ash uci set system.@system[0].timezone=CST-8 uci set system.@system[0].zonename=Asia/Shanghai uci commit system echo "已将时区设置为 Asia/Shanghai" uci set wireless.radio0.country='CN' uci set wireless.radio1.country='CN' uci commit wireless wifi echo "已将 WiFi 区域设置为中国" sed -i 's_downloads.openwrt.org_mirrors.aliyun.com/openwrt_' /etc/opkg/distfeeds.conf echo "已将软件源设置为阿里云镜像站"
修改 package/UA2F/files/ua2f.config,设置如下:
config ua2f 'enabled' option enabled '1' config ua2f 'firewall' option handle_fw '1' option handle_tls '1' option handle_intranet '1'
即默认开启 UA2F,不再需要刷机后手动启用。后面三个选项分别对应的含义:
- 自动为 UA2F 配置防火墙
- 对 443(https)端口流量也进行处理
- 对内网流量进行处理
再编辑 package/base-files/files/etc/banner,修改终端启动显示内容,添加提醒
执行 ./start 一键中国化配置(非必须)

红米 AC2100:20221006-openwrt-22.03.0-redmi-ac2100
极路由 4 增强版:20221006-openwrt-22.03.0-hiwfi-hc5962
2022.11.20
1.我测试的情况结合一位校友反馈的情况,目前 UDP 53 端口被关闭了,所以前面 2022.9.5 所说的“白嫖”方案行不通了
2.目前来说校园网在“严格度”上应该稳定下来了,刚开始启用的时候还在松紧上调整,比较严的时候可能每天都会被检测到一次,但是这系统本身也达不到预期的效果,本来说的是一个手机和一台电脑,结果有些用户出现不能同时在线的情况,又会给营业厅工作人员反馈,各种问题也很折腾工作人员。现在就比较宽松了,我这边差不多有一个月没有再出现被检测出的情况了,在此期间也没有用户反馈这个问题了。
3.在宽松的策略下,我测试可以三个设备同时登陆

4.网速方面,似乎会限制账号的总速度(宽带刚启用的时候没这种限制),最明显的现象就是我室友单独有线连接的电脑在下载东西的时候,我这边连接路由器使用的设备会严重掉速,或者我这边下载的时候他那边掉速。另一点就是关于实际速度的,不知道是不是学校限速系统有问题,我账号是 50M 的,有时候速度是正常的在这个点上,但有时候加加加,非常棒的速度。(这个是宽带一开始就有的现象)


2023.3.9
极路由 4 增强版本身是有 USB 接口的,但是考虑到一般的可能用不上,所以在尽可能简单的基础上,我没有编译 USB 支持。昨天一个朋友打算配置 USB 支持,在安装相关依赖包的过程中一直出现错误(添加 USB 支持是需要安装内核模块支持的),所以今天我在 2022.10.6 的基础上编译了新的固件,增加 USB 支持(https://blog.iyatt.com/?p=331)。
20230309-openwrt-22.03.0-hiwfi-hc5962
2023.3.14 Python 登陆脚本
去年新宽带刚开始启用的时候,我也试图写个脚本实现登陆,但是最终因为个人技术不足(不会 js,没完全搞懂登陆逻辑)以及时间不够放弃了。当时发现登陆时会对密码加密,并且和 MAC 有关联。今天有位兄弟说可以不用加密也行,我也想到当时研究时发现 POST 的数据中就有一个参数叫“passwordEncrypt”(密码加密),只是那时候以为不能设置成不加密。实际却是可以的,如果那个参数设置成 false,那么就不用考虑加密的问题,脚本登陆的实现就非常简单了。
下面是他写的 Python 代码
import requests
from urllib.parse import quote
import argparse
def login(username,provider,passwd):
url = "http://202.202.145.132/"
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240"
res = requests.get(url=url)
urlpre = res.text.split('href=\'')
url = urlpre[1].split('\'</script')
url = url[0]
referer = url.split('?')[1]
providerUrl = quote(provider)
header = {
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '955',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
# 'Cookie': '', #一定不要带Cookie,不然短时间重复访问会导致需要验证码
'Host': '10.8.2.2',
'Origin': 'http://10.8.2.2',
'Referer': url, #从请求头中获取
'User-Agent': ua #一般无需修改
}
dataLogin = {
'userId': username, #填写post请求中的账号
'password': passwd, #填写post请求中加密过的密码
'service': providerUrl, #选择网络接入方式,在post请求中有
'queryString': referer,#从post请求中复制过来即可
'operatorPwd': '', #不用填
'operatorUserId': '', #不用填
'validcode': '', #不用填
'passwordEncrypt': 'false', #不用修改
#'userIndex': '' #填写post请求中的对应字段
}
loginUrl = 'http://202.202.145.132/eportal/InterFace.do?method=login'
res = requests.post(url=loginUrl,data=dataLogin,headers=header)
res.encoding = 'utf-8'
content2 = str(res.text.encode().decode("unicode_escape").encode('raw_unicode_escape').decode())
j = content2.find('"result":"')
isOk = content2[j+10:j+17]
if (isOk[0] == 's' and isOk[1] == 'u'):
print(isOk)
else:
print(content2)
def main():
parser = argparse.ArgumentParser(description="Auto Loging in Ruijie network")
parser.add_argument('-u', type=str, default='',
help='username')
parser.add_argument('-p', type=str, default='',
help='passwd')
parser.add_argument('-n', type=str, default='',
help='provider name')
args = parser.parse_args()
try:
login(args.u,args.n,args.p)
except:
print("failed, you may already login in network or this way faded!")
if __name__ == "__main__":
main()
我在 Windows 电脑上测试过,环境:Windows 11 22H2 专业工作站版;Python 3.11.2
也在路由器上测试过,环境:Redmi AC2100;openwrt 22.03.0;Python 3.10.9

主要说一下在路由器上,安装 python3、python3-pip,然后建议换一下国内源,再用 pip 安装 requests 模块,就可以运行上面的代码。
至于具体意义,如果以后校园网对长时间登陆的设备进行强制下线,那么可以让路由器定时自动登陆。或者电脑直接使用时,配置成开机自动运行,免手动登陆。
有兴趣研究的,可以看看下面的:
我这里用 Edge 浏览器做演示,地址栏打开登陆地址 http://202.202.145.132/
按 F12 打开调试,点开网络,选择全部,勾选保留日志

然后正常登陆宽带

在调试器中看到捕捉到 InterFace.do?method=login 项
标头就是 POST 的头

负载就是 POST 的表单数据,用户名、密码等等

2023.3.16 PowerShell 登陆脚本
Windows
我写了一个 PowerShell (PS)的登陆脚本,目前主流的 Windows 10/11 系统都预装了 PS,不需要依赖第三方环境,直接就能运行
测试环境:Windows 11 22H2 专业工作站版;PowerShell 7.3.3
#!/usr/bin/env pwsh
# 使用:
# Windows: .\campus_network_login.ps1 [学号] [密码] [服务编号]
# Linux: ./campus_network_login.ps1 [学号] [密码] [服务编号]
# 服务编号:
# 0 校园内网
# 1 中国电信
# 2 中国移动
# site:https://blog.iyatt.com/?p=6815(2023.3.16 PowerShell 登陆脚本)
function login($username, $passwd, $service)
{
$url = "http://202.202.145.132/"; # 校园网认证地址
$res = Invoke-WebRequest -Uri $url -Method "GET"
if ($res.Content -like "*登录成功*") # 根据请求内容判断是否已经登陆
{
Write-Output "已登录成功,请勿重复登陆!"
exit 1
}
$urlpre = "$res".Split("href='")[1]
$url = "$urlpre".Split("'</script>") # POST 请求头 Referer 参数设置这个
$referer = "$url".Split("?")[1] # POST 请求体 queryString 参数设置这个
# POST 请求头
$headers = @{
"Accept" = "*/*"
"Accept-Encoding" = "gzip, deflate"
"Accept-Language" = "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"
"Connection" = "keep-alive"
# "Content-Length" = "940" # 浏览器调试捕获到的值是 940,但是这里设置会出现错误。这个参数是请求体的长度,不设置会自动计算
"Host" = "202.202.145.132"
"Origin" = "http://202.202.145.132"
"Referer" = $url
}
# 通过传入的数字编号,设置服务
if ($service -eq 0)
{
$service = "校园内网"
}
elseif ($service -eq 1)
{
$service = "中国电信"
}
elseif ($service -eq 2)
{
$service = "中国移动"
}
else
{
Write-Output "服务编号选择错误,请选择: `n`n`t0 校园内网`n`t1 中国电信`n`t2 中国移动`n"
exit 1
}
$service = [System.Uri]::EscapeDataString($service) # URL 编码
# POST 请求体参数
$params = [ordered]@{
"userId" = $username
"password" = $passwd
"service" = $service
"queryString" = $referer
"operatorPwd" = ""
"operatorUserId" = ""
"validcode" = ""
"passwordEncrypt" = "false" # 不加密
}
# 根据捕获的信息,ContentType 为 application/x-www-form-urlencoded; charset=UTF-8
# 则请求体需要用 URL 编码后进行发送,参数间使用 & 符号连接
$body = ""
foreach ($key in $params.Keys)
{
$value = $params[$key]
if ($body -ne "") {
$body += "&"
}
$body += [System.Uri]::EscapeDataString($key) + "=" + [System.Uri]::EscapeDataString($value)
}
# POST 地址
$loginUrl = "http://202.202.145.132/eportal/InterFace.do?method=login"
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$session.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.41" # UA
$response = Invoke-WebRequest `
-UseBasicParsing `
-Uri $loginUrl `
-Method "POST" `
-WebSession $session `
-Headers $headers `
-ContentType "application/x-www-form-urlencoded; charset=UTF-8" `
-Body $body
$decodedContent = [System.Text.Encoding]::Default.GetString([System.Text.Encoding]::GetEncoding("iso-8859-1").GetBytes($response.Content)) # 解码
$contentObject = ConvertFrom-Json $decodedContent
if ($contentObject.result -eq "success")
{
Write-Output "登陆成功!"
}
else
{
Write-Output "登陆失败!"
Write-Output $contentObject.message
}
}
###########
# 开始执行
###########
login $args[0] $args[1] $args[2]
PowerShell 默认策略可能禁止执行脚本,需要使用管理员权限打开 PowerShell 执行下面命令修改策略
Set-Executionpolicy RemoteSigned
使用格式: 其中服务编号 0 校园内网,1 中国电信,2 中国移动
.\脚本文件名.ps1 账号 密码 服务编号
Ubuntu
PowerShell 基础参考:https://blog.iyatt.com/?p=8839
这里我以 Ubuntu 为例,演示一下脚本登录
环境:Ubuntu 20.04;PowerShell 7.3.3
2023.3.16 白嫖宽带的漏洞(已堵上)
这里说一个漏洞,就是手机卡停机或者注销后,都能一直使用宽带。
去年那一学期就有人停机偶然发现可以使用,就一直白嫖。这学期返校后,上个月最后一天 28 号我把手机卡注销了,到现在为止都还继续使用。
2023.3.26 今天宿舍停了一次电,不知道学校网络机房是不是停过电,再登陆账号就提示账号不存在了。我感觉是机房停过电,再启动就刷新了。
2023.4.21
有位兄弟在扫描校园网的时候,发现有不少电脑 guest 用户开着(没有密码),还有的 Administrator 用户密码简单甚至没有,都能连上去了
还有发现学校的服务器使用类似 cqutadmin 之类的弱密码,是打算向学校的网络中心反馈
另外发现有个服务:http://202.202.145.62
这个用内网下载的速度挺快的