Duck DNS Update Script for MikroTik RouterOS 5.26 Behind NAT

I would like to share another Duck DNS Update Script for MikroTik RouterOS v5.26 which able to work if you place the RouterBOARD behind another router. Please note that this script can only fetch HTTP URL instead of HTTPS URL. You need the following policy read, write, policy, test for this script and remember to set a scheduler.

# Duck DNS Update Script for MikroTik RouterOS 5.26 behind NAT

#--------------- Change Values in this section to match your setup ------------------

:local ducktoken "your-token"
:local duckdomain "your-domain"
:local ddnshost "$duckdomain.duckdns.org"

#------------------------------------------------------------------------------------
# No more changes need

:local ipddns [:resolve $ddnshost]

/tool fetch mode=http address="icanhazip.com" src-path="/" dst-path="/icanhazip.txt"
:delay 3
:local result [/file get icanhazip.txt contents]

:local resultLen [:len $result]
:local endLoc [:find $result "\n" -1]
:local ipfresh [:pick $result 0 $endLoc]
:log info "Duck DNS: IP detected from icanhazip.com is $ipfresh"

:if ($ipddns != $ipfresh) do={
    :log info "Duck DNS: Old IP is $ipddns"
    :log info "Duck DNS: New IP is $ipfresh"
    /tool fetch url="http://www.duckdns.org/update\?domains=$duckdomain&token=$ducktoken&ip=$ipfresh" dst-path=duckdns.txt
    :global ipddns $ipfresh
    :log info "Duck DNS: IP updated to $ipfresh!"
    } else={
     :log info "Duck DNS: Current IP is $ipddns"
     :log info "Duck DNS: Detected IP is same with current IP, dont need changes"
    }
}

Thank you.