Sudah cukup banyak load balancing dan fail over di bahas di FMI (Forum Mikrotik Indonesia) seperti pada beberapa tautan yang saya simpan di bawah ini:
- 2 Isp In 1 Router With Loadbalancing
- 3 Speedy Office Load balancing
- Load Balance + Fail Over dengan script
- Load Balance Mikrotik ROS 3 + fail Over 3 Koneksi
- Load Balancing nth buat Mikrotik Ver 3.xx dan 2.9xx
- Load Balancing PCC
- Manual PCC Mikrotik
Koneksi ke internet yang digunakan adalah 1 link dedicated ke cbn via fiber optic atau FO dan 2 link ke speedy via modem adsl. Pemodelan koneksi adalah sbb:
- Koneksi ke cbn dianggap stabil.
- Koneksi ke cbn hanya digunakan oleh server mail saja.
- Koneksi ke cbn adalah default gateway mikrotik.
- Koneksi ke internet seperti browsing dll dilewatkan ke speedy.
- Koneksi ke speedy dianggap tidak stabil dan perlu dibuat fail over sehingga jika salah satu speedy putus maka koneksi akan melalui 1 speedy.
- Koneksi internet user ke tcp port 80 (browsing) akan dilewatkan server proxy. Koneksi dari proxy keluar akan melalui load balancing nth.
- Koneksi internet user selain browsing di atas akan melalui load balancing pcc.
- Mikrotik bisa diakses dari luar baik melalui link CBN maupun speedy.
/interface ethernet
set 0 arp=enabled auto-negotiation=yes bandwidth=unlimited/unlimited comment="" \
disabled=no full-duplex=yes l2mtu=1598 mac-address=\
XX:XX:XX:XX:XX:B0 master-port=none mtu=1500 name=CBN speed=100Mbps
set 1 arp=enabled auto-negotiation=yes bandwidth=unlimited/unlimited comment="" \
disabled=no full-duplex=yes l2mtu=1598 mac-address=\
XX:XX:XX:XX:XX:AF master-port=none mtu=1500 name=LAN speed=100Mbps
set 2 arp=enabled auto-negotiation=yes bandwidth=unlimited/unlimited comment="" \
disabled=no full-duplex=yes l2mtu=1598 mac-address=\
XX:XX:XX:XX:XX:B1 master-port=none mtu=1500 name=ETH-SPEEDY1 speed=100Mbps
set 3 arp=enabled auto-negotiation=yes bandwidth=unlimited/unlimited comment="" \
disabled=no full-duplex=yes l2mtu=1598 mac-address=\
XX:XX:XX:XX:XX:B2 master-port=none mtu=1500 name=ETH-SPEEDY2 speed=100Mbps
set 4 arp=enabled auto-negotiation=yes bandwidth=unlimited/unlimited comment="" \
disabled=no full-duplex=yes l2mtu=1598 mac-address=\
XX:XX:XX:XX:XX:B5 master-port=none mtu=1500 name=SERVER speed=100Mbps
/interface pppoe-client
add ac-name="" add-default-route=no allow=pap,chap,mschap1,mschap2 comment="" \
dial-on-demand=no disabled=no interface=SPEEDY1 max-mru=1480 \
max-mtu=1480 mrru=disabled name=SPEEDY1 password=xxxxxx profile=\
default service-name="" use-peer-dns=no user=12260420xxxx@telkom.net
add ac-name="" add-default-route=no allow=pap,chap,mschap1,mschap2 comment="" \
dial-on-demand=no disabled=no interface=SPEEDY2 max-mru=1480 \
max-mtu=1480 mrru=disabled name=SPEEDY2 password=xxxxxx profile=\
default service-name="" use-peer-dns=no user=12260420xxxx@telkom.net
Perhatikan bahwa default route tidak diset di kedua koneksi speedy.
/ip address
/ip address
add address=202.158.1.2/30 broadcast=202.158.1.3 comment="" disabled=no \
interface=CBN network=202.158.1.0
add address=192.168.0.254/24 broadcast=192.168.0.255 comment="" disabled=\
no interface=LAN network=192.168.0.0
add address=192.168.1.253/24 broadcast=192.168.1.255 comment="" disabled=no \
interface=ETH-SPEEDY1 network=192.168.1.0
add address=192.168.2.253/24 broadcast=192.168.2.255 comment="" disabled=no \
interface=ETH-SPEEDY2 network=192.168.2.0
add address=192.168.100.254/24 broadcast=192.168.100.255 comment="" disabled=no \
interface=SERVER network=192.168.100.0
/ip route
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=\
202.158.1.1 routing-mark=CBN scope=30 target-scope=10
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=SPEEDY1 \
routing-mark=speedy1 scope=30 target-scope=10
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=SPEEDY2 \
routing-mark=speedy2 scope=30 target-scope=10
add comment="CBN as default gateway" disabled=no distance=1 \
dst-address=0.0.0.0/0 gateway=202.158.1.1 scope=30 target-scope=10
add comment="network speedy" disabled=no distance=1 dst-address=202.134.0.0/16 gateway=\
SPEEDY1,SPEEDY2 scope=30 target-scope=10
/ip firewall address-list
# # Local network # add address=192.168.1.0/24 comment=speedy1 disabled=no list=local add address=192.168.2.0/24 comment=speedy2 disabled=no list=local add address=192.168.100.0/24 comment=server disabled=no list=local add address=192.168.0.0/24 comment=lan disabled=no list=local # # Users (Clients) # add address=192.168.0.0/24 comment="" disabled=no list=lan # # Server # add address=192.168.100.0/24 comment="" disabled=no list=server add address=192.168.100.200 comment="" disabled=no list=server-mail add address=192.168.100.201 comment="" disabled=no list=server-proxy
/ip firewall nat
#
# DNS TRANSPARENT
#
add action=dst-nat chain=dstnat comment="DNS transparent" disabled=no \
dst-port=53 protocol=tcp src-address-list=lan to-addresses=\
192.168.100.200 to-ports=53
add action=dst-nat chain=dstnat comment="" disabled=no dst-port=53 protocol=\
udp src-address-list=lan to-addresses=192.168.100.200 to-ports=53
#
# DSTNAT to Server Mail
#
add action=dst-nat chain=dstnat comment="SMTP" disabled=no \
dst-address=202.158.1.2 dst-port=25 protocol=tcp to-addresses=\
192.168.100.200 to-ports=25
add action=dst-nat chain=dstnat comment=WEB disabled=no dst-address=\
202.158.1.2 dst-port=80 protocol=tcp to-addresses=192.168.100.200 \
to-ports=808
add action=dst-nat chain=dstnat comment=POP3 disabled=no dst-address=\
202.158.1.2 dst-port=110 protocol=tcp to-addresses=192.168.100.200 \
to-ports=110
add action=dst-nat chain=dstnat comment=IMAP disabled=no dst-address=\
202.158.1.2 dst-port=143 protocol=tcp to-addresses=192.168.100.200 \
to-ports=143
add action=dst-nat chain=dstnat comment=HTTPS disabled=no dst-address=\
202.158.1.2 dst-port=443 protocol=tcp to-addresses=192.168.100.200 \
to-ports=443
#
# PROXY TRANSPARENT
#
add action=dst-nat chain=dstnat comment="PROXY TRANSPARENT for clients" \
disabled=no dst-address-list=!local dst-port=80 in-interface=LAN \
protocol=tcp src-address-list=lan to-addresses=192.168.100.201 \
to-ports=8080
#
# MASQUERADE To Internet
#
add action=masquerade chain=srcnat comment="" disabled=no out-interface=CBN
add action=masquerade chain=srcnat comment="" disabled=no out-interface=SPEEDY1
add action=masquerade chain=srcnat comment="" disabled=no out-interface=SPEEDY2
#
# MASQUERADE To Modem ADSL
#
add action=masquerade chain=srcnat comment="" disabled=no out-interface=ETH-SPEEDY1
add action=masquerade chain=srcnat comment="" disabled=no out-interface=ETH-SPEEDY2
/ip firewall mangle
#
# MARK PACKET DOWN Proxy Cache Hits Mark
#
add action=mark-packet chain=forward comment="Proxy Cache Hits Mark" \
disabled=no dscp=12 new-packet-mark=proxy-hit passthrough=no protocol=tcp \
src-port=8080
#
# MARK PACKET DOWN from server proxy as internet connection
#
add action=mark-packet chain=forward comment=\
"MARK PACKET clients-down from proxy" disabled=no dst-address-list=\
lan new-packet-mark=clients-down passthrough=no protocol=tcp \
src-address-list=server-proxy src-port=8080
#
# MARK PACKET UP local connection
#
add action=mark-packet chain=prerouting comment=\
"MARK PACKETS server to local as server-up" disabled=no \
dst-address-list=local new-packet-mark=server-up passthrough=no \
src-address-list=server
#
# MARK ROUTING cbn from server mail
#
add action=mark-routing chain=prerouting comment=\
"MARK routing for server mail via cbn" disabled=no \
new-routing-mark=CBN passthrough=no src-address-list=server-mail
#
# MARK PACKET UP DIRECT to server proxy as internet connection
#
add action=mark-packet chain=prerouting comment=\
"MARK PACKET DIRECT to proxy clients-up" disabled=no dst-address-list=\
server-proxy dst-port=8080 new-packet-mark=clients-up passthrough=no \
protocol=tcp src-address-list=lan
#
# MARK PACKET UP local connection
#
add action=mark-packet chain=prerouting comment="MARK PACKET LOCAL local-up" \
disabled=no dst-address-list=local in-interface=LAN new-packet-mark=clients-local-up \
passthrough=no src-address-list=lan
#
# MARK PACKET UP REDIRECT to server proxy as internet connection
#
add action=mark-packet chain=prerouting comment=\
"MARK PACKET tcp port 80 REDIRECT to proxy clients-up" disabled=no \
dst-address-list=!local dst-port=80 new-packet-mark=clients-up \
passthrough=no protocol=tcp src-address-list=lan
#
# MARK CONNECTION from internet via cbn/speedy to mikrotik
#
add action=mark-connection chain=input comment=\
"ACCEPT connection from cbn" connection-state=new disabled=no \
in-interface=CBN new-connection-mark=cbn_rt_con passthrough=yes
add action=mark-routing chain=output comment="" connection-mark=cbn_rt_con \
disabled=no new-routing-mark=CBN passthrough=no
add action=mark-connection chain=input comment=\
"ACCEPT connection from speedy1" connection-state=new disabled=\
no in-interface=SPEEDY1 new-connection-mark=speedy1_rt_con passthrough=\
yes
add action=mark-routing chain=output comment="" connection-mark=\
speedy1_rt_con disabled=no new-routing-mark=speedy1 passthrough=no
add action=mark-connection chain=input comment=\
"ACCEPT connection from speedy2" connection-state=new disabled=\
no in-interface=SPEEDY2 new-connection-mark=speedy2_rt_con passthrough=\
yes
add action=mark-routing chain=output comment="" connection-mark=\
speedy2_rt_con disabled=no new-routing-mark=speedy2 passthrough=no
#
# MARK PACKET DOWN local connection
#
add action=mark-packet chain=forward comment=\
"MARK PACKET LOCAL clients-local-down" disabled=no dst-address-list=\
lan new-packet-mark=clients-local-down passthrough=no \
src-address-list=local
#
# MARK PACKET DOWN internet connection
#
add action=mark-packet chain=forward comment=\
"MARK PACKET clients-down" disabled=no dst-address-list=\
lan new-packet-mark=clients-down passthrough=no
#
# MARK PACKET UP internet connection (classified by connection marking)
#
add action=mark-packet chain=forward comment="MARK PACKET clients-up" \
connection-mark=speedy1_con disabled=no new-packet-mark=clients-up \
passthrough=no src-address-list=lan
add action=mark-packet chain=forward comment="MARK PACKET clients-up" \
connection-mark=speedy2_con disabled=no new-packet-mark=clients-up \
passthrough=no src-address-list=lan
#
# LOAD BALANCING NTH server proxy
#
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \
connection-state=new disabled=no dst-address-list=!local \
new-connection-mark=speedy1_pr_con nth=2,1 passthrough=yes \
src-address-list=server-proxy
add action=mark-routing chain=prerouting comment=LB_PCC_NTH_Proxy \
connection-mark=speedy1_pr_con disabled=no dst-address-list=!local \
new-routing-mark=speedy1 passthrough=no src-address-list=server-proxy
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \
connection-state=new disabled=no dst-address-list=!local \
new-connection-mark=speedy2_pr_con nth=1,1 passthrough=yes \
src-address-list=server-proxy
add action=mark-routing chain=prerouting comment=LB_PCC_NTH_Proxy \
connection-mark=speedy2_pr_con disabled=no dst-address-list=!local \
new-routing-mark=speedy2 passthrough=no src-address-list=server-proxy
#
# LOAD BALANCING PCC clients
#
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Clients \
connection-state=new disabled=no dst-address-list=!local \
dst-address-type=!local new-connection-mark=speedy1_con passthrough=yes \
per-connection-classifier=both-addresses:2/0 src-address-list=lan
add action=mark-routing chain=prerouting comment=LB_PCC_NTH_Clients \
connection-mark=speedy1_con disabled=no dst-address-list=!local \
new-routing-mark=speedy1 passthrough=no src-address-list=lan
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Clients \
connection-state=new disabled=no dst-address-list=!local \
dst-address-type=!local new-connection-mark=speedy2_con passthrough=yes \
per-connection-classifier=both-addresses:1/0 src-address-list=lan
add action=mark-routing chain=prerouting comment=LB_PCC_NTH_Clients \
connection-mark=speedy2_con disabled=no dst-address-list=!local \
new-routing-mark=speedy2 passthrough=no src-address-list=lan
/queue type
set default kind=pfifo name=default pfifo-limit=50
set ethernet-default kind=pfifo name=ethernet-default pfifo-limit=50
set wireless-default kind=sfq name=wireless-default sfq-allot=1514 \
sfq-perturb=5
set synchronous-default kind=red name=synchronous-default red-avg-packet=1000 \
red-burst=20 red-limit=60 red-max-threshold=50 red-min-threshold=10
set hotspot-default kind=sfq name=hotspot-default sfq-allot=1514 sfq-perturb=5
add kind=pcq name=pcq-download pcq-classifier=dst-address pcq-limit=20 \
pcq-rate=0 pcq-total-limit=1000
add kind=pcq name=pcq-upload pcq-classifier=src-address pcq-limit=20 \
pcq-rate=0 pcq-total-limit=1000
set default-small kind=pfifo name=default-small pfifo-limit=10
Untuk bandwidth management hanya trafik upstream dan downstream dari dan ke internet melalui koneksi dua speedy yang diatur. Nama packetnya adalah clients-up untuk trafik upstream dan clients-down untuk downstream. Ada pun pengaturan bandwidthnya sbb:
Bandwidth Downstream
Root - Ceiling : 3500kbps - Rate : 0kbps Client - Ceiling : 3500kbps - Rate : 0kbps
Bandwidth Upstream
Root - Ceiling : 512kbps - Rate : 0kbps Client - Ceiling : 512kbps - Rate : 0kbps
/queue tree
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=512k name=UPSTREAM parent=global-out priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=512k name=clients-up packet-mark=clients-up parent=\
UPSTREAM priority=1 queue=pcq-upload
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=3500k name=DOWNSTREAM parent=global-out priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=3500k name=clients-down packet-mark=clients-down parent=\
DOWNSTREAM priority=1 queue=pcq-download
/system clock
set time-zone-name=Asia/Jakarta
/system clock manual
set dst-delta=+00:00 dst-end="jan/01/1970 00:00:00" dst-start=\
"jan/01/1970 00:00:00" time-zone=+00:00
/tool graphing interface
add allow-address=0.0.0.0/0 disabled=no interface=CBN store-on-disk=yes add allow-address=0.0.0.0/0 disabled=no interface=SPEEDY1 store-on-disk=yes add allow-address=0.0.0.0/0 disabled=no interface=SPEEDY2 store-on-disk=yes add allow-address=0.0.0.0/0 disabled=no interface=LAN store-on-disk=yes add allow-address=0.0.0.0/0 disabled=no interface=SERVER store-on-disk=yes
/tool graphing resource
add allow-address=0.0.0.0/0 disabled=no store-on-disk=yes
Berikut ini script-script untuk load balancing dan fail over speedy. Penjelasan fungsi-fungsi script ada di bagian bawah:
1. param
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| ## param### Jumlah wan#:global wans 2;## Interface speedy# 1. SPEEDY1# 2. SPEEDY2#:global iface "ETH-SPEEDY1, ETH-SPEEDY2";## Nama koneksi#:global wan "SPEEDY1, SPEEDY2";## Scoring## No speedy1 speedy2# 0 off off# 2 on off# 4 off on# 6 on on:global scrs "2,4";:global SCORE 0; |
Penjelasan:
- Variable global iface untuk menyimpan nama interface ethernet mikrotik yang terhubung ke modem ADSL speedy.
- Variable global wan untuk menyimpan nama interface pppoe client (mikrotik) ke koneksi internet speedy.
- Variable SCORE untuk menyimpan status koneksi yang berlangsung.
- SCORE 0 berarti semua speedy tidak online.
- SCORE 2 berarti hanya speedy1 yang online.
- SCORE 4 berarti hanya speedy2 yang online.
- SCORE 6 berarti hanya kedua speedy online bersamaan.
2. lb-detection
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| ## lb-detection#:global SCORE;:global wans;:global scrs;:global iface;:global wan;:local scrArr [:toarray $scrs];:local ifaceArr [:toarray $iface];:local wanArr [:toarray $wan];:local score 0;:local nth 0;:local ifaceStatus "";:local wanStatus "";:for x from=1 to="$wans" \do={ :local wanIface [:pick $ifaceArr ($x-1)]; :local wanName [:pick $wanArr ($x-1)]; /interface ethernet monitor "$wanIface" once do={ :set ifaceStatus $status }; :if ( $ifaceStatus="link-ok" ) \ do { /interface pppoe-client monitor "$wanName" once do={:set wanStatus $status }; :if ( $wanStatus="connected" ) \ do { :set score ($score+[:pick $scrArr ($x-1)]); :set nth ($nth+1); } else { :log warning "$wanName is disconnected"; } } else { :log warning "$wanIface is down"; } };#:put $score;#:if ($SCORE!=$score) \do { :local ptr [ /system logging find topics="info"]; /system logging disable $ptr; :if ($score=6) do { /system script run LB_SPEEDY; } :if ($score=4) do { /system script run SPEEDY2; } :if ($score=2) do { /system script run SPEEDY1; } /system logging enable $ptr;};#:set SCORE $score;:put $SCORE; |
Penjelasan:
- Baris 4-8 membaca variable global yang telah dideklarasikan sewaktu booting dan melalui eksekusi script seperti variable SCORE.
- Baris 9-15 mendeklarasikan variable local.
- Baris 17-27 adalah inti dari load balancing detection.
- Pertama mikrotik mendeteksi apakah link ke interface modem adsl (ETH-SPEEDY1 atau ETH-SPEEDY2) menunjukkan link-ok atau tidak. Jika tidak maka koneksi melalui modem ADSL tersebut dianggap putus seraya menampilkan pesan log interface_name is down dan tidak perlu cek koneksi internet speedy . Jika link ok maka lanjut ke langkah di bawah ini.
- Selanjutnya mikrotik melihat status koneksi internet speedy jika menunjukkan connected maka nilai score bertambah 1. Jika statusnya disconnected mikrotik akan menampilkan isi log “PPPoE_Client_Name is disconnected”.
- Baris 30-37, mikrotik akan menjalankan salah satu script ini, LB_SPEEDY, SPEEDY1 atau SPEEDY2, hanya jika nilai score baru berbeda dengan nilai SCORE lama.
- Baris 39-40 nilai score baru disimpan ke variable global SCORE.
3. LB_SPEEDY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
| ## LB_SPEEDY## Hapus rule-rule mangle lama berdasarkan isi comment/ip firewall mangle remove [ find comment="LB_PCC_NTH_Proxy"];/ip firewall mangle remove [ find comment="LB_PCC_NTH_Clients"];## Tambahkan rule-rule mangle baru/ip firewall mangle## LB_PCC_NTH_Proxy##add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \# connection-state=new disabled=no dst-address-list=!local \# dst-address-type=!local new-connection-mark=speedy1_pr_con passthrough=\# yes per-connection-classifier=both-addresses:2/0 src-address-list=\# server-proxyadd action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \ connection-state=new disabled=no dst-address-list=!local \ new-connection-mark=speedy1_pr_con nth=2,1 passthrough=\ yes src-address-list=server-proxyadd action=mark-routing chain=prerouting comment="LB_PCC_NTH_Proxy" connection-mark=\ speedy1_pr_con disabled=no dst-address-list=!local new-routing-mark=\ speedy1 passthrough=no src-address-list=server-proxy#add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \# connection-state=new disabled=no dst-address-list=!local \# dst-address-type=!local new-connection-mark=speedy2_pr_con passthrough=\# yes per-connection-classifier=both-addresses:1/0 src-address-list=\# server-proxyadd action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \ connection-state=new disabled=no dst-address-list=!local \ new-connection-mark=speedy2_pr_con nth=1,1 passthrough=\ yes src-address-list=server-proxyadd action=mark-routing chain=prerouting comment="LB_PCC_NTH_Proxy" connection-mark=\ speedy2_pr_con disabled=no dst-address-list=!local new-routing-mark=\ speedy2 passthrough=no src-address-list=server-proxy## LB_PCC_NTH_Clients#add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Clients \ connection-state=new disabled=no dst-address-list=!local \ dst-address-type=!local new-connection-mark=speedy1_con passthrough=yes \ per-connection-classifier=both-addresses:2/0 src-address-list=lanadd action=mark-routing chain=prerouting comment="LB_PCC_NTH_Clients" connection-mark=\ speedy1_con disabled=no dst-address-list=!local new-routing-mark=speedy1 \ passthrough=no src-address-list=lanadd action=mark-connection chain=prerouting comment=LB_PCC_NTH_Clients \ connection-state=new disabled=no dst-address-list=!local \ dst-address-type=!local new-connection-mark=speedy2_con passthrough=yes \ per-connection-classifier=both-addresses:1/0 src-address-list=lanadd action=mark-routing chain=prerouting comment="LB_PCC_NTH_Clients" connection-mark=\ speedy2_con disabled=no dst-address-list=!local new-routing-mark=speedy2 \ passthrough=no src-address-list=lan#/queue tree {set DOWNSTREAM max-limit=3500kset UPSTREAM max-limit=512k} |
4. SPEEDY1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| ## SPEEDY1## Hapus rule-rule mangle lama berdasarkan isi comment/ip firewall mangle remove [ find comment="LB_PCC_NTH_Proxy"];/ip firewall mangle remove [ find comment="LB_PCC_NTH_Clients"];## Tambahkan rule-rule mangle baru/ip firewall mangle## LB_PCC_NTH_Proxy#add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \ connection-state=new disabled=no dst-address-list=!local \ new-connection-mark=speedy1_pr_con passthrough=\ yes src-address-list=server-proxyadd action=mark-routing chain=prerouting comment="LB_PCC_NTH_Proxy" connection-mark=\ speedy1_pr_con disabled=no dst-address-list=!local new-routing-mark=\ speedy1 passthrough=no src-address-list=server-proxy## LB_PCC_NTH_Clients#add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Clients \ connection-state=new disabled=no dst-address-list=!local \ new-connection-mark=speedy1_con passthrough=yes \ src-address-list=lanadd action=mark-routing chain=prerouting comment="LB_PCC_NTH_Clients" connection-mark=\ speedy1_con disabled=no dst-address-list=!local new-routing-mark=speedy1 \ passthrough=no src-address-list=#/queue tree {set DOWNSTREAM max-limit=1750kset UPSTREAM max-limit=256k} |
5. SPEEDY2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| ## SPEEDY2##/ip firewall mangle remove [ find comment="LB_PCC_NTH_Proxy"];/ip firewall mangle remove [ find comment="LB_PCC_NTH_Clients"];/ip firewall mangle## LB_PCC_NTH_Proxy#add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \ connection-state=new disabled=no dst-address-list=!local \ new-connection-mark=speedy2_pr_con passthrough=\ yes src-address-list=server-proxyadd action=mark-routing chain=prerouting comment="LB_PCC_NTH_Proxy" connection-mark=\ speedy2_pr_con disabled=no dst-address-list=!local new-routing-mark=\ speedy2 passthrough=no src-address-list=server-proxy## LB_PCC_NTH_Clients#add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Clients \ connection-state=new disabled=no dst-address-list=!local \ new-connection-mark=speedy2_con passthrough=yes \ src-address-list=lanadd action=mark-routing chain=prerouting comment="LB_PCC_NTH_Clients" connection-mark=\ speedy2_con disabled=no dst-address-list=!local new-routing-mark=speedy2 \ passthrough=no src-address-list=lan#/queue tree {set DOWNSTREAM max-limit=1750kset UPSTREAM max-limit=256k} |
Penjelasan:
- Saat mikrotik booting maka script param akan dieksekusi. Script ini menyimpan beberapa variable global dan penilaian atau scoring jumlah koneksi speedy yang online (tersambung ke internet). Nilai atau score 0 berarti semua speedy tidak online, 2 berarti speedy1 yang online, 4 hanya speedy2 yang online dan 6 jika semua speedy online. Mengapa perlu scoring? Tujuannya adalah agar seusai script lb-detection dijalankan setiap 30 detik maka hanya jika ada perubahan koneksi, salah satu dari script di bawah ini yang akan dijalankan:
- LB_SPEEDY jika 2 speedy online bersamaan.
- SPEEDY1 jika hanya speedy1 yang online.
- SPEEDY2 jika hanya speedy2 yang online.
Misal pertama kali semua speedy online, 30 detik kemudian script lb-detection dieksekusi, mikrotik melihat bahwa tidak ada perubahan koneksi alias SCORE baru tidak berbeda dengan SCORE lama, scriptLB_SPEEDY tidak akan dijalankan. Sekian menit atau jam kemudian salah satu koneksi speedy ada yang putus maka mikrotik akan meng-eksekusi salah satu script, SPEEDY1 atau SPEEDY2, karena melihat SCORE baru berbeda dengan SCORE lama. - Script LB_SPEEDY akan menjalankan load balancing nth dan pcc dengan dua koneksi speedy.
- Script SPEEDY1 akan menjalankan koneksi ke internet dengan jalur speedy1.
- Script SPEEDY2 akan menjalankan koneksi ke internet dengan jalur speedy2.
Dan ini schedule untuk menjalankan script di atas:
/system scheduler
/system scheduler
#
# Script param akan dijalankan setiap mikrotik reboot
#
add comment="" disabled=no interval=0s name=startup-param on-event=param \
policy=reboot,write,test start-time=startup
#
# Script lb-detectio (load balancing detection) dijalankan setiap 30 detik
#
add comment="" disabled=no interval=30s name=speedy-detection on-event=\
lb-detection policy=reboot,read,write,test start-date=jan/01/1970 \
start-time=00:00:10
Tool netwatch untuk monitoring koneksi dari mikrotik ke interface speedy:
/tool netwatch
add comment="interface speedy2" disabled=no down-script="" host=\
192.168.2.254 interval=30s timeout=1s up-script=""
add comment="interface speedy1" disabled=no down-script="" host=\
192.168.1.254 interval=30s timeout=1s up-script=""