Скрипт для 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"
Скрипт запускается по шедуллеру, логика работы скрипта:
- Через основной канал пингуется хост в интернет с высоким аптаймом (в примере - через 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
