Skip to content

Repository files navigation

🔃 DynB

DynB - dynamic DNS update script, written in bash

IPv4 (A) and IPv6 (AAAA) record updates are supported.

✨ Update Methods

The following update methods are currently implemented:

ProviderAPITTL in secondsCredentialsown domain via NS recordfree (sub-) domain
INWX.comDomrobot JSON-RPC-API300customer login username & password. Mobile TAN (OTP) is currently not supported by DynB.✔️ 🆓 for your registered domains @ inwx⛔ for your registered domains @ inwx
INWX.comDynDNS260specific dyndns username & password✔️ 🆓 for your registered domains @ inwx⛔ for your registered domains @ inwx
deSEC.io (dedyn.io)DynDNS260token✔️ 🆓✔️
DuckDNS.orgDynDNS260token✔️
dynv6.comDynDNS260token✔️ 🆓✔️
ddnss.deDynDNS210update key as token✔️
IPv64.netDynDNS260DynDNS Updatehash as token✔️ 💲✔️
dynu.comDynDNS230username & password✔️ 🆓✔️

📦 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

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

🏃 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 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.

🐟 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/dynbcontainer_name: dynbnetwork_mode: hoststdin_open: truetty: trueenvironment:
- 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

environment variables

variabledefault valuedescription
DYNB_DYN_DOMAINundefinedrequired; dyndns.example.com
DYNB_SERVICE_PROVIDERundefinedrequired; deSEC, duckdns, dynv6, inwx, ddnss, ipv64
DYNB_UPDATE_METHODundefinedrequired; dyndns or domrobot (with inwx)
DYNB_IP_MODEundefinedrequired; 4, 6 or 64 for both
DYNB_USERNAMEundefinedthe requirement depends on your provider and the update method
DYNB_PASSWORDundefinedthe requirement depends on your provider and the update method
DYNB_TOKENundefinedthe requirement depends on your provider and the update method
DYNB_INTERVALundefinedwithout this setting the script/docker container will run one time and exits
DYNB_DEBUGundefinedmore console outputs
DYNB_IPv4_CHECK_SITEtries in this order ip64.ev21.de (anonymous logging for 7 days), api64.ipify.org, api.my-ip.io/ip, ip.anysrc.net/plainYou need a website or Web-API that outputs your remote IP
DYNB_IPv6_CHECK_SITEtries in this order ip64.ev21.de (anonymous logging for 7 days), api64.ipify.org, api.my-ip.io/ip, ip.anysrc.net/plainYou need a website or Web-API that outputs your remote IP
DYNB_DNS_CHECK_SERVERusing the DynDNS2 providers DNS serversIf you are using a local DNS Resolver/Server make sure it answers with the public answer or set another server

About

🔃 update A and/or AAAA DNS records with this bash script using DynDNS2 or (INWX) DomRobot JSON-RPC API protocol.

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages