tonycody / godns

A dynamic DNS client tool, supports DNSPod & HE.net, written in Go.

Home Page:https://xiaozhou.net/godns-project-2014-05-18.html

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

 ██████╗  ██████╗ ██████╗ ███╗   ██╗███████╗
██╔════╝ ██╔═══██╗██╔══██╗████╗  ██║██╔════╝
██║  ███╗██║   ██║██║  ██║██╔██╗ ██║███████╗
██║   ██║██║   ██║██║  ██║██║╚██╗██║╚════██║
╚██████╔╝╚██████╔╝██████╔╝██║ ╚████║███████║
 ╚═════╝  ╚═════╝ ╚═════╝ ╚═╝  ╚═══╝╚══════╝

Release MIT licensed Build Status Docker Go Report Card Cover.Run GoDoc

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

Supported Platforms

  • Linux
  • MacOS
  • ARM Linux (Raspberry Pi, etc...)
  • Windows

MIPS32 platform

For MIPS32 platform, please checkout the mips32 branch, this branch is contributed by hguandl, in this branch, the support for mips32 is added, which means it could run properly on Openwrt and LEDE.

Pre-condition

  • Register and own a domain.

  • Domain's nameserver points to DNSPod or HE.net.

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 log file path, max size of log file, max count of log file.
  • 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": "example@gmail.com",
  "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",
  "log_path": "./godns.log",
  "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",
  "log_path":"/users/timothy/workspace/src/godns/godns.log",
  "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.

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.

docker run -d --name godns --restart=always \
-v /path/to/config.json:/usr/local/godns/config.json timothyye/godns:latest

Enjoy it!

About

A dynamic DNS client tool, supports DNSPod & HE.net, written in Go.

https://xiaozhou.net/godns-project-2014-05-18.html

License:Apache License 2.0


Languages

Language:Go 96.3%Language:Makefile 3.7%