Personal DDNS client with Digital Ocean Networking DNS as backend.
Clone or download

README.md

DDNS

Build Status Go Report Card

Personal DDNS client with Digital Ocean Networking DNS as backend.

Read about it on Medium

Motivation

We have services like DynDNS, No-IP to access PCs remotely. But do we need them? This project is your own DDNS solution and will work for free (thanks to Digital Ocean Networking DNS).

What is DDNS?

From Wikipedia

Dynamic DNS (DDNS or DynDNS) is a method of automatically updating a name server in the Domain Name System (DNS), often in real time, with the active DDNS configuration of its configured hostnames, addresses or other information.

How to start

Put binary in /usr/local/bin.

And start it as:

ddns

Or you can start ddns in background:

ddns > /dev/null 2>&1 &

Documentation

You can download binary for your OS from releases page.

ATTENTION! Currently tested on Linux and macOS.

Run ddns -h, to see help. It will output:

Usage of ddns:
  -check-period duration
    	Check if IP has been changed period (default 5m0s)
  -conf-file string
    	Location of the configuration file (default "$HOME/.ddns.yml")
  -req-timeout duration
    	Request timeout to external resources (default 10s)

Configuration should be supplied. By default it is read from $HOME/.ddns.yml.

You need to setup your domain in Digital Ocean Networks panel.

In your domain name provider configuration point domain to Digital Ocean NS records.

Refer to: How To Set Up a Host Name with DigitalOcean

Configuration should be in the following format:

token: "AMAZING TOKEN"                          # Digital Ocean token
domain: "example.com"                           # Domain to update
forceIPV6: true                                 # Use IPv6 address resolve (Default false and force IPv4)
records:                                        # Records of the domain to update
  - type: "A"                                   # Record type
    name: "www"                                 # Record name
  - type: "TXT"
    name: "demo"
    data: "My IP is {{.IP}} and I am {{.mood}}" # "data" key is optional. You can write here
                                                # what you want and reference values from "params".
                                                # Key "IP" is reserved.
params:
  mood: "cool"
notify:                                         # Optional notifiers
  smtp:
    read: below

Notifications

Not you can also add notifications to other systems. These notifications are based on sirupsen/logrus hooks. Add them to the configuration file as:

# config part from the top
#...

notify:
  <name of notification>:
    # ...configuration

Currently supported notifications are listed below:

SMTP

smtp:
  user: "foo@bar.com"
  password: "1234"
  host: "localhost"
  port: "22"
  to: "foo@foo.com"
  subject: "My DDNS sending me a message"
  secure: true # Optional flag. Set it, if you will send emails with SSL