2.3 KiB
IONOS DDNS Auto-Updater & Creator
A Python-based system service that automatically updates DNS records on IONOS. Unlike standard DDNS scripts, this solution uses the IONOS REST API, allowing it to:
- Update existing DNS records.
- Create new DNS records automatically if they don't exist.
- Check the current DNS value before updating to avoid API rate limits.
Features
- Smart Check: Compares public IP with current DNS resolution before sending API requests.
- Auto-Discovery: Automatically detects which DNS Zone a subdomain belongs to.
- System Service: Runs as a background
systemdservice with crash protection. - Logging: Detailed logs in
/var/log/ionos-ddns.log.
Prerequisites
- Python 3
- An IONOS account with access to the "Developer API".
- An API Key (Prefix + Secret) generated at developer.hosting.ionos.com.
Installation
1. Clone the repository to /opt
It is recommended to install this in a system directory.
sudo mkdir -p /opt/ionos-ddns
sudo git clone [https://github.com/TWOJA_NAZWA/ionos-ddns.git](https://github.com/TWOJA_NAZWA/ionos-ddns.git) /opt/ionos-ddns
cd /opt/ionos-ddns```
### 2. Install dependencies
sudo apt update sudo apt install python3-pip sudo pip3 install -r requirements.txt```
3. Configuration
sudo nano config.json
Fill in your api_prefix and api_secret.
Domains List: Edit domains.txt and add domains one per line:
sudo nano domains.txt ''' Example: ''' mydomain.com vpn.mydomain.com server.other-domain.net '''
4. Install System Service
Copy the service file to systemd directory: ''' sudo cp ionos-ddns.service /etc/systemd/system/ ''' Reload daemon, enable and start the service: ''' sudo systemctl daemon-reload sudo systemctl enable ionos-ddns.service sudo systemctl start ionos-ddns.service '''
Monitoring
Check the service status: ''' sudo systemctl status ionos-ddns.service ''' View logs: ''' tail -f /var/log/ionos-ddns.log '''
How it works
The script runs in an infinite loop (every 10 minutes).
Fetches your current Public IP.
Reads domains.txt.
For each domain:
Finds the correct Zone ID via API.
Checks if an A-Record exists.
If exists: Checks if IP matches. If not, performs PUT (Update).
If missing: Performs POST (Create).