1
0
mirror of https://github.com/EV21/dynb.git synced 2025-12-26 16:39:32 +01:00

42 Commits

Author SHA1 Message Date
b5d300a86e doc: 📝 update CHANGELOG.md 2021-11-03 18:09:50 +01:00
a95effb00d dev: 🔥 remove md-toc from pre-commit 2021-11-03 18:09:49 +01:00
a5dc7ea9b3 doc: 📝 document docker parameters 2021-11-03 18:09:49 +01:00
63cbce3568 feat: enable parameter extensions for docker run --interactive 2021-11-03 18:09:49 +01:00
73d2a7ac44 dev: add pre-commit hooks for markdown 2021-11-03 18:09:49 +01:00
cad6d47cd2 cosmetic: 🎨 lint README.md 2021-11-03 18:09:48 +01:00
06c35d99af doc: 📝 change default dns server setting 2021-11-03 18:09:48 +01:00
9da624b163 dev: 🎨 add shfmt params to pre-commit check 2021-11-03 18:09:47 +01:00
c01bea615e cosmetic: 🎨 fix shell style 2021-11-03 18:09:47 +01:00
046a728f22 change: handle dns server selection 2021-11-03 18:09:47 +01:00
3ded7fc883 refactor: ♻️ seperate parsing logic 2021-11-03 18:09:46 +01:00
f942a4495d dev:️ change git hooks and add shfmt 2021-11-03 18:09:46 +01:00
32404f2957 doc: 📝 update CHANGELOG 2021-11-03 18:09:46 +01:00
3cdcdbc8bf cosmetic: ♻️ normalizing pre-commit configuration to a top-level map 2021-11-03 18:09:45 +01:00
226537b2b0 refactor: ♻️ something 2021-11-03 18:09:45 +01:00
976ea673f8 dev: add pre-commit git hook for shellcheck 2021-11-03 18:09:45 +01:00
9ed30f2bee refactor: ♻️ remove unused help message 2021-11-03 18:09:44 +01:00
3ab88e5993 doc: 📝 update README.md 2021-11-03 18:09:44 +01:00
317abdbcec doc: 📝 document environment variables 2021-11-03 18:09:44 +01:00
4faba4e600 refactor: ♻️ method extractions and other beautifications 2021-11-03 18:09:43 +01:00
84784248c3 fix: 🐛 fix loop and error handling in case of connection issues 2021-11-03 18:09:43 +01:00
b083080c9d doc: 📝 document example of an docker-compose.yml file 2021-11-03 18:09:42 +01:00
48df7c7646 feat: add Dockerfile 2021-11-03 18:09:42 +01:00
b1f6c5a0fd doc: 📝 document loop mode and mention dig as requirement 2021-11-03 18:09:42 +01:00
17e23e7623 feat: add loop mode 2021-11-03 18:09:41 +01:00
bb1e0db9bf doc: 📝 update example of .env in README.md 2021-11-03 18:09:41 +01:00
29c2f62292 change: 🔃 rename environment variables 2021-11-03 18:09:41 +01:00
c85d5eaaee feat: add support for Duck DNS as DynDNS2 provider 2021-11-03 18:09:40 +01:00
3221f29d71 feat: add support for deSEC as DynDNS2 provider 2021-11-03 18:09:40 +01:00
706b6d84c1 feat: add completion
 add man page
2021-11-03 18:09:39 +01:00
6d9bf8a2ae feat: 🔃 replace getopt with argbash 2021-11-03 18:09:39 +01:00
6a14d00256 fix: 🐛 fix error handling 2021-11-03 18:09:39 +01:00
dff0c1c178 refactor: ♻️ main code 2021-11-03 18:09:38 +01:00
9bac611ddf feat: add interpretaton of status codes and act accordingly 2021-11-03 18:09:38 +01:00
1bb0f44d28 feat: make network interface configurable 2021-11-03 18:09:38 +01:00
730858344c fix: 🐛 fix sourcing of config file
♻️ do some shellcheck fixes
2021-11-03 18:09:02 +01:00
e3781a87bb feat: add DynDNS2 support for dynv6.com 2021-11-03 17:00:44 +01:00
fa5086f197 doc: 📝 CHANGELOG.md 2021-11-03 17:00:21 +01:00
3fa15b4d9d minor: 📝 .gitchangelog.rc 2021-11-03 16:59:05 +01:00
2c90e74bf5 doc: 📝 add example.env 2021-11-03 16:57:53 +01:00
cddcd9cfca add: 📝 README.md 2021-11-03 16:56:55 +01:00
616c1d47c1 add: dynb.sh 2021-11-03 16:56:39 +01:00
4 changed files with 112 additions and 40 deletions

View File

@@ -8,4 +8,10 @@ repos:
- "-l" # list files whose formatting differs from shfmt's - "-l" # list files whose formatting differs from shfmt's
- "-i 2" # indent: 0 for tabs (default), >0 for number of spaces - "-i 2" # indent: 0 for tabs (default), >0 for number of spaces
- "-ci" # switch cases will be indented - "-ci" # switch cases will be indented
- "-w" # write result to file instead of stdout - "-w" # write result to file instead of stdout
- repo: https://github.com/executablebooks/mdformat
rev: 0.7.9
hooks:
- id: mdformat
additional_dependencies:
- mdformat-gfm # GitHub Flavored Markdown support

View File

@@ -1,20 +1,50 @@
# Changelog # Changelog
## (unreleased) ## 0.2.0 (2021-09-24)
### New
* :sparkles: enable parameter extensions for `docker run --interactive` [Eduard Veit]
* :sparkles: add pre-commit hooks for markdown. [Eduard Veit]
* :sparkles: change git hooks and add shfmt. [Eduard Veit]
* :sparkles: add pre-commit git hook for shellcheck. [Eduard Veit]
### Changes
* :wrench: remove md-toc from pre-commit. [Eduard Veit]
* :wrench: handle dns server selection. [Eduard Veit]
### Documentation ### Documentation
* :memo: update CHANGELOG.md. [Eduard Veit]
* :memo: document docker parameters. [Eduard Veit]
* :memo: change default dns server setting. [Eduard Veit]
* :memo: update CHANGELOG. [Eduard Veit]
* :memo: update README.md. [Eduard Veit] * :memo: update README.md. [Eduard Veit]
### Other ### Other
* :art: lint README.md. [Eduard Veit]
* :art: add shfmt params to pre-commit check. [Eduard Veit]
* :art: fix shell style. [Eduard Veit]
* :recycle: seperate parsing logic. [Eduard Veit]
* :recycle: normalizing pre-commit configuration to a top-level map. [Eduard Veit] * :recycle: normalizing pre-commit configuration to a top-level map. [Eduard Veit]
* :recycle: refactorings. [Eduard Veit] * :recycle: refactorings. [Eduard Veit]
* Feature: :sparkles: add pre-commit git hook for shellcheck. [Eduard Veit]
* Refactor: :recycle: remove unused help message. [Eduard Veit] * Refactor: :recycle: remove unused help message. [Eduard Veit]

View File

@@ -1,5 +1,12 @@
FROM alpine:latest FROM alpine:latest
RUN apk update && apk add bash curl jq bind-tools RUN \
apk update \
&& \
apk add \
bash \
curl \
jq \
bind-tools
WORKDIR /usr/src/app WORKDIR /usr/src/app
COPY . . COPY . .
CMD /bin/bash /usr/src/app/dynb.sh ENTRYPOINT ["/bin/bash", "/usr/src/app/dynb.sh"]

View File

@@ -1,55 +1,65 @@
# 🔃 DynB # 🔃 DynB
DynB - dynamic DNS update script, written in bash DynB - dynamic DNS update script, written in bash
IPv4 (A) and IPv6 (AAAA) record updates are supported. IPv4 (A) and IPv6 (AAAA) record updates are supported.
<!-- TOC --> <!-- TOC -->
- [✨ Update Methods](#-update-methods) - [✨ Update Methods](#-update-methods)
- [APIs](#apis) - [APIs](#apis)
- [DynDNS2](#dyndns2) - [DynDNS2](#dyndns2)
- [📦 Requirements](#-requirements) - [📦 Requirements](#-requirements)
- [🚀 Installation](#-installation) - [🚀 Installation](#-installation)
- [⚙ Configuration](#-configuration) - [⚙ Configuration](#-configuration)
- [🏃 Run](#-run) - [🏃 Run](#-run)
- [⏰ Cron](#-cron) - [⏰ Cron](#-cron)
- [loop mode](#loop-mode)
- [crontab](#crontab)
- [🐟 docker](#-docker) - [🐟 docker](#-docker)
- [environment variables](#environment-variables)
<!-- /TOC --> <!-- /TOC -->
## ✨ Update Methods ## ✨ Update Methods
The following update methods are currently implemented: The following update methods are currently implemented:
### APIs ### APIs
* INWX.com Domrobot JSON-RPC-API - INWX.com Domrobot JSON-RPC-API\
Limitations: Limitations:
- minimum TTL is 300 (5 minutes) - minimum TTL is 300 (5 minutes)
### DynDNS2 ### DynDNS2
* INWX.com - INWX.com
* deSEC.io (dedyn.io) - deSEC.io (dedyn.io)
* DuckDNS.org - DuckDNS.org
* dynv6.com - dynv6.com
## 📦 Requirements ## 📦 Requirements
* `curl` - The minimum requirement for all API requests. - `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) - `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: also essential if you are using other APIs:
* `jq` - Command-line JSON processor - `jq` - Command-line JSON processor
## 🚀 Installation ## 🚀 Installation
Download the latest release Download the latest release
or simply clone this repo or simply clone this repo
```
```shell
git clone https://github.com/EV21/dynb.git git clone https://github.com/EV21/dynb.git
``` ```
If you want to add the script to you PATH, run :point_down: If you want to add the script to you PATH, run :point_down:
```
```shell
bash dynb.sh --link bash dynb.sh --link
``` ```
@@ -59,7 +69,8 @@ You can use a config in form of an `.env` file.
Or you can just use CLI parameters. Or you can just use CLI parameters.
Create `.env` in the app root directory or at `~/.local/share/dynb/.env`. Create `.env` in the app root directory or at `~/.local/share/dynb/.env`.
```
```bash
DYNB_DYN_DOMAIN=dyndns.example.com DYNB_DYN_DOMAIN=dyndns.example.com
## service provider could be deSEC, duckdns, dynv6, inwx ## service provider could be deSEC, duckdns, dynv6, inwx
@@ -82,18 +93,23 @@ DYNB_TOKEN=
## 🏃 Run ## 🏃 Run
If you have a config file just run :point_down: If you have a config file just run :point_down:
```
```bash
dynb 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.
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: Call the help function :point_down:
```
```bash
dynb --help dynb --help
``` ```
```
```bash
dynb --ip-mode dualstack --update-method domrobot --domain dyndns.example.com --username user42 --password SuperSecretPassword dynb --ip-mode dualstack --update-method domrobot --domain dyndns.example.com --username user42 --password SuperSecretPassword
``` ```
```
```bash
dynb --ip-mode dualstack --update-method dyndns --provider inwx --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
``` ```
@@ -108,18 +124,29 @@ Just use the parameter `--interval 60` or the environment variable `DYNB_INTERVA
### crontab ### crontab
execute :point_down: execute :point_down:
```
```bash
crontab -e crontab -e
``` ```
then enter :point_down: to run dynb every five minutes. then enter :point_down: to run dynb every five minutes.
```
```bash
*/5 * * * * $HOME/.local/bin/dynb >> $HOME/.local/share/dynb/dynb-cron.log */5 * * * * $HOME/.local/bin/dynb >> $HOME/.local/share/dynb/dynb-cron.log
``` ```
alternative with docker and parameters::
```bash
*/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. Note, cron typically does not use the users PATH variable.
## 🐟 docker ## 🐟 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. 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](https://docs.docker.com/config/daemon/ipv6/) is only supported on Docker daemons running on Linux hosts.
```yaml ```yaml
version: '3.4' version: '3.4'
@@ -140,18 +167,20 @@ services:
- DYNB_PASSWORD=SuperSecretPassword - DYNB_PASSWORD=SuperSecretPassword
- DYNB_INTERVAL=60 - DYNB_INTERVAL=60
``` ```
## environment variables ## environment variables
| variable | default value | description |
| --------------------- | --------------- | --------------------------------------------- | | variable | default value | description |
| DYNB_DYN_DOMAIN | undefined | required; `dyndns.example.com` | | --------------------- | --------------- | -------------------------------------------------------------------------------------------------------------- |
| DYNB_SERVICE_PROVIDER | undefined | required; `deSEC`, `duckdns`, `dynv6`, `inwx` | | DYNB_DYN_DOMAIN | undefined | required; `dyndns.example.com` |
| DYNB_UPDATE_METHOD | undefined | required; `dyndns` or `domrobot` (with inwx) | | DYNB_SERVICE_PROVIDER | undefined | required; `deSEC`, `duckdns`, `dynv6`, `inwx` |
| DYNB_IP_MODE | undefined | required; `4`, `6` or `64` for both | | DYNB_UPDATE_METHOD | undefined | required; `dyndns` or `domrobot` (with inwx) |
| DYNB_USERNAME | undefined | the requirement depends on your provider and the update method | | DYNB_IP_MODE | undefined | required; `4`, `6` or `64` for both |
| DYNB_PASSWORD | undefined | the requirement depends on your provider and the update method | | DYNB_USERNAME | 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_PASSWORD | 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_TOKEN | undefined | the requirement depends on your provider and the update method |
| DYNB_DEBUG | undefined | more console outputs | | DYNB_INTERVAL | undefined | without this setting the script/docker container will run one time and exits |
| DYNB_IPv4_CHECK_SITE | api64.ipify.org | You need a website or Web-API that outputs your remote IP | | DYNB_DEBUG | undefined | more console outputs |
| DYNB_IPv6_CHECK_SITE | api64.ipify.org | You need a website or Web-API that outputs your remote IP | | 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 | | 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 |