Add dns-healtcheck
This commit is contained in:
commit
00676cf152
71
dns-healtcheck
Normal file
71
dns-healtcheck
Normal file
@ -0,0 +1,71 @@
|
||||
##
|
||||
## Automatically DNS Healthcheck
|
||||
##
|
||||
##
|
||||
## script by Mattia Tadini
|
||||
## created: 2025-01-05
|
||||
## updated: 2025-01-05
|
||||
## tested on: RouterOS 7.16.2 / multiple HW devices, won't work on 6.49 and older (different update process & value naming)
|
||||
##
|
||||
|
||||
###### define variables here
|
||||
|
||||
:local sysname [/system identity get name];
|
||||
:local Email "[YOUR EMAIL ADDRESS FOR NOTIFICATIONS HERE]"; ###### please configure SMTP in /tools/email to use mail notifications
|
||||
|
||||
:local PrimaryDNS "[YOUR PRIMARY DNS IP HERE]";
|
||||
:local BackupDNS "1.1.1.1"; #### CloudFare public DNS as backup (better than Google's)
|
||||
:local TestDomain "google.com"
|
||||
|
||||
:local ConfiguredDNS [/ip dns get servers];
|
||||
|
||||
###### when router is in its primary configuration
|
||||
:if ($PrimaryDNS = $ConfiguredDNS) do={
|
||||
:do {
|
||||
###### test resolution
|
||||
:put [:resolve $TestDomain server $ConfiguredDNS];
|
||||
|
||||
###### generate syslog messages
|
||||
/log info "Primary DNS $PrimaryDNS healthcheck completed, no issues";
|
||||
|
||||
} on-error={
|
||||
:put "resolver failed";
|
||||
|
||||
###### generate syslog messages
|
||||
/log info "name resolution using primary DNS $PrimaryDNS failed";
|
||||
/log info "temporary setting backup DNS $BackupDNS as primary";
|
||||
|
||||
###### update DNS with backup DNS
|
||||
/ip dns set servers=$BackupDNS;
|
||||
|
||||
###### send notification email
|
||||
/tool e-mail send to="$Email" subject="$sysname script notification: Primary DNS $PrimaryDNS down" body="Primary DNS $PrimaryDNS is down.\r\nDNS configuration changed to backup DNS $BackupDNS."
|
||||
/log info "notification email to $Email sent";
|
||||
}
|
||||
}
|
||||
|
||||
###### when router is in its backup configuration
|
||||
:if ($BackupDNS = $ConfiguredDNS) do={
|
||||
:do {
|
||||
###### test resolution
|
||||
:put [:resolve $TestDomain server $PrimaryDNS];
|
||||
|
||||
###### generate syslog messages
|
||||
/log info "name resolution using primary DNS $PrimaryDNS working now";
|
||||
/log info "restoring original DNS configuration";
|
||||
|
||||
###### revert back DNS configuration to original
|
||||
/ip dns set servers=$PrimaryDNS;
|
||||
|
||||
###### send notification email
|
||||
/tool e-mail send to="$Email" subject="$sysname script notification: Primary DNS $PrimaryDNS up" body="Primary DNS $PrimaryDNS is up.\r\nOriginal DNS configuration restored."
|
||||
/log info "notification email to $Email sent";
|
||||
|
||||
} on-error={
|
||||
:put "resolver failed";
|
||||
|
||||
###### generate syslog messages
|
||||
/log info "system is configured with backup DNS $BackupDNS";
|
||||
/log info "Primary DNS $PrimaryDNS is still down, next check in 10 seconds";
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user