> 技术文档 > OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合


🔍 0 引言

中南大学校园网限制最多三个设备(mac地址)同时在线,为了实现宿舍内网络自由,开始折腾起路由器。
本方案通过:

✅ 双网叠加负载均衡实现网速倍增
✅ 掉线自动登录认证保障稳定性
✅ VLAN技术实现单路由器双WAN口

OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合
在铁道校区学生10舍验证通过 | 峰值下载可达800Mbps+

![[Screenshot_20250711_153505(1).jpg]]

⚙️ 1 前提条件说明

📌 网速提升原理:

  1. 宿舍校园网的组成分为无线和有线,测试发现无线网速明显大于座位面板接口的有线网,经检查发现是面板所接网线是百兆网线,这大大限制了有线网的使用,解决方法是从宿舍内AP使用千兆网线直连路由器即可达到网速的最大利用,单网线约400Mbps,较100Mbps的面板有线网有了很大提升。
  2. 通过OpenWrt路由器的VLAN和MWAN功能,可实现双网线连接和负载均衡,实现了多线程传输网速的叠加,峰值下载速度可达800Mbps以上。

📌 关键要求

  1. 你需要拥有至少校园网2个设备同时在线的资格,校园网限制最多三台设备同时在线,理论上拥有一个账号最多可实现三网线负载均衡,本方案中只使用两个设备资格。
  2. OpenWrt中的相关设置正确,并且正确运行。

🧰 2 准备工作

你要具备的能力

  1. 基本计算机网络知识
  2. 基本Linux(Openwrt路由器操作)
  3. 基本的动手能力和勇于尝试的精神

硬件

  1. 🛠️千兆路由器或者软路由(本文使用rax3000m千兆路由器刷入ImmortalWrt)
  2. 🔌 千兆网线

软件

  1. 💻路由器系统使用OpenWrt,若没有,请先学习路由器刷机相关知识(推荐恩山无线论坛)
  2. 📦 安装组件:VLAN(交换机)和MWAN3(负载均衡)
  3. 电脑软件:winSCP/Putty等传输文件和运行命令(选择你喜欢的方式就好)

3 操作

VLAN划分实现双WAN口

  1. 接口说明:在本路由器中,拥有一个WAN口(ImmortalWrt系统中接口名称eth1),三个LAN口(ImmortalWrt系统中合称为eth0),我们需要从LAN口中划分一个口为第二个WAN口,这里利用VLAN实现划分。

  2. 路由器物理WAN(eth1)在本系统中不参与VLAN划分,所以这里只显示三个LAN口 ,请根据实际情况寻找合理设置!OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

  3. 具体操作:

    1. 找到VlAN划分设置界面,ImmortalWrt路径为网络 > 交换机
    2. 物理WAN(eth1)在系统中不参与VLAN划分,所以这里只显示三个LAN口。
    3. 按图中所示设置划分接口,第一行表示划分LAN2和LAN3接口为内网LAN口,第二行表示划分LAN1为第二个WAN口。
    4. 划分完成记得保存并应用

双WAN口和LAN口接口设置

由于我们更改了VLAN的设置,还需要在接口新建一个WAN口与划分物理网口联系,同时更改LAN口对应的物理接口。
操作说明:

  1. LAN口设置:
    LAN口默认br-lan接口,在设备设置中变更网桥接口接口eth0到vlan0.1即可
    网络 > 端口 > 设备 > br-lan配置
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合
    替换物理接口
    eth0交换机 VLAN: \"eth0.1\",保存。
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合
  2. 新WAN口设置:
    网络-接口-添加新接口,接口按图中所示,名称指定WAN1,协议选择DHCP客户端,设备指定为我们之前划分的交换机 VLAN: \"eth0.2\"\"
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合
新接口防火墙设置,分配选择wan口防火墙
OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合
3. 为每个WAN口配置高级设置-网关跃点
特别主意:这个值必须不同,可以仿照设置:WAN设置11,WAN1设置为22
OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

  1. 最终接口设置完如下:
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合
  2. 接好两根网线,两个WAN都应该能获得了上层网关分配的IP地址了

4 负载均衡设置

  1. 通过OpenWRT面板,配置MWAN插件(网络-负载均衡

  2. .删除所有已有的接口和成员

  3. 创建接口wan和wan1
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

  4. 每个接口配置参考如下
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

  5. 创建成员w1和w2,跃点数都选1,两个宽带速率相同的话,权重均选择1即可
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

  6. 策略配置上,配置一个balance策略,分配两个接口w1和w2
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

  7. 规则配置上,配置一个balanced规则
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合
    规则配置参考如下,分配blalance策略
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

  8. 通知配置
    配置网络发生变动时,要做些什么,可配置断线后调用重连脚本,实现自动登录认证。我这里设置分别实现接口wan和wan1的断连自动登录认证,需要创建/root/wan_recovery.sh/root/wan1_recovery.sh实现,后文会详细介绍登录认证脚本。(本人不怎么专业,弄两个脚本是为了独立操作,防止两个接口相隔不久掉线,同时触发一个脚本导致冲突,大佬有更好的方案欢迎评论)
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

if [ \"$ACTION\" = \"disconnected\" ]; then case \"$INTERFACE\" in wan) /root/wan_recovery.sh ;; wan1) /root/wan1_recovery.sh ;; esacfi

5 登录认证脚本

  1. 自动登录认证的原理:
    通过网上很多教程分享,通过分析登录流程的网页操作,校园网登录的核心是一个get请求。
    这里分享一下这段时间顺便写的windows上实现自动登录的Python脚本Barometer-2002/CSU-Student-Login: 中南大学校园网自动登录脚本,有兴趣可以去看看。

  2. 浏览器在登录页面,登录之前按F12或者右键-检查,勾选网络-保留日志,输入账号密码选择登录后,右侧会出现各类日志文件。
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

  3. 找到其中login开头的文件,请求url就是登录认证的核心
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

  4. 分析该请求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地址

  1. 若想实现自动登录认证,连同{{?}}替换为具体的值,并通过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\"
  1. 测试方法:
    你可以直接复制一段curl命令到路由器的命令行运行,观察校园网后台用户自助服务系统登录和mac绑定情况测试登录情况,测试登录命令有效,你也可以在电脑命令行上测试命令。

    后台在线信息
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合
    mac绑定情况
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

    还可以在路由器观察两个接口的在线状态:
    OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

命令无问题,可以将两个脚本文件放到/root目录下,检查和保存所有配置,重启路由测试效果。

🛠️ 6 故障排除

路由器重启后负载均衡显示接口禁用问题

在我测试过程中出现,重启后两个接口显示禁用,原因是接口配置还没加载完MWAN就启动了,可以通过重启MWAN服务恢复,较彻底解决方法:设置MWAN开启自启动顺序到最后,等待网口加载完后启动就不会出错了。

启动顺序查看:
OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合
可通过编辑启动脚本更改启动优先级,编辑/etc/init.d/mwan3,START改成99,优先级最后启动。
OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

路由器重启初始化登录问题

尽管我们设置了负载均衡断线后触发自动重登,但是路由器重启后等待不一定触发重登,所以我准备采用路由器重启后,便自动进行一遍登录操作,这里通过设置本地启动脚本实现:
OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合
本地启动脚本

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

三个脚本:
OpenWrt路由器实现中南大学校园网双网叠加和自动认证_openwrt双wan聚合

路由器重启后分配的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实现中南大学校园网多拨提速