ionos-ddns/README.md
2026-01-29 20:48:58 +00:00

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:

  1. Update existing DNS records.
  2. Create new DNS records automatically if they don't exist.
  3. 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 systemd service with crash protection.
  • Logging: Detailed logs in /var/log/ionos-ddns.log.

Prerequisites

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).