Overview
The following script has been modified from the one available at the following address to work with direct-to-OpenDNS updates: "http://wiki.mikrotik.com/wiki/Dynamic_DNS_Update_Script_for_DNSoMatic.com".
The script below is confirmed to work; however, may break at any time due to MikroTik changes. While this script is designed for Mikrotik OS, this is accessed via WinBox and should work on other WinBox script compatible devices. There are two versions:
Version 1 - Always Send Update
#--------------- Change Values in this section to match your setup ------------------
# User account info of OpenDNS
# Update-only password (obtained from OpenDNS Support). With two-factor authentication enabled, the use of an update only password is required.
:local odnsuser "email@address.com"
:local odnspass "update-only-password"# Set the hostname or label of network to be updated. This is the name of your OpenDNS network on the Dashboard.
# Hostnames with spaces are unsupported. Replace the value in the quotations below with your host name.
# Only one host is supported
# Use "all.dnsomatic.com" for the matichost to update all items in dnsomatic with this IP.# Note, you must have admin or edit (Read/Write/Grant in the OpenDNS Dashboard) to update IP addresses.
:local odnshost "networkname"
# Change to the name of interface that gets the changing IP address
# May not be needed for your model number - commenting out this line may still work for single interface devices or if this is not supplied in the DNS-O-Matic script currently being used
:local inetinterface "ether1"
#------------------------------------------------------------------------------------
# No more changes needed, one optional change
:global previousIP;
:log info "Fetching current IP"
# Get the current public IP using DNS-O-Matic service.
/tool fetch url="http://myip.dnsomatic.com/" mode=http dst-path=mypublicip.txt# Read the current public IP into the currentIP variable.
:local currentIP [/file get mypublicip.txt contents]:log info "Fetched current IP as $currentIP"
# --------- Optional check to only run if the IP has changed (one line: :if)
# to enable, set line below to: ":if ($currentIP != $currentIP) do={"
:if ($currentIP != 1) do={
:log info "OpenDNS: Update needed"
:set previousIP $currentIP# The update URL. Note the "\3F" is hex for question mark (?). Required since ? is a special character in commands.
# Some older editions of the MicroTik/WinBox OS require the following line instead (http) whereas newer versions require https.
# :local url "http://updates.opendns.com/nic/update\3Fhostname=$odnshost"
:local url "https://updates.opendns.com/nic/update\3Fhostname=$odnshost"
:log info "OpenDNS: Sending update for $odnshost"/tool fetch url=($url) user=$odnsuser password=$odnspass mode=http dst-path=("/net_odns.txt")
:delay 2;
:local odnsReply [/file get net_odns.txt contents];
:log info "OpenDNS update complete."
:log info "OpenDNS reply was $odnsReply";
} else={
:log info "OpenDNS: Previous IP $previousIP and current IP equal, no update need"
}
Version 2 - Only send updates when a new IP is detected
#--------------- Change Values in this section to match your setup ------------------
# User account info of OpenDNS
# Update-only password (obtained from OpenDNS Support). With two-factor authentication enabled, the use of an update only password is required.
:local odnsuser "email@address.com"
:local odnspass "update-only-password"# Set the hostname or label of network to be updated. This is the name of your OpenDNS network on the Dashboard.
# Hostnames with spaces are unsupported. Replace the value in the quotations below with your host name.
# Only one host is supported
# Use "all.dnsomatic.com" for the matichost to update all items in dnsomatic with this IP.# Note, you must have admin or edit (Read/Write/Grant in the OpenDNS Dashboard) to update IP addresses.
:local odnshost "networkname"
# Change to the name of interface that gets the changing IP address
# May not be needed for your model number - commenting out this line may still work for single interface devices or if this is not supplied in the DNS-O-Matic script currently being used
:local inetinterface "ether1"
#------------------------------------------------------------------------------------
# No more changes needed, one optional change
:global previousIP;
:log info "Fetching current IP"
# Get the current public IP using DNS-O-Matic service.
/tool fetch url="http://myip.dnsomatic.com/" mode=http dst-path=mypublicip.txt# Read the current public IP into the currentIP variable.
:local currentIP [/file get mypublicip.txt contents]:log info "Fetched current IP as $currentIP"
# --------- Optional check to only run if the IP has changed (one line: :if)
# to disable, set line below to: ":if ($currentIP != 1) do={"
:if ($currentIP != $previousIP) do={
:log info "OpenDNS: Update needed"
:set previousIP $currentIP# The update URL. Note the "\3F" is hex for question mark (?). Required since ? is a special character in commands.
# Some older editions of the MicroTik/WinBox OS require the following line instead (http) whereas newer versions require https.
# :local url "http://updates.opendns.com/nic/update\3Fhostname=$odnshost"
:local url "https://updates.opendns.com/nic/update\3Fhostname=$odnshost"
:log info "OpenDNS: Sending update for $odnshost"/tool fetch url=($url) user=$odnsuser password=$odnspass mode=http dst-path=("/net_odns.txt")
:delay 2;
:local odnsReply [/file get net_odns.txt contents];
:log info "OpenDNS update complete."
:log info "OpenDNS reply was $odnsReply";
} else={
:log info "OpenDNS: Previous IP $previousIP and current IP equal, no update need"
}