Mikrotik — автоматическое переключение на резервный канал

На складе подключили резервный канал (Yota), надо настроить резервирование каналов:

eth3 — Основной канал
eth4 — Резервный канал

Прописываем IP для интерфейсов:

/ip address
add address=10.8.10.100/24 broadcast=10.8.10.255 comment=LAN disabled=no interface=eth2 network=10.8.10.0
add address=192.168.15.1/24 broadcast=192.168.15.255 comment=isp2 disabled=no interface=eth4 network=192.168.15.0
add address=192.168.20.253/24 broadcast=192.168.20.255 comment=isp1 disabled=no interface=eth3 network=192.168.20.0

Прописываем основные маршруты:

/ip route
add check-gateway=ping comment=gw1 disabled=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.20.254 scope=30 target-scope=10
add check-gateway=ping comment=gw2 disabled=yes distance=1 dst-address=0.0.0.0/0 gateway=192.168.15.254 scope=30 target-scope=10

Прописываем маршруты для хостов которые будем пинговать , я пингую DNS Google и OpenDNS

/ip route
add comment=through_ISP1 disabled=no distance=1 dst-address=8.8.8.8/32 gateway=192.168.20.254 scope=30 target-scope=10
add comment=through_ISP2 disabled=no distance=1 dst-address=208.67.222.222/32 gateway=192.168.15.254 scope=30 target-scope=10

Сам скрипт я его назвал backupISP :

/system script
add name=backupISP policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive source=":local PingCount 3;r
    nr
    n:local CheckIp1 8.8.8.8;r
    n:local CheckIp2 208.67.222.222;r
    nr
    n:local eTo "ndm.admins@domain.local";r
    nr
    n:local rName [/system identity get name];r
    n:local rDate [/system clock get date];r
    n:local rTime [/system clock get time];r
    n:local eSubj ($rName . " " . $rDate . " " . $rTime);r
    nr
    n:local isp1 [/ping $CheckIp1 count=$PingCount];r
    n:local isp2 [/ping $CheckIp2 count=$PingCount];r
    nr
    n:local BackGw [/ip route get [find comment="gw2"] disable];r
    n#if main ISP is DOWN and backup ISP is UP then:r
    n:if (($isp1=0) && ($isp2=$PingCount) && ($BackGw=true)) do={r
    n:log warning "Set routes to backup ISP";r
    n/ip route disable [find comment="gw1"];r
    n/ip route enable [find comment="gw2"];r
    n/tool e-mail send to=$eTo subject=($eSubj . " Main ISP is DOWN") body="Set routes to backup ISP";r
    n}r
    nr
    n:local MainGw [/ip route get [find comment="gw1"] disable];r
    n#if main ISP is UP then:r
    n:if (($isp1=$PingCount) && ($MainGw=true)) do={r
    n:log warning "Set routes to main ISP";r
    n/ip route enable [find comment="gw1"];r
    n/ip route disable [find comment="gw2"];r
    n/tool e-mail send to=$eTo subject=($eSubj . " Main ISP is UP") body="Set routes to main ISP";r
    n}"

Далее нужно настроить отправку почты:

/tool e-mail set from=gw-central-warehouse@domain.local password="" server=10.8.254.7:25 username=""

Настраиваем планировщик который будет запускать скрипт каждые 30 секунд:

/system scheduler
add comment="" disabled=no interval=30s name=backipISP on-event=backupISP 
policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive start-date=jan/02/1970 start-time=02:13:10

Проверяем и радуемся =)
Отмечу вариант реализованный TangaRUS , не чем не хуже предложенным мною.

Оставить комментарий