-
Notifications
You must be signed in to change notification settings - Fork 2
/
dns_healthcheck.rsc
61 lines (46 loc) · 2.31 KB
/
dns_healthcheck.rsc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
###### 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 "mikrotik.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 300 seconds";
}
}