Skip to content
/ d2c.sh Public

The lightweight IPv4/IPv6 dynamic DNS updater for Cloudflare.

License

Notifications You must be signed in to change notification settings

ddries/d2c.sh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 

Repository files navigation

d2c.sh

The lightweight IPv4/IPv6 dynamic DNS updater for Cloudflare.


d2c.sh is a simple Bash script that automatically updates A and AAAA DNS records on Cloudflare for your machine’s public IP.

Configure

Warning

d2c.sh updates existing records. Make sure to create them in the Cloudflare dashboard before running d2c.sh.

By default, configuration files are read from /etc/d2c/. You can override the configuration directory using the -c/ --config option.

It processes all files in the configuration directory that end with .toml, e.g., /etc/d2c/d2c.toml, /etc/d2c/zone1.toml or /etc/d2c/zone2.toml.

Warning

Make sure to create the correct type of record (A or AAAA) according to IPv4 or IPv6, as d2c.sh will ignore misconfigured records.

[api]
zone-id = "aaa"           # your DNS zone ID
api-key = "bbb"           # your API key with DNS records permissions

[[dns]]
name = "dns1.example.com" # DNS name
proxy = true              # Proxied by Cloudflare?

[[dns]]
name = "dns2.example.com"
proxy = false

[[dns]]
name = "dns6.example.com"
proxy = false
ipv6 = true               # set this entry as ipv6

Usage

Method 1: Installing d2c.sh

Clone the repository:

$ git clone https://github.com/ddries/d2c.sh.git
$ cd d2c.sh

Install the script:

$ sudo chmod +x d2c.sh
$ sudo cp d2c.sh /usr/local/bin

Now, you can run d2c.sh from the command-line. If the configuration directoy does not exist, the script will create it for you.

$ d2c.sh

Created /etc/d2c/. Please, fill the configuration files.

Fill the configuration file(s) with your zone id, API key and the desired DNS':

$ sudo nano /etc/d2c/d2c.toml

[api]
zone-id = "aaa"
api-key = "bbb"
...

Finally, you can run manually d2c.sh or set up a cronjob to update periodically:

$ d2c.sh # manually

[d2c.sh] Processing /etc/d2c/d2c.toml...
[d2c.sh] dns1.example-1.com did not change
[d2c.sh] Processing /etc/d2c/d2c-1.toml...
[d2c.sh] OK dns2.example-2.com

$ crontab -e # set cronjob to run d2c.sh periodically

$ d2c.sh -c /path/to/files # use another config path

Method 2: Executing from URL

You can also execute d2c.sh avoiding the installation. Note that you must still have valid configuration file(s), e.g. /etc/d2c/d2c.toml.

Execute from URL:

$ bash <(curl -s https://raw.githubusercontent.com/ddries/d2c.sh/master/d2c.sh)

[d2c.sh] Processing /etc/d2c/d2c.toml...
[d2c.sh] dns1.example-1.com did not change
[d2c.sh] Processing /etc/d2c/d2c-1.toml...
[d2c.sh] OK dns2.example-2.com

To run periodically without installing, you can write your own script:

$ nano run_d2c.sh

#!/bin/bash
bash <(curl -s https://raw.githubusercontent.com/ddries/d2c.sh/master/d2c.sh)

$ crontab -e # set cronjob to run periodically

Method 3: Docker

You can use the provided Dockerfile to build a Docker image of d2c.sh:

$ git clone https://github.com/ddries/d2c.sh.git
$ cd d2c.sh
$ docker build . -t ddries/d2c.sh:latest

Then, you can run it using your own Docker workflow. For instance, using plain Docker:

$ docker run --rm --network host -v /etc/d2c/:/etc/d2c ddries/d2c.sh:latest

Warning

Make sure to set the network driver to host, since the container must have the host's IPv4/6 address.

Notification Support

d2c.sh by default does not use any notification service, but the following are supported and can be enabled:

When DNS records are updated, d2c.sh will send a notification to enabled services. Feel free to submit a pull request to add more notification services.

1. Gotify

To enable Gotify support, add the following configuration to your toml file:

[gotify]
enabled = true
endpoint = "http://gotify.example.com"
token = "ccc"

2. Telegram

To enable notifications via Telegram bot, add the following configuration to your toml file:

[telegram]
enabled = true
token = "aaabbb"    # from BotFather
chat_id = "111234"

You can get your chat ID by sending a message to the bot and going to this URL to view the chat_id: https://api.telegram.org/botYOUR_BOT_TOKEN/getUpdates

Contributors 4

  •  
  •  
  •  
  •