How to optimize this script? I dream of using an array of DoH servers and a loop that will check one by one and select the available DoHs, but not with my scripting kiddie skills.
Code: Select all
:local result yes
:do {tool fetch url="https://cloudflare-dns.com/dns-query\?name=mikrotik.ca%26type=A" output=none dst-path=result http-header-field=accept:application/dns-json} on-error={:set result no}
:if $result do={
:local testdns [/ip dns get use-doh-server];
:if ($testdns != "https://cloudflare-dns.com/dns-query") do={
/ip dns set servers="" use-doh-server="https://cloudflare-dns.com/dns-query" verify-doh-cert=yes;:log warning "DNS over HTTPS returned to cloudflare-dns.com"
}
} else={
:set result yes;
:do {tool fetch url="https://1.0.0.1/dns-query\?name=mikrotik.ca%26type=A" output=none dst-path=result http-header-field=accept:application/dns-json} on-error={:set result no}
:if $result do={
/ip dns set servers="" use-doh-server="https://1.0.0.1/dns-query" verify-doh-cert=yes;:log warning "DNS over HTTPS changed to 1.0.0.1"
} else={
:set result yes
:do {tool fetch url="https://dns.google.com/resolve\?name=mikrotik.ca%26type=A" output=none dst-path=result http-header-field=accept:application/dns-json} on-error={:set result no}
:if $result do={
/ip dns set servers="" use-doh-server="https://dns.google/dns-query" verify-doh-cert=yes;:log warning "DNS over HTTPS changed to dns.google"
} else={
/ip dns set servers="1.1.1.1,8.8.8.8,1.0.0.1,8.8.4.4" use-doh-server="";:log warning "DNS over HTTPS switched off!"
}
}
}