mirror of
https://github.com/EV21/dynb.git
synced 2025-12-26 16:39:32 +01:00
You can now set your timezone with the environment variable `TZ="Europe/Berlin"`
185 lines
6.1 KiB
Markdown
185 lines
6.1 KiB
Markdown
# 🔃 DynB
|
|
|
|
DynB - dynamic DNS update script, written in bash
|
|
|
|
IPv4 (A) and IPv6 (AAAA) record updates are supported.
|
|
|
|
<!-- TOC -->
|
|
|
|
- [✨ Update Methods](#-update-methods)
|
|
- [APIs](#apis)
|
|
- [DynDNS2](#dyndns2)
|
|
- [📦 Requirements](#-requirements)
|
|
- [🚀 Installation](#-installation)
|
|
- [⚙ Configuration](#-configuration)
|
|
- [🏃 Run](#-run)
|
|
- [⏰ Cron](#-cron)
|
|
- [loop mode](#loop-mode)
|
|
- [crontab](#crontab)
|
|
- [🐟 docker](#-docker)
|
|
- [environment variables](#environment-variables)
|
|
|
|
<!-- /TOC -->
|
|
|
|
## ✨ Update Methods
|
|
|
|
The following update methods are currently implemented:
|
|
|
|
### APIs
|
|
|
|
- INWX.com Domrobot JSON-RPC-API\
|
|
Limitations:
|
|
- minimum TTL is 300 (5 minutes)
|
|
|
|
### DynDNS2
|
|
|
|
- INWX.com
|
|
- deSEC.io (dedyn.io)
|
|
- DuckDNS.org
|
|
- dynv6.com
|
|
|
|
## 📦 Requirements
|
|
|
|
- `curl` - The minimum requirement for all API requests.
|
|
- `dig` - You can get it by installing `dnsutils` (debian/ubuntu/ArchLinux), `bind-utils` (CentOS/RHEL), `bind-tools` (Alpine)
|
|
|
|
also essential if you are using other APIs:
|
|
|
|
- `jq` - Command-line JSON processor
|
|
|
|
## 🚀 Installation
|
|
|
|
Download the latest release
|
|
|
|
or simply clone this repo
|
|
|
|
```shell
|
|
git clone https://github.com/EV21/dynb.git
|
|
```
|
|
|
|
If you want to add the script to you PATH, run :point_down:
|
|
|
|
```shell
|
|
bash dynb.sh --link
|
|
```
|
|
|
|
## ⚙ Configuration
|
|
|
|
You can use a config in form of an `.env` file.
|
|
Or you can just use CLI parameters.
|
|
|
|
Create `.env` in the app root directory or at `~/.local/share/dynb/.env`.
|
|
|
|
```bash
|
|
DYNB_DYN_DOMAIN=dyndns.example.com
|
|
|
|
## service provider could be deSEC, duckdns, dynv6, inwx
|
|
DYNB_SERVICE_PROVIDER=inwx
|
|
|
|
## update method options: domrobot, dyndns
|
|
DYNB_UPDATE_METHOD=domrobot
|
|
|
|
## ip mode could be either: 4, 6 or dual for dualstack
|
|
DYNB_IP_MODE=64
|
|
|
|
## If you are using the DomRobot RPC-API enter your credentials for the web interface login here
|
|
## If you are using the DynDNS2 protocol enter your credentials here
|
|
DYNB_USERNAME=User42
|
|
DYNB_PASSWORD=SuperSecretPassword
|
|
## or use a token
|
|
DYNB_TOKEN=
|
|
```
|
|
|
|
## 🏃 Run
|
|
|
|
If you have a config file just run :point_down:
|
|
|
|
```bash
|
|
dynb
|
|
```
|
|
|
|
Alternatively you can use parameters if your system meets the relevant requirements. This example shows the long form parameter, there are also short ones.\
|
|
Call the help function :point_down:
|
|
|
|
```bash
|
|
dynb --help
|
|
```
|
|
|
|
```bash
|
|
dynb --ip-mode dualstack --update-method domrobot --domain dyndns.example.com --username user42 --password SuperSecretPassword
|
|
```
|
|
|
|
```bash
|
|
dynb --ip-mode dualstack --update-method dyndns --provider inwx --domain dyndns.example.com --username user42 --password SuperSecretPassword
|
|
```
|
|
|
|
## ⏰ Cron
|
|
|
|
To automatically call the script you can use either crontab or the script can also run in a loop mode.
|
|
|
|
### loop mode
|
|
|
|
Just use the parameter `--interval 60` or the environment variable `DYNB_INTERVAL=60` so the script will check every 60 seconds if it needs to do an update.
|
|
|
|
### crontab
|
|
|
|
execute :point_down:
|
|
|
|
```bash
|
|
crontab -e
|
|
```
|
|
|
|
then enter :point_down: to run dynb every five minutes.
|
|
|
|
```bash
|
|
*/5 * * * * $HOME/.local/bin/dynb >> $HOME/.local/share/dynb/dynb-cron.log
|
|
```
|
|
|
|
alternative with docker and parameters::
|
|
|
|
```bash
|
|
*/5 * * * * docker run --interactive --tty --rm --network host ev21/dynb:latest --ip-mode 64 --update-method domrobot --domain dyndns.example.com --username user42 --password SuperSecretPassword
|
|
```
|
|
|
|
Note, cron typically does not use the users PATH variable.
|
|
|
|
## 🐟 docker
|
|
|
|
This is an example of a `docker-compose.yml` file. If you are using IPv6 make sure the routing works properly with your docker container. Note: [IPv6 networking](https://docs.docker.com/config/daemon/ipv6/) is only supported on Docker daemons running on Linux hosts.
|
|
|
|
```yaml
|
|
version: '3.4'
|
|
|
|
services:
|
|
dynb:
|
|
image: ev21/dynb
|
|
container_name: dynb
|
|
network_mode: host
|
|
environment:
|
|
- DYNB_DYN_DOMAIN=dyndns.example.com
|
|
- DYNB_SERVICE_PROVIDER=desec
|
|
- DYNB_UPDATE_METHOD=dyndns
|
|
- DYNB_IP_MODE=64
|
|
- DYNB_USERNAME=User42
|
|
- DYNB_PASSWORD=SuperSecretPassword
|
|
- DYNB_INTERVAL=60
|
|
- TZ=Europe/Berlin
|
|
```
|
|
|
|
## environment variables
|
|
|
|
| variable | default value | description |
|
|
| --------------------- | --------------- | -------------------------------------------------------------------------------------------------------------- |
|
|
| DYNB_DYN_DOMAIN | undefined | required; `dyndns.example.com` |
|
|
| DYNB_SERVICE_PROVIDER | undefined | required; `deSEC`, `duckdns`, `dynv6`, `inwx` |
|
|
| DYNB_UPDATE_METHOD | undefined | required; `dyndns` or `domrobot` (with inwx) |
|
|
| DYNB_IP_MODE | undefined | required; `4`, `6` or `64` for both |
|
|
| DYNB_USERNAME | undefined | the requirement depends on your provider and the update method |
|
|
| DYNB_PASSWORD | undefined | the requirement depends on your provider and the update method |
|
|
| DYNB_TOKEN | undefined | the requirement depends on your provider and the update method |
|
|
| DYNB_INTERVAL | undefined | without this setting the script/docker container will run one time and exits |
|
|
| DYNB_DEBUG | undefined | more console outputs |
|
|
| DYNB_IPv4_CHECK_SITE | api64.ipify.org | You need a website or Web-API that outputs your remote IP |
|
|
| DYNB_IPv6_CHECK_SITE | api64.ipify.org | You need a website or Web-API that outputs your remote IP |
|
|
| DYNB_DNS_CHECK_SERVER | undefined | If you are using a local DNS Resolver/Server make sure it answers with the public answer or set another server |
|