Метка: script

  • Скрипт ping для проверки интернета на MikroTik

    Скрипт ping для MikroTik последовательно проверяет несколько адресов через указанную таблицу маршрутизации и завершает поиск после первого успешного ответа. Это простой индикатор ICMP-доступности.

    Успешный ping не подтверждает работу DNS, HTTP или нужного приложения. Для решения о переключении канала добавьте несколько независимых целей, задержки и проверку сервиса более высокого уровня.

    
    ### ----- 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"];
      }
    }

    Как проверить результат

    • Запустите скрипт вручную и проверьте записи журнала.
    • Заблокируйте одну тестовую цель и убедитесь, что проверка переходит к следующей.
    • Отключите канал и проверьте отрицательный результат именно в заданной routing-table.

    Источники и связанные материалы

    Команды в статье меняют сетевую конфигурацию. Перед работой сохраните экспорт, подготовьте способ восстановления доступа и применяйте изменения сначала в тестовой среде.