hi guys
This is my first script for fail-over with two load-balanced line and third backup sleeping line. can you take a look and think of how can enhance it? or maybe you can use it if you need.
scheduler:
/ system scheduler
add name="ping_google_link_A-up" on-event=schedule_A_up start-date=jan/01/1970 \
start-time=00:00:00 interval=5s comment="" disabled=yes
add name="ping_google_link_A-down" on-event=schedule_A_down \
start-date=jan/01/1970 start-time=00:00:00 interval=5s comment="" \
disabled=no
scripts go up:
#set variables
:local pingcount 3
:local ipA 211.24.149.42
:local GatewayA 211.24.149.41
:local ipB 211.24.139.114
:local GatewayB 211.24.139.113
:local GatewayC 192.168.0.250
#ping gateways with src
:local pingresultA [/ping www.google.com src-address=$ipA count=$pingcount]
:local pingresultB [/ping www.google.com src-address=$ipB count=$pingcount]
#if link_A is DOWN and link_B is UP then:
:if (($pingresultA=0) && ($pingresultB=3)) do={
/ip route set [find comment="Default Gateway"] gateway=$GatewayB
}
#if link_A is UP and link_B is DOWN then:
:if (($pingresultA=3) && ($pingresultB=0)) do={
/ip route set [find comment="Default Gateway"] gateway=$GatewayA
}
#if both link DOWN:
:if (($pingresultA=0) && ($pingresultB=0)) do={
/ip route set [find comment="Default Gateway"] gateway=$GatewayC
}
# Link A or Link B both are UP:
:if (($pingresultA=$pingcount) && ($pingresultB=$pingcount)) do={
#send alert email
/tool e-mail send subject=($ipA . "is up now") \
body=("the gateway is backed up at: " . [/system clock get date]) \ to=("zirnevis@gmail.com")
#disable all multi-session balancing mangles
/ip firewall mangle set [find chain=prerouting in-interface=LAN \
connection-mark=even action=mark-routing passthrough=no] disabled=no
/ip firewall mangle set [find chain=prerouting in-interface=LAN \
connection-state=new new-connection-mark=even passthrough=yes \
action=mark-connection nth=1,1,1] disabled=no
/ip firewall mangle set [find chain=prerouting in-interface=LAN \
connection-mark=odd action=mark-routing new-routing-mark=odd \
passthrough=no] disabled=no
/ip firewall mangle set [find chain=prerouting in-interface=LAN nth=1,1,0 \
action=mark-connection new-connection-mark=odd \
passthrough=yes] disabled=no
#disable current scheduler
/system scheduler set [find name=ping_google_link_A-down] disabled=no
#enable -up scheduler
/system scheduler set [find name=ping_google_link_A-up] disabled=yes
#set gateway back to GatewayB
/ip route set [find comment="Default Gateway"] gateway=$GatewayB
}
script go down:
#set variables
:local pingcount 3
:local ipA 211.24.149.42
:local GatewayA 211.24.149.41
:local ipB 211.24.139.114
:local GatewayB 211.24.139.113
:global state no
#ping gateways with src
:local pingresultA [/ping www.google.com src-address=$ipA count=$pingcount]
:local pingresultB [/ping www.google.com src-address=$ipB count=$pingcount]
# Link A or Link B is down then>
:if (($pingresultA=0) || ($pingresultB=0)) do={
#send email
/tool e-mail send subject=($ipA . " is down") \
body=("the gateway is down now at: " . [/system clock get date]) \ to=("zirnevis@gmail.com")
#disable all multi-session balancing mangles
/ip firewall mangle set [find chain=prerouting in-interface=LAN \
connection-mark=even action=mark-routing passthrough=no] disabled=yes
/ip firewall mangle set [find chain=prerouting in-interface=LAN \
connection-state=new new-connection-mark=even passthrough=yes \
action=mark-connection nth=1,1,1] disabled=yes
/ip firewall mangle set [find chain=prerouting in-interface=LAN \
connection-mark=odd action=mark-routing new-routing-mark=odd \
passthrough=no] disabled=yes
/ip firewall mangle set [find chain=prerouting in-interface=LAN nth=1,1,0 \
action=mark-connection new-connection-mark=odd \
passthrough=yes] disabled=yes
#disable current scheduler
/system scheduler set [find name=ping_google_link_A-down] disabled=yes
#enable -up scheduler
/system scheduler set [find name=ping_google_link_A-up] disabled=no
#set gateway to secondary or tertiary
#if link_A is DOWN and link_B is UP then:
:if (($pingresultA=0) && ($pingresultB>0)) do={
/ip route set [find comment="Default Gateway"] gateway=211.24.139.113
}
#if link_A is UP and link_B is DOWN then:
:if (($pingresultA>0) && ($pingresultB=0)) do={
/ip route set [find comment="Default Gateway"] gateway=211.24.149.41
}
#if link_A and link_B both were DOWN then:
:if (($pingresultA=0) && ($pingresultB=0)) do={
/ip route set [find comment="Default Gateway"] gateway=192.168.0.250
}
}
Source : http://wiki.mikrotik.com/wiki/Improved_Load_Balancing_over_Multiple_Gateways_Failover_Script
May Be useful
Regards
Merah Putih Segoroasat
Thanks
Tidak ada komentar :
Posting Komentar