mirror of
https://github.com/EV21/dynb.git
synced 2025-12-26 16:39:32 +01:00
143 lines
3.5 KiB
Markdown
143 lines
3.5 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)
|
|
- [⏰ docker](#-docker)
|
|
<!-- /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
|
|
```
|
|
git clone https://github.com/EV21/dynb.git
|
|
```
|
|
|
|
If you want to add the script to you PATH, run :point_down:
|
|
```
|
|
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 :point_down:
|
|
```
|
|
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:
|
|
```
|
|
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 :point_down:
|
|
```
|
|
crontab -e
|
|
```
|
|
then enter :point_down: to run dynb every five minutes.
|
|
```
|
|
*/5 * * * * $HOME/.local/bin/dynb >> $HOME/.local/share/dynb/dynb-cron.log
|
|
```
|
|
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.
|
|
```yaml
|
|
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
|
|
```
|