MT DDNS in the 3 years that I use it, only failed for 2 days (Problem with MT related DDNS domain)
MT IP/Cloud DDNS was fine for 99.99% of the time.
For the rest it doesn't matter what device does the DDNS update.
I use the NAS (Synology for its Nextcloud in Docker container) to do it for the NO-IP set DDNS (NO-IP requires monthly reset for the free DDNS registration)
Only one DDNS name can be maintained in the NAS. I needed some more.
So I added (copied from somewhere from Internet ) the following script in de MT, to refresh the NO-IP DDNS: (EDIT the <> fields with the proper data)
This MT with script can be anywhere in the LAN. (It is behind NAT, does NAT etc .... it retrieves and uses the public IP , just as MT IP/Cloud does)
The DDNSes point to the public IP. I can use any DDNS set here for any purpose, actually one is used for another MT doing the VPN server HUB function, with DDNS fallbacks to IP/Cloud.
#Dynamic DNS Update Script for No-IP DNS behind nat
# Set needed variables
:local username "<my NO-IP user name>"
:local password "<my NO-IP password>"
:local host "<my hostname with NO IP>.ddns.net"
:global previousIP
# print some debug info
:log info ("Update No-IP DNS: username = $username")
:log info ("Update No-IP DNS: hostname = $host")
:log info ("Update No-IP DNS: previousIP = $previousIP")
#
# behind nat - get the public address using dyndns url http://checkip.dyndns.org
/tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"
:delay 2
:local result [/file get dyndns.checkip.html contents]
:log info "dyndns result = $result"
# parse the current IP result
:local resultLen [:len $result]
:local startLoc [:find $result ": " -1]
:set startLoc ($startLoc + 2)
:local endLoc [:find $result "</body>" -1]
:local currentIP [pick $result $startLoc $endLoc]
:log info "No-IP DNS: currentIP = $currentIP"
:if ($currentIP != $previousIP) do={
:log info "No-IP: Current IP $currentIP is not equal to previous IP, update needed"
:set previousIP $currentIP
:local url "http://dynupdate.no-ip.com/nic/update/?myip=$currentIP&hostname=$host"
:log info "No-IP DNS: Sending update for $host"
/tool fetch url=$url user=$username password=$password mode=http dst-path=("no-ip_ddns_update.txt")
:log info "No-IP DNS: Host $host updated on No-IP with IP $currentIP"
:delay 2
:local result [/file get "no-ip_ddns_update.txt" contents]
:log info "Update Result = $result"
} else={
:log info "No-IP: update not needed "
}
# end