OpenWrt 單線多撥教學:mwan3 實現網速疊加

OpenWrt 單線多撥教學:mwan3 實現網速疊加

目標:用一條寬頻撥出多個 PPPoE 連線,把網速疊加起來
效果:單線下行速度接近理論倍數(實際能否疊加取決於電信商策略)
前置:光貓已改橋接,OpenWrt 已能正常撥號
難度:中高 —— 需要改設定檔,不是點幾下就能完成
耗時:約 60 分鐘

一、先搞清楚:多撥為什麼能提速

電信商的限速邏輯

寬頻帳號的速率限制通常有兩個層面:

層面 說明 帳號級限速 一個帳號最大速率,比如 500Mbps 連接埠級限速 光貓 PON 埠的實體上限,通常遠高於帳號速率

多撥的原理:用同一個帳號發起多個 PPPoE 連線。
如果電信商允許,每個連線會各自獲得一份頻寬,
再用 mwan3 把流量分攤到多個連線上,總速度就能疊加。

但關鍵前提是:電信商必須允許

很多電信商在 BRAS 側限制「同一帳號只能一個工作階段」。
這種情況下你只能撥上一個,多撥無從談起。

情況 結果 電信商允許多工作階段 ✅ 可以多撥、可以疊加 電信商限單工作階段 ❌ 只能撥上一個 電信商允許多工作階段但共用頻寬 ⚠️ 能多撥,但速度不疊加

所以第一步不是配 OpenWrt,而是確認你的寬頻能不能多撥。

二、前置條件檢查(10 分鐘)

1. 光貓必須已改橋接

這是硬性前提。 如果光貓還在路由模式,多撥在光貓那一層就被擋住了。

完整步驟見 光貓改橋接教學,要點:

  • 拿到光貓超級密碼
  • 把上網的 VLAN 改為橋接,由自己的路由器撥號
  • 備份原設定(重要)

2. 測試電信商是否允許多撥

最簡單的測試方法:

  1. 用電腦直接接光貓 LAN 埠,用寬頻帳號撥號(Windows 的寬頻連線)
  2. 讓路由器也同時撥號(同一個帳號)
  3. 如果兩個都能上網 → 電信商允許多撥

也可以用 OpenWrt 手動多撥一次測試(見第四節的方法)。

3. 準備硬體

方案 說明 實體多網埠 最穩,但需要多個網埠接同一台交換器 macvlan 虛擬介面(推薦) 單網埠即可,靠軟體虛擬出多個 MAC

macvlan 方案的優勢:不需要額外網卡,一個 WAN 埠就能虛擬出多個介面。

4. 確認 OpenWrt 版本

這一步很關鍵 —— mwan3 有 iptables 和 nftables 兩個版本:

# 查看防火牆後端
opkg list-installed | grep -E 'iptables|nftables'
結果 該裝哪個 mwan3 有 iptables mwan3(iptables 版) 有 nftables mwan3(nftables 版)

裝錯版本會導致規則不生效 —— 這是最常見的坑。

三、安裝 mwan3

SSH 登入 OpenWrt,執行:

opkg update
opkg install mwan3
opkg install luci-app-mwan3

如果需要 macvlan 虛擬介面(單網埠多撥):

opkg update
opkg install kmod-macvlan

以上指令來自 OpenWrt 官方文件。

四、方法一:macvlan 單線多撥(推薦)

第 1 步:建立 macvlan 虛擬介面

編輯 /etc/config/network,新增虛擬裝置:

config device 'veth5'
    option name 'veth5'
    option type 'macvlan'
    option ifname 'eth1'      # 改成你的 WAN 埠名稱

config device 'veth7'
    option name 'veth7'
    option type 'macvlan'
    option ifname 'eth1'

說明(官方文件給的範例):

  • veth5 / veth7 是虛擬介面名稱,可以自訂
  • type 'macvlan' 表示這是 macvlan 類型
  • ifname 'eth1' 必須改成你實際接光貓的那個實體埠

怎麼查實體埠名稱:

ip link show
uci show network | grep ifname

第 2 步:為每個虛擬介面建立撥號

繼續編輯 /etc/config/network,加重播的 WAN 介面:

config interface 'wan1'
    option ifname 'veth5'
    option proto 'pppoe'
    option username '你的寬頻帳號'
    option password '你的寬頻密碼'
    option ipv6 '1'

config interface 'wan2'
    option ifname 'veth7'
    option proto 'pppoe'
    option username '你的寬頻帳號'    # 同一個帳號
    option password '你的寬頻密碼'
    option ipv6 '1'

注意:帳號密碼和主 WAN 一致(多撥用的是同一個帳號)。

第 3 步:驗證多撥是否成功

# 重啟網路
/etc/init.d/network restart

# 等 30 秒後查看介面狀態
ifstatus wan1 | grep -E 'up|address'
ifstatus wan2 | grep -E 'up|address'

# 或者直接看有沒有拿到不同的 IP
ip addr show veth5
ip addr show veth7

成功標誌:

  • 兩個介面都 up
  • 拿到了不同的公網 IP(這是關鍵)

如果第二個撥不上:

  • 說明電信商限制單工作階段 → 這個寬頻不能多撥
  • 或者需要錯開撥號時間(有些 BRAS 需要)

五、方法二:實體多網埠

如果路由器有多個網埠,可以直接每個埠接一根線到光貓/交換器:

config interface 'wan1'
    option ifname 'eth1'      # 實體網路埠
    option proto 'pppoe'
    option username '帳號'
    option password '密碼'

config interface 'wan2'
    option ifname 'eth2'      # 另一個實體網路埠
    option proto 'pppoe'
    option username '帳號'
    option password '密碼'

優點:不需要 macvlan,更穩定
缺點:需要多個網埠,且要都能接到光貓所在網路

六、設定 mwan3 負載平衡

介面撥通後,用 mwan3 把流量分攤到多條線路上。

第 1 步:確認 mwan3 介面

編輯 /etc/config/mwan3:

config interface 'wan1'
    option enabled '1'
    list track_ip '1.0.0.1'
    list track_ip '1.1.1.1'
    list track_ip '208.67.222.222'
    list track_ip '208.67.220.220'
    option family 'ipv4'

config interface 'wan2'
    option enabled '1'
    list track_ip '1.0.0.1'
    list track_ip '1.1.1.1'
    list track_ip '208.67.222.222'
    list track_ip '208.67.220.220'
    option family 'ipv4'

track_ip 是什麼:mwan3 用這些 IP 做連通性探測。
如果某個 WAN 探測失敗,mwan3 會自動把流量切到其他線路。

(這些 IP 是官方文件給的範例:Cloudflare 的 1.1.1.1、OpenDNS 的 208.67.x.x 等)

第 2 步:設定成員和權重

config member 'wan1_m1_w3'
    option interface 'wan1'
    option metric '1'
    option weight '3'        # 權重:3 份

config member 'wan2_m1_w3'
    option interface 'wan2'
    option metric '1'
    option weight '3'        # 權重:3 份

weight 決定流量分配比例:

設定 效果 兩個都是 weight '3' 各分 50% wan1 是 3,wan2 是 1 wan1 分 75%,wan2 分 25%

如果兩條線路速度不同(比如一條 500M、一條 300M),
按速度比例設定權重效果更好。

第 3 步:設定策略

config policy 'balanced'
    list use_member 'wan1_m1_w3'
    list use_member 'wan2_m1_w3'
    option last_resort 'unreachable'

第 4 步:設定規則

config rule 'default_rule_v4'
    option dest_ip '0.0.0.0/0'
    option family 'ipv4'
    option use_policy 'balanced'

這條規則的含義:所有 IPv4 出站流量都走 balanced 策略(負載平衡)。

第 5 步:全域設定

config globals 'globals'
    option local_source 'lan'
    option mmx_mask '0x3F00'

mmx_mask 是 mwan3 用來給流量打標記的位元遮罩,官方預設 0x3F00。
除非和其他也用防火牆標記的外掛衝突,否則不要改。

第 6 步:重啟並驗證

/etc/init.d/mwan3 restart
mwan3 status

mwan3 status 應該顯示:

  • 兩個 interface 都是 online
  • 有流量統計

注意:如果顯示 offline,通常是 track_ip 探測不通,
可以換成國內的穩定 IP(比如 223.5.5.5 阿里 DNS)。

七、驗證提速效果

用測速工具

# 在區域網路裝置上測(不要在路由器上測,CPU 會是瓶頸)
# 或者用 iperf3 測多執行緒
iperf3 -c 測速伺服器 -P 8

建議用多執行緒測速(單執行緒只能跑一條線路,看不出疊加效果)。

關鍵:單執行緒 vs 多執行緒的差別

測試方式 結果 單執行緒下載 只能跑滿一條線路 多執行緒下載 能跑出疊加後的總速度

這解釋了一個常見困惑:
「我明明多撥成功了,為什麼下載還是 500M?」
—— 因為你用的是單執行緒下載,它只會走一條線路。

mwan3 是基於連線做負載平衡的:
同一個 TCP 連線只走一條線路,不同連線才會分攤。

檢查 NAT 類型是否變化

多撥後 NAT 類型可能改變,用 NAT 類型檢測工具 看一下。

如果原來是 NAT1,多撥後可能變成 NAT3 —— 因為多線路出口造成位址不一致。

八、多撥的副作用與風險

這一節是別的教學很少講的,但很重要。

1. 電信商封禁風險

部分電信商在服務條款裡禁止多撥。

風險等級 情況 低 電信商默許(很多地區如此) 中 偵測到多撥後限速 高 判定為異常使用,停機或要求整改

建議:

  • 不要撥太多(2-3 個通常安全,10+ 個容易被偵測)
  • 不要長時間跑滿頻寬
  • 如果被限速或停機,先把多撥關掉再聯絡客服

2. 對 IPTV 的影響

多撥會改變你的網路結構,可能導致:

  • IPTV 的 VLAN 被多撥流量干擾
  • 機上盒無法透過 IGMP 群播

如果你同時用 IPTV,建議:

  • 把 IPTV 的介面排除在 mwan3 之外(不要參與負載平衡)
  • 或者參考 NAS 群播轉單播方案 改用群播轉單播

3. 對 IPv6 的影響

多撥對 IPv6 的影響比較大:

  • 每個 PPPoE 連線會拿到不同的 IPv6 前綴(PD)
  • 裝置會拿到多個 IPv6 位址
  • 可能導致 IPv6 路由混亂

建議:

  • 如果 IPv6 用得不多,可以在 mwan3 裡只對 IPv4 做負載平衡
  • 用 IPv6 檢測工具 驗證多撥後的連通性

4. 對 NAS 遠端存取的影響

這是最容易被忽略的坑:

多撥後你有多個公網 IP,但 DDNS 只能解析到一個。
如果 DDNS 解析的 IP 和你實際出口不一致,遠端存取會失敗。

解決方案:

  • 在 mwan3 裡做連接埠轉發策略,讓特定流量固定走某條線路
  • 或者只給一條線路配 DDNS,其他線路只做下載加速

九、常見問題解答

Q1:多撥後網速沒變化?

按順序排查:

  1. 確認真的撥上了多個 —— mwan3 status 看是否都 online
  2. 確認拿到了不同的公網 IP —— 相同 IP 說明沒真正多撥
  3. 用多執行緒測速 —— 單執行緒只能跑一條線路
  4. 確認電信商沒做帳號級限速

Q2:為什麼只能撥上 1-2 個?

最常見的原因:電信商在 BRAS 側限制了並行工作階段數。

其他可能:

  • macvlan 的 MAC 位址衝突(每個虛擬埠應該有獨立 MAC)
  • 撥號太頻繁被臨時封禁
  • 光貓的工作階段數限制

Q3:多撥會不會被電信商封號?

有可能,取決於電信商政策。

風險提示:部分電信商的服務條款明確禁止多撥。
建議控制在 2-3 個連線,不要長時間跑滿。
如果收到電信商通知,立即停止多撥。

Q4:多撥後 IPTV 看不了怎麼辦?

原因:多撥的流量干擾了 IPTV 的 VLAN。

解決:

  1. 在 mwan3 裡排除 IPTV 介面
  2. 或者參考 NAS 群播轉單播方案

Q5:IPv6 會受影響嗎?

會。 多撥會導致多個 IPv6 前綴,可能造成路由混亂。

建議:只在 mwan3 裡對 IPv4 做負載平衡。
驗證工具:IPv6 連線測試

Q6:軟路由需要什麼規格?

多撥對 CPU 的要求不高(主要消耗在網路轉發)。

情境 建議 千兆以下 N100 等級的軟路由足夠 多撥 + 千兆以上 建議 J4125 以上,且需要 2.5G 網埠 同時跑其他服務 留出 CPU 餘量

具體型號的跑分參考 NAS CPU 效能天梯圖

Q7:多撥後能做連接埠映射嗎?

能,但要注意出口 IP 問題。

由於有多個公網 IP,外部存取時可能只到其中一個。

建議:用 mwan3 的規則讓特定服務固定走一條線路。

Q8:mwan3 顯示 offline 怎麼辦?

通常是 track_ip 探測不通。

官方範例用的是國外 IP(1.1.1.1、208.67.x.x),國內可能不通。

改成國內穩定 IP:

list track_ip '223.5.5.5'      # 阿里 DNS
list track_ip '119.29.29.29'   # 騰訊 DNS

十、總結

多撥的三個前提

# 前提 1 光貓已改橋接 2 電信商允許多撥(這是最關鍵的,測不出來就別折騰) 3 mwan3 版本與防火牆後端相符(iptables / nftables)

最容易踩的三個坑

  1. 單執行緒測速看不到疊加 —— mwan3 是按連線做負載平衡的
  2. mwan3 裝錯版本 —— iptables 版裝在 nftables 系統上不生效
  3. DDNS 只指向一個 IP —— 多撥後遠端存取可能失敗

一句實話

多撥不是萬能的。 它的效果完全取決於電信商策略:

  • 電信商允許 → 可能翻倍
  • 電信商限制 → 一個都撥不上
  • 電信商默許但共用頻寬 → 能撥上但不提速

在花時間設定之前,先用第二節的方法測試一下能不能多撥。
這能幫你省下幾個小時。