MikroTik RouterOS Load Balancing - Pros & Cons

Difficulty: ★★★★☆
Version: RouterOS v6.24

因為在RouterOS中,所有的port都可以是WAN或LAN,所以我們可以將其中幾個port當成WAN來使用,這時候如果有申請不同ISP的線路,就可以做負載平衡(同一個ISP則意義不大,除非都是單獨拉專線,否則真要斷線也是一起斷)。

要在RouterOS達成Load Balancing,最後一步一定是透過Policy Route來決定路由,但如何作分配呢?其中有三種作法可以參考:(至於RouterOS所有的方式可以參考MikroTik Load Balancing

一、ECMP (Equal Cost Multi-Path)
有關ECMP的詳細步驟,可以參考MikroTik ECMP load balancing with masquerade

主要是在Default Gateway將所有可連接的Gateway寫在一起
/ip route
add dst-address=0.0.0.0/0 gateway=10.1.1.254,10.2.1.254,10.3.1.254 check-gateway=ping

Pros
.擁有簡單的容錯移轉機制,一旦其中一條路徑斷了,自然改由其他剩餘有效路徑來平均分配

Cons
.要特別注意並增加連線至RouterOS本身的Policy Route,因為來自A路徑的封包可能會經由B路徑出去,這時原本預計收到來自A路徑封包的設備會丟棄來自B路徑封包,造成連線失敗。
.有些ISP內的主機(譬如DNS)僅提供給該ISP的線路,這時經由不同ISP線路出去的request可能不被接受。

二、NTH <第N個封包或連線>
有關NTH的詳細步驟,可以參考MikroTik NTH load balancing with masquerade

主要是在防火牆標記這裡,指定封包或連線的次序。

譬如我們利用NTH=3,1來讓每三個封包中的第一個標記為Gateway_1;利用NTH=3,2來讓每三個封包中的第二個標記為Gateway_2;利用NTH=3,3來讓每三個封包中的第三個標記為Gateway_3
/ip firewall mangle
add action=mark-packet chain=prerouting new-packet-mark=Gateway_1 nth=3,1 passthrough=yes
add action=mark-packet chain=prerouting new-packet-mark=Gateway_2 nth=3,2 passthrough=yes
add action=mark-packet chain=prerouting new-packet-mark=Gateway_3 nth=3,3 passthrough=yes

或者也可以透過順序的調整,利用NTH=3,1來讓每三個封包中的第一個標記為Gateway_1;利用NTH=2,1來讓後面兩個封包中的第一個標記為Gateway_2,第二個標記為Gateway_3
/ip firewall mangle
add action=mark-packet chain=prerouting new-packet-mark=Gateway_1 nth=3,1 passthrough=no
add action=mark-packet chain=prerouting new-packet-mark=Gateway_2 nth=2,1 passthrough=no
add action=mark-packet chain=prerouting new-packet-mark=Gateway_3

Pros
.能完整的根據區網內的所有來源平均分配負載

Cons
.區網內的Server對外服務要注意路徑
.如果任何一條路徑斷了,其設定的路由標記將無作用,改由Default Route出去,增加Default Route的負載。

三、PCC (Per Connection Classifier)
有關PCC的詳細步驟,可以參考MikroTik PCC,如果想了解PCC運作原理,可以參考How PCC Works,簡單說就是把Source IP、Source Port、Destination IP、Destination Port取需要的整數相加後,再將其總和的個位數除以指定值,而得到的餘數來作決定。

主要是在防火牆標記這裡,根據來源/目標的位置與埠的組合運算,來各別指定給予連線標記。

譬如我們將Source IP與Source Port相加後,其總和的個位數除以3得到的餘數若為0,則該連線標記為Gateway_1;若為1,則該連線標記為Gateway_2;若為2,則該連線標記為Gateway_3
/ip firewall mangle
add action=mark-connection chain=prerouting new-connection-mark=Gateway_1 per-connection-classifier=src-address-and-port:3/0

add action=mark-connection chain=prerouting new-connection-mark=Gateway_2 per-connection-classifier=src-address-and-port:3/1

add action=mark-connection chain=prerouting new-connection-mark=Gateway_3 per-connection-classifier=src-address-and-port:3/2

Pros
.因為判斷條件變化性多,當區網內設備夠多時,能以類似Random的方式動態平均分配負載

Cons
.因為是採用餘數制,區網內設備少時,有機會負載集中落在其中幾條,譬如10.0.0.3:443與10.0.0.6:80就落在同一條。
.如果任何一條路徑斷了,其設定的路由標記將無作用,改由Default Route出去,增加Default Route的負載。

補充:如果Gateway是同一個怎麼辦?
假如你申請了兩條線路,而ISP給你的Gateway是同一個,那麼當你在設定Route時,可以透過「%」符號重複指定不同的Routing Mark給同一個Gateway,譬如Gateway都是168.95.98.254
/ip route
add gateway=168.95.98.254%WAN1 routing-mark=To_WAN1
add gateway=168.95.98.254%WAN2 routing-mark=To_WAN2

相關範例可以參考MikroTik Load balancing multiple same subnet links

延伸閱讀
[開箱] MikroTik CCR1016-12G
MikroTik RouterOS VPN (PPTP/L2TP/OpenVPN/SSTP/SSH Tunnel)
MikroTik RouterOS Stateless Tunnel (EoIP/IPIP/GRE)
MikroTik RouterOS QoS (Queue/HTB/PCQ)
MikroTik RouterOS IGMP Proxy w/ CHT MOD
MikroTik RouterOS Hairpin NAT - Pros & Cons
MikroTik RouterOS Hotspot
MikroTik RouterOS User Manager - RADIUS
文章關鍵字
小弟剛完成二個黑貓VPN pptp-client的pcc,並搭配Script做修正!

因為目前黑貓VPN是屬於斷網的狀態,所有的VPN設定將被腳本干預全部關閉.
就算您手動enable部份功能,下一秒也會被腳本關掉

值得收藏的好文章 !
用VM 先來試試看
感謝
小的對2線路做Load Balancing ,一線是40/5M ,另一線是20/5M.
因為兩線的下載總量是60M ,所以小弟是用2/3與1/3的比例去匹配.

試nth :
new-connection-mark=nth1 nth=3,1
new-connection-mark=nth1 nth=3,2
new-connection-mark=nth2 nth=3,3

試pcc:
new-connection-mark=pcc_1 per-connection-classifier=src-address-and-port:3/0
new-connection-mark=pcc_1 per-connection-classifier=src-address-and-port:3/1
new-connection-mark=pcc_2 per-connection-classifier=src-address-and-port:3/2

但結果這兩種負載比例皆不符合小弟心中的盤算.
40M線路下載吃重程度 遠大於20M ,甚至超過3倍的比例...這
其實使用 multi-WAN 最麻煩就是如何處理 port forward 的問題,必須使用 packet mangle 才能解決(因為 packet 從那個 WAN 進就要那個 WAN 回),做法比較複雜
所以後來我放棄了,改使用 pfSense,內置的 "sticky connection" 已能自動處理這個問題,方便很多
fakeman1999 wrote:
其實使用 multi...(恕刪)
這點還好,就只是標記connections而已。

企業用6固定制與3PPPoE

gfx wrote:
這點還好,就只是標記connections而已。


說難不算難,只是當 WAN 組合多了,有時總有可能忘記
使用 pfSense 直接解決掉問題,而且 outgoing load balance 設定也相對比 ROS 容易做很多(我兩者都有用過)

今日熱門文章 網友點擊推薦!

文章分享
評分
複製連結