скрипт переключения с основного канала на резервный mikrotik router os6

Имеем 2 канала WAN, основной оптика — статика, 3g модем huawei e392(мегафон) — динамика tele2.
Прошивка родная мегафоновская, только снимал блокировку на провайдера.

 / ip route print detail where comment =ISP1
Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
 0 A S  ;;; ISP1
        dst-address=0.0.0.0/0 gateway=212.118.55.17 gateway-status=212.118.55.17 reachable via  ether1-gateway
        check-gateway=ping distance=1 scope=30 target-scope=10


/interface ppp-client print
Flags: X - disabled, R - running

 0 X  ;;; ISP2
      name="ppp-tele2" max-mtu=1500 max-mru=1500 mrru=disabled port=usb3 data-channel=0 info-channel=0
      apn="internet.tele2.ru" pin="" user="" password="" profile=default phone="" dial-command="ATDT"
      modem-init="" null-modem=no dial-on-demand=no add-default-route=yes default-route-distance=2
      use-peer-dns=yes keepalive-timeout=0 allow=pap,chap,mschap1,mschap2

 

Вместо netwatch используем скрипт, который с помощью шедулера надо запускать, к примеру, каждые 10-30 секунд.

#Name:          backup3G
#Version:       1.0
#Created:       Gerasimov A. with my fix
#Web:           http://papa-admin.ru
#Date:          01.2014
#Description:  failover for 3G modem
#
:local PingCount 3;

:local InterfaceWan ether1-gateway;
:local Interface3G ppp-tele2;
:local CheckIp 193.0.14.129;
:local Use3G false;

:local WANstatus [/interface get [/interface find name="$InterfaceWan"] running];
:if ($WANstatus=false) do={
	:set Use3G true;
} else {
	:local CheckMainISP [/ping $CheckIp count=$PingCount interface=$InterfaceWan];
	:if ($CheckMainISP=3) do={
		:set Use3G false;
	} else {
		:set Use3G true;
	}
}
:local 3Gstatus [/interface get [/interface find name="$Interface3G"] running];
:if ($Use3G=true) do={
	if ($3Gstatus=false) do={
		/interface enable [find name="$Interface3G"];
		:log warning "Set routes to 3G ISP";
	}
} else {
	:if ($3Gstatus=true) do={
		/interface disable [find name="$Interface3G"];
		:log warning "Set routes to Main ISP";
	}
}

 

Немного пояснений:

InterfaceWan — основной интерфейс
Interface3G — резервный интерфейс 3G модема
CheckIP — ip адрес, пинг которого проверяется для работоспособности основного интерфейса, и маршрутизация которого настроена через основной интерфейс.

Чтобы прописать скрипт и шедулер подключаемся к маршрутизатору по ssh или через WinBox и New Terminal и вводим:

/system script
add name=backup3G policy=\
    ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api \
    source="#Name:          backup3G\r\
    \n#Version:       1.0\r\
    \n#Created:       Gerasimov A. with my fix\r\
    \n#Web:           http://papa-admin.ru\r\
    \n#Date:          01.2014\r\
    \n#Description:  failover for 3G modem\r\
    \n#\r\
    \n:local PingCount 3;\r\
    \n\r\
    \n:local InterfaceWan ether1-gateway;\r\
    \n:local Interface3G ppp-tele2;\r\
    \n:local CheckIp 193.0.14.129;\r\
    \n:local Use3G false;\r\
    \n\r\
    \n:local WANstatus [/interface get [/interface find name=\"\$InterfaceWan\
    \"] running];\r\
    \n:if (\$WANstatus=false) do={\r\
    \n\t:set Use3G true;\r\
    \n} else {\r\
    \n\t:local CheckMainISP [/ping \$CheckIp count=\$PingCount interface=\$InterfaceWan];\r\
    \n\t:if (\$CheckMainISP=3) do={\r\
    \n\t\t:set Use3G false;\r\
    \n\t} else {\r\
    \n\t\t:set Use3G true;\r\
    \n\t}\r\
    \n}\r\
    \n:local 3Gstatus [/interface get [/interface find name=\"\$Interface3G\"]\
    \_running];\r\
    \n:if (\$Use3G=true) do={\r\
    \n\tif (\$3Gstatus=false) do={\r\
    \n\t\t/interface enable [find name=\"\$Interface3G\"];\r\
    \n\t\t:log warning \"Set routes to 3G ISP\";\r\
    \n\t}\r\
    \n} else {\r\
    \n\t:if (\$3Gstatus=true) do={\r\
    \n\t\t/interface disable [find name=\"\$Interface3G\"];\r\
    \n\t\t:log warning \"Set routes to Main ISP\";\r\
    \n\t}\r\
    \n}\r\
    \n"

 

/system scheduler add interval=10s name=checkISP on-event=backup3G

 

Я поставил чтобы скрипт запускался каждые 10 секунд.
Работоспособность проверена на 2011UiAS-2HnD и ROS 6.32.3

Спасибо. + Не забыть dial-on-demand=no add-default-route=yes default-route-distance=2 на модем.

  1. Пока комментариев нет.

  1. Пока что обратных ссылок нет.