Mikrotik проверка и переключение маршрута

// Январь 27th, 2017 // mikrotik, Network, routing, script

Ситуация: есть L2 транспорт и его резервный канал, на канале L2 софт использует адрес on-connected (см. рис.) 10.1.1.1, который в случаи обрыва L2 канала становится недоступным и нужно переключить маршрут на резервный канал.

Попытка реализовать стандартными средствами: создать два маршрута на адрес 10.1.1.1, один через основной канал с меньшей метрикой (больший приоритет) и второй с большей метрикой через резервный — не увенчалась успехом, т.к. первый маршрут не становился неактивны при падении линка даже при условии микротиковской фичи проверки наличия ARP. Было так:

/ip route
 add distance=10 dst-address=10.1.1.1/32 gateway=10.4.12.1
 add distance=1 dst-address=10.1.1.1/32 gateway=ether1 check-gateway=arp

но не работало =(

Решение было написать скрипт, который проверяет наличие ARP записи и переключает маршрут

собственно сам скрипт:

:local checkARPIP "10.3.4.100";
:local RouteComment "check";

:local checkARPMAC [/ip arp get [find where address=$checkARPIP] mac-address];
:put [:len $checkARPMAC];

if ( [:put [:len $checkARPMAC]] > 0 ) \
 do={
  if ([/ip route find where comment=$RouteComment disabled=yes] != "") \
   do={
    /ip route set [find where comment=$RouteComment] disabled=no;
    :log warning "check ARP state UP, check route is UP now!";
   } \
   else={
    :log info "check ARP state UP, route keep UP state";
   }
 } \
 else {
  if ([/ip route find where comment=$RouteComment disabled=no] != "") \
   do={
    /ip route set [find where comment=$RouteComment] disabled=yes;
    :log error "check ARP state DOWN, check route is DOWN now!";
   } \
   else={
    :log info "check ARP state DOWN, route keep DOWN state";
   }
 }
ПоказатьВыделить для импорта в консоле:

далее маршруты, которые нужно отключать при отрицательном результате проверки нужно пометить комментарием «check», это к стати, плюс, таких маршрутов может быть несколько. Пример:

/ip route
 add distance=10 dst-address=10.1.1.1/32 gateway=10.4.12.1
 add distance=1 dst-address=10.1.1.1/32 gateway=ether1 comment=check
 add distance=1 dst-address=10.10.1.0/24 gateway=ether1 comment=check

и добавить все это дело в планировщик заданий для автоматического запуска:

/system scheduler
add interval=1m name=checkARP on-event=checkARP policy=read,write,test,sensitive start-time=startup

Leave a Reply