OpenWrt 双宽带负载均衡:mwan3 配置实战
家里装了两条宽带,结果第二条常年闲置吃灰?很多人以为双宽带就是"一条断了另一条顶上",其实玩好了还能让两条线路同时出力,下载更快、游戏更稳。本文就以 OpenWrt 的 mwan3 为例,从零开始把双宽带负载均衡配通,全程有验证步骤,跟着做就行。
双宽带的两种玩法:叠加还是主备
先想清楚你要什么。双宽带有两种基本用法,mwan3 都能实现:
| 玩法 | 效果 | 适合场景 |
|---|---|---|
| 负载均衡(叠加) | 两条线路同时跑,总带宽接近两者之和 | 多人同时上网、下载、看视频 |
| 故障转移(主备) | 平时只用主线,主线断了自动切备线 | 对稳定性要求高、不差那点带宽 |
注意一个常见误解:负载均衡不是让单个下载任务的速度翻倍。一个 TCP 连接只走一条线路,叠加效果体现在"多任务并发"上——比如一台电脑下载、一台手机看视频,mwan3 会把它们分到不同线路。
mwan3 的四个核心概念,一句话讲清
mwan3 的配置看起来层层嵌套,其实只有四个概念,理顺了就通了:
| 概念 | 一句话解释 |
|---|---|
| 接口(Interface) | 你的物理宽带线路,如 wan、wanb,mwan3 会定时检测它通不通 |
| 成员(Member) | 给接口包一层"权重和优先级"的外衣,决定它在策略里分量多重 |
| 策略(Policy) | 一组按权重排好的成员名单,定义流量怎么在多条线路间分配 |
| 规则(Rule) | "什么样的流量用哪个策略",比如游戏流量走策略 A、其他走策略 B |
数据包的旅程是:规则 → 策略 → 成员 → 接口。记不住就背这条链。
准备工作:安装 mwan3
SSH 登录路由器,先安装 mwan3 及 LuCI 界面:
opkg update
opkg install mwan3 luci-app-mwan3
/etc/init.d/mwan3 enable
装完后 LuCI 菜单里会出现"网络 → 负载均衡"。mwan3 依赖 iptables-mod-conntrack-extra 等内核模块,一般会自动装好,如果启动报错缺模块,再单独 opkg install 补上。
另外确认两条宽带都已经拨号成功,在"网络 → 接口"里能看到 wan 和 wanb(名字可能不同)都拿到了 IP。如果第二条线还没配好,先去把 PPPoE 或 DHCP 配通,这是 mwan3 的前置条件。
步骤一:给两个 WAN 接口设置 metric
mwan3 用接口的 metric 值判断优先级。编辑 /etc/config/network,给两个 wan 接口加上 metric:
config interface 'wan'
option proto 'pppoe'
option username '你的宽带账号'
option password '你的宽带密码'
option metric '10'
config interface 'wanb'
option proto 'dhcp'
option metric '20'
metric 数字越小优先级越高。想做负载均衡,两条线路的 metric 要设成一样(比如都是 10);想做主备,才让主线 metric 更小。改完重启网络:
/etc/init.d/network restart
顺带一提:有些地区光猫默认是路由模式,想让 OpenWrt 直接拨号需要改桥接,具体以当地运营商政策为准,改之前先确认你的宽带账号密码。
步骤二:创建成员(Member)
成员是"接口 + 权重"的组合。在"网络 → 负载均衡 → 成员"里新建两个:
| 成员名 | 绑定接口 | Metric | Weight(权重) |
|---|---|---|---|
| wan_m1_w1 | wan | 1 | 1 |
| wanb_m1_w1 | wanb | 1 | 1 |
Metric 决定优先级(数字小的先用),Weight 决定同优先级下的流量比例。比如两条都是 500M 宽带,权重都设 1 就是五五开;如果一条 1000M 一条 200M,可以把权重设为 5 和 1,让流量按带宽比例分配。权重不是一成不变的,上线后观察一周两条线路的实际负载,如果某条线长期空闲就调大它的权重,找到最适合你家用网习惯的比例。
对应的配置文件写法(/etc/config/mwan3):
config member 'wan_m1_w1'
option interface 'wan'
option metric '1'
option weight '1'
config member 'wanb_m1_w1'
option interface 'wanb'
option metric '1'
option weight '1'
步骤三:创建策略(Policy)
策略就是把成员排成名单。建两个常用策略:
1. balanced(负载均衡):两个成员都放进来,权重决定比例。
config policy 'balanced'
option last_resort 'unreachable'
list use_member 'wan_m1_w1'
list use_member 'wanb_m1_w1'
2. wan_only(主备/故障转移):只放主线成员,备线成员 metric 设大一档:
config member 'wanb_m2_w1'
option interface 'wanb'
option metric '2'
option weight '1'
config policy 'wan_only'
option last_resort 'unreachable'
list use_member 'wan_m1_w1'
list use_member 'wanb_m2_w1'
last_resort 设为 unreachable 表示所有成员都挂了就直接拒绝,避免流量黑洞。
步骤四:配置规则(Rule),把流量分到策略上
规则决定"什么流量走哪个策略"。mwan3 自带一条 default_rule,把默认策略指向 balanced 即可让全屋流量参与均衡。在此基础上加两条实用规则:
按源 IP 分流:比如孩子的学习机固定走 wanb,避免跟你的主力线路抢带宽:
config rule 'kid_device'
option src_ip '192.168.1.100'
option proto 'all'
option use_policy 'wanb_only'
按目标端口分流:游戏流量对延迟敏感,固定走延迟更低的那条线:
config rule 'game_low_latency'
option dest_port '27015,27016'
option proto 'udp'
option use_policy 'wan_only'
规则是从上往下匹配的,越具体的规则放越上面。每改完一次配置,执行:
mwan3 restart
验证与排障:mwan3 status 是你的好朋友
配置完先看状态:
mwan3 status
正常应该看到两个接口都是 online,并列出各自的策略和权重。接着做三个验证:
- 连通性:
ping -I pppoe-wan 223.5.5.5和ping -I pppoe-wanb 223.5.5.5分别走两条线 ping,看都通不通。 - 均衡效果:多开几个下载任务,用
mwan3 status观察active连接是否分布在两个接口上。 - 故障转移:拔掉主线网线,等约 30 秒(检测间隔),看状态是否变成备线 online、主线 offline,再插回去看是否恢复。
常见坑:
- 接口一直
offline:检查/etc/config/network里两个 wan 的 metric 是否都已设置,mwan3 靠 metric 识别多线。 - 规则不生效:确认规则顺序,具体的放前面;确认
mwan3 restart已执行。 - 某些网站登录掉线:看下一节的粘性规则。
注意事项:银行、支付类网站要用粘性规则
https 的银行、证券、支付网站会对"同一个会话中途换 IP"非常敏感,负载均衡可能导致频繁掉登录。解决办法是给这类流量加粘性(sticky)规则,让同一内网 IP 的连接在一段时间内固定走一条线:
config rule 'https_sticky'
option proto 'tcp'
option dest_port '443'
option sticky '1'
option timeout '600'
option use_policy 'balanced'
timeout 600 表示 10 分钟内同一来源的 443 流量都走第一次选定的线路。这样既保留了均衡,又不影响网银体验。
另外建议把双宽带环境下的 DNS 统一设为公共 DNS(如 223.5.5.5、119.29.29.29),而不是用运营商下发的 DNS。原因是运营商 DNS 往往只对自家线路的解析做优化,另一条线路用它解析可能拿到绕路的结果。统一用公共 DNS,两条线路的解析质量才一致,分流规则的效果也更可预测。
进阶:mwan3 的线路检测机制调优
mwan3 靠 mwan3track 进程定时 ping 检测目标来判断线路通断。默认参数对大多数家庭够用,但了解下面几个配置项,排障时会省很多时间:
| 参数 | 含义 | 建议值 |
|---|---|---|
| track_ip | 检测目标 IP | 运营商网关或国内公共 DNS |
| interval | 检测间隔 | 20 秒左右 |
| reliability | 判离线前允许的失败次数 | 2~3 次 |
| timeout | 单次 ping 超时 | 4 秒 |
三条调优经验:
- 检测 IP 别选太远的目标:默认的国外 IP 在国内可能丢包误判,换成运营商网关或
223.5.5.5这类国内公共 DNS 更准; - 检测间隔别设太短:5 秒 ping 一次在性能弱的设备上是负担,家庭用 20 秒完全够用;
- 两条线用不同的 track_ip:如果双拨同一运营商、两个接口检测同一个 IP,一次网络抖动可能把两条线同时判离线,分开检测更稳。
改完执行 mwan3 restart,再用 mwan3 status 观察几分钟,确认没有频繁的 online/offline 跳变,检测机制就算调稳了。
总结
mwan3 的双宽带配置可以浓缩成一条链:接口设 metric → 成员定权重 → 策略排名单 → 规则分流量,最后 mwan3 status 验证。建议先配 balanced 跑几天观察,再按需加游戏、网银这类精细规则。双宽带的钱已经花了,别让第二条线继续吃灰。