Inadyn
In-a-Dyn is a dynamic DNS client with multiple SSL/TLS library support
Install / Use
/learn @troglobit/InadynREADME
Internet Automated Dynamic DNS Client
[![License Badge][]][License] [![GitHub Status][]][GitHub] [![Coverity Status][]][Coverity Scan]
Project Archived
As of October 2025, this project has been archived and is no longer maintained.
After many years of development and community contributions, maintenance on this repository has ended. The source code remains available for reference and for anyone who wishes to continue development in their own fork.
— Joachim Wiberg (troglobit)
The last release remains available from GitHub at https://github.com/troglobit/inadyn/releases
Table of Contents
- Introduction
- Supported Providers
- Configuration
- Custom DDNS Providers
- Troubleshooting
- Build & Install
- Building from GIT
- Origin & References
Introduction
Tip: the HTML UNIX manual is at https://man.troglobit.com, e.g., inadyn.conf(5)
Inadyn, or In-a-Dyn, is a small and simple Dynamic DNS, [DDNS][], client with HTTPS support. Commonly available in many GNU/Linux distributions, used in off the shelf routers and Internet gateways to automate the task of keeping your Internet name in sync with your public¹ IP address. It can also be used in installations with redundant (backup) connections to the Internet.
Most people are unaware they share a pool of Internet addresses with other users of the same Internet Service Provider (ISP). Protocols like DHCP, PPPoE, or PPPoA are used to give you an address and a way to connect to the Internet, but usually not a way for others to connect to you. If you want to run an Internet server on such a connection you risk losing your IP address every time you reconnect, or as in the case of DHCP even when the lease is renegotiated.
By using a DDNS client like inadyn you can register an Internet name
with a DDNS provider, like FreeDNS. The
DDNS client updates your DNS record periodically and/or on demand when
your IP address changes. Inadyn can maintain multiple host records with
the same IP address, use a combination of a script, the address from an
Internet-facing interface, or default to using the IP address change
detector of the DDNS provider.
__
¹ Public IP address is the default, private addresses can also be used.
Supported Providers
Some of these services are free of charge for non-commercial use, some take a small fee, but also provide more domains to choose from.
The following tier-one providers have dedicated "plugins", even though many share the original DynDNS plugin. Below is a list of known DDNS providers, ordered by the plugin that support them:
- https://freedns.afraid.org
- https://www.nsupdate.info
- https://duckdns.org
- https://freemyip.com
- https://www.dyndns.org, https://dyn.com
- https://www.easydns.com
- https://www.tunnelbroker.net
- https://www.sitelutions.com
- https://www.dnsexit.com, parent of https://www.zoneedit.com
- https://www.changeip.com
- https://www.dhis.org
- https://giradns.com, https://gira.de
- https://www.duiadns.net
- https://ddnss.de
- https://dynv6.com
- https://www.cloudxns.net
- https://www.dnspod.cn
- https://connect.yandex.ru
- https://www.cloudflare.com
- https://www.goip.de
- https://www.dnshome.de
- https://ipv64.net
- https://domene.shop
- https://www.simply.com
For the complete list, see inadyn -L, for machine friendly JSON
output, use inadyn -L -j.
DDNS providers not supported natively can be enabled using the custom, or generic, DDNS plugin. See below for configuration examples.
In-A-Dyn defaults to HTTPS, but not all providers may support this, so
try disabling SSL for the update (ssl = false) or the checkip phase
(checkip-ssl = false) in the provider section, in case you run into
problems.
HTTPS is enabled by default since it protects your credentials from being snooped and reduces the risk of someone hijacking your account.
Configuration
In-A-Dyn supports updating several DDNS servers, several accounts even on
different DDNS providers. The following /etc/inadyn.conf example show
how this can be done. To verify your configuration, without starting the
daemon, use:
inadyn --check-config
This looks for the default .conf file, to check any file, use:
inadyn --check-config -f /path/to/file.conf
Example
# In-A-Dyn v2.0 configuration file format
period = 300
user-agent = Mozilla/5.0
# The FreeDNS username must be in lower case
# The password (max 16 chars) is case sensitive
provider freedns {
username = lower-case-username
password = case-sensitive-pwd
hostname = some.example.com
}
# We override checkip server with the In-a-dyn built-in 'default',
# http://ifconfig.me/ip, for details on this, see below.
provider freemyip {
password = YOUR_TOKEN
hostname = YOUR_DOMAIN.freemyip.com
checkip-server = default
}
provider dyn {
ssl = false
username = charlie
password = snoopy
hostname = { peanuts, woodstock }
user-agent = Mozilla/4.0
}
provider duckdns.org {
username = YOUR_TOKEN
password = noPasswordForDuckdns
hostname = YOUR_DOMAIN.duckdns.org
}
# With multiple usernames at the same provider, index with :#
provider no-ip.com:1 {
username = ian
password = secret
hostname = flemming.no-ip.com
user-agent = inadyn/2.2
}
# With multiple usernames at the same provider, index with :#
provider no-ip.com:2 {
username = james
password = bond
hostname = spectre.no-ip.com
checkip-ssl = false
checkip-server = ifconfig.me
checkip-path = /ip
}
# With multiple usernames at the same provider, index with :#
provider no-ip.com:3 {
username = spaceman
password = bowie
hostname = spaceman.no-ip.com
checkip-command = "/sbin/ifconfig eth0 | grep 'inet6 addr'"
}
# Google Domains - notice use of '@' to update root entry
provider domains.google.com:1 {
hostname = @.mydomain.com
username = your_username
password = your_password
}
# Wildcard subdomains - notice the quotes (required!)
provider domains.google.com:2 {
hostname = "*.mydomain.com"
username = your_username
password = your_password
}
# Note: hostname == update-key from Advanced tab in the Web UI
provider tunnelbroker.net {
username = futurekid
password = dreoadsad/+dsad21321 # update-key-in-advanced-tab
hostname = 1234534245321 # tunnel-id
}
# dynv6.com update using a custom checkip-command, which works
# if you have access to an Internet-connected interface. Make
# sure to verify the command works on your system first
allow-ipv6 = true # required option for IPv6 atm.
provider dynv6.com {
username = your_token
password = not_used
hostname = { host1.dynv6.net, host2.dynv6.net }
checkip-command = "/sbin/ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '{print $3}' | grep -v ^::1 | grep -v ^fe80"
}
provider cloudxns.net {
username = your_api_key
password = your_secret_key
hostname = yourhost.example.com
}
provider dnspod.cn {
username = your_api_id
password = your_api_token
hostname = yourhost.example.com
}
# Create a unique custom API token with the following permissions:
# -> Zone.Zone - Read, Zone.DNS - Edit.
provider cloudflare.com {
username = zone.name
password = api_token_important_read_comment
hostname = hostname.zone.name
ttl = 1 # optional, value of 1 is 'automatic'.
proxied = false # optional.
}
provider goip.de {
username = user.name
password = user.password
hostname = hostname.zone.name
}
Notice how the config has three different users of the No-IP provider --
this is achieved by appending a :ID to the provider name.
We also define a custom cache directory, default is to use /var/cache.
In our case /mnt is a system specific persistent store for caching
your IP address as reported to each provider. Inadyn use this to ensure
you are not locked out of your account for excessive updates, which may
happen if your device Internet gateway running inadyn gets stuck in a
reboot loop, or similar.
However, for the caching mechanism to be 100% foolproof the system clock
must be set correctly -- if you have issues with the system clock not
being set properly at boot, e.g. pending receipt of an NTP message, use
the command line option --startup-delay=SEC. To tell inadyn it is
OK to proceed before the SEC timeout, use SIGUSR2.
The last system defined is the IPv6 https://tunnelbroker.net service
provided by Hurricane Electric. Here hostname is set to the tunnel ID
and password must be the Update key found in the Advanced
config
