OpenWrt mwan3 双WAN负载均衡配置报告

一、项目概述

1.1 目标

为OpenWrt路由器配置mwan3双WAN负载均衡,实现两条PPPoE宽带的50/50均衡分流。

1.2 硬件环境

项目 说明
路由器 OpenWrt (swconfig架构)
物理端口 1 WAN + 3 LAN(共4个)
WAN1 eth0,PPPoE账号 2409060119
WAN2 Port 1(原LAN口),PPPoE账号 2409060120

1.3 网络拓扑

graph TB subgraph "互联网" ISP1["运营商1"] ISP2["运营商2"] end subgraph "光猫" ONT1["光猫1"] ONT2["光猫2"] end subgraph "OpenWrt路由器" ETH0["eth0<br/>物理WAN口"] ETH1["eth1<br/>内置交换机"] subgraph "VLAN分离" VLAN1["VLAN 1<br/>Ports: 2,3,6"] VLAN100["VLAN 100<br/>Ports: 1,6t"] end WAN1["pppoe-wan<br/>10.60.x.x"] WAN2["pppoe-wan2<br/>10.60.x.x"] BRLAN["br-lan<br/>192.168.1.1"] MWAN3["mwan3<br/>balanced 50/50"] end subgraph "局域网设备" PC["电脑"] AP["AP路由器"] end ISP1 --> ONT1 ISP2 --> ONT2 ONT1 --> ETH0 ONT2 -->|网线| Port1["Port 1<br/>(原LAN口)"] ETH0 --> WAN1 Port1 --> VLAN100 VLAN100 --> WAN2 ETH1 --> VLAN1 ETH1 --> VLAN100 WAN1 --> MWAN3 WAN2 --> MWAN3 MWAN3 --> BRLAN BRLAN --> PC BRLAN --> AP

二、核心概念解释

2.1 什么是VLAN?(打比方)

VLAN就像把一栋大楼隔成不同的房间。

想象一下,你有一栋4层的大楼(4个LAN口),所有人默认都在同一个大厅里(VLAN 1)。现在你想把其中1楼改成独立的办公室(VLAN 100),让1楼的人和2-4楼的人互不干扰。

在技术上:

通过在交换机上打标签(tagged),CPU知道哪些数据包属于哪个VLAN。

2.2 什么是swconfig和DSA?(打比方)

swconfig像老式电话交换机,DSA像现代智能手机。

你的路由器是swconfig架构,所以需要配置交换机VLAN表。

2.3 什么是mwan3?(打比方)

mwan3就像一个聪明的交通指挥员。

想象你在高速公路入口,有两条车道(WAN1和WAN2)。mwan3站在路口,按照设定的比例(50/50)把车辆(数据包)分配到两条车道上。如果一条车道堵了(断网),它会把所有车都引导到另一条车道。

2.4 什么是PPPoE?(打比方)

PPPoE就像你去网吧上网需要刷卡。

光猫是网吧的门,PPPoE账号密码是你的会员卡。每次连接,你都需要"刷卡"(拨号认证),运营商才会给你分配一个临时IP地址(座位号)。


三、遇到的问题与解决方案

问题1:VLAN配置方向错误 ❌

现象:最初尝试在eth0(WAN口)上创建VLAN子接口eth0.3

原因:误解了VLAN的归属

错误做法

eth0.3 → WAN2  ❌

正确做法

eth1.100 → WAN2  ✓

原理
eth0是物理WAN口,直连光猫1。eth1是内置交换机,连接所有LAN口。要让某个LAN口变成WAN2,必须在eth1上创建VLAN子接口,而不是eth0。

解决方案参考guide.md,确认在eth1上创建VLAN 100。


问题2:MTU设置过低 ⚠️

现象:日志提示

Interface eth0.3 has MTU of 1492 -- should be at least 1500

原因:PPPoE协议需要8字节的头部空间,标准以太网MTU是1500,PPPoE实际数据只有1492字节。但VLAN子接口的MTU应该保持1500。

解决方案:将WAN2接口的MTU设置为1500。


问题3:VLAN配置未生效 ❌

现象:swconfig显示VLAN端口为空

VLAN 1:
	vid: 0
	ports: 
VLAN 100:
	vid: 0
	ports:

原因:uci配置的端口号与swconfig实际端口号不匹配

关键发现

swconfig显示: ports: 3 (cpu @ 0)
- Port 0: CPU(端口0)
- Port 1: 物理端口1
- Port 2: 物理端口2

但uci配置使用: 1, 2, 3, 4, 5, 6

解决方案:通过swconfig直接查看端口状态,确认Port 1的pvid已设置为100。


问题4:网络环路 ❌❌

现象:日志显示

br-lan: received packet on eth1 with own address as source address

后果:WAN1和WAN2都断网,路由器无法访问

原因:VLAN配置错误导致数据包在交换机内部循环

打比方
就像你在房间里装了一面镜子,然后对着镜子说话。声音(数据包)从你嘴里出来,被镜子反射回来,你又听到了自己的声音,然后又说...无限循环。交换机被这种"回声"淹没,无法处理正常数据。

解决方案:正确配置VLAN分离,确保Port 1的流量只走VLAN 100,不回到VLAN 1。


问题5:mwan3接口名称不匹配 ❌

现象:mwan3显示所有接口offline

interface wan_2 is offline and tracking is not enabled

原因

解决方案

uci rename mwan3.wan_2=wan2
uci set mwan3.wan2_member.interface='wan2'

问题6:mwan3 HTTPS规则错误 ❌

现象:日志显示

iptables-restore: Set 4 doesn't exist

原因:HTTPS规则引用了不存在的ipset

解决方案

uci set mwan3.https.proto='tcp'
uci delete mwan3.https.ipset

问题7:WAN2 PPPoE会话不稳定 ⚠️

现象:WAN2拨号成功后,过一段时间无法ping通外网

原因:PPPoE会话可能因ISP侧超时或网络波动而失效

解决方案:重启WAN2接口

ifdown wan2
sleep 3
ifup wan2

问题8:mwan3健康检查失效 ⚠️

现象:mwan3显示 "tracking is not enabled"

原因:track_ip配置在接口重命名过程中可能丢失,或reliability设置为0

解决方案

uci set mwan3.wan.track_ip='223.5.5.5 119.29.29.29'
uci set mwan3.wan2.track_ip='223.5.5.5 119.29.29.29'
uci set mwan3.wan.reliability='1'
uci set mwan3.wan2.reliability='1'
uci commit mwan3
mwan3 restart

四、最终配置方案

4.1 交换机VLAN配置

# VLAN 1: LAN口(去掉Port 1)
uci set network.@switch_vlan[0].ports='2 3 6'

# VLAN 100: WAN2专用(Port 1 + CPU端口tagged)
uci add network switch_vlan
uci set network.@switch_vlan[-1].device='switch1'
uci set network.@switch_vlan[-1].vlan='100'
uci set network.@switch_vlan[-1].ports='1 6t'

端口说明

端口 用途
Port 0 CPU
Port 1 WAN2(接光猫2)
Port 2,3 LAN(电脑、AP)
Port 6 CPU(带VLAN标签)

4.2 VLAN设备配置

uci set network.wan2_dev=device
uci set network.wan2_dev.name='eth1.100'
uci set network.wan2_dev.type='8021q'
uci set network.wan2_dev.ifname='eth1'
uci set network.wan2_dev.vid='100'

4.3 WAN2接口配置

uci set network.wan2=interface
uci set network.wan2.proto='pppoe'
uci set network.wan2.device='eth1.100'
uci set network.wan2.username='2409060120'
uci set network.wan2.password='28677X'
uci set network.wan2.ipv6='0'
uci set network.wan2.metric='20'

4.4 防火墙配置

uci add_list firewall.@zone[1].network='wan2'

4.5 mwan3配置

# WAN接口
uci set mwan3.wan.track_ip='223.5.5.5 119.29.29.29'
uci set mwan3.wan.track_method='ping'
uci set mwan3.wan.reliability='1'

# WAN2接口
uci rename mwan3.wan_2=wan2
uci set mwan3.wan2.track_ip='223.5.5.5 119.29.29.29'
uci set mwan3.wan2.track_method='ping'
uci set mwan3.wan2.reliability='1'

# 修正成员接口名
uci delete mwan3.wan2_member.wan2
uci set mwan3.wan2_member.interface='wan2'

# 修正HTTPS规则
uci set mwan3.https.proto='tcp'
uci delete mwan3.https.ipset

# 设置默认规则为仅IPv4
uci set mwan3.default_rule_v4.family='ipv4'

uci commit

五、最终网络拓扑

graph TB subgraph "互联网" ISP1["运营商1<br/>2409060119"] ISP2["运营商2<br/>2409060120"] end subgraph "光猫" ONT1["光猫1"] ONT2["光猫2"] end subgraph "OpenWrt路由器" subgraph "物理层" ETH0["eth0<br/>WAN口"] SW["eth1<br/>交换机"] end subgraph "交换机VLAN" V1["VLAN 1<br/>Ports: 2,3,6"] V100["VLAN 100<br/>Ports: 1,6t"] end subgraph "逻辑接口" WAN1["pppoe-wan<br/>IP: 10.60.45.17<br/>跃点: 10"] WAN2["pppoe-wan2<br/>IP: 10.60.109.78<br/>跃点: 20"] end subgraph "负载均衡" MWAN3["mwan3 balanced<br/>WAN1: 50%<br/>WAN2: 50%"] end subgraph "局域网" BRLAN["br-lan<br/>192.168.1.1/24"] end end subgraph "终端设备" PC["电脑"] AP["AP路由器"] end ISP1 --> ONT1 ISP2 --> ONT2 ONT1 --> ETH0 ONT2 -->|网线| P1["Port 1"] ETH0 --> WAN1 P1 --> V100 V100 --> WAN2 SW --> V1 SW --> V100 WAN1 --> MWAN3 WAN2 --> MWAN3 MWAN3 --> BRLAN BRLAN --> PC BRLAN --> AP

六、验证结果

6.1 接口状态

pppoe-wan  → IP: 10.60.45.17  → 在线
pppoe-wan2 → IP: 10.60.109.78 → 在线

6.2 mwan3状态

interface wan  → online 50%
interface wan2 → online 50%
balanced policy → wan2 (50%) + wan (50%)

6.3 连通性测试

WAN1 → ping 223.5.5.5 → 24ms ✓
WAN2 → ping 223.5.5.5 → 6ms  ✓

七、注意事项与维护建议

7.1 定期检查

7.2 配置备份

7.3 故障排查

现象 可能原因 解决方法
无法上网 mwan3接口offline 检查track_ip,重启mwan3
WAN2不通 PPPoE会话失效 ifdown wan2 && ifup wan2
网络环路 VLAN配置错误 检查交换机VLAN表
负载不均 权重配置错误 检查mwan3 member配置

八、总结

此次配置的核心挑战在于VLAN分离——将一个LAN口物理上变成WAN口。这需要:

  1. 理解硬件架构:swconfig交换机的端口映射关系
  2. 正确配置VLAN:在eth1上创建VLAN 100,将Port 1从VLAN 1移到VLAN 100
  3. 避免网络环路:确保VLAN分离后,数据包不会在交换机内部循环
  4. mwan3接口对齐:确保mwan3的接口名与网络配置一致

最终,通过VLAN 100成功将Port 1分离为独立的WAN2口,实现了双PPPoE负载均衡。