OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合
🔍 0 引言
中南大学校园网限制最多三个设备(mac地址)同时在线,为了实现宿舍内网络自由,开始折腾起路由器。
本方案通过:
✅ 双网叠加负载均衡实现网速倍增
✅ 掉线自动登录认证保障稳定性
✅ VLAN技术实现单路由器双WAN口
在铁道校区学生10舍验证通过 | 峰值下载可达800Mbps+
⚙️ 1 前提条件说明
📌 网速提升原理:
- 宿舍校园网的组成分为无线和有线,测试发现无线网速明显大于座位面板接口的有线网,经检查发现是面板所接网线是百兆网线,这大大限制了有线网的使用,解决方法是从宿舍内AP使用千兆网线直连路由器即可达到网速的最大利用,单网线约400Mbps,较100Mbps的面板有线网有了很大提升。
- 通过OpenWrt路由器的VLAN和MWAN功能,可实现双网线连接和负载均衡,实现了多线程传输网速的叠加,峰值下载速度可达800Mbps以上。
📌 关键要求
- 你需要拥有至少校园网2个设备同时在线的资格,校园网限制最多三台设备同时在线,理论上拥有一个账号最多可实现三网线负载均衡,本方案中只使用两个设备资格。
- OpenWrt中的相关设置正确,并且正确运行。
🧰 2 准备工作
你要具备的能力
- 基本计算机网络知识
- 基本Linux(Openwrt路由器操作)
- 基本的动手能力和勇于尝试的精神
硬件
- 🛠️千兆路由器或者软路由(本文使用rax3000m千兆路由器刷入ImmortalWrt)
- 🔌 千兆网线
软件
- 💻路由器系统使用OpenWrt,若没有,请先学习路由器刷机相关知识(推荐恩山无线论坛)
- 📦 安装组件:VLAN(交换机)和MWAN3(负载均衡)
- 电脑软件:winSCP/Putty等传输文件和运行命令(选择你喜欢的方式就好)
3 操作
VLAN划分实现双WAN口
-
接口说明:在本路由器中,拥有一个WAN口(ImmortalWrt系统中接口名称eth1),三个LAN口(ImmortalWrt系统中合称为eth0),我们需要从LAN口中划分一个口为第二个WAN口,这里利用VLAN实现划分。
-
路由器物理WAN(eth1)在本系统中不参与VLAN划分,所以这里只显示三个LAN口 ,请根据实际情况寻找合理设置!
-
具体操作:
- 找到VlAN划分设置界面,ImmortalWrt路径为
网络 > 交换机
- 物理WAN(eth1)在系统中不参与VLAN划分,所以这里只显示三个LAN口。
- 按图中所示设置划分接口,第一行表示划分LAN2和LAN3接口为内网LAN口,第二行表示划分LAN1为第二个WAN口。
- 划分完成记得保存并应用
- 找到VlAN划分设置界面,ImmortalWrt路径为
双WAN口和LAN口接口设置
由于我们更改了VLAN的设置,还需要在接口新建一个WAN口与划分物理网口联系,同时更改LAN口对应的物理接口。
操作说明:
- LAN口设置:
LAN口默认br-lan接口,在设备设置中变更网桥接口接口eth0到vlan0.1即可
网络 > 端口 > 设备 > br-lan配置
替换物理接口
eth0
→交换机 VLAN: \"eth0.1\"
,保存。
- 新WAN口设置:
网络-接口-添加新接口
,接口按图中所示,名称指定WAN1
,协议选择DHCP客户端
,设备指定为我们之前划分的交换机 VLAN: \"eth0.2\"\"
新接口防火墙设置,分配选择wan口防火墙
。
3. 为每个WAN口配置高级设置-网关跃点
特别主意:这个值必须不同,可以仿照设置:WAN设置11
,WAN1设置为22
。
- 最终接口设置完如下:
- 接好两根网线,两个WAN都应该能获得了上层网关分配的IP地址了
4 负载均衡设置
-
通过OpenWRT面板,配置
MWAN
插件(网络-负载均衡
) -
.删除所有已有的接口和成员
-
创建接口wan和wan1
-
每个接口配置参考如下
-
创建成员w1和w2,跃点数都选1,两个宽带速率相同的话,权重均选择1即可
-
策略配置上,配置一个
balance
策略,分配两个接口w1和w2
-
规则配置上,配置一个
balanced
规则
规则配置参考如下,分配blalance
策略
-
通知配置
配置网络发生变动时,要做些什么,可配置断线后调用重连脚本,实现自动登录认证。我这里设置分别实现接口wan和wan1的断连自动登录认证,需要创建/root/wan_recovery.sh
和/root/wan1_recovery.sh
实现,后文会详细介绍登录认证脚本。(本人不怎么专业,弄两个脚本是为了独立操作,防止两个接口相隔不久掉线,同时触发一个脚本导致冲突,大佬有更好的方案欢迎评论)
if [ \"$ACTION\" = \"disconnected\" ]; then case \"$INTERFACE\" in wan) /root/wan_recovery.sh ;; wan1) /root/wan1_recovery.sh ;; esacfi
5 登录认证脚本
-
自动登录认证的原理:
通过网上很多教程分享,通过分析登录流程的网页操作,校园网登录的核心是一个get请求。
这里分享一下这段时间顺便写的windows上实现自动登录的Python脚本Barometer-2002/CSU-Student-Login: 中南大学校园网自动登录脚本,有兴趣可以去看看。 -
浏览器在登录页面,登录之前按
F12
或者右键-检查
,勾选网络-保留日志
,输入账号密码选择登录后,右侧会出现各类日志文件。
-
找到其中login开头的文件,请求url就是登录认证的核心
-
分析该请求url发现其结构如下:
# 其中的portal.csu.edu.cn也可换为10.1.1.1,也就是通过ip访问,不需要dns解析https://portal.csu.edu.cn:802/eportal/portal/login?callback=dr1004&login_method=1&user_account={{你的校园网账号}}&user_password={{校园网登录密码}}&wlan_user_ip={{对应wan口分到的IP}}&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.1.3&terminal_type=1&lang=zh-cn&v=6269&lang=zh
我们重点关注的就三个参数:
user_account
:表示校园网账号名称,不是学号,是由你的学号还有其他辅助信息(运营商等信息)共同组成,不同网络类型的账号格式如下,
假设学号为 20211234567
:
- 校园网:,0,20211234567
- 中国移动:,0,20211234567@cmccn
- 中国联通:,0,20211234567@unicomn
- 中国电信:,0,20211234567@telecomn
user_password
:是校园网登录密码,
wlan_user_ip
:表示网关分配给WAN口的IP地址
- 若想实现自动登录认证,连同
{{?}}
替换为具体的值,并通过curl发送请求即可实现,以下展示的是前文中实现wan口登录的脚本wan_recovery.sh
的内容,根据实际情况自行更改:
注意:改进解决了动态ip获取,这个脚本可以拿来测试,新脚本内容见后文“路由器重启后分配的IP变化问题”小节
#!/bin/bashsleep 3# 替换interface参数值为你建立的虚拟网卡名,我这里是WAN口对应名字是eth1,记得也要替换该WAN口获取的IPcurl -k --interface eth1 \"https://10.1.1.1:802/eportal/portal/login?callback=dr1004&login_method=1&user_account=%2C0%2C000000000%40unicomn&user_password=password&wlan_user_ip=100.69.194.226&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.1.3&terminal_type=1&lang=zh-cn&v=1253&lang=zh\"
类似的:wan1_recovery.sh
如下,两个文件的网口名称不同,IP不同,其他比如账号密码什的可以相同,也可以用不同的账号
#!/bin/bashsleep 3curl -k --interface eth0.2 \"https://10.1.1.1:802/eportal/portal/login?callback=dr1004&login_method=1&user_account=%2C0%2C000000000%40unicomn&user_password=password&wlan_user_ip=100.69.181.231&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.1.3&terminal_type=1&lang=zh-cn&v=1253&lang=zh\"
-
测试方法:
你可以直接复制一段curl命令到路由器的命令行运行,观察校园网后台用户自助服务系统登录和mac绑定情况测试登录情况,测试登录命令有效,你也可以在电脑命令行上测试命令。后台在线信息
mac绑定情况
还可以在路由器观察两个接口的在线状态:
命令无问题,可以将两个脚本文件放到/root目录下,检查和保存所有配置,重启路由测试效果。
🛠️ 6 故障排除
路由器重启后负载均衡显示接口禁用问题
在我测试过程中出现,重启后两个接口显示禁用,原因是接口配置还没加载完MWAN就启动了,可以通过重启MWAN服务恢复,较彻底解决方法:设置MWAN开启自启动顺序到最后,等待网口加载完后启动就不会出错了。
启动顺序查看:
可通过编辑启动脚本更改启动优先级,编辑/etc/init.d/mwan3,START改成99,优先级最后启动。
路由器重启初始化登录问题
尽管我们设置了负载均衡断线后触发自动重登,但是路由器重启后等待不一定触发重登,所以我准备采用路由器重启后,便自动进行一遍登录操作,这里通过设置本地启动脚本实现:
本地启动脚本:
bash# 等待网络初始化完成sleep 10# 后台运行首次登录操作/root/unsafe_login.sh &exit 0
新建/root/unsafe_login.sh文件,编辑内容如下~~,也就是之前两个登陆命令放到一起~~ ,加了动态ip,丰富了下内容:
unsafe_login.sh:
#!/bin/bash# OpenWrt多接口自动认证脚本# 配置区域 - 根据实际情况修改这些变量###################################################interfaces=(\"eth1\" \"eth0.2\") # 需要认证的网络接口username=\"000000000@unicomn\" # 认证账号(格式改成学号@运营商代号)password=\"password\" # 认证密码auth_server=\"10.1.1.1:802\" # 认证服务器地址,不变#################################################### 构造基础认证URL,其他学校可自行更改认证地址和具体的指令base_url=\"https://${auth_server}/eportal/portal/login?callback=dr1004&login_method=1&user_account=%2C0%2C${username}&user_password=${password}&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.1.3&terminal_type=1&lang=zh-cn&v=1253&lang=zh\"# 获取接口IP函数(仅使用ifconfig)get_interface_ip() { local iface=$1 # 使用ifconfig获取IP ifconfig \"$iface\" 2>/dev/null | awk \'/inet / {print $2}\' | cut -d \':\' -f2}# 主循环for interface in \"${interfaces[@]}\"; do # 获取IP地址 ip_address=$(get_interface_ip \"$interface\") if [ -z \"$ip_address\" ]; then continue fi echo \"$interface (IP: $ip_address)\" # 构造认证URL auth_url=\"${base_url}&wlan_user_ip=${ip_address}\" # 执行认证并捕获响应 response=$(curl -k -s --interface \"$interface\" \"$auth_url\") echo \"$response\" # 添加延迟避免请求过快 sleep 2done
三个脚本:
路由器重启后分配的IP变化问题
偷了个懒,没写动态获取WAN口IP,这会导致动态IP变化后,需要更新登录命令,这里有兴趣的可以自己改进脚本命令
有同学问了,还是改进一下,加入自动获取ip,改进后三个脚本如下:
unsafe_login.sh:
#!/bin/bash# OpenWrt多接口自动认证脚本# 配置区域 - 根据实际情况修改这些变量###################################################interfaces=(\"eth1\" \"eth0.2\") # 需要认证的网络接口username=\"000000000@unicomn\" # 认证账号(格式改成学号@运营商代号)password=\"password\" # 认证密码auth_server=\"10.1.1.1:802\" # 认证服务器地址,不变#################################################### 构造基础认证URL,其他学校可自行更改认证地址和具体的指令base_url=\"https://${auth_server}/eportal/portal/login?callback=dr1004&login_method=1&user_account=%2C0%2C${username}&user_password=${password}&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.1.3&terminal_type=1&lang=zh-cn&v=1253&lang=zh\"# 获取接口IP函数(仅使用ifconfig)get_interface_ip() { local iface=$1 # 使用ifconfig获取IP ifconfig \"$iface\" 2>/dev/null | awk \'/inet / {print $2}\' | cut -d \':\' -f2}# 主循环for interface in \"${interfaces[@]}\"; do # 获取IP地址 ip_address=$(get_interface_ip \"$interface\") if [ -z \"$ip_address\" ]; then continue fi echo \"$interface (IP: $ip_address)\" # 构造认证URL auth_url=\"${base_url}&wlan_user_ip=${ip_address}\" # 执行认证并捕获响应 response=$(curl -k -s --interface \"$interface\" \"$auth_url\") echo \"$response\" # 添加延迟避免请求过快 sleep 2done
其余两个脚本复制粘贴这个脚本,将其中的 interfaces=(\"eth1\" \"eth0.2\") # 需要认证的网络接口
,改成对应的单独的接口就好, interfaces=(\"eth1\") # 需要认证的网络接口
和 interfaces=(\"eth0.2\") # 需要认证的网络接口
📊 7 效果验证
连接WIFI,利用测速软件测试网速
我这里用的是华为的花瓣测速app,你也可以测试其他网页或者软件,
网速效果:
结语
写本文时暂未遇到其他问题,路由器重启之后顺利触发首次登录,接口显示在线,在校园网后台注销账号或者其他断线问题后,接口断线触发重登,并恢复登录状态,至此,你的校园网网络速度和稳定性均得到了极大提升,省去了重登和网络卡顿的烦恼。
2025/7/14 更新
改进脚本,加入了自动获取ip
参考:使用MacVLAN和MWAN实现中南大学校园网多拨提速