Metadata-Version: 2.4
Name: dyndns-to-hetzner
Version: 1.0.0
Summary: DynDNS endpoint translation to Hetzner API
Author-email: Faeyben <kontakt@faeyben.de>
License-Expression: GPL-3.0
Project-URL: Homepage, https://github.com/faeyben/dns-to-hetzner
Keywords: dns,dyndns,hetzner
Classifier: Development Status :: 4 - Beta
Classifier: Framework :: Flask
Classifier: Programming Language :: Python :: 3
Requires-Python: >3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: flask
Requires-Dist: flask_httpauth
Requires-Dist: requests
Requires-Dist: click
Dynamic: license-file

# DYNDNS to Hetzner

A DynDNS2 endpoint that changes DNS records using the Hetzner DNS API.

## Running

dyndns-to-hetzner is not available via PyPI or Docker hub (yet), so you need
to clone this repository or download a release archive 

### Non-Docker

It is recommended to create a virtual environment for this project.

```
cd /opt # can be somewhere else if you prefer
python3 -m venv dyndns-to-hetzner
source dyndns-to-hetzner/bin/activate
pip install dyndns-to-hetzner
flask --app dyndns_to_hetzner init-config
```

The last command will print the location of the configuration file, open it and adjust it to your needs.

It is recommended to use a WSGI server to run this project, e.g. gunicorn:

```
pip install gunicorn
gunicorn -w 4 'dyndns_to_hetzner:create_app()' --access-logfile=- --bind="127.0.0.1:8080"
```

If you want to access dyndns_to_hetzner from a different host (e.g. make it available to your router), then you should setup nginx or apache httpd as a reverse proxy and enable SSL/TLS if possible.

### Docker

```
cd docker
cp -a ../config.py.example config.py
```

Adjust the config.py to your liking.

```
docker-compose up -d
```

## Using

The update mechanism will be available at `http://127.0.0.1/nic/update` and expects the `hostname` and `myip` GET parameters, whereas `hostname` is the DNS record you want to update and `myip` is the IP you want the record to be set to.

Example: `http://127.0.0.1/nic/update?hostname=home.example.com&myip=198.51.100.42`

Access will only be granted after a successful HTTP Basic Authentication.

### FRITZ!Box

FRITZ!Box routers allow setting up a DynDNS provider so the router sends an update to DynDNS anytime its public IP changes. The following settings are required for that:

1. Update-URL: `http://HOSTNAME/nic/update?&myip=<ipaddr>&hostname=<domain>` (replace HOSTNAME with the IP or hostname of the server that dyndns_to_hetzner is running on, use https instead of http if ssl )
2. Domainname: The FQDN of the record you want to have changed
3. Username: A username you set in the config.py
4. Password: The corresponding password you set in the config.py

After saving, the FRITZ!Box should issue a first update request within a few seconds.
