Lightweight DDNS Updater with Docker and web UI
Light container updating DNS A records periodically for GoDaddy, Namecheap, Dreamhost and DuckDNS
| Image size | RAM usage | CPU usage |
|---|---|---|
| 21.4MB | 13MB | Very low |
Features
- Updates periodically A records for different DNS providers: Namecheap, GoDaddy, Dreamhost, DuckDNS (ask for more)
- Web User interface
- Lightweight based on Go and Alpine 3.9 with Sqlite and Ca-Certificates packages
- Persistence with a sqlite database
Setup
To setup your domains initially, see the Domain set up section.
Use the following command:
docker run -d -p 8000:8000/tcp -e RECORD1=example.com,@,namecheap,provider,0e4512a9c45a4fe88313bcc2234bf547 qmcgaw/ddns-updater
or use docker-compose.yml with:
docker-compose up -d
You can add persitence by bind mounting the directory /updater/data by adding the flag -v $(pwd)/data:/updater/data for example. Make sure you set the right permissions and ownership to your host data folder:
chown 1000 data/
chmod 700 data/
Environment variables
| Environment variable | Default | Description |
|---|---|---|
DELAY |
300 |
Delay between updates in seconds |
ROOTURL |
/ |
URL path to append to all paths (i.e. /ddns for accessing https://example.com/ddns) |
LISTENINGPORT |
8000 |
Internal TCP listening port for the web UI |
RECORDi |
A record i to update in the form domain_name,host,provider,ip_method,password |
|
LOGGING |
json |
Format of logging, json or human |
NODEID |
0 |
Node ID (for distributed systems), can be any integer |
- The environement variables
RECORD1,RECORD2, etc. are domains to update the IP address for- The program reads them, starting at
RECORD1and will stop as soon asRECORDnis not set - Each must respect the format
domain_name,host,provider,ip_method,password - The
ip_methodparameter can be:providerfinds your public IP using your DNS provider (Namecheap or DuckDNS only)duckduckgofinds your public IP using https://duckduckgo.com/?q=ipopendnsfinds your public IP using https://diagnostic.opendns.com/myip154.251.67.58sets your public IP as fixed
- The program reads them, starting at
Host firewall
This container needs the following ports:
- TCP 443 outbound
- UDP 53 outbound
- TCP 8000 inbound (or other) for the WebUI
Domain set up
Namecheap
- Create a Namecheap account and buy a domain name - example.com as an example
- Login to Namecheap at https://www.namecheap.com/myaccount/login.aspx
For each domain name you want to add, replace example.com in the following link with your domain name and go to https://ap.www.namecheap.com/Domains/DomainControlPanel/example.com/advancedns
-
For each host you want to add (if you don't know, create one record with the host set to
*): -
Scroll down and turn on the switch for DYNAMIC DNS
-
The Dynamic DNS Password will appear, which is
0e4512a9c45a4fe88313bcc2234bf547in this example.
GoDaddy
- Login to https://developer.godaddy.com/keys with your account credentials.
- Generate a Test key and secret.
- Generate a Production key and secret.
Obtain the key and secret of that production key.
In this example, the key is dLP4WKz5PdkS_GuUDNigHcLQFpw4CWNwAQ5 and the secret is GuUFdVFj8nJ1M79RtdwmkZ.
DuckDNS
See duckdns website
Dreamhost
Awaiting a contribution
Testing
- The automated healthcheck verifies all your records are up to date using DNS lookups
- You can check manually at:
-
GoDaddy: https://dcc.godaddy.com/manage/yourdomain.com/dns (replace yourdomain.com)
You might want to try to change the IP address to another one to see if the update actually occurs.
-
Namecheap:
-
DuckDNS:
-
Used in external projects
TODOs
- Unit tests
- Cloudflare DNS registrar
- Read parameters from JSON file
- Finish readme
- Other types or records
- ReactJS frontend
- Live update of website
- Change settings












