██████╗ ██████╗ ██████╗ ███╗ ██╗███████╗
██╔════╝ ██╔═══██╗██╔══██╗████╗ ██║██╔════╝
██║ ███╗██║ ██║██║ ██║██╔██╗ ██║███████╗
██║ ██║██║ ██║██║ ██║██║╚██╗██║╚════██║
╚██████╔╝╚██████╔╝██████╔╝██║ ╚████║███████║
╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝
GoDNS is a dynamic DNS (DDNS) client tool, it is based on my early open source project: DynDNS.
Now I rewrite DynDNS by Golang and call it GoDNS.
Supported DNS Provider
- DNSPod (https://www.dnspod.cn/)
- HE.net (Hurricane Electric) (https://dns.he.net/)
Supported Platforms
- Linux
- MacOS
- ARM Linux (Raspberry Pi, etc...)
- Windows
- MIPS32 platform
MIPS32 platform
To compile binaries for MIPS (mips or mipsle):
GOOS=linux GOARCH=mips/mipsle GOMIPS=softfloat go build -a
And the binary can run well on routers.
Pre-condition
Get it
Build it from source code
- Get source code from Github:
git clone https://github.com/timothyye/godns.git
- Go into the godns directory, get related library and then build it:
cd cmd/godns
go get -v
go build
Download from releases
Download compiled binaries from releases
Get help
$ ./godns -h
Usage of ./godns:
-c string
Specify a config file (default "./config.json")
-d Run it as docker mode
-h Show help
Config it
- Get config_sample.json from Github.
- Rename it to config.json.
- Configure your provider, domain/sub-domain info, username and password, etc.
- Configure the SMTP options if you want, a mail notification will sent to your mailbox once the IP is changed.
- Save it in the same directory of GoDNS, or use -c=your_conf_path command.
Config example for DNSPod
For DNSPod, you need to provide email & password, and config all the domains & subdomains.
{
"provider": "DNSPod",
"email": "",
"password": "",
"login_token": "your_id,your_token",
"domains": [{
"domain_name": "example.com",
"sub_domains": ["www","test"]
},{
"domain_name": "example2.com",
"sub_domains": ["www","test"]
}
],
"ip_url": "http://members.3322.org/dyndns/getip",
"socks5_proxy": ""
}
Config example for HE.net
For HE, email is not needed, just fill DDNS key to password, and config all the domains & subdomains.
{
"provider": "HE",
"email": "",
"password": "YourPassword",
"login_token": "",
"domains": [{
"domain_name": "example.com",
"sub_domains": ["www","test"]
},{
"domain_name": "example2.com",
"sub_domains": ["www","test"]
}
],
"ip_url": "http://members.3322.org/dyndns/getip",
"socks5_proxy": ""
}
HE.net DDNS configuration
Add a new "A record", make sure that "Enable entry for dynamic dns" is checked:

Fill your own DDNS key or generate a random DDNS key for this new created "A record":

Remember the DDNS key and fill it as password to the config.json.
NOTICE: If you have multiple domains or subdomains, make sure their DDNS key are the same.
Email notification support
Update config file and provide your SMTP options, a notification mail will be sent to your mailbox once the IP is changed and updated.
"notify": {
"enabled": true,
"smtp_server": "smtp.example.com",
"smtp_username": "user",
"smtp_password": "password",
"smtp_port": 25,
"send_to": "my_mail@example.com"
}
Notification mail example:

SOCKS5 proxy support
You can also use SOCKS5 proxy, just fill SOCKS5 address to the socks5_proxy
item:
"socks5_proxy": "127.0.0.1:7070"
Now all the queries will go through the specified SOCKS5 proxy.
Run it as a daemon manually
nohup ./godns &
Run it as a daemon, manage it via Upstart
- Install
upstart
first - Copy
./upstart/godns.conf
to/etc/init
- Start it as a system service:
sudo start godns
Run it as a daemon, manage it via Systemd
- Modify
./systemd/godns.service
and config it. - Copy
./systemd/godns.service
to/lib/systemd/system
- Start it as a systemd service:
sudo systemctl enable godns
sudo systemctl start godns
Run it with docker
Now godns supports to run in docker.
- Get config_sample.json from Github.
- Rename it to config.json.
- Run GoDNS with docker:
docker run -d --name godns --restart=always \
-v /path/to/config.json:/usr/local/godns/config.json timothyye/godns:latest