A dynamic DNS client tool that supports AliDNS, Cloudflare, Google Domains, DNSPod, HE.net & DuckDNS & DreamHost, etc, written in Go.
A dynamic DNS client tool that supports AliDNS, Cloudflare, Google Domains, DNSPod, HE.net & DuckDNS & DreamHost, etc, written in Go.
██████╗ ██████╗ ██████╗ ███╗ ██╗███████╗
██╔════╝ ██╔═══██╗██╔══██╗████╗ ██║██╔════╝
██║ ███╗██║ ██║██║ ██║██╔██╗ ██║███████╗
██║ ██║██║ ██║██║ ██║██║╚██╗██║╚════██║
╚██████╔╝╚██████╔╝██████╔╝██║ ╚████║███████║
╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝GoDNS is a self-hosted dynamic DNS (DDNS) client with multi-provider support and a built-in web panel. It is a rewrite in Go of my early DynDNS open-source project.
If you want a managed DDNS service instead of self-hosting GoDNS yourself, try godns.app.
It is a hosted option for users who want DDNS without running their own server, managing DNS manually, or even owning a domain in advance.
Below is the built-in web panel of the open-source GoDNS project:
| Provider | IPv4 support | IPv6 support | Root Domain | Subdomains |
|---|---|---|---|---|
| Cloudflare | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| DigitalOcean | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Google Domains | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
| DNSPod | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Dynv6 | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
| HE.net (Hurricane Electric) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| AliDNS | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| DuckDNS | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
| Dreamhost | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
| No-IP | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
| Scaleway | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Linode | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Strato | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
| LoopiaSE | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
| Infomaniak | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
| Hetzner | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| OVH | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
| Porkbun | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Dynu | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
| IONOS | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
| TransIP | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
| name.com | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
Tip: You can follow this issue to view the current status of DDNS for root domains.
Choose the path that fits you best:
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 -aThe binary can run on routers as well.
To self-host GoDNS, it is assumed:
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.
Choose one of the following installation methods:
brew install godnscd cmd/godns # go to the GoDNS directory
go mod download # get dependencies
go build # buildPrint usage/help by running:
$ ./godns -h
Usage of ./godns:
-c string
Specify a config file (default "./config.json")
-h Show helpconfig.json, or make a copy of config_sample.yaml and name it as config.yaml.-c=path/to/your/file.json optionGoDNS now supports multiple DNS providers simultaneously!
You can now configure domains from different DNS providers in a single configuration file, allowing you to:
View the complete Multi-Provider Configuration Guide for detailed setup instructions and examples.
GoDNS supports 2 different configuration file formats:
By default, GoDNS uses JSON config file. However, you can specify to use the YAML format via: ./godns -c /path/to/config.yaml
GoDNS supports dynamic loading of configuration. If you modify the configuration file, GoDNS will automatically reload the configuration and apply the changes.
provider — One of the supported provider to use: Cloudflare, Google, DNSPod, AliDNS, HE, DuckDNS or Dreamhost.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 subdomains.ip_urls — A URL array for fetching one's public IPv4 address.ipv6_urls — A URL array for fetching one's public IPv6 address.ip_type — Switch deciding if IPv4 or IPv6 should be used (when supported). Available values: IPv4 or IPv6.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 set 8.8.8.8 when using GoDNS in IPv4 mode or 2001:4860:4860::8888 in IPv6 mode.skip_ssl_verify - Skip verification of SSL certificates for https requests.By simply putting @ into sub_domains, for example:
"domains": [{
"domain_name": "example.com",
"sub_domains": ["@"]
}]For Cloudflare, you need to provide the email & Global API Key as a password (or to use the API token) and configure all the domains & subdomains.
By setting the option proxied = true, the record receives the performance and security benefits of Cloudflare. This option is only available for Cloudflare.
{
"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"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": "",
"proxied": false
}{
"provider": "Cloudflare",
"login_token": "API Token",
"domains": [
{
"domain_name": "example.com",
"sub_domains": ["www", "test"]
},
{
"domain_name": "example2.com",
"sub_domains": ["www", "test"]
}
],
"resolver": "8.8.8.8",
"ip_urls": ["https://api.ip.sb/ip"],
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": ""
}For DNSPod, you need to provide your API Token(you can create it here), and config all the domains & subdomains.
Example{
"provider": "DNSPod",
"login_token": "your_id,your_token",
"domains": [
{No open issues yet, or sync has not completed.