ZenDNS is an easy-to-use commandline utility to manage DDNS on Cloudflare, Namecheap, and DuckDNS
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/dotzenith/zendns/releases/latest/download/zendns-installer.sh | shbrew install dotzenith/tap/zendnspowershell -ExecutionPolicy ByPass -c "irm https://github.com/dotzenith/zendns/releases/latest/download/zendns-installer.ps1 | iex"cargo install zendnsPre-Compiled binaries for linux, mac, and windows are available in Releases
- First, install rust
git clone https://github.com/dotzenith/ZenDNS.git
cd ZenDNS
cargo build --release
./target/release/zendnsManage Dynamic DNS with serenity
Usage: zendns [OPTIONS] --config <CONFIG>
Options:
-c, --config <CONFIG> The json config file to use
-l, --log <LOGFILE> Where the output will be logged, uses stdout if not used
-f, --force Overrides the check for caching
-h, --help Print help
-V, --version Print version
zendns --config /path/to/config.jsonzendns --config /path/to/config.json --log /path/to/logfileCreate an API token for your zone in Profile Settings. The token must have Zone::DNS::Read and Zone::DNS::Edit permissions.
Zone Resource can be set to Specific Zone and set to the zone you want to update. If you would like to use this same token for all other zones, please select All Zones.
Leave Client IP Address Filtering as is, and define how long this token should stay valid for in the TTL section.
The configuration for Cloudflare looks as follows:
{
"type": "cloudflare",
"key": "your-api-key",
"zone": "your-domain.com",
"hostname": "your-hostname",
"ttl": 1,
"proxied": false
}Notes:
hostnamecan be set to@if you want to updateyour-website.comand not a subdomainttlis set to 1 for auto, otherwise it should be between60and86400
See Namecheap's Guide on enabling DDNS
The configuration for Namecheap looks as follows:
{
"type": "namecheap",
"password": "your-password-key",
"host": "your-hostname",
"domain": "your-domain.com"
}Copy the token from DuckDNS profile page
The configuration for DuckDNS looks as follows:
{
"type": "duckdns",
"token": "your-token",
"domain": "your-hostname.duckdns.org"
}All of the providers can be added to the same file, with multiple entries per provider as well
{
"providers": [
{
"type": "cloudflare",
"key": "your-api-key",
"zone": "your-domain.com",
"hostname": "your-hostname",
"ttl": 1,
"proxied": false
},
{
"type": "namecheap",
"password": "your-password-key",
"host": "your-hostname",
"domain": "your-domain.com"
},
{
"type": "duckdns",
"token": "your-token",
"domain": "your-hostname.duckdns.org"
}
]
}1.0.0 - Switch to json for schema