Добавить в корзинуПозвонить
Найти в Дзене
IT Helper

2 Провайдера переключение на роутере MIKROTIK

Есть билайн в первом порту микротика, статика. Есть Йота во втором порту микротика, DHCP. метрику для Йотовских дефолтных маршрутов поставил 8, что бы не перекликалось с билайном. Нужно, что бы в случает отсутствия связи через билайн, трафик гнался через йоту. в двух словах как работает скрипт: по билайну пингуется 8.8.4.4. как начинаются потери, он включает интерфейс с йотой. Йота добавляет по DHCP свою маршрутизацию. т.к. пользователи не могут простучаться через билайн, микротик гонит пакеты через йотовский шлюз. Когда налаживается связь, по метрике становится выгоднее гнать пакеты через билайновский шлюз. а потом и скрипт проверяет что пингуется 8.8.4.4 через билайн и отрубает порт йоты. в разделе /system scheduler добавляем новое задание. Задаем Interval - как часто выполнять скрипт. я поставил на 1 раз в минуту.
в тело скрипта(ниже будет еще такой же скрипт с комментариями): :local PingCount 3;
:local InterfaceWan ether1;
:local InterfaceYota ether2;
:local CheckIp 8.8.4.4;
:loc

Есть билайн в первом порту микротика, статика. Есть Йота во втором порту микротика, DHCP. метрику для Йотовских дефолтных маршрутов поставил 8, что бы не перекликалось с билайном. Нужно, что бы в случает отсутствия связи через билайн, трафик гнался через йоту.

в двух словах как работает скрипт: по билайну пингуется 8.8.4.4. как начинаются потери, он включает интерфейс с йотой. Йота добавляет по DHCP свою маршрутизацию. т.к. пользователи не могут простучаться через билайн, микротик гонит пакеты через йотовский шлюз. Когда налаживается связь, по метрике становится выгоднее гнать пакеты через билайновский шлюз. а потом и скрипт проверяет что пингуется 8.8.4.4 через билайн и отрубает порт йоты.

в разделе /system scheduler добавляем новое задание. Задаем Interval - как часто выполнять скрипт. я поставил на 1 раз в минуту.
в тело скрипта(ниже будет еще такой же скрипт с комментариями):

:local PingCount 3;
:local InterfaceWan ether1;
:local InterfaceYota ether2;
:local CheckIp 8.8.4.4;
:local UseYota false;
:local WANstatus [/interface get [/interface find name="$InterfaceWan"] running];
:if ($WANstatus=false) do={
:set UseYota true;
} else {
:local CheckMainISP [/ping $CheckIp count=$PingCount interface=$InterfaceWan];
:if ($CheckMainISP=3) do={
:set UseYota false;
} else {
:set UseYota true;
}
}
:local YotaStatus [/interface get [/interface find name="$InterfaceYota"] running];
:if ($UseYota=true) do={
if ($YotaStatus=false) do={
/interface enable [find name="$InterfaceYota"];
}
} else {
:if ($YotaStatus=true) do={
/interface disable [find name="$InterfaceYota"];
}
}

А вот теперь скрип с коментариями:

:local PingCount 3; // задаем локальную переменную сколько раз будем пинговать

:local InterfaceWan ether1; // задаем локальную переменную InterfaceWan куда помещаем имя основного порта ether1 с остновнам провайдером

:local InterfaceYota ether2; // задаем локальную переменную InterfaceYota куда помещаем имя резервного порта ether1 с резервным провайдером провайдером

:local CheckIp 8.8.4.4; // задаем локальную переменную CheckIp и присваиваем значание 8.8.4.4 адреса который будем пинговать, что бы проверить работоспособность интернета

:local UseYota false; // переменная UseYota для определения в ходе выполнения скрипта, нужно ли переключать на резервный канал TRUE, или не нужно переключать FALSE

:local WANstatus [/interface get [/interface find name="$InterfaceWan"] running]; // Делаем запрос на проверку есть ли подключение по порту ether1

:if ($WANstatus=false) do={ //Если вернулось значение false, то подключение отсутствует, линка нет, значит делаем...

:set UseYota true; // присваиваем переменной UseYota значение true, т.е. нам нужно врубать резервный канал

} else { //а если переменная $WANstatus=true, т.е. подключение активно то делаем ледаующее...

:local CheckMainISP [/ping $CheckIp count=$PingCount interface=$InterfaceWan]; // запускаем пингование 8.8.4.4

:if ($CheckMainISP=3) do={ // если вернулось значение 3, т.е. все три пинга выполнены успешно, то делаем следующее...

:set UseYota false; // присваиваем переменной UseYota значение false, т.е. не будем включать резервный канал

} else { // если не удачно прошло 3 пинга, то делаем следующее...

:set UseYota true; присваиваем переменной UseYota значение true, т.е. нам нужно врубать резервный канал

}

}

:local YotaStatus [/interface get [/interface find name="$InterfaceYota"] running]; // кладем в переменную YotaStatus значение true - если интерфейс ether2 включен/есть линк, и false если интерфейс отключен/нет линка

:if ($UseYota=true) do={ // проверяем нужно ли включать резервный канал. если true - то нужно, если false - то не нужно

:if ($YotaStatus=false) do={ // проверяем включен ли интервейс с йотой ether2, если выключен то делаем...

/interface enable [find name="$InterfaceYota"]; // включаем интерфейс

}

} else { //если интерфейс интерфейс с йотой выключен, то делаем...

:if ($YotaStatus=true) do={ // если интерфейс с йотой включен, то делаем...

/interface disable [find name="$InterfaceYota"]; // отключаем интерфейс с йотой, но это условие выполниться если интерфейс с йотой не нужно задействовать

}

}