多 WAN 与负载均衡
双宽带甚至多宽带正在成为家庭标配:一条主用、一条备用,或者两条不同运营商互相补充。OpenWrt 通过 mwan3 组件把多条 WAN 优雅地组织起来,实现带宽叠加、故障转移和按需分流。本篇讲清多 WAN 的前置条件、mwan3 的配置模型和上线后的验证方法。
前置条件与接口准备
多 WAN 不是插两根网线就能用,先确认三件事。一是硬件端口足够,软路由一般有多个网口,单口设备可以通过划分 VLAN 接入第二条线,但配置复杂很多。二是两条宽带能各自独立拨号,单线多拨依赖运营商策略,成功率不稳定,本篇以双物理线路为例。三是固件里装好 mwan3 和 luci-app-mwan3:
opkg update
opkg install mwan3 luci-app-mwan3 ip-full
接口准备阶段,为每条线路创建独立的 WAN 接口。在 Network → Interfaces 里新增接口,协议按实际选择(DHCP 或 PPPoE),物理设备对应各自网口,防火墙区域归入 wan。两条线都配置好之后,先用 ifstatus 命令分别确认两个接口各自能拿到 IP 并独立出网,这一步通过不了,后面负载均衡无从谈起。
一个提高成功率的小技巧:WAN2 加入时先临时把它标记到独立的防火墙区域单独排查,验证通畅了再并入 wan 区域,避免配错一条线影响另一条的既有规则。PPPoE 用户特别留意:单线多拨方案(一条物理线路多次拨号)在多数地区被运营商限制,本篇聚焦的双物理线路方案最稳妥。如果你手头只有一条线路,mwan3 也支持配置多个基于同线路的接口,但叠加效果取决于运营商策略,不要抱太高预期,先通了主备切换就行。
mwan3 的配置文件是 /etc/config/mwan3,四个核心概念层层递进:interface(接口)负责健康检测,member(成员)描述某个接口的权重,policy(策略)把成员组合成分流方案,rule(规则)决定哪些流量走哪个策略。理解了这个四层结构,配置就是填表。 LuCI 里对应的界面是 Network → Load Balancing,四个标签页与四个概念一一对应,网页填好后底层自动生成配置文件,命令行和界面可以随意切换。
配置健康检测
mwan3 通过周期性 ping 探测每条线路是否存活,这是自动故障转移的前提。每个接口建议这样设置:
config interface 'wan1'
option enabled '1'
option timeout '3'
option interval '5'
option down '3'
option up '3'
list track_ip '114.114.114.114'
list track_ip '223.5.5.5'
config interface 'wan2'
option enabled '1'
option timeout '3'
option interval '5'
option down '3'
option up '3'
list track_ip '223.6.6.6'
参数含义一表看懂。
| 参数 | 含义 | 建议值 |
|---|---|---|
| interval | 检测间隔(秒) | 5 |
| timeout | 单次超时(秒) | 3 |
| down | 连续失败几次判定离线 | 3 |
| up | 连续成功几次判定恢复 | 3 |
| track_ip | 探测目标 | 两个不同地址 |
常用的检测目标也有两点讲究:用稳定且离你近的公共 DNS 地址;两条线用不同目标,避免某台服务器故障导致全线误判。down 和 up 都设 3 次,能滤掉偶发抖动,又不至于切换太慢。建议选 114.114.114.114 之类国内公共 DNS 作为探测目标,国外地址在网络波动时可能整体不可达,造成误切换。
还有一个容易忽略的配置项:wan 接口在 mwan3 里的跟踪有时会受 PPPoE 重拨影响,线路重新连接后 mwan3 需要重新识别接口。出现明明网线没动、mwan3 却显示接口离线的情况,先 mwan3 ifup wan1 手动唤醒一下,再排查接口命名是否变化。
成员、策略与规则
成员描述接口的权重,权重决定流量分配比例:
config member 'wan1_m1_w3'
option interface 'wan1'
option metric '1'
option weight '3'
config member 'wan2_m1_w1'
option interface 'wan2'
option metric '1'
option weight '1'
metric 相同表示两条线同优先级(负载均衡),数值不同则构成主备(metric 小的优先,坏了才切到大数值线路)。weight 是同 metric 内的流量切分比例:3 比 1 就是 75% 比 25%。如果两条线路速率不同,按速率比例设权重最合理,500M 对 300M 就给 5 和 3。
策略把成员组织起来,规则把流量指给策略:
config policy 'balanced'
list use_member 'wan1_m1_w3'
list use_member 'wan2_m1_w1'
option last_resort 'unreachable'
config rule 'default_rule_v4'
option dest_ip '0.0.0.0/0'
option family 'ipv4'
option use_policy 'balanced'
last_resort 表示所有成员全挂时的兜底动作,unreachable 意思是直接拒绝(比默默丢包更便于排障)。默认规则指向 0.0.0.0/0,所有流量均衡走两条线;想精细分流的,再加规则把指定目标地址指给单独策略即可,这部分写法在《策略路由与分流规则》一篇展开。 mwan3 的标记机制和 流量调度 讲过的队列标记原理相通,理解了一个另一个也顺。
上线验证
配置完成重启服务后,三条命令完成验证:
mwan3 status
mwan3 interfaces
mwan3 policies
status 总览各接口在线状态和当前策略,interfaces 只看接口健康。页面上 Network → Load Balancing 的状态页有同样信息的图形展示。想确认流量真的在两条线上跑,最直观的是在 LuCI 里看 Status → Load Balancing → Realtime 连接表,源地址和出站接口一目了然。
没有图形界面(headless 部署)的话,用 conntrack 命令也能看出每条线当前的连接数分布,读取连接跟踪表按需过滤,配合 mwan3 policies 输出的策略命中统计,文本界面下同样能掌握分流全貌。
故障转移的实测一定要做:拔掉主线路,观察 ping 是否在几秒内恢复(丢几个包就通),再插回线路,确认流量自动切回主线路。这个小演练能在真出事时救你。
双线路还有一个常被忽略的收益:不同运营商之间互访绕路问题大大缓解。电信用户访问移动机房的服务器体验差,双线环境下规则让这类流量直接走对应运营商出口,延迟立马下来。这块属于策略路由的应用场景,规则写法在下一章展开,但前提是你已经把双 WAN 的基础设施按本篇配好。

进阶调优与常见坑
调优主要围绕两个参数展开。一是检测间隔和阈值的平衡:interval 设 5 秒、down 设 3 次,意味着约 15 秒内能完成切换,对网页浏览几乎无感;对延迟敏感的场景可以把 interval 降到 2 秒,代价是检测流量增加、CPU 空转。二是 last_resort 的选择:新手建议用 unreachable,故障定位时连接被明确拒绝而不是无声丢弃,眼睛看得见问题在哪。
最常见的坑有三个。第一:成员的 metric 想做主备却设成了不同 weight——结果是带宽叠加而不是故障转移,概念混淆是元凶。第二:把 PPPoE 接口重启和 mwan3 重启搞混——线路重连后 mwan3 有时需要 /etc/init.d/mwan3 restart 让它重新挂接事件。第三:规则优先级冲突——默认规则写得早、范围大,你新加的细粒度规则被压在后面永远命中不了,LuCI 界面里拖动规则顺序即可调整。排障时的观察工具,日志见 系统日志与监控 一篇的 logread 使用方法。

延伸阅读
- 《策略路由与分流规则》:在负载均衡基础上做按目标、按设备的精细分流。
- 《SQM 与智能队列限速》:多线路环境下每条线分别限速的配合方案。
- 《常见故障排查清单》:线路明明在线却走不到流量等问题的排查思路。
