Description 🔗 description
ZoneEdit DDClient Updater is a lightweight Python service that keeps A records hosted on ZoneEdit in sync with your current public IPv4. It can run once for an immediate update or run as a long-lived systemd-managed daemon to periodically verify and update your IP. The service supports reading the IP from a local network interface or from an external check service, per-host state files to avoid unnecessary updates, a dry-run mode, and simple backoff when ZoneEdit signals rate limits.
Downloads 🔗 downloads
Pre-built RPMs and source archives are available in the dist/ directory of this repository:
Install via RPM 🔗 installation
A pre-built RPM is included in the dist/ directory. Install it with:
sudo dnf install ./dist/noarch/zoneedit-ddclient-1.0-1.noarch.rpm
# or with rpm:
sudo rpm -Uvh dist/noarch/zoneedit-ddclient-1.0-1.noarch.rpmThe package installs the executable to /usr/bin/zoneedit_ddclient, the example config to /etc/zoneedit_ddclient.ini.example, and a systemd unit zoneedit-ddclient.service.
Quick start 🔗 quickstart
-
Copy the example config to
/etc/zoneedit_ddclient.iniand edit it (use the[zoneedit]section):sudo cp /etc/zoneedit_ddclient.ini.example /etc/zoneedit_ddclient.ini sudo nano /etc/zoneedit_ddclient.ini
-
Configure the essential values in
/etc/zoneedit_ddclient.ini:hostnames(comma-separated FQDNs to update)username(ZoneEdit account email)password(ZoneEdit account password)- Optionally set
interfaceto use a local interface IP instead of querying an external service, or setcheck_ip_service/use=web.
-
Create the state directory and set ownership if running as a non-root user:
sudo mkdir -p /var/lib/zoneedit_ddclient sudo chown youruser:youruser /var/lib/zoneedit_ddclient
-
Start and enable the systemd service:
sudo systemctl daemon-reload sudo systemctl enable --now zoneedit-ddclient.service
Alternatively, test a one-shot run before enabling the service:
```bash
sudo /usr/bin/zoneedit_ddclient --config /etc/zoneedit_ddclient.ini --once
2. (Optional) Create the state directory and set ownership if running as non-root:
```bash
sudo mkdir -p /var/lib/zoneedit_ddclient
sudo chown youruser:youruser /var/lib/zoneedit_ddclient
-
Run once to test:
python3 zoneedit_ddclient.py --config /etc/zoneedit_ddclient.ini --once # or use a specific interface (overrides config): python3 zoneedit_ddclient.py --config /etc/zoneedit_ddclient.ini --interface eth0 --once -
Install systemd service (optional):
sudo cp zoneedit-ddclient.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now zoneedit-ddclient.service
Notes 🔗 notes
- The script supports
--dry-runto preview the update call without sending credentials. - ZoneEdit enforces a minimum interval between updates (commonly 600 seconds). Set
intervalin your config to at least 600 to avoid rate-limit errors likeMinimum 600 seconds between requests. - The daemon supports exponential backoff when ZoneEdit signals rate limits; this is on by default. Use
--no-backoffto disable or setbackoff_maxin the config to limit the maximum backoff (seconds). - You can specify a local network interface to use its IPv4 address instead of querying an external service: set
interface = eth0in the config or pass--interface eth0. - If
requestsis not installed, the script falls back to urllib. - Keep your credentials secure and consider using an API token if available.
Install from Git (build or run in-place) 🔗 git
If you prefer to install and configure from a Git clone:
- Clone the repository and change into it:
git clone <repo-url> cd ZoneEdit-ddclient
2a. Quick test without installing (run directly):
python3 zoneedit_ddclient.py --config zoneedit_ddclient.ini.example --once2b. To build and install an RPM locally (recommended for system integration):
make rpm
sudo dnf install ./dist/noarch/zoneedit-ddclient-1.0-1.noarch.rpm- After installing or running, copy and edit
/etc/zoneedit_ddclient.inias described above, create thestate_dirif needed, and enable/start the service with systemd.