Dynamix DNS Client Applications
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 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 2352 times!
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 2166 times!
|