60 lines
2.1 KiB
Markdown
60 lines
2.1 KiB
Markdown
# Ionos DNS updates
|
|
|
|
A set of scripts used to make dynamic DNS updates to the Ionos API.
|
|
|
|
### Dependencies
|
|
|
|
Python libraries:
|
|
- [requests](https://pypi.org/project/requests/)
|
|
- [pyyaml](https://pypi.org/project/PyYAML/)
|
|
|
|
### 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
|
|
|
|
```yaml
|
|
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:
|
|
|
|
```yaml
|
|
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:
|
|
```yaml
|
|
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`.
|