- dnsdynamic.org
- freedns.afraid.org
- ydns.eu
- dtdns.com
- duckdns.org
- noip.com
emerge -av net-dns/ddclient
nano -w /etc/ddclient/ddclient.conf
daemon=3600 syslog=yes protocol=freedns use=if, if=eth0 ssl=yes use=web, web=myip.dnsomatic.com server=freedns.afraid.org login=userID password='password' XXXXXX.mooo.com
/etc/init.d/ddclient start
rc-update add ddclient default
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin 0,5,10,15,20,25,30,35,40,45,50,55 * * * * sleep 34 ; wget -O - http://freedns.afraid.org/dynamic/update.php?aXXXXXXXXXXXXXXXXXXXXXX >> /tmp/freedns_XXXXX_mooo_com.log 2>&1 &
from https://www.mufljuz.com/?p=298
---------------------------------
DynDNS
Dynamic DNS script tool, written with ruby.
Introduction:
DynDNS is a ruby script which uses DNSPod(http://www.dnspod.cn) to implement DDNS(Dynamic DNS).
For more powerful DDNS tool, please visit https://github.com/TimothyYe/godns
Author: Timothy
Contributor: Jason (https://github.com/outmanone)
Created Date: 2012.04.19
How To Use
Prepare your Ruby runtime first.
Step 1: git clone git://github.com/TimothyYe/DynDNS.git
Step 2: Edit "Config.yml", fill your domain information & DNSPod username & password.
Step 3: ruby DynDNS.rb start
GoDNS is a dynamic DNS (DDNS) client. It is a rewrite in Go of my early DynDNS open source project.
Currently supports updating A records for subdomains. Doesn't support updating of root domains.
- Supported DNS Providers
- Supported Platforms
- Pre-conditions
- Installation
- Usage
- Configuration
- Running GoDNS
- Special Thanks
Supported DNS Providers
Provider | IPv4 support | IPv6 support | Root Domain | Subdomains |
---|---|---|---|---|
Cloudflare | ||||
Google Domains | ||||
DNSPod | ||||
HE.net (Hurricane Electric) | ||||
AliDNS | ||||
DuckDNS | ||||
Dreamhost | ||||
No-IP |
Tip: You can follow this issue to view the current status of DDNS for root domains.
Supported Platforms
Linux
MacOS
ARM Linux (Raspberry Pi, etc.)
Windows
MIPS32 platform
To compile binaries for MIPS (mips or mipsle), run:
GOOS=linux GOARCH=mips/mipsle GOMIPS=softfloat go build -a
The binary can run on routers as well.
Pre-conditions
To use GoDNS, it is assumed:
- You registered (now own) a domain
- Domain was delegated to a supported DNS provider (i.e. it has nameserver
NS
records pointing at a supported provider)
Alternatively, you can sign in to DuckDNS (with a social account) and get a subdomain on the duckdns.org domain for free.
Installation
Build GoDNS by running (from the root of the repository):
cd cmd/godns # go to the GoDNS directory
go get -v # get dependencies
go build # build
You can also download a compiled binary from the releases.
Usage
Print usage/help by running:
$ ./godns -h
Usage of ./godns:
-c string
Specify a config file (default "./config.json")
-h Show help
Configuration
Overview
- Make a copy of config_sample.json and name it
config.json
- Configure your provider, domain/subdomain info, credentials, etc.
- Configure a notification medium (e.g. SMTP to receive emails) to get notified when your IP address changes
- Place the file in the same directory of GoDNS or use the
-c=path/to/your/file.json
option
Configuration properties
provider
— One of the supported provider to use:Cloudflare
,Google
,DNSPod
,AliDNS
,HE
,DuckDNS
orDreamhost
.email
— Email or account name of the DNS provider.password
— Password of the DNS provider.login_token
— API token of the DNS provider.domains
— Domains list, with your sub domains.ip_url
— A URL for fetching one's public IPv4 address.ipv6_url
— A URL for fetching one's public IPv6 address.ip_type
— Switch deciding if IPv4 or IPv6 should be used (when supported). Available values:IPv4
orIPv6
.interval
— How often (in seconds) the public IP should be updated.socks5_proxy
— Socks5 proxy server.resolver
— Address of a public DNS server to use. For instance to use Google's public DNS, you can set8.8.8.8
when using GoDNS in IPv4 mode or2001:4860:4860::8888
in IPv6 mode.
Update root domain
By simply putting @
into sub_domains
, for example:
"domains": [{
"domain_name": "example.com",
"sub_domains": ["@"]
}]
Configuration examples
Cloudflare
For Cloudflare, you need to provide the email & Global API Key as password (or to use the API token) and config all the domains & subdomains.
Using email & Global API Key
Using the API Token
DNSPod
For DNSPod, you need to provide your API Token(you can create it here), and config all the domains & subdomains.
Example
Dreamhost
For Dreamhost, you need to provide your API Token(you can create it here), and config all the domains & subdomains.
Example
Google Domains
For Google Domains, you need to provide email & password, and config all the domains & subdomains.
Example
AliDNS
For AliDNS, you need to provide AccessKeyID
& AccessKeySecret
as email
& password
, and config all the domains & subdomains.
Example
DuckDNS
For DuckDNS, only need to provide the token
, config 1 default domain & subdomains.
Example
No-IP
Example
HE.net
For HE, email is not needed, just fill DDNS key to password, and config all the domains & subdomains.
Example
Provider configuration
Notifications
GoDNS can send a notification each time the IP changes.
Emails are sent over SMTP. Update your configuration with the following snippet:
"notify": {
"mail": {
"enabled": true,
"smtp_server": "smtp.example.com",
"smtp_username": "user",
"smtp_password": "password",
"smtp_port": 25,
"send_to": "my_mail@example.com"
}
}
Each time the IP changes, you will receive an email like that:
Telegram
To receive a Telegram message each time the IP changes, update your configuration with the following snippet:
"notify": {
"telegram": {
"enabled": true,
"bot_api_key": "11111:aaaa-bbbb",
"chat_id": "-123456",
"message_template": "Domain *{{ .Domain }}* is updated to %0A{{ .CurrentIP }}",
"use_proxy": false
},
}
The message_template
property supports markdown. New lines needs to be escaped with %0A
.
Slack
To receive a Slack message each time the IP changes, update your configuration with the following snippet:
"notify": {
"slack": {
"enabled": true,
"bot_api_token": "xoxb-xxx",
"channel": "your_channel",
"message_template": "Domain *{{ .Domain }}* is updated to \n{{ .CurrentIP }}",
"use_proxy": false
},
}
The message_template
property supports markdown. New lines needs to be escaped with \n
.
Discord
To receive a Discord message each time the IP changes, update your configuration with the following snippit:
"notify": {
"discord": {
"enabled": true,
"bot_api_token": "discord_bot_token",
"channel": "your_channel",
"message_template": "(Optional) Domain *{{ .Domain }}* is updated to \n{{ .CurrentIP }}",
}
}
Miscellaneous topics
IPv6 support
Most of the providers support IPv6.
To enable the IPv6
support of GoDNS, there are two solutions to choose from:
Use an online service to lookup the external IPv6
For that:
- Set the
ip_type
asIPv6
, and make sure theipv6_url
is configured - Create an
AAAA
record instead of anA
record in your DNS provider
Configuration example
- Set the
Let GoDNS find the IPv6 of the network interface of the machine it is running on (more on that later).
For this to happen, just leave
ip_url
andipv6_url
empty.Note that the network interface must be configured with an IPv6 for this to work.
Network interface IP address
For some reasons if you want to get the IP address associated to a network interface (instead of performing an online lookup), you can specify it in the configuration file this way:
...
"ip_url": "",
"ip_interface": "interface-name",
...
With interface-name
replaced by the name of the network interface, e.g. eth0
on Linux or Local Area Connection
on Windows.
Note: If ip_url
is also specified, it will be used to perform an online lookup first and the network interface IP will be used as a fallback in case of failure.
SOCKS5 proxy support
You can make all remote calls go through a SOCKS5 proxy by specifying it in the configuration file this way:
...
"socks5_proxy": "127.0.0.1:7070"
"use_proxy": true
...
Display debug info
To display debug info, set debug_info
as true
to enable this feature. By default, the debug info is disabled.
"debug_info": true,
Running GoDNS
There are a few ways to run GoDNS.
As a manual daemon
nohup ./godns &
Note: when the program stops, it will not be restarted.
As a managed daemon (with upstart)
Install
upstart
first (if not available already)Copy
./upstart/godns.conf
to/etc/init
(and tweak it to your needs)Start the service:
sudo start godns
As a managed daemon (with systemd)
Install
systemd
first (it not available already)Copy
./systemd/godns.service
to/lib/systemd/system
(and tweak it to your needs)Start the service:
sudo systemctl enable godns sudo systemctl start godns
As a Docker container
With /path/to/config.json
your local configuration file, run:
docker run \
-d --name godns --restart=always \
-v /path/to/config.json:/config.json \
timothyye/godns:latest
As a Windows service
Download the latest version of NSSM
In an administrative prompt, from the folder where NSSM was downloaded, e.g.
C:\Downloads\nssm\
win64, run:nssm install YOURSERVICENAME
Follow the interface to configure the service. In the "Application" tab just indicate where the
godns.exe
file is. Optionally you can also define a description on the "Details" tab and define a log file on the "I/O" tab. Finish by clicking on the "Install service" button.The service will now start along Windows.
Note: you can uninstall the service by running:
nssm remove YOURSERVICENAME
from https://github.com/TimothyYe/godns