Sign inSign up

skibish/ddns

By skibish

•Updated over 1 year ago

Personal DDNS client with Digital Ocean Networking DNS as backend

Image
2

10K+

skibish/ddns repository overview

⁠DDNS

Test Release Go Report Card

Personal DDNS client with Digital Ocean Networking⁠ DNS as backend.

Read about it in the Blog⁠

⁠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.

⁠Installation

Download binary from releases⁠ to /usr/local/bin/ddns.

And start it as:

ddns

Or you can download Docker image⁠ and use it:

docker run \
  -v /path/to/config.yml:/config/.ddns.yml \
  skibish/ddns -conf-file /config/.ddns.yml

⁠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)
  -v  Show version and exit

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 Point to DigitalOcean Nameservers From Common Domain Registrars⁠

Configuration should be in the following format:

token: "AMAZING TOKEN"                          # Digital Ocean token
domains:                                        # Domains to update
  - "example.com"
forceIPV6: true                                 # Use IPv6 address resolve (Default false and force IPv4)
records:                                        # Records of the domains 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
  telegram:
    read: below
  gotify:
    read: below
⁠Notifications

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

List of supported notifications:

⁠SMTP
smtp:
  user: "[email protected]"
  password: "1234"
  host: "localhost"
  port: "22"
  to: "[email protected]"
  subject: "My DDNS sending me a message"
  secure: true # Optional flag. Set it, if you will send emails with SSL
⁠Telegram
telegram:
  token: "telegram bot token"
  chat_id: "1234"
⁠Gotify
gotify:
  app_url: "https://gotify.example.com" # url for gotify
  app_token: "" # token from gotify app
  title: "DDNS" #optional title of messages, defaults to DDNS

Tag summary

Content type

Image

Digest

sha256:4007b8dfc…

Size

4 MB

Last updated

over 1 year ago

docker pull skibish/ddns