最近更新于 2023-09-20 14:53

本人已毕业(2023)

路由器相关测试

刷 Breed 恢复控制台:

适配的路由器:

  • 红米 AC2100(2023.9.17)
  • 极路由 4 增强版(2023.3.9)
  • Phicomm K2(2023.9.20)
  • 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

所以又有一种新的方案,通 DNS 53 端口把数据代理出去。在校外公网 IP 搭建一台服务器,通过 53 端口传输数据。理论上这种方法甚至能绕过认证登录,也就是说不办理宽带都能上网。不过估计违法了。

——————————————————————————————————————————

晚上的时候,提出这个方案的学弟联系我测试(因疫情还没返校,我是暑假留校的)。他搭建了一个 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 默认策略可能禁止执行脚本,修改参考:https://blog.iyatt.com/?p=10735

使用格式: 其中服务编号 0 校园内网,1 中国电信,2 中国移动

.\脚本文件名.ps1 账号 密码 服务编号

file file file

Ubuntu

PowerShell 基础参考:https://blog.iyatt.com/?p=8839

这里我以 Ubuntu 为例,演示一下脚本登录
环境:Ubuntu 20.04;PowerShell 7.3.3
file

2023.3.16 白嫖宽带的漏洞(已堵上)

这里说一个漏洞,就是手机卡停机或者注销后,都能一直使用宽带。

去年那一学期就有人停机偶然发现可以使用,就一直白嫖。这学期返校后,上个月最后一天 28 号我把手机卡注销了,到现在为止都还继续使用。


2023.3.26 今天宿舍停了一次电,不知道学校网络机房是不是停过电,再登陆账号就提示账号不存在了。我感觉是机房停过电,再启动就刷新了。

2023.4.21

有位兄弟在扫描校园网的时候,发现有不少电脑 guest 用户开着(没有密码),还有的 Administrator 用户密码简单甚至没有,都能连上去了 file

还有发现学校的服务器使用类似 cqutadmin 之类的弱密码,是打算向学校的网络中心反馈

另外发现有个服务:http://202.202.145.62 这个用内网下载的速度挺快的 file

2023.6.17 Windows 开机自动登录

测试环境:

  • Windows 11 专业工作站版 22H2
  • PowerShell 7.3.4

脚本

function login($username, $passwd, $service)
{
    $url = "http://202.202.145.132/" # 校园网认证地址
    $loginCount = 1 # 登录计数

    Write-Output "正在准备登录......"

    while ($true)
    {
        $res = Invoke-WebRequest -Uri $url -Method "GET"
        if ($res.StatusCode -ne 200)
        {
            Write-Output "第 $loginCount 次尝试失败,正在等待网络连接,5 秒后将重试..."
            Start-Sleep -Seconds 5
            ++$loginCount
        }
        else
        {
            break
        }
    }

    if ($res.Content -like "*登录成功*") # 根据请求内容判断是否已经登陆
    {
        Write-Output "已登录成功,请勿重复登陆!"
        Start-Sleep -Seconds 5
        exit 0
    }

    $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 "登陆成功!"
        start http://202.202.145.132
    }
    else
    {
        Write-Output "登陆失败!"
        Write-Output $contentObject.message
    }

    Write-Output "5 秒后程序退出!"
    Start-Sleep -Seconds 5
}

login 【学号】 【密码】 【服务编号】

把上面代码保存为后缀为 .ps1 的文件(最后一行填上登录信息,另外配置允许脚本执行,参考:https://blog.iyatt.com/?p=6815#toc-28 ),比如我命名为 login.ps1,路径 C:\Users\25143\login.ps1,打开注册表,进入路径 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,空白处右键新建字符串值,自己命名,然后在新建的值上右键修改。 file file file

另外要获取 PowerShell 解释器的路径,打开一个 PS 窗口,输入 $PSHOME 回车。 我是自己安装的 PowerShell 新版,结合路径,PS 绝对路径就是 D:\Program Files\PowerShell\7\pwsh.exe,如果是系统预装的就可能是 5.x,那么就是在路径后面加上 \powershell.exe

前面打开的注册表值就要填上 【PowerShell路径】 【登录脚本路径】,比如我这里

之后开机就可以实现自动执行登录脚本

代理问题 – 无法打开登录页面

file

这个是我在营业厅售后群看到问得较多的问题之一,时不时就有一个,基本上就是用梯子的,配置的设置系统代理,然后在关机的时候没有清除代理(关闭),导致开机后代理在,没法连接宽带认证页面。可以试着把梯子再开和关一次,直接点可以进系统的设置把代理关掉

登录报错说源 IP 和重定向中使用的 IP 不一致

这个也是看到问得比较多的,大概率是收藏了登录地址。打开 http://202.202.145.132 再登录就行,收藏也收藏这个地址,不要收藏浏览器打开这个地址后的链接

如果看过我前面的登录脚本的,应该就能懂了。正常登录过程会先向 http://202.202.145.132 发送 GET 请求,然后会返回一个链接(和登录环境有关,链接带有参数),这个返回的链接才是用来发送 POST 请求登录的。收藏打开后的链接就是把 GET 返回的链接收藏了,但是登录环境有变,参数不匹配的时候就会出现上面的错误

2023.6.18 自动登录配置修订

昨天写的自动登录配置方法在关机再开机后有效,但是如果是休眠恢复,睡眠唤醒等情况下就无效了,不属于开机启动的范畴,可以考虑使用计划任务,具体如下: (如果前面配置了注册表,记得删除自己创建的启动路径值) file

右侧创建任务,名称和描述自己填
file

选项卡切换到触发器,新建触发器,选解锁时(即系统登录验证成功进入桌面时)

选项卡切换到操作,新建操作,程序或脚本就选使用的 PowerShell 解释器路径,添加参数就选脚本文件的路径 file

切换到设置选项卡,如果电源处勾选了使用交流电才启动就去掉勾选,否则笔记本电脑没插电源时就不会执行任务。

然后依次点确定完成保存,即设置完成

2023.6.27 宽带自动登录教程视频

https://www.bilibili.com/video/BV1BV411u7BW/?vd_source=9453a7920e4d389964b842511f86c189

2023.8.28 失效报告

昨天晚上有人反馈说宽带登录(路由器)两三分钟就被检测出来了,不过我毕业了,也没法继续研究测试。我也不清楚他是因为没配置好没生效,还是说校园网确实加大检测了。
我考虑了一下,前面采用的方案在常规上还可以注意一点,就是 MAC 地址。不知道校园网有没有判断登录设备(打开网页)和实际获得校园网分配 IP 的设备(路由器)两者的 MAC 一致。如果有的话,一个是可以把登录设备的 MAC 复制给路由器的 WAN 口,另外一种方案就是直接在路由器上完成登录,可以使用前面的 Python 登录脚本(还有效的话)。
如果校园网启用了流量分析的话,那单单一个路由器端就无解了。得像魔法上网一样操作了,在校园网外部部署一个公网可访问的服务端,在路由器上部署客户端,连接到路由器的流量全部经过加密传输到外面的服务端,再由服务端代理上网。那就得租用公网服务器了,或者家里有公网 IP 宽带的可以部署一个服务器。但是如果使用流量分析的话,学校的服务器压力就比较大了,可能出现同时上万台设备连接使用的情况,还要分别对每台设备的流量分析,这是不小的负载,应该就只是临时使用,或者只是随机抽样检测压力就小不少。

2023.9.17 Redmi AC2100 更新

前言

我有两个大学室友考研本校,他们在使用我之前的固件的时候,在十天内就被检测到两次,我不在学校了也不清楚具体的情况。这里我又重新编译的固件,采用的当前 OpenWrt 最新稳定版,以及最新的 UA2F。没想到 UA2F 后续又推出了很多更新,现在已经支持自定义 UA 了。 file

固件包名

20230917-openwrt-22.03.5-redmi-ac2100

固件编译

采用源码版本

OpenWrt v22.03.5
UA2F v4.3.3

源码修改

创建文件 /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 "已将软件源设置为阿里云镜像站"

# 启用 UA2F
uci set ua2f.enabled.enabled=1
# 自动添加防火墙规则
uci set ua2f.firewall.handle_fw=1
# 关闭 443 端口的流量处理(通常来说,流经 443 端口的流量是加密的,因此无需处理)
uci set ua2f.firewall.handle_tls=0
# 关闭微信的流量处理(微信的流量通常是加密的,因此无需处理。这一规则在启用 nftables 时无效)
uci set ua2f.firewall.handle_mmtls=0
# 关闭内网流量处理(如果你的路由器是在内网中,且你想要处理内网中的流量,那么请启用这一选项)
uci set ua2f.firewall.handle_intranet=0
# 应用配置
uci commit ua2f
# 开机自启
service ua2f enable
# 启动 UA2F
service ua2f start
echo "完成 UA2F 设置"

编辑 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,开启 WiFi,设置初始密码

# 找到 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

编译

(只提特殊修改的)

# 编译配置
make menuconfig

路由器平台 file

启用 UA2F 使用自定义代理

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
# 内核配置(耗时)
make kernel_menuconfig V=cs -j$(nproc)

Networking support ->Networking options ->Network packet filtering framework (Netfilter) 【要先选中再进去】->Core Netfilter Configuration -> 选中:

  • Netfilter NFNETLINK interface
  • Netfilter LOG over NFNETLINK interface
  • Netfilter connection tracking support
  • Connection tracking netlink interface
  • NFQUEUE and NFLOG integration with Connection Tracking
# 下载依赖包
make download -j$(nproc) V=cs

# 编译
# 首次编译建议单线程,不要加 -j$(nproc)
make V=cs -j$(nproc)

使用提示

刷机后,进后台到终端里执行 ./start 完成初始化

2023.9.20 K2 更新

基于以前的路由器客户的需要更新固件
编译配置基于2023.9.17 Redmi AC2100 更新,但是因为 K2 只有 8M 闪存,所以主题使用的默认的,另外做了一点精简。因为手上没有 K2 的路由器所以没测试。

固件名:20230920-openwrt-22.03.5-k2

作者 IYATT-yx