Coder Social home page Coder Social logo

shizhz / godns Goto Github PK

View Code? Open in Web Editor NEW

This project forked from timothyye/godns

0.0 1.0 0.0 1.32 MB

A dynamic DNS client tool, supports AliDNS, Cloudflare, Google Domains, DNSPod, HE.net & DuckDNS, written in Go.

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

License: Apache License 2.0

Dockerfile 0.56% Go 96.33% Makefile 3.12%

godns's Introduction

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

MIT licensed LICENSE 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 Providers

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")
  -h    Show help

Config it

  • Get config_sample.json from Github.
  • Rename it to config.json.
  • Configure your provider, domain/subdomain 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 fields

  • provider: The providers that GoDNS supports, available values are: Cloudflare, Google, DNSPod, AliDNS, HE, DuckDNS.
  • email: Email or account name of your DNS provider.
  • password: Password of your account.
  • login_token: Login token of your account.
  • domains: Domains list, with your sub domains.
  • ip_url: A site helps you to get your public IP address.
  • interval: The interval seconds that GoDNS check your public IP.
  • socks5_proxy: Socks5 proxy server.

Config example for Cloudflare

For Cloudflare, you need to provide email & Global API Key as password, and config all the domains & subdomains.

{
  "provider": "Cloudflare",
  "email": "[email protected]",
  "password": "Global API Key",
  "domains": [{
      "domain_name": "example.com",
      "sub_domains": ["www","test"]
    },{
      "domain_name": "example2.com",
      "sub_domains": ["www","test"]
    }
  ],
  "ip_url": "https://myip.biturl.top",
  "interval": 300,
  "socks5_proxy": ""
}

Config example for DNSPod

For DNSPod, you need to provide your API Token(you can create it here), and config all the domains & subdomains.

{
  "provider": "DNSPod",
  "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": "https://myip.biturl.top",
  "interval": 300,
  "socks5_proxy": ""
}

Config example for Google Domains

For Google Domains, you need to provide email & password, and config all the domains & subdomains.

{
  "provider": "Google",
  "email": "Your_Username",
  "password": "Your_Password",
  "domains": [{
      "domain_name": "example.com",
      "sub_domains": ["www","test"]
    },{
      "domain_name": "example2.com",
      "sub_domains": ["www","test"]
    }
  ],
  "ip_url": "https://myip.biturl.top",
  "interval": 300,
  "socks5_proxy": ""
}

Config example for AliDNS

For AliDNS, you need to provide AccessKeyID & AccessKeySecret as email & password, and config all the domains & subdomains.

{
  "provider": "AliDNS",
  "email": "AccessKeyID",
  "password": "AccessKeySecret",
  "login_token": "",
  "domains": [{
      "domain_name": "example.com",
      "sub_domains": ["www","test"]
    },{
      "domain_name": "example2.com",
      "sub_domains": ["www","test"]
    }
  ],
  "ip_url": "https://myip.biturl.top",
  "interval": 300,
  "socks5_proxy": ""
}

Config example for DuckDNS

For DuckDNS, only need to provide the token, config 1 default domain & subdomains.

{
  "provider": "DuckDNS",
  "password": "",
  "login_token": "3aaaaaaaa-f411-4198-a5dc-8381cac61b87",
  "domains": [
    {
      "domain_name": "www.duckdns.org",
      "sub_domains": [
        "myname"
      ]
    }
  ],
  "ip_url": "https://myip.biturl.top",
  "interval": 300,
  "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",
  "password": "YourPassword",
  "login_token": "",
  "domains": [{
      "domain_name": "example.com",
      "sub_domains": ["www","test"]
    },{
      "domain_name": "example2.com",
      "sub_domains": ["www","test"]
    }
  ],
  "ip_url": "https://myip.biturl.top",
  "interval": 300,
  "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.

Get an IP address from the interface

For some reasons if you want to get an IP directly from the interface, say eth0 for Linux or Local Area Connection for Windows, update config file like this:

  "ip_url": "",
  "ip_interface": "eth0",

If you set both ip_url and ip_interface, it first tries to get an IP address online, and if not succeed, gets an IP address from the interface as a fallback.

Note that IPv6 address will be ignored currently.

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": "[email protected]"
  }

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.

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

Run it as a Windows service

After creating your config.json file:

  • Get the latest NSSM for create a windows service.
  • Open the command prompt (as administrator) in the folder where you downloaded NSSM (e.g. C:\Downloads\nssm\ win64) and run:
nssm install YOURSERVICENAME

You will have an interface to configure your service, it is very simple in the "Application" tab just indicate where your 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 using the "Install service" button.
  • Done. Now whenever windows start your service will be loaded.
  • To uninstall:
nssm remove YOURSERVICENAME

Enjoy it!

godns's People

Contributors

timothyye avatar hguandl avatar gunsluo avatar kerma avatar sadpencil avatar fabianski7 avatar sdandroid avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.