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
The following update methods are currently implemented:
Provider | API | TTL in seconds | Credentials | own domain via NS record | free (sub-) domain |
---|---|---|---|---|---|
INWX.com | Domrobot JSON-RPC-API | 300 | customer login username & password . Mobile TAN (OTP) is currently not supported by DynB. |
βοΈ π for your registered domains @ inwx | β for your registered domains @ inwx |
INWX.com | DynDNS2 | 60 | specific dyndns username & password |
βοΈ π for your registered domains @ inwx | β for your registered domains @ inwx |
deSEC.io (dedyn.io) | DynDNS2 | 60 | token |
βοΈ π | βοΈ |
DuckDNS.org | DynDNS2 | 60 | token |
β | βοΈ |
dynv6.com | DynDNS2 | 60 | token |
βοΈ π | βοΈ |
ddnss.de | DynDNS2 | 10 | update key as token |
β | βοΈ |
IPv64.net | DynDNS2 | 60 | DynDNS Updatehash as token |
βοΈ π² | βοΈ |
dynu.com | DynDNS2 | 30 | username & password |
βοΈ π | βοΈ |
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
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
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 64 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=
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
To automatically call the script you can use either crontab or the script can also run in a 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.
execute π
crontab -e
then add the following line π 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.
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
stdin_open: true
tty: true
environment:
- DYNB_DYN_DOMAIN=dyndns.example.com
# Providers: deSec, DuckDNS, dynv6, inwx, ddnss, ipv64
- DYNB_SERVICE_PROVIDER=desec
# Possible update methods are: dyndns, domrobot
- DYNB_UPDATE_METHOD=dyndns
# IP modes: 4 (IPv4 only), 6 (IPv6 only), 64 both
- DYNB_IP_MODE=64
# If your provider uses tokens use DYNB_TOKEN instead of DYNB_USERNAME and DYNB_PASSWORD
- DYNB_USERNAME=User42
- DYNB_PASSWORD=SuperSecretPassword
# The interval in seconds is the time the script waits before executing it again
- DYNB_INTERVAL=300
# TZ: Timezone setting for correct log time
- TZ=Europe/Berlin
# TERM: For colorful console output (attached mode)
- TERM=xterm-256color
variable | default value | description |
---|---|---|
DYNB_DYN_DOMAIN | undefined | required; dyndns.example.com |
DYNB_SERVICE_PROVIDER | undefined | required; deSEC , duckdns , dynv6 , inwx , ddnss , ipv64 |
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 | tries in this order ip64.ev21.de (anonymous logging for 7 days), api64.ipify.org , api.my-ip.io/ip , ip.anysrc.net/plain |
You need a website or Web-API that outputs your remote IP |
DYNB_IPv6_CHECK_SITE | tries in this order ip64.ev21.de (anonymous logging for 7 days), api64.ipify.org , api.my-ip.io/ip , ip.anysrc.net/plain |
You need a website or Web-API that outputs your remote IP |
DYNB_DNS_CHECK_SERVER | using the DynDNS2 providers DNS servers | If you are using a local DNS Resolver/Server make sure it answers with the public answer or set another server |