Script to automatically create or update A/AAAA DNS records for a host
Find a file
mricim ca62996a56
Refactor get_domain_from_fqdn regex to handle both www and root domain
This commit addresses an issue where the script was expecting the domain to include the "www" prefix for proper zone identification. The regex in get_domain_from_fqdn has been modified to make the subdomain part optional, allowing it to handle both domains with "www" and root domains without "www".

These changes were necessary to ensure the script works seamlessly with both www and root domains, providing more flexibility in DNS record handling.

Testing has been performed, and the script now successfully identifies and updates DNS records for domains with or without the "www" prefix.
2023-12-30 20:30:59 +01:00
ionos_dyndns.py Refactor get_domain_from_fqdn regex to handle both www and root domain 2023-12-30 20:30:59 +01:00
LICENSE init 2021-05-15 11:42:15 +02:00
README.md init 2021-05-15 11:42:15 +02:00

ionos_dyndns.py

Create and update DNS records for a host using IONOS' API for use as a DynDNS (for example via a cronjob). The script will create A and/or AAAA records if none already exists for the host and update existing ones to reflect the new public IP.

The public IP-Address is determined in two ways:

  • IPv4: uses the ipify.org API
  • IPv6: uses the ip address show command

By default the name of the A/AAAA record that will be created/updated is one that matches the output from the command hostname -f.
Update your /etc/hosts file with your FQDN if it's not already there.
Alternatively you can override this default value by using the -H or --fqdn parameter.

Requirements

  • Linux
  • Python 3
  • IONOS API key

You can create an API key here: https://developer.hosting.ionos.de/keys
The API is still in Beta and not enabled by default. In my case I had to call the customer support hotline and request to be enabled for the API.

Usage

Cronjob

This example shows how to update the AAAA record every 5 minutes and save the script output to a file:

  1. Download the script and make sure it is executable
wget https://raw.githubusercontent.com/lazaroblanc/IONOS-DynDNS/main/ionos_dyndns.py
chmod +x ionos_dyndns.py
  1. Open your crontab file with crontab -e
  2. Paste this line:
*/5 * * * * ./ionos_dyndns.py --AAAA --api-prefix $publicprefix --api-secret $secret >> ionos_dyndns.log

General

usage: ionos_dyndns.py [-h] [-4] [-6] [-i] [-H] --api-prefix  --api-secret

Create and update DNS records for this host using IONOS' API to use as a sort of DynDNS (for example via a cronjob).

optional arguments:
  -h, --help         show this help message and exit
  -4, --A            Create/Update A record
  -6, --AAAA         Create/Update AAAA record
  -i , --interface   Interface name for determining the public IPv6 address (Default: eth0)
  -H , --fqdn        Host's FQDN (Default: hostname -f)
  --api-prefix       API key publicprefix
  --api-secret       API key secret

Ideas / To-do

  • improve log messages (add a timestamp)
  • refactor duplicate code (~ line 94)

🐛 Bug reports & Feature requests 🆕

If you've found a bug or want to request a new feature please open a new Issue

🤝 Contributing

Pull requests are welcome!

📃 License

Published under the Apache License 2.0
Please see the License for details