# OPEN-DNS automatic Dynamic DNS update #--------------- Change Values in this section to match your setup ------------------ # OPEN-DNS User account info :local opendnsuser "USER" :local opendnspass "PASSWORD" # Set the hostname or label of network to be updated. # Hostnames with spaces are unsupported. Replace the value in the quotations below with your host names. # To specify multiple hosts, separate them with commas. :local opendnshost "LABEL" # Change to the name of interface that gets the dynamic IP address :local inetinterface "ETHER" #------------------------------------------------------------------------------------ # No more changes need :global previousIPOpenDNSether :if ([/interface get $inetinterface value-name=running]) do={ # Get the current IP on the interface :local currentIP [/ip address get [find interface="$inetinterface" disabled=no] address] # Strip the net mask off the IP address :for i from=( [:len $currentIP] - 1) to=0 do={ :if ( [:pick $currentIP $i] = "/") do={ :set currentIP [:pick $currentIP 0 $i] } } :if ($currentIP != $previousIPOpenDNSether) do={ :log info "OPEN-DNS: Current IP $currentIP is not equal to previous IP, update needed" :set previousIPOpenDNSether $currentIP # The update URL. Note the "\3F" is hex for question mark (?). Required since ? is a special character in commands. :local url "https://updates.opendns.com/nic/update" :local opendnshostarray :set opendnshostarray [:toarray $opendnshost] :foreach host in=$opendnshostarray do={ :log info "OPEN-DNS: Sending update for $host" /tool fetch url=($url . "&system=dyndns&hostname=$host") user=$opendnsuser password=$opendnspass mode=https keep-result=no dst-path=("open-dns_ddns_update-" . $host . ".txt") :log info "OPEN-DNS: Host $host updated on OPEN-DNS with IP $currentIP" } } else={ :log info "OPEN-DNS: Previous IP $previousIPOpenDNSether is equal to current IP, no update needed" } } else={ :log info "OPEN-DNS: $inetinterface is not currently running, so therefore will not update." }