🔃 DynB
DynB - dynamic DNS update script, written in bash
IPv4 (A) and IPv6 (AAAA) record updates are supported.
- ✨ Update Methods
- 📦 Requirements
- 🚀 Installation
- ⚙ Configuration
- 🏃 Run
- ⏰ Cron
- 🐟 docker
- environment variables
✨ 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 installingdnsutils(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
git clone https://github.com/EV21/dynb.git
If you want to add the script to you PATH, run 👇
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.
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 👇
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 👇
dynb --help
dynb --ip-mode dualstack --update-method domrobot --domain dyndns.example.com --username user42 --password SuperSecretPassword
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 👇
crontab -e
then enter 👇 to run dynb every five minutes.
*/5 * * * * $HOME/.local/bin/dynb >> $HOME/.local/share/dynb/dynb-cron.log
alternative with docker and parameters::
*/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 is only supported on Docker daemons running on Linux hosts.
version: '3.4'
services:
dynb:
image: ev21/dynb
container_name: dynb
network_mode: host
build:
context: .
dockerfile: ./Dockerfile
environment:
- DYNB_DYN_DOMAIN=dyndns.example.com
- DYNB_SERVICE_PROVIDER=inwx
- DYNB_UPDATE_METHOD=dyndns
- DYNB_IP_MODE=64
- DYNB_USERNAME=User42
- DYNB_PASSWORD=SuperSecretPassword
- DYNB_INTERVAL=60
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 |