Скрипт проверки интернета в MikroTik

Заметки на полях. Скрипт для проверки доступности хостов с помощью icmp протокола, он же ping.

Перебираются по порядку все IP адреса из массива addr, до того момента пока один из IP адресов не будет доступен. Как только адрес будет доступен, перестаёт идти проверка.

При наличии более одного провайдера у вас обязательно должна быть именована таблица маршрутизации которая замкнута “сама в себя” lookup-only-in-table.

Вы можете задавать различные параметры из названия можно понять за что отвечает тот или иной параметр.


### ----- start settings script ----- ### 
:local addr [:toarray "8.8.8.8,8.8.4.4,77.88.8.8,77.88.8.1,77.88.8.88,77.88.8.2"];
:local Table "ISP1";
:local CheckPingCount 3;
:local CheckPingTtl 64;
:local CheckPingInterval 1;
### ----- end settings script ----- ###

:local InternetIsset false;
:foreach ipp in $addr do={
    :if ($InternetIsset=false) do={
        :if ([/ping address=$ipp count=$CheckPingCount routing-table=$Table interval=$CheckPingInterval ttl=$CheckPingTtl] = 0) do={
            /log warning message="Internet test fail for address $ipp In table $Table";
        } else={
            /log warning message="Internet test success for $ipp In table $Table";
            :set InternetIsset true;
        }
    }
}

:if ($InternetIsset=false) do={
    #test failed
    /log warning message="Internet fail In table $Table";
}else ={
    #test success
}

Если вам необходимо выполнять какие-либо действия по результатам проверки, в сам конце скрипта находиться два блока if/else. Первый блок отвечает за выполнение при отрицательном результате, второй блок соответственно за положительный результат.

Пример как можно использовать блок

:local ruleCount [/ip route rule print count-only where disabled comment="ether1-fail"]
:if ($InternetIsset=false) do={
 :if($ruleCount=0) do={
   /ip route rule enable [find comment="ether1-fail"];
  }
  /log warning message="Internet fail In table $Table";
} else={
   :if($ruleCount > 0) do={
    /ip route rule disable [find comment="ether1-fail"];
  }
}

Поделиться

Обсуждение