Скрипт переключения каналов на Mikrotik

1 мин

Скрипт переключения каналов на Mikrotik

Скрипт для RouterOS, проверяющий интернет на основном канале с автоматическим переключением на резервный при недоступности.

Важно - скрипт подразумевает, что у вас настроено два канала (основной на ether1 с комментарием Main route и distance=1, а также резервный с комментарием Backup route и distance=2). Пример:

/ip route 
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=1.1.1.1 routing-table=main scope=30 target-scope=10 comment=" Main route"
add disabled=no distance=2 dst-address=0.0.0.0/0 gateway=2.2.2.2 routing-table=main scope=30 target-scope=10 comment=" Backup route"

Скрипт запускается по шедуллеру, логика работы скрипта:

  1. Через основной канал пингуется хост в интернет с высоким аптаймом (в примере - через ether1 пингуется ip Яндекс-DNS)
    1.1 Если ни один из пингов не отвечен (интернета нет) - проверяется, какая метрика у маршрута Main route.
    1.1.1 Если distance=1, то метрика меняется на 3 и производится запись в логи о переключении на резерв.
    1.1.2 Если distance=3 (т.е. трафик уже идёт через резервный канал, то ничего не меняется)

    1.2 Если пингуемый хост ответил на пинг (основной канал работоспособен) - проверяется, какая метрика у маршрута Main route.
    1.2.1 Если distance=3 (т.е., несмотря на доступность основного, трафик идёт через резервный канал), то маршруту Main route устанавливается метрика 1 и производится запись в логи о переключение на основной канал.
    1.2.2 Если distance=1 (т.е. трафик уже идёт через основной канал, то ничего не меняется)

    Листинг скрипта:
:local pingresult [/ping 77.88.8.88 interface=ether1 count=3]; 
:if ($pingresult = 0) do={
    :local actualdist [/ip route get [find comment="Main route"] distance];
    :if ($actualdist = 1) do={
        :log warning "Switched to backup route";
        /ip/route/set [find comment="Main route"] distance=3; 
        }
    } else={
    :local actualdist [/ip route get [find comment="Main route"] distance];
    :if ($actualdist = 3) do={
        :log info "Switched to main route";
        /ip/route/set [find comment="Main route"] distance=1; 
        }
    }

Сохраните скрипт под любым названием (например - wan_test) и добавьте запуск по расписанию с необходимой частотой. В поле On event впишите:

/system script run wan_test 

Туда Сюда