我目前所在的学校校园网单端限速 500Mbps,确实已经足够高了,不过依旧限制两个客户端。由于我有多台设备、IoT设备,数量远超限制,因此需要考虑使用一些手段。
此方法理论适用于所有高校的校园网。
1. 方案构思
1.1 利用负载均衡实现带宽叠加
首先,通过实验发现,判断是什么类型的设备是依靠浏览器自己识别,然后通过参数传递给认证网关,并且认证设备靠上游网关获取到的 MAC 地址区分,也就是说完全可以使用路由器接入校园网,让下游设备完成登陆认证,这样认证网关认证的是路由器的 MAC 地址。
接下来,如果是简单的认证,无法实现突破限速,我这里的校园网允许一个账号登陆一个手机端一个电脑端,因此我们可以通过多播的方式,让软路由虚拟出两个网口,并通过 MWan3 负载均衡,这样就能在一定程度上实现突破 500Mbps 限速。
为什么说一定程度上呢?原因如下:
- 由于实现方式是负载均衡,这种方式仅仅是将不同请求分发给不同的网口进行通信,也就是说,单个 TCP 连接就只能一直使用同一个网口进行通信,也就是说速度无法突破 500Mbps。
- 假设每个请求足够小,或者应用层使用多线程通信,那么就能利用上多个网口的带宽,实现带宽叠加。
1.2 利用网络代理实现“异地”组网
上文提到的负载均衡这种方式会带来一个问题,由于我这里校园网的账号最多就只能登陆两个设备,如果两个设备都交给软路由登陆了,实验室的网络解决了,宿舍的网络又怎么办呢?这种情况我第一时间想到的是异地组网的方式。
我这里宿舍和实验室里的网络设备互相可以访问,比如可以在实验室直连 IP 远程宿舍里的电脑,也可以在宿舍直连 IP 访问实验室里的服务器,所以两边软路由可以直连。
并且,这里的校园网连接之后会下发一个 DNS 服务器地址,这个 DNS 服务器在不认证的情况下也能查询 DNS,我们甚至可以让出网设备使用 DDNS 记录下自己的 IP,让其他设备用固定的域名直连出网节点。
最后,我们把一个节点设置为 exit-node,让其他所有节点通过 exit-node 出网,这样就能实现让所有设备都能上网了。
2. 方案实践
首先我们需要至少两台软路由,即宿舍一台、实验室一台。如果你还有其他设备在不同的地理位置,则按需增加软路由数量。
我这里选择把出网节点放在实验室,也就是说宿舍的软路由通过实验室的软路由出网。
本文基于 OpenWrt 24.10.6 编写。我的校园网环境:
- 允许一部手机、一台电脑,共两个端登陆校园网;
- 上游下发的 DNS 服务器在不登陆的情况下也能查询结果;
- 宿舍和实验室的 IP 可以直连。
2.1 前置条件
出网节点 OpenWrt 依赖:
- luci-app-easytier
- easytier
- luci-app-ddns-go(可选)
- luci-app-mwan3(可选,添加后可实现突破单客户端限速)
- kmod-macvlan(若出网节点的软路由硬件包含多个网口,且环境条件允许插多根网线时,此依赖可选)
其他节点 OpenWrt 依赖:
2.2 配置出口节点
如果你的校园网不支持多个端登陆,则只需要创建一个 wan 开头的“设备”、“接口”,然后跳过配置 MWan3,认证网络步骤也无需禁用所有 WAN 口、单独启用再认证等繁琐步骤,直接登陆即可,这里不展开说明。
2.2.1 创建虚拟 WAN 口
如果你的出网节点的软路由硬件包含多个网口,且环境条件允许插多根网线,那这一步可以省略,直接插很多根网线,然后把这些网口设置成 wan 口就行了,这里就不展开说明了,读者自行研究。
我这里的设备,eth1 接校园网网口,eth0 接下游 AP。
前往“网络”->“接口”:
- 在“接口”选项卡中,删除默认的
wan和wan6口,点击“保存并应用”。 - 在“设备”选项卡中,取消配置
wan设备,点击“保存并应用”。 -
在“设备”选项卡中,添加设备配置
wan_a:- 设备类型:MAC VLAN
- 基础设备:
eth1(接了校园网的网口) - 模式:桥接
- 设备名称:
wan_a(你也可以自定义名称) - MAC 地址:(随便搜一个随机 MAC 地址生成器生成一个)
添加设备配置
wan_b:- 设备类型:MAC VLAN
- 基础设备:
eth1(接了校园网的网口) - 模式:桥接
- 设备名称:
wan_b(你也可以自定义名称) - MAC 地址:(随机 生成一个)
如果你的校园网允许的终端数量大于 2,则还可以继续创建 wan 设备。
添加设备配置
lan_easytier:- 设备类型:MAC VLAN
- 基础设备:
eth0(接了下游 AP 的网口) - 模式:桥接
- 设备名称:
lan_easytier(你也可以自定义名称) - MAC 地址:(随机生成一个)
以上所有设备 MAC 地址需互不相同。
-
在“接口”选项卡中,添加新接口
wan_a:- 名称:
wan_a(你也可以自定义名称) - 协议:DHCP 客户端
- 设备:
wan_a - DHCP 请求时发送的主机名:不发送主机名(可选,改成这个之后,风险更低)
- 高级设置->网关跃点:2
- 防火墙设置->创建/分配防火墙区域:wan
添加新接口
wan_b:- 名称:
wan_b(你也可以自定义名称) - 协议:DHCP 客户端
- 设备:
wan_b - DHCP 请求时发送的主机名:不发送主机名(可选,改成这个之后,风险更低)
- 高级设置->网关跃点:2
- 防火墙设置->创建/分配防火墙区域:wan
如果你的校园网允许的终端数量大于 2,则还可以继续创建 wan 接口。
添加新接口
lan_easytier:- 名称:
lan_easytier(你也可以自定义名称) - 协议:DHCP 客户端
- 设备:
lan_easytier - DHCP 请求时发送的主机名:不发送主机名(可选,改成这个之后,风险更低)
- 网关跃点:1(需小于所有 wan 口的网关跃点,这样 easytier 组网的流量才能进过这个接口)
- 防火墙设置->创建/分配防火墙区域:wan
点击“保存并应用”。
- 名称:
2.2.2 配置 MWan3
如果你的校园网仅允许一个端,则跳过这一步。
前往“网络”->“MiltiWAN 管理器”:
-
在“接口”选项卡中,删除所有已存在的接口。添加接口
wan_a(名称需与上一节中你设置的 wan 接口名称相同):- 已启用:勾选
- 跟踪的主机或 IP 地址:(添加上游默认网关地址,可以用电脑直连校园网,用 ipconfig 命令查看默认网关的地址,具体方法读者自行研究)
添加接口
wan_b(名称需与上一节中你设置的 wan 接口名称相同):- 已启用:勾选
- 跟踪的主机或 IP 地址:(添加上游默认网关地址,可以用电脑直连校园网,用 ipconfig 命令查看默认网关的地址,具体方法读者自行研究)
点击“保存并应用”。
-
在“成员”选项卡中,删除所有已存在的成员。添加成员
member_a(你也可以自定义名称):- 接口:
wan_a - 跃点数:1
- 权重(Weight):1
添加成员
member_b(你也可以自定义名称):- 接口:
wan_b - 跃点数:1
- 权重(Weight):1
点击“保存并应用”。
- 接口:
-
在“策略”选项卡中,删除所有已存在的策略。添加策略
easytier:- 使用的成员:添加第 2 步中添加的所有成员。
- 备用成员:不可达(拒绝)
点击“保存并应用”。
-
在规则中,删除所有已存在的规则。添加规则
easytier:- IP协议版本:IPv4 和 IPv6
- 分配的策略:
easytier(第 3 步中创建的策略)
点击“保存并应用”。
此时你的路由器已经能实现负载均衡了。
2.2.3 认证网络
回到“网络”->“接口”:
- “停止”接口
wan_a、wan_b…(即所有wan开头的接口)。 - “重启”接口
wan_a,使用电脑登陆校园网,登陆成功后“停止”接口wan_a。 - “重启”接口
wan_b,使用手机登陆校园网(可以电脑浏览器开 F12,开启模拟手机设备),登陆成功后“停止”接口wan_b。 - “重启”接口
wan_a、wan_b…(即所有wan开头的接口)。
使用浏览器登陆的时候,尽量使用无痕窗口、隐身模式等。
此时,你的软路由应该能实现叠加校园网两个端的速度了。
当然速度上限取决于你连接校园网使用的物理网口的协商速度,如果你的环境条件允许插很多根网线,那么速度上限就是这些网线协商速度的叠加。
2.2.4 配置 DDNS
如果你的校园网跟我的一样,上游下发的 DNS 服务器在不登陆的情况下可以查询到结果,并且你有自己的域名,则强烈建议配置 DDNS,这样能大幅简化组网流程。
这一步就是配置 DDNS-GO 监听接口 lan_easytier,把接口拿到的 IP 解析到你的域名上,详细配置步骤不再展开说明。
2.2.5 配置 EasyTier
前往“VPN”->“EasyTier”,在“EasyTier配置”中:
-
在“常规设置”选项卡中:
- 启用:勾选
- 网络名称:自定义。
- 网络密钥:自定义。
- 接口IPV4地址:自定义,例如
172.16.0.1/24。 - 子网代理:填写当前网络的子网地址,例如
192.168.6.0/24。 - 主机名:自定义。
-
在“高级设置”选项卡中:
- 启用出口节点:勾选
- 启用私有模式:勾选(可选,但建议勾选)
- 点击“保存并应用”。
其他选项按需配置。
2.2.6 测试出口节点
至此,你的出口节点就算配置完成了,可以在出口节点的网络中测速,测试一下网速是否有叠加,推荐使用百度超级会员、迅雷 SVIP 等下载文件测速(真不是广,好多测速软件都不行,测不出速度上限)。
如果网速没有叠加,可以重新尝试”认证网络“步骤,如果还是不行,可以把几个 wan 口换一个 MAC 地址再尝试认证。
如果还是不行,那我没招了(摊手)。
2.3 配置子节点
2.3.1 初始化 WAN 口
这一步的作用是仅使用 IPv4,配合出网节点。如果你出网节点配置的协议是“DHCPv6 客户端”,那这里就删除
wan保留wan6,这里不展开说明,读者自行研究。
- 在“接口”选项卡中,删除默认的
wan6口,点击“保存并应用”。
2.3.2 配置 EasyTier
前往“VPN”->“EasyTier”,在“EasyTier配置”中:
-
在“常规设置”选项卡中:
- 启用:勾选
- 网络名称:同出网节点配置。
- 网络密钥:同出网节点配置。
- 启用DHCP:勾选。
- 接口IPV4地址:留空。
- 对等节点:添加
udp://<exit-node>:11010(其中<exit-node>是出网节点lan_easytier接口的 IP 地址,或你设置的 DDNS 域名),也可以使用 tcp 等协议,按你的喜好来。 - 子网代理:填写当前网络的子网地址,例如
192.168.7.0/24。 - 主机名:自定义。
-
在“高级设置”选项卡中:
- 出口节点地址:添加出口节点的“接口IPV4地址”
- 启用私有模式:勾选(可选,但建议勾选)
- 点击“保存并应用”。
其他选项按需配置。
2.3.3 添加路由规则
前往“网络”->“路由”,在“静态 IPv4 路由”中:
-
添加规则(手动排序到第一条):
- 接口:
wan - 路由类型:unicast
- 目标:出口节点所在网段。
- 网关:子节点所在网络的默认网关地址。
- 接口:
-
(如果你不用 DDNS,则不需要添加这一条)添加规则(手动排序到第二条):
- 接口:
wan - 路由类型:unicast
- 目标:上游下发的 DNS 地址。
- 网关:子节点所在网络的默认网关地址。
- 接口:
-
添加规则(手动排序到第三条):
- 接口:
EasyTier - 路由类型:unicast
- 目标:
0.0.0.0/0
- 接口:
2.3.4 劫持 DNS 转发到出网节点
这一步是为了防止 DNS 泄漏,可选,但推荐执行。
前往“服务”->“MosDNS”:
-
在“基本选项”选项卡中:
- 启用:勾选
- DNS 转发:勾选
- DNS 重定向:勾选
- 远程 DNS 服务器:添加出口节点的“接口IPV4地址”
2.3.5 测试子节点
此时,你的子节点已经能通过出网节点上网了,可以访问互联网测试是否无需登陆也能访问互联网。