Mikrotik: скрипт CheckDNS

Простой скрипт для проверки доступности DNS-серверов и переключения на вторичные в случае недоступности основных.

Адреса первичных/вторичных серверов, имя домена для разыменования нужно подставить, разумеется, свои.

# Mikrotik router CheckDNS script
# E-mail: [email protected]
# Script check resolving $testDomain for each server in masterDNS
# If not resovling - switch to backupDNS server and vice versa

:local currentDNS [/ip dns get server]
:local masterDNS {"10.1.1.10"; "10.1.2.10"}
:local backupDNS {"77.88.8.88"; "77.88.8.2"}
:local testDomain "home.local-domain.ru"
:local failCount
:local maxFails 1

:foreach dnsServer in=$masterDNS do={
 :do {
   :resolve $testDomain server $dnsServer
 } on-error={
     :set failCount ($failCount + 1)
   }
}

:if ($failCount>$maxFails) do={
 :if ($currentDNS = $masterDNS) do={
    :log warning "Internal DNS resolving NOT OK, switch to External DNS"
    /ip dns set servers=$backupDNS;
 } else={
     :log warning "Internal DNS resolving NOT OK, still using External DNS"
   }
} else={
  :if ($currentDNS = $masterDNS) do={
  } else={
      :log warning "Internal DNS resolving OK, switch to Internal DNS"
      /ip dns set servers=$masterDNS;
    }
};