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

6.3 KiB
Raw Permalink Blame History

DDNS (DynDNS) Hetzner update script

⬅️ Go back to main README

Info: This script can not be used on its own but requires the base installation. See main README for details.

Table of Contents

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.

The API token can be created at:
Your cloud project -> Security -> API-Tokens

Script Installation

Just install the script:

$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. You can create an API token in you project settings.
PhgDDNSHetznerDomainEntryConfig true arrays of strings {{"pppoe-out1";"";"example.com";"A";"@";"300";};{"pppoe-out1";"pool-ipv6";"example.com";"AAAA";"@";"300";};} See below how to format the arrays correctly.

PhgDDNSHetznerAPIToken

Example:

: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:

: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:

/system/script/run ddns-hetzner;

Setup a Scheduler to run the script regularly:

/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 ⬆️ Go back to top