A python script for dynamic DNS updates for Ionos Domains.
Find a file
2022-09-03 01:27:29 +02:00
.gitignore feat: merge user vars into a single config file 2022-09-02 22:55:34 +02:00
config.yml feat: merge user vars into a single config file 2022-09-02 22:55:34 +02:00
dnsupdate.py fix: missing Content-Type-header in API request 2022-09-03 01:26:06 +02:00
README.md docs: add crontab example to README 2022-09-03 01:27:29 +02:00
requirements.txt feat: add .gitignore, requirements and basic README 2022-09-02 21:38:40 +02:00

Ionos DNS updates

A set of scripts used to make dynamic DNS updates to the Ionos API.

Dependencies

Python libraries:

Configuration

Configuration is declared inside the file config.yml. Once modified, this file must be kept secret, else anyone visiting your domains runs the risk of being DNS-poisoned.

First, you will need to set your Ionos API keypair in the config file. Paste the respective values of your Ionos API-keypair into the file

apikey:
  prefix: <your api key prefix>
  secret: <your api key secret>

Next, add every domain you wish to send an update for to the domains list. The script will set a global DNS record for each listed domain and have it point to the local host's public IP address. The domains list should have the following format:

domains:
  - example.com
  - subdomain1.example.com
  - subdomain2.example.com

NOTE: Make sure you have manually registered each subdomain you are listing in your Ionos account. The script currently does not handle adding subdomains for you. Attempting to update the DNS entry for an unregistered domain will cause the API call to fail.

You may optionally set a descriptive string which is sent along with the update:

description: "Dynamic DNS update."

As of right now, I am actually not sure what the description is needed for, but the API requires it. The value displayed above is used by default, if you don't override it inside config.yml.

Regular DNS updates

In order to keep your DNS records synchronized with your public IP address, you should run the update script periodically. As of this writing, Ionos limit dynamic DNS updates via API to 2 requests per minute, so don't send requests more frequently than that.

In order to update your DNS IPs once every minute, call the script once a minute. (Duh!) You can set your crontab to the following to achieve this:

*/1 * * * * /path/to/dnsupdate.py

Just make sure that the script is executable and located in the same directory as config.yml.