首先先說明一下實做的環境,如下圖
要在 RouterOS 中實現多條 ADSL 負載平衡與自動備援並不困難
但是主要的問題會是 ADSL 的 閘道(Gateway),都是同一個位置(假設是同一家ISP)
要解決這個問題必需使用 Mangle 裡的標記(mark) 且配合 nth,請看以下範例
使用 Mangle 裡的標記(mark) 且配合 nth 可以解決ADSL 負載平衡的問題。
而自動備援的問題,則是在 NAT 裡加入一行不指定條件的 masquerade 即可(需放置於正常有指定條件masquerade的後面)
設定檔的使用方式很簡單,先在 Winbox 的左邊點選 New Terminal
然後把下面的設定檔貼上就可以了
#以下設定檔在 RouterOS 3.20 下測試通過 /interface pppoe-client add ac-name="" add-default-route=no allow=pap,chap,mschap1,mschap2 comment=\ "" dial-on-demand=no disabled=no interface=掛載ADSL-1的網卡 max-mru=1480 max-mtu=1480 \ mrru=disabled name=ADSL-1 password=ADSL-1密碼 profile=default service-name="" \ use-peer-dns=yes user=ADSL-1帳號 add ac-name="" add-default-route=no allow=pap,chap,mschap1,mschap2 comment=\ "" dial-on-demand=no disabled=no interface=掛載ADSL-2的網卡 max-mru=1480 max-mtu=1480 \ mrru=disabled name=ADSL-2 password=ADSL-2密碼 profile=default service-name="" \ use-peer-dns=yes user=ADSL-2帳號 /ip firewall mangle #讓外部可以連通本機多條 ADSL add action=mark-connection chain=input comment=\ "\C5\FD\A5~\B3\A1\A5i\A5H\B3s\B3q\A5\BB\BE\F7\A6h\B1\F8 ADSL" disabled=no \ in-interface=ADSL-1 new-connection-mark=from_adsl_1 passthrough=yes add action=mark-routing chain=output comment="" connection-mark=from_adsl_1 \ disabled=no new-routing-mark=to_adsl_1 passthrough=yes add action=mark-connection chain=input comment="" disabled=no in-interface=\ ADSL-2 new-connection-mark=from_adsl_2 passthrough=yes add action=mark-routing chain=output comment="" connection-mark=from_adsl_2 \ disabled=no new-routing-mark=to_adsl_2 passthrough=yes #內部網路負載平衡 add action=mark-connection chain=prerouting comment=\ "\A4\BA\B3\A1\BA\F4\B8\F4\ADt\B8\FC\A5\AD\BF\C5" connection-state=new \ disabled=no in-interface=請改成你的內部網卡 new-connection-mark=nth_1 nth=2,1 \ passthrough=yes add action=mark-routing chain=prerouting comment="" connection-mark=nth_1 \ disabled=no in-interface=請改成你的內部網卡 new-routing-mark=to_adsl_1 passthrough=no add action=mark-connection chain=prerouting comment="" connection-state=new \ disabled=no in-interface=請改成你的內部網卡 new-connection-mark=nth_2 passthrough=yes add action=mark-routing chain=prerouting comment="" connection-mark=nth_2 \ disabled=no in-interface=請改成你的內部網卡 new-routing-mark=to_adsl_2 passthrough=no /ip firewall nat #線路正常時,依負載平衡走不一樣的 ADSL 線路出去 add action=masquerade chain=srcnat comment="\BDu\B8\F4\A5\BF\B1`\AE\C9\A1A\A8\ \CC\ADt\B8\FC\A5\AD\BF\C5\A8\AB\A4\A3\A4@\BC\CB\AA\BA ADSL \BDu\B8\F4\A5X\ \A5h" disabled=no out-interface=ADSL-1 routing-mark=to_adsl_1 add action=masquerade chain=srcnat comment="" disabled=no out-interface=\ ADSL-2 routing-mark=to_adsl_2 #ADSL 斷線自動備援 add action=masquerade chain=srcnat comment=\ "ADSL \C2_\BDu\A6\DB\B0\CA\B3\C6\B4\A9" disabled=no /ip route #設定 ADSL 路由 add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=ADSL-1 \ routing-mark=to_adsl_1 add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=ADSL-2 \ routing-mark=to_adsl_2 add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=\ ADSL-1,ADSL-2 /ip route print
大大 我依照你的方法設定
的確 雙線 都會有動作 但是出現一個問題
就是 ~~ 遊戲會斷線 ~~ 會自己 有時跑一線 有時跑二線
請問要怎樣排除 = = 我是設定 PPPOE 撥上網 每一個帳號都是不同網段
要解決這個問題最簡單的方法就是,強迫該遊戲所使用到的port,統一走某條ADSL出去
下面這個規則在Firewall的Mangle中,你可以參考一下
chain=prerouting action=mark-connection new-connection-mark=nth_1
passthrough=yes connection-state=new protocol=tcp in-interface=LAN
dst-port=遊戲用的到Port
chain=prerouting action=mark-routing new-routing-mark=to_adsl_1
passthrough=no in-interface=LAN connection-mark=nth_1
那就是 依照你上面所寫ㄉ那先 都弄進去 玩家 直接 強迫 port 跑哪邊就好ㄌ嗎?
對的,就封包固定出去時,是那某個特定的port,就只能走ADSL 1
這樣子就不會有2條同時出去的問題
如果有負載的問題,可以再切網段去跑
例如:網段1的遊戲port全部走ADSL 1,網段2的遊戲port全部走ADSL 2,以此類推
設定的方式可能要請你try一下
可以請問一下 遊戲的PORT 大概是多少
我的想法是 BT 那一類的 走1線 遊戲走二線
每個遊戲的 port 都不一樣,你可以找找官網,或是用wireshark抓封包自已解
要判斷是不是BT的封包,Firewall裡面有個P2P封包的選項可以選
add chain=prerouting action=mark-connection new-connection-mark=nth_1 passthrough=yes connection-state=new protocol=tcp in-interface=LAN dst-port=21457
add chain=prerouting action=mark-routing new-routing-mark=to_adsl_1 passthrough=no in-interface=LAN connection-mark=nth_1
這樣輸入之後 出現錯誤
input does not match any value of interface
請問大大 是什意思ㄋ
先切換到mangle下面
/ip firewall mangle
add chain=prerouting action=mark-connection new-connection-mark=nth_1 passthrough=yes connection-state=new protocol=tcp in-interface=LAN dst-port=21457
add chain=prerouting action=mark-routing new-routing-mark=to_adsl_1 passthrough=no in-interface=LAN connection-mark=nth_1
in-interface=LAN <== 要設定 什ㄇ 對外網卡 還是對內網卡
對內的網卡
在請問一下 ….
可否針對 內部 PPPOE帳號 來選擇 她要走 1線 還是二線
可以依據內部PPPOE後所取得的IP來當作判斷走那條線路的條件
add chain=prerouting action=mark-connection new-connection-mark=nth_1 passthrough=yes connection-state=new protocol=tcp in-interface=ether1 dst-port=1-65535
add chain=prerouting action=mark-routing new-routing-mark=to_adsl_1 passthrough=no in-interface=ether1 connection-mark=nth_1
依照這樣設定 還是沒有依照現制 有時候跑1線 有時候跑二線 = =
先確認有沒有使用到UDP的協定,上面這條規是只給TCP協定用的
如果你要做實驗可以試試這樣子
add chain=prerouting action=mark-connection new-connection-mark=nth_1 passthrough=yes connection-state=new in-interface=ether1
add chain=prerouting action=mark-routing new-routing-mark=to_adsl_1 passthrough=no in-interface=ether1 connection-mark=nth_1
測試結果 到最後 還是 指定網段 走某一線出去
用PORT來跑 一樣也是會瞬段
還是用網段 來限定比較容易 也比較穩定
這樣子也是可以
如果對方的IP是固定的話,也可以用對方的IP來判斷走固定的線路出去
Dear sir
請問如何做到 撥號adsl+固IP分流(例如國內學術走學術固ip,其餘走adsl)
感謝您
to yauger:
1.你要先有國內學術的IP清單
2.依據清單去對封包做分流mark connection + mark routing 最後在 IP -> Route 裡面依據你設定的mark routing去做路由就可以了
請問第15行comment=\
“\C5\FD\A5~\B3\A1\A5i\A5H\B3s\B3q\A5\BB\BE\F7\A6h\B1\F8 ADSL”這些代表什麼呢?最近煩惱要用PCC還是NTH~~你的段線備援好特別喔!!不懂她的原哩!!
請教一下, 我有3條FTTB, 3條各用PPPoe取得7浮動IP 共會有21個IP , 我有一台 Web Server 架了21個站, 只插一張網卡, 使用內部192.168.x.x 的內部IP,
如果使用這台RB750同時連接3條FTTB. 我可以設定這21個IP 各自NAT到 伺服器的21個站嗎?
to gina:
設定上是沒問題,可以做的到,
但效能上RB750是否可以勝任,可能要實際上線試試看。
以RB750的硬體,可能會撐不住21台,不過這也只是我的猜測。
您好:
想請問如果我想要照IP位址來做可以嗎?
EX
192.168.1.1-100 走 ADSL1線路。
192.168.1.101-254 走 ADSL2線路。
請問我因該在哪裡下功夫,謝謝。
哈哈!我這人真的很奇怪!
每次都是發完問題自己在試成功了。自問自答一下。
要先去/IP Firewall Addrss List 設List
/ip firewall address-list> add address=List1_To_ADSL1 disabled=no list=192.168.1.1-192.168.1.100
/ip firewall address-list> add address=List2_To_ADSL2 disabled=no list=192.168.1.101-192.168.1.254
然後在家jason大中的mark-routing那兩條規則分別指定上src-address-list=List1_To_ADSL1 OR List2_To_ADSL2就好了。
之前都不行是因為我都做半,mark-routing規則只有一條有指定src-address-list為其中一個建立的address-list,但不知道為啥這樣會失敗,哈。
提供一下找到且在 5.25 上設定後確認可用的設定
網路環境:
RouterOS 接在 CISCO Router 後面,網段 10.0.0.64/28
可用公網 IP:10.0.0.65/28 與 10.0.0.66/28,Gateway 10.0.0.67
內網 IP 範圍:192.168.88.0/24
/ip address
add address=192.168.88.1/24 comment=Lan disabled=no interface=master-local network=192.168.88.0
add address=10.0.0.65/28 comment=WAN disabled=no interface=wan1 network=10.0.0.64
add address=10.0.0.66/28 comment=WAN disabled=no interface=wan2 network=10.0.0.64
/ip firewall address-list
add address=192.168.88.0/24 disabled=no list=”LAN IP”
/ip firewall nat
add action=masquerade chain=srcnat disabled=no out-interface=wan1
add action=masquerade chain=srcnat disabled=no out-interface=wan2
add action=masquerade chain=srcnat disabled=no
add action=masquerade chain=srcnat disabled=no src-address-list=”LAN IP”
add action=masquerade chain=srcnat disabled=no out-interface=!master-local
/ip firewall mangle
add action=mark-connection chain=input disabled=no in-interface=wan1 new-connection-mark=from_wan1 passthrough=yes
add action=mark-routing chain=output connection-mark=from_wan1 disabled=no new-routing-mark=to_wan1 passthrough=yes
add action=mark-connection chain=input disabled=no in-interface=wan2 new-connection-mark=from_wan2 passthrough=yes
add action=mark-routing chain=output connection-mark=from_wan2 disabled=no new-routing-mark=to_wan2 passthrough=yes
add action=mark-connection chain=prerouting disabled=no dst-address-type=!local in-interface=wan1 new-connection-mark=from_wan1 passthrough=yes per-connection-classifier=both-addresses:2/0 src-address-list=”LAN IP”
add action=mark-routing chain=prerouting connection-mark=from_wan1 disabled=no new-routing-mark=to_wan1 passthrough=yes src-address-list=”LAN IP”
add action=mark-connection chain=prerouting disabled=no dst-address-type=!local in-interface=wan2 new-connection-mark=from_wan2 passthrough=yes per-connection-classifier=both-addresses:2/1 src-address-list=”LAN IP”
add action=mark-routing chain=prerouting connection-mark=from_wan2 disabled=no new-routing-mark=to_wan2 passthrough=yes src-address-list=”LAN IP”
/ip route
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=10.0.0.67%wan1 routing-mark=to_wan1 scope=30 target-scope=10
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=10.0.0.67%wan2 routing-mark=to_wan2 scope=30 target-scope=10
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=10.0.0.67 scope=30 target-scope=10
這樣設定完後,使用 traceroute 去 trace 168.95.1.1
interface 選擇 wan1 或 wan2 都可以成功
不過以下的問題仍舊存在
1. PPTP VPN 從 wan1 或 wan2 進來還是只會從其中一條路出去,至於走那一條看 gateway=10.0.0.67 顯示的是 reachable wan1 還是 reachable wan2
2. L2TP over VPN 只有一條路能撥進來,至於那一條能撥進來,一樣看 gateway=10.0.0.67 顯示的是 reachable wan1 還是 reachable wan2
3. OpenVPN 只能連內網,不能經由 VPN 連外網
大大,請教是否可以做到>>雙ADSL負載平衡,與ADSL斷線自動備援,內部IP按IP數量平均分配到二線,而不是按Session數或流量大小分配,以防止任何狀況走不同線而出問題。
to 馬汀:
可以的,給你的方向。
判斷內部來源的IP為192.168.1.1~192.168.1.100,走ADSL1
判斷內部來源的IP為192.168.1.101~192.168.1.200,走ADSL2
規則可以依想要做的方式,而有所不同
Jason大,對ros是初步接觸,對此能做到的功能跟您請教一下,是否能做到DHCP自動取得IP後並自動綁定MAC?
to 馬汀:
使用winbox連線進去後。
IP -> DHCP Server -> Leases -> 點2列表上,未綁定的IP -> Make Static
這樣子,就可以綁定MAC與IP了
您好,
請問PCC有辦法測試線路是否正常運作後自動修改PCC的設定(把斷線的排除在PCC外)嗎?
to 訪客:
在ROS中寫script配合scheduler應該可以達成
您好,請問有相關的 範例及說明嗎?
因為網路上都找不到類似的作法。
to joejoe:
這邊提供一些思維,實作的部份,可能就要請你google或自行研究了。
1.要知道如何進行測試線路是否正常,可用 /ping interface=AR2_ADSL-1 address=168.95.1.1 測試
2.不正常,透過script把pcc的規則關掉。正常了,透過script把pcc的規則打開。
3.script的部份,可以參考官方wiki
http://wiki.mikrotik.com/wiki/Manual:Scripting
您好,
關於script卡在 pcc 的 /? ..? 的設定問題,因為沒辦法確定斷幾條或是哪幾條斷,所以不知道 /? ..? 這邊的值該怎麼處理,另外想請教一下,我要做 dstnat 但發現,一個ip只要做過一個 dstnat 就沒辦法做 第二個了,
EX:
1.1.1.1:3389 轉內部 192.168.0.1:3389
1.1.1.1:3388 轉內部 192.169.0.2:3389
這時 0.1 的 會通 但 0.2 的不會通,但看 log 又有 1.1.1.1:3388 的連線記錄
而把設定改為
1.1.1.2:3388 轉內部 0.2:3380 就ok
detnat 部分搞定了,原來是因為去回不同路的關係,所以內部server 要指定特別走進來的線路出去..
to joejoe:
http://wiki.mikrotik.com/wiki/Manual:PCC
/ip firewall mangle add chain=prerouting action=mark-connection \
new-connection-mark=2nd_conn per-connection-classifier=src-address-and-port:3/1
假設 2nd_conn 這條線斷掉,你可以用script改成有通的連線
例如改成:
/ip firewall mangle add chain=prerouting action=mark-connection \
new-connection-mark=1st_conn per-connection-classifier=src-address-and-port:3/1
了解,
所以就變成 3/0 走第Wan1
3/1 原本走第Wan2但若偵測到斷線就改走Wan1
3/2 走 Wan3
而不用改為 2/0 Wan1 2/1 Wan3 摟..
to joejoe:
是的,斷線後要改走那一條,可依據網路狀況而定。原則就是pcc的規則不動,只動出去的connection-mark
您好,可以加您FB嗎?
Hi joejoe:
facebook我已經很少在用,可用email,每天都會收信。
jokkson@gmail.com