1
0
mirror of https://github.com/EV21/dynb.git synced 2025-12-26 16:39:32 +01:00
2021-11-03 18:09:41 +01:00
2021-11-03 18:09:41 +01:00
2021-11-03 18:09:42 +01:00
2021-11-03 18:09:42 +01:00
2022-06-07 10:00:10 +02:00
2021-11-03 18:09:46 +01:00
2022-06-30 09:30:09 +02:00
2021-11-03 18:09:41 +01:00
2021-01-24 03:39:51 +01:00

🔃 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:

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

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 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
    stdin_open: true
    tty: true
    environment:
      - DYNB_DYN_DOMAIN=dyndns.example.com
      # Providers: deSec, duckDNS, dynv6, inwx
      - 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

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
Description
DynB - dynamic DNS update script, written in bash
Readme MIT 689 KiB
Languages
Shell 99.2%
Dockerfile 0.8%