██████╗ ██████╗ ██████╗ ███╗ ██╗███████╗
██╔════╝ ██╔═══██╗██╔══██╗████╗ ██║██╔════╝
██║ ███╗██║ ██║██║ ██║██╔██╗ ██║███████╗
██║ ██║██║ ██║██║ ██║██║╚██╗██║╚════██║
╚██████╔╝╚██████╔╝██████╔╝██║ ╚████║███████║
╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝
GoDNS 是一个动态 DNS (DDNS) 客户端工具。它是用 Go 重写的我早期的 DynDNS 开源项目。
- 支持的 DNS 提供商
- 支持的平台
- 前提条件
- 安装
- 使用方法
- 配置
- Web 面板
- 运行 GoDNS
- 贡献
- 特别感谢
支持的 DNS 提供商
提供商 | IPv4 支持 | IPv6 支持 | 根域名 | 子域名 |
---|---|---|---|---|
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: |
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: |
提示:您可以关注此 问题 查看根域名 DDNS 的当前状态。
支持的平台
- Linux
- MacOS
- ARM Linux(如 Raspberry Pi 等)
- Windows
-
MIPS32 平台
要为 MIPS(mips 或 mipsle)编译二进制文件,请运行:
GOOS=linux GOARCH=mips/mipsle GOMIPS=softfloat go build -a
该二进制文件也可以在路由器上运行。
前提条件
要使用 GoDNS,假设:
- 您已注册(现在拥有)一个域名
- 域名已委托给受支持的 DNS 提供商(即它有指向受支持提供商的 nameserver
NS
记录)
或者,您可以登录 DuckDNS(使用社交账户),免费获取 duckdns.org 域名下的子域名。
安装
通过运行以下命令构建 GoDNS(从仓库根目录):
cd cmd/godns # 进入 GoDNS 目录
go mod download # 获取依赖项
go build # 构建
您还可以从 releases 下载已编译的二进制文件。
使用方法
通过运行以下命令打印使用/帮助信息:
$ ./godns -h
Usage of ./godns:
-c string
指定配置文件(默认 "./config.json")
-h 显示帮助
配置
概述
- 复制 config_sample.json 并命名为
config.json
,或者复制 config_sample.yaml 并命名为config.yaml
。 - 配置您的提供商、域名/子域名信息、凭据等。
- 配置通知媒介(例如 SMTP 接收电子邮件),以便在您的 IP 地址更改时收到通知
- 将文件放置在 GoDNS 的同一目录中,或者使用
-c=path/to/your/file.json
选项
配置文件格式
GoDNS 支持两种不同的配置文件格式:
- JSON
- YAML
默认情况下,GoDNS 使用 JSON
配置文件。但是,您可以通过 ./godns -c /path/to/config.yaml
指定使用 YAML
格式。
动态加载配置
GoDNS 支持动态加载配置。如果您修改了配置文件,GoDNS 将自动重新加载配置并应用更改。
配置属性
provider
— 使用的一个 支持的提供商:Cloudflare
、Google
、DNSPod
、AliDNS
、HE
、DuckDNS
或Dreamhost
。email
— DNS 提供商的电子邮件或账户名。password
— DNS 提供商的密码。login_token
— DNS 提供商的 API 令牌。domains
— 域名列表,包含您的子域名。ip_urls
— 用于获取公共 IPv4 地址的 URL 数组。ipv6_urls
— 用于获取公共 IPv6 地址的 URL 数组。ip_type
— 决定使用 IPv4 还是 IPv6 的开关(当 支持 时)。可用值:IPv4
或IPv6
。interval
— 公共 IP 更新的频率(以秒为单位)。socks5_proxy
— Socks5 代理服务器。resolver
— 要使用的公共 DNS 服务器地址。例如,要使用 Google 的公共 DNS,您可以在使用 GoDNS 的 IPv4 模式时设置8.8.8.8
,或在 IPv6 模式时设置2001:4860:4860::8888
。skip_ssl_verify
- 跳过对 https 请求的 SSL 证书验证。
更新根域名
只需将 @
放入 sub_domains
,例如:
"domains": [{
"domain_name": "example.com",
"sub_domains": ["@"]
}]
配置示例
Cloudflare
对于 Cloudflare,您需要提供电子邮件和全局 API 密钥作为密码(或使用 API 令牌),并配置所有域名和子域名。
通过设置选项 proxied = true
,记录将获得 Cloudflare 的性能和安全优势。此选项仅适用于 Cloudflare。
使用电子邮件和全局 API 密钥
```json { "provider": "Cloudflare", "email": "you@example.com", "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 } ```使用 API 令牌
```json { "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": "" } ```DNSPod
对于 DNSPod,您需要提供您的 API 令牌(您可以在这里创建),并配置所有域名和子域名。
示例
```json { "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"] } ], "resolver": "8.8.8.8", "ip_urls": ["https://api.ip.sb/ip"], "ip_type": "IPv4", "interval": 300, "socks5_proxy": "" } ```DigitalOcean
对于 DigitalOcean,您需要提供一个具有 domain
范围的 API 令牌(您可以在这里创建),并配置所有域名和子域名。
示例
```json { "provider": "DigitalOcean", "login_token": "dop_v1_00112233445566778899aabbccddeeff", "domains": [ { "domain_name": "example.com", "sub_domains": ["@", "www"] } ], "resolver": "8.8.8.8", "ip_urls": ["https://api.ip.sb/ip"], "ip_type": "IPv4", "interval": 300 } ```Dreamhost
对于 Dreamhost,您需要提供您的 API 令牌(您可以在这里创建),并配置所有域名和子域名。
示例
```json { "provider": "Dreamhost", "login_token": "your_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, "resolver": "ns1.dreamhost.com", "socks5_proxy": "" } ```Dynv6
对于 Dynv6,只需提供 token
,配置 1 个默认域名和子域名。
示例
```json { "provider": "Dynv6", "password": "", "login_token": "1234567ABCDEFGabcdefg123456789", "domains": [ { "domain_name": "dynv6.net", "sub_domains": ["myname"] } ], "resolver": "8.8.8.8", "ip_urls": ["https://api.ip.sb/ip"], "ip_type": "IPv4", "interval": 300, "socks5_proxy": "" } ```Google Domains
对于 Google Domains,您需要提供电子邮件和密码,并配置所有域名和子域名。
示例
```json { "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"] } ], "resolver": "8.8.8.8", "ip_urls": ["https://api.ip.sb/ip"], "ip_type": "IPv4", "interval": 300, "socks5_proxy": "" } ```AliDNS
对于 AliDNS,您需要提供 AccessKeyID
和 AccessKeySecret
作为 email
和 password
,并配置所有域名和子域名。
示例
```json { "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"] } ], "resolver": "8.8.8.8", "ip_urls": ["https://api.ip.sb/ip"], "ip_type": "IPv4", "interval": 300, "socks5_proxy": "" } ```DuckDNS
对于 DuckDNS,只需提供 token
,配置 1 个默认域名和子域名。
示例
```json { "provider": "DuckDNS", "password": "", "login_token": "3aaaaaaaa-f411-4198-a5dc-8381cac61b87", "domains": [ { "domain_name": "www.duckdns.org", "sub_domains": ["myname"] } ], "resolver": "8.8.8.8", "ip_urls": ["https://api.ip.sb/ip"], "ip_type": "IPv4", "interval": 300, "socks5_proxy": "" } ```No-IP
示例
```json { "provider": "NoIP", "email": "mail@example.com", "password": "YourPassword", "domains": [ { "domain_name": "ddns.net", "sub_domains": ["timothyye6"] } ], "ip_type": "IPv4", "ip_urls": ["https://api.ip.sb/ip"], "resolver": "8.8.8.8", "interval": 300, "socks5_proxy": "" } ```HE.net
对于 HE,不需要电子邮件,只需填写 DDNS 密钥作为密码,并配置所有域名和子域名。
示例
```json { "provider": "HE", "password": "Your DDNS Key", "login_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": "" } ```提供商配置
添加一个新的 "A 记录" 并确保勾选 "启用动态 DNS 条目":

Scaleway
对于 Scaleway,您需要提供 API 密钥作为 login_token
(如何生成 API 密钥),并配置域名和子域名。domain_name
应等于 Scaleway 中的 DNS 区域或根域名。DNS 记录的 TTL 将设置为 interval
值。确保相关子域名的 A
或 AAAA
记录存在,这些可以在 Scaleway 控制台 中设置。
示例
```json { "provider": "Scaleway", "login_token": "API Secret Key", "domains": [{ "domain_name": "example.com", "sub_domains": ["www","@"] },{ "domain_name": "samplednszone.example.com", "sub_domains": ["www","test"] } ], "resolver": "8.8.8.8", "ip_urls": ["https://api.ip.sb/ip"], "ip_type": "IPv4", "interval": 300 } ```Linode
要与 Linode API 进行身份验证,您需要提供一个具有“读/写”访问权限的个人访问令牌,范围为“Domain”。Linode 有一个关于创建访问令牌的帮助页面。将此令牌传入配置文件中的 login_token
字段。
配置文件中的 domain_name
字段必须是 Linode 管理的现有域名的名称。Linode 有一个关于添加域名的帮助页面。GoDNS Linode 处理程序不会自动创建域名,但会自动创建子域名。
GoDNS Linode 处理程序目前对 Linode DNS 记录使用固定的 30 秒 TTL。
示例
```json { "provider": "Linode", "login_token": ${PERSONAL_ACCESS_TOKEN}, "domains": [{ "domain_name": "example.com", "sub_domains": ["www","@"] },{ "domain_name": "samplednszone.example.com", "sub_domains": ["www","test"] } ], "resolver": "8.8.8.8", "ip_urls": ["https://api.ip.sb/ip"], "ip_type": "IPv4", "interval": 300 } ```Strato
对于 Strato,您需要提供电子邮件和密码,并配置所有域名和子域名。 更多信息:德语 英语
示例
```json { "provider": "strato", "password": "Your_Password", "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": "" } ```LoopiaSE
对于 LoopiaSE,您需要提供用户名和密码,并配置所有域名和子域名。 更多信息:瑞典语
示例
```json { "provider": "LoopiaSE", "email": "Your_Username", "password": "Your_Password", "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": "" } ```Infomaniak
对于 Infomaniak,您需要提供用户名和密码,并配置所有域名和子域名。 更多信息:英语
示例
```json { "provider": "Infomaniak", "email": "Your_Username", "password": "Your_Password", "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": "" } ```Hetzner
对于 Hetzner,您必须创建一个访问令牌。这可以在 DNS 控制台中完成。 (左上角的个人图标 –> API 令牌) 注意:如果一个域名有多个记录,只有第一个记录会被更新。 确保只有一个记录。
示例
```json { "provider": "hetzner", "login_token": "示例
```json { "provider": "OVH", "consumer_key": "e389ac80cc8da9c7451bc7b8f171bf4f", "app_secret": "d1ffee354d3643d70deaab48a09131fd", "app_key": "cd338839d6472064", "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": "" } ```示例
```json { "provider": "Dynu", "password": "Your_Password", "domains": [ { "domain_name": "your_domain.com", "sub_domains": [ "your_subdomain" ] } ], "resolver": "8.8.8.8", "ip_urls": ["https://api.ip.sb/ip"], "ip_type": "IPv4", "interval": 300, "socks5_proxy": "" } ```示例
```yaml provider: IONOS login_token: publicprefix.secret domains: - domain_name: example.com sub_domains: - somesubdomain - anothersubdomain resolver: 1.1.1.1 ip_urls: - https://api.ipify.org ip_type: IPv4 interval: 300 socks5_proxy: "" ```示例
```yaml provider: TransIP email: account_name login_token: api_key domains: - domain_name: example.com sub_domains: - "@" - somesubdomain - anothersubdomain resolver: 1.1.1.1 ip_urls: - https://api.ipify.org ip_type: IPv4 interval: 300 socks5_proxy: "" ```