Difference between revisions of "Ros3 Dyn DNS"

From CTWUG Wiki
Jump to: navigation, search
(New page: =Info= The following script should be created when you wish to update your ChangeIP.com Dynamic DNS account. Once created you should schedule this to run once in a while. The :global varia...)
 
(Fixed formatting)
Line 14: Line 14:
  
 
==Script==
 
==Script==
<code>
+
<pre><nowiki>
# Define User Variables
+
# Define User Variables
 
:global ddnsuser "username"
 
:global ddnsuser "username"
 
:global ddnspass "password"
 
:global ddnspass "password"
 
:global ddnshost "Host Name"
 
:global ddnshost "Host Name"
  
 
+
# Define Global Variables
# Define Global Variables
 
 
:global ddnsip
 
:global ddnsip
 
:global ddnslastip
 
:global ddnslastip
Line 30: Line 29:
  
  
# Define Local Variables
+
# Define Local Variables
 
:local int
 
:local int
 
   
 
   
  
# Loop thru interfaces and look for ones containing
+
# Loop thru interfaces and look for ones containing
# default gateways without routing-marks
+
# default gateways without routing-marks
 
:foreach int in=[/ip route find dst-address=0.0.0.0/0 active=yes ] do={  
 
:foreach int in=[/ip route find dst-address=0.0.0.0/0 active=yes ] do={  
 
   :if ([:typeof [/ip route get $int routing-mark ]] != str ) do={
 
   :if ([:typeof [/ip route get $int routing-mark ]] != str ) do={
Line 42: Line 41:
 
}
 
}
  
# Grab the current IP address on that interface.
+
# Grab the current IP address on that interface.
 
:global ddnsip [ /ip address get [/ip address find interface=$ddnsinterface ] address ]
 
:global ddnsip [ /ip address get [/ip address find interface=$ddnsinterface ] address ]
 
   
 
   
  
# Did we get an IP address to compare?
+
# Did we get an IP address to compare?
 
:if ([ :typeof $ddnsip ] = nil ) do={
 
:if ([ :typeof $ddnsip ] = nil ) do={
 
   :log info ("DDNS: No ip address present on " . $ddnsinterface . ", please check.")
 
   :log info ("DDNS: No ip address present on " . $ddnsinterface . ", please check.")
Line 68: Line 67:
 
   
 
   
  
# End of script
+
# End of script
 
:log info "DDNS: End"
 
:log info "DDNS: End"
 
+
</nowiki></pre>
</code>
 

Revision as of 16:14, 18 July 2009

Info

The following script should be created when you wish to update your ChangeIP.com Dynamic DNS account. Once created you should schedule this to run once in a while. The :global variables should be edited to include your unique username and password, interface name, etc. The script here should allow auto-detection of the default gateways interface name. This script below can be used if you have more than 1 WAN connection, but only 1 is active at a time.

This script will work as is, just navigate to System/Scripts and run it. This particular script works good with a 5 minute interval to update your Dynamic DNS with a scheduler.

Setup

For this script to function correctly, there are a few things that will need to be setup. Not necessary, but always good to have in place.

Enhancements

  • Check out Dynamic DNS Schedule to create a schedule, that will run the script at a predefined period.

Script

# Define User Variables
:global ddnsuser "username"
:global ddnspass "password"
:global ddnshost "Host Name"

# Define Global Variables
:global ddnsip
:global ddnslastip
:if ([ :typeof $ddnslastip ] = nil ) do={ :global ddnslastip "0" }

:global ddnsinterface
:global ddnssystem ("mt-" . [/system package get system version] )


# Define Local Variables
:local int
 

# Loop thru interfaces and look for ones containing
# default gateways without routing-marks
:foreach int in=[/ip route find dst-address=0.0.0.0/0 active=yes ] do={ 
  :if ([:typeof [/ip route get $int routing-mark ]] != str ) do={
     :global ddnsinterface [/ip route get $int interface]
  } 
}

# Grab the current IP address on that interface.
:global ddnsip [ /ip address get [/ip address find interface=$ddnsinterface ] address ]
 

# Did we get an IP address to compare?
:if ([ :typeof $ddnsip ] = nil ) do={
   :log info ("DDNS: No ip address present on " . $ddnsinterface . ", please check.")
} else={
 

  :if ($ddnsip != $ddnslastip) do={
 

    :log info "DDNS: Sending UPDATE!"
    :log info [ :put [/tool dns-update name=$ddnshost address=[:pick $ddnsip 0 [:find $ddnsip "/"] ] key-name=$ddnsuser key=$ddnspass ] ]
    :global ddnslastip $ddnsip
 

  } else={ 
    :log info "DDNS: No update required."
  }
 

}
 

# End of script
:log info "DDNS: End"