routeros-scripts-custom/doc/ddns-hetzner.md

132 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DDNS (DynDNS) Hetzner update script
[⬅️ Go back to main README](../README.md)
> **Info**: This script can not be used on its own but requires the base
> installation. See [main README](../README.md) for details.
## Table of Contents
- [DDNS (DynDNS) Hetzner update script](#ddns-dyndns-hetzner-update-script)
- [Table of Contents](#table-of-contents)
- [Description](#description)
- [Requirements and installation](#requirements-and-installation)
- [Pre requisites](#pre-requisites)
- [Script Installation](#script-installation)
- [Configuration](#configuration)
- [`PhgDDNSHetznerAPIToken`](#phgddnshetznerapitoken)
- [`PhgDDNSHetznerDomainEntryConfig`](#phgddnshetznerdomainentryconfig)
- [Usage and invocation](#usage-and-invocation)
- [See also](#see-also)
## Description
This Mikrotik RouterOS 7 script for updating DNS entries via Hetzner's Cloud API.
The script is currently only compatible with RouterOS 7.
RouterOS 6 isn't and won't be supported!
## Requirements and installation
### Pre requisites
> [!IMPORTANT]
> **It's strongly recommended to create a separate Project just for your DNS Zone!**
> Because the API Token you will create will have Read/Write access to the whole Project it and can't be restricted to specific services like DNS.
Create a [API token for Hetzner's Cloud API](https://docs.hetzner.cloud/reference/cloud#getting-started).
The API token can be created at:
`Your cloud project` -> `Security` -> `API-Tokens`
### Script Installation
Just install the script:
```rsc
$ScriptInstallUpdate ddns-hetzner "base-url=https://git.s1q.dev/phg/routeros-scripts-custom/raw/branch/main/";
/system/script/set [find name="ddns-hetzner"] policy=read,write,test
```
## Configuration
Edit `global-config-overlay` and add the following variables.
| Variable name | Requried | Data type | Example | Description |
| :-------------------------------- | :------- | :-------------------- | :------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PhgDDNSHetznerAPIToken` | true | `string` | `LRK9DAWQ1ZAEFSrCNEEzLCUwhYX1U3g7wMg4dTlkkDC96fyDuyJ39nVbVjCKSDfj` | This variable requires a valid API token for the [Hetzner DNS API](https://docs.hetzner.cloud/reference/cloud#getting-started). You can create an API token in you project settings. |
| `PhgDDNSHetznerDomainEntryConfig` | true | `array`s of `string`s | `{{"pppoe-out1";"";"example.com";"A";"@";"300";};{"pppoe-out1";"pool-ipv6";"example.com";"AAAA";"@";"300";};}` | See below how to format the arrays correctly. |
### `PhgDDNSHetznerAPIToken`
Example:
```rsc
:global PhgDDNSHetznerAPIToken "LRK9DAWQ1ZAEFSrCNEEzLCUwhYX1U3g7wMg4dTlkkDC96fyDuyJ39nVbVjCKSDfj";
```
### `PhgDDNSHetznerDomainEntryConfig`
The `domainEntryConfig` array consists of multiple arrays. Each of the is configuring a DNS record for a given domain in a zone.
The data sheet below describes the formatting of the DNS records arrays.
| Array index | Data | Data type | Example | Description |
| ----------: | :------------ | :-------- | :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `0` | `interface` | `string` | `"pppoe-out1"` | Name of the interface where the IP which is currently configured is fetched from. |
| `1` | `pool` | `string` | `"pool-ipv6"` | The prefix delegation pool which is used to automatically setup the IPv6 interface IP. Use "" when you don't use a pool to set your interface ip or for a type A record. |
| `2` | `zone` | `string` | `"domain.com"` | Zone which should be used to set a record to. |
| `3` | `record type` | `string` | `"A"` | Valid values `A`, `AAAA`. The type of record which will be set. Also determines which IP (v4/v6) will be fetched. |
| `4` | `record name` | `string` | `"@"` | The record name which should be updated. Use `@` for the root of your domain. |
| `5` | `record TTL` | `string` | `"300"` | TTL value of the record in seconds, for a dynamic entry a short lifetime like 300 is recommended. |
Example:
```rsc
:global PhgDDNSHetznerDomainEntryConfig {
{
"pppoe-out1";
"";
"example.com";
"A";
"@";
"300";
};
{"pppoe-out1";"pool-ipv6";"example.com";"AAAA";"@";"300";};
{"pppoe-out1";"";"example.net";"A";"ddns";"300";};
{"pppoe-out1";"pool-ipv6";"example.org";"AAAA";"ddns";"300";};
};
```
This example will create & update those DNS records:
- example.com
- IPv4
- IPv6
- example.net
- IPv4
- example.org
- IPv6
## Usage and invocation
How to run the script manually:
```rsc
/system/script/run ddns-hetzner;
```
Setup a Scheduler to run the script regularly:
```rsc
/system/scheduler/add name="ddns-hetzner" interval="00:05:00" policy="read,write,test" on-event="/system/script/run ddns-hetzner;";
```
## See also
* ...
---
[⬅️ Go back to main README](../README.md)
[⬆️ Go back to top](#top)