Dynamix DNS Client Applications

Dynamic DNS Dynamix Software Application Clients

Dynamix DNS offers free Dynamic DNS client applications that synchronize with our services for both Windows and Linux.  Use these applications to check for and apply IP address changes with our services.  Synchronize your subdomain and domain IP addresses with our platform easily.  The below software applications and scripts are designed to run on your Dynamic DNS servers.


Windows Client

Dynamix DNS Windows Client Dynamic DNS Screenshot

Dynamix DNS Client is the official Windows client that is guaranteed to work with Dynamix services.  It works on 32-bit (x86) and 64-bit (x64) Windows XP, Windows Vista, Windows 7, Windows 10, Server 2003, Server 2008, Server 2012, Server 2016, and Windows 10.  Dynamix DNS Client requires .NET Framework 4.0 in order to work properly.  Download and install the .NET Framework 4.0 if your Windows server doesn't have it installed yet.

Simply configure and enable Dynamix integration by clicking on the "Options" menu and then clicking on "Preferences" menu item.  In the options screen, click on the "Configure Services" button.  Under the "Dynamix.run Configuration", enter your account user key, and then click on the "Retrieve Hosts" button.  A list of subdomains and domains will be placed in the listbox.  To remove hosts from the update list, simply select them in the listbox and click on the "Remove" button.  Only listed hosts will be updated to the current IP address when your IP has changed.  Click on "Save", and then click on "Save Settings".  Dynamix integration is completed.

Download complete documentation which includes detailed information for synchronizing with additional Dynamic DNS services and running external applications when your IP address changes.

Downloaded 2427 times!

View Source Code on GitHub

Linux Client

Use the below code to easily download and use our bash client:

wget --no-check-certificate -N https://dynamix.run/download.php?file=dynamix -O dynamix.sh

The below bash script can be configured to work on almost any Linux operating system.  Simply insert your account user key in place of "{USER_ACCOUNT_KEY_HERE}" in the below script and then optionally define hosts in your account that should NOT be updated by this server in the "IgnoredHosts=('')" section.  For example, to ignore subdomain x.test.com and domain test.com, you would use "IgnoredHosts=('x.test.com' 'test.com')".

#!/bin/bash
# Author Dynamix.run <earnolmartin@gmail.com>
DIR="$(cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd)"
##################
#   Variables    #
##################
AccountKey="{USER_KEY_HERE}" #AccountKey="{USERKEYHERE}"
IgnoredHosts=('') ### For example: IgnoredHosts=('subdomain.domain.com' 'domain.com') # Array of hosts that should be ignored when updating the IP address
LogFile="${DIR}/dynamix.log"
IPServiceURL="https://dynamix.run/ip.php"
CURDATETIME=$(date +"%m-%d-%Y %r")
CURDATETIMEFN=$(date +"%m_%d_%Y_%H_%M_%S")
OldIPFile="${DIR}/oldIP"
debug=false
##################
#    Functions   #
##################
function getHostsListAndProcess(){
	# $1 = http/https url for list of hosts
	# $2 = name file to store them in
	# $3 = name of array to append to
	if [ ! -z "$1" ] && [ ! -z "$2" ]; then
		wget -q -N "$1" -O "$2" --no-check-certificate
	fi
	
	# Process the hosts
	if [ -e "$2" ] && [ ! -z "$3" ]; then
		readarray -t "${3}" < "${2}"
	fi
}

function getExternalIPAddress(){
	IPAddr=$(wget -qO- "$IPServiceURL" --no-check-certificate)
	if [ ! -z "$IPAddr" ]; then
		# If the oldIP file doesn't exist, store the current IP address in there
		if [ ! -e "$OldIPFile" ]; then
			echo "$IPAddr" > "$OldIPFile"
		fi
		
		oldIP=$(cat "$OldIPFile")
		# If the IPAddr doesn't match the old one, it's changed
		if [ "$IPAddr" != "$oldIP" ] || [ "$debug" = true ]; then
			logMessage "IP Address has changed... Running sync scripts!"
			logMessage "IP Address is ${IPAddr} and the old IP Address is ${oldIP}..."
			logMessage "" "true"
			echo "$IPAddr" > "$OldIPFile"
			updateDynamixHosts
		else
			logMessage "IP Address has NOT changed... doing nothing!"
			logMessage "" "true"
		fi
	fi
}

function updateDynamixHosts(){
	getHostsListAndProcess "https://dynamix.run/api/public_api.php?key=${AccountKey}&action=ddns&subaction=getHosts" "${DIR}/my_dynamix_hosts.txt" "dynHosts"
	if [ ! -z "$dynHosts" ]; then
		for dynHost in "${dynHosts[@]}"
		do			
			if ! containsElement "${dynHost}" "${IgnoredHosts[@]}"; then
				echo -e "Updating ${dynHost} to point to IP address of ${IPAddr}..."
				getSubdomainDomain "$dynHost"
				if [ ! -z "$domain" ];	then
					output=$(wget -qO- "https://dynamix.run/api/public_api.php?key=${AccountKey}&action=ddns&subaction=update&subdomain=${subdomain}&domain=${domain}&ip=${IPAddr}" --no-check-certificate)
					if [ "$output" == "1" ]; then
						logMessage "Successfully updated ${dynHost} to point to the IP address of ${IPAddr}..."
					else
						logMessage "Failed to update ${dynHost} to point to the IP address of ${IPAddr}... ${output}"
					fi
				fi
			else
				logMessage "Host ${dynHost} is ignored, so no need to call the Dynamix API... skipping..."
			fi
			logMessage "" "true"
		done
	fi
}

function containsElement(){
	local e match="$1"
	shift
	for e; do [[ "$e" == "$match" ]] && return 0; done
	return 1
}

function getSubdomainDomain(){
	# $1 is the host
	count=$(echo "$1" | tr -cd '.' | wc -c)
	if [ "$count" == 2 ]; then
		IFS='.' read -ra ADDR <<< "$1"
		subdomain=${ADDR[0]}
		domain="${ADDR[1]}.${ADDR[2]}"
	elif [ "$count" == 1 ]; then
		IFS='.' read -ra ADDR <<< "$1"
		subdomain=
		domain="${ADDR[0]}.${ADDR[1]}"
	else
		subdomain=
		domain=
	fi
	
	if [ "$debug" = true ]; then
		echo "Subdomain is set to ${subdomain} and domain is set to ${domain}..."
	fi
}

function logMessage(){
	if [ -e "${LogFile}" ]; then
		logFileSizeKB=$(du -k "${LogFile}" | cut -f1)
		if [ "$logFileSizeKB" -ge 20000 ]; then
			mv "${LogFile}" "${LogFile}_${CURDATETIMEFN}"
		fi
	fi
	
	if [ "$debug" = true ]; then
		echo "Log file size is ${logFileSizeKB} KB..."
	fi
	
	if [ ! -z "$1" ]; then
		echo -e "$1" >> "${LogFile}"
		if [ "$debug" = true ]; then
			echo -e "$1"
		fi
	else
		if [ ! -z "$2" ]; then
			echo -e "" >> "${LogFile}"
			echo -e ""
		fi
	fi
}

##################
#     Main App   #
##################
logMessage "----------------------------------------------------------------------"
logMessage "Running IP address check on ${CURDATETIME}..." 
logMessage "----------------------------------------------------------------------"
getExternalIPAddress

It is recommended that you run the above script using a cronjob.  To run this script every 5 minutes, add the job to your user's crontab by running the below command and appending the command line that starts with "*/5".  Be sure to replace "{/path/to/}" with the actual full path to your dynamix.sh script.

crontab -e
*/5 * * * * {/path/to/}dynamix.sh

Don't forget to make the bash script executable as well by running the below command (replacing "{/path/to/}" with the directory where the script exists):

chmod +x {/path/to/}dynamix.sh

Downloaded 2242 times!

View Source Code on GitHub

For only $49.95 per month, and you'll get all of these additional features:

  • Create unlimited user accounts.
  • Access customer API endpoints to suspend, unsuspend, create, delete, and manage your users.
  • Resell our services.
  • Embed Dynamix support into your hardware.

And so much more...

Working...