Skip to the content.
 ██████╗  ██████╗ ██████╗ ███╗   ██╗███████╗
██╔════╝ ██╔═══██╗██╔══██╗████╗  ██║██╔════╝
██║  ███╗██║   ██║██║  ██║██╔██╗ ██║███████╗
██║   ██║██║   ██║██║  ██║██║╚██╗██║╚════██║
╚██████╔╝╚██████╔╝██████╔╝██║ ╚████║███████║
 ╚═════╝  ╚═════╝ ╚═════╝ ╚═╝  ╚═══╝╚══════╝

Apache licensed Docker Go Report Card GoDoc

GoDNS 是一个动态 DNS (DDNS) 客户端工具。它是用 Go 重写的我早期的 DynDNS 开源项目。


支持的 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 的当前状态。

支持的平台

前提条件

要使用 GoDNS,假设:

或者,您可以登录 DuckDNS(使用社交账户),免费获取 duckdns.org 域名下的子域名。

安装

通过运行以下命令构建 GoDNS(从仓库根目录):

cd cmd/godns        # 进入 GoDNS 目录
go mod download     # 获取依赖项
go build            # 构建

您还可以从 releases 下载已编译的二进制文件。

使用方法

通过运行以下命令打印使用/帮助信息:

$ ./godns -h
Usage of ./godns:
  -c string
        指定配置文件(默认 "./config.json"-h    显示帮助

配置

概述

配置文件格式

GoDNS 支持两种不同的配置文件格式:

默认情况下,GoDNS 使用 JSON 配置文件。但是,您可以通过 ./godns -c /path/to/config.yaml 指定使用 YAML 格式。

动态加载配置

GoDNS 支持动态加载配置。如果您修改了配置文件,GoDNS 将自动重新加载配置并应用更改。

配置属性

更新根域名

只需将 @ 放入 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,您需要提供 AccessKeyIDAccessKeySecret 作为 emailpassword,并配置所有域名和子域名。

示例 ```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 条目": 填写您自己的 DDNS 密钥或为这个新创建的 "A 记录" 生成一个随机 DDNS 密钥: 记住 DDNS 密钥并在配置文件中设置到 `password` 属性中。 **注意**:如果您有多个域名或子域名,请确保它们的 DDNS 密钥相同。

Scaleway

对于 Scaleway,您需要提供 API 密钥作为 login_token如何生成 API 密钥),并配置域名和子域名。domain_name 应等于 Scaleway 中的 DNS 区域或根域名。DNS 记录的 TTL 将设置为 interval 值。确保相关子域名的 AAAAA 记录存在,这些可以在 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": "", "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" } ``` </details> #### OVH 对于 OVH,您需要提供 Consumerkey、Appsecret 和 Appkey,并配置所有域名和子域名。 所需的值可以通过访问[此网站](https://www.ovh.com/auth/api/createToken)获取 权限应在 GET、POST 和 PUT 上设置为 '*' 更多信息:[help.ovhcloud.com](https://help.ovhcloud.com/csm/en-gb-api-getting-started-ovhcloud-api?id=kb_article_view&sysparm_article=KB0042784)
示例 ```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": "" } ```
#### Dynu 对于 Dynu,您需要配置 `password`,配置 1 个默认域名和子域名。
示例 ```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": "" } ```
#### IONOS 这是针对 IONOS 托管服务的,**不是** IONOS 云。 您需要[注册 IONOS API 访问托管服务](https://my.ionos.com/shop/product/ionos-api),然后创建一个[API 密钥](https://developer.hosting.ionos.com/keys)。 您可以在[IONOS API 文档](https://developer.hosting.ionos.com/docs/getstarted)中找到完整指南。 **注意**:GoDNS 使用的 API 密钥必须遵循上述文档中描述的 `publicprefix.secret` 形式。
示例 ```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: "" ```
#### TransIP 对于 TransIP,您需要提供您的 API 私钥作为 `login_token`,用户名作为 `email`,并配置所有域名和子域名。
示例 ```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: "" ```
### 通知 GoDNS 可以在 IP 更改时发送通知。 #### 电子邮件 电子邮件通过 [SMTP](https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol) 发送。使用以下片段更新您的配置: ```json "notify": { "mail": { "enabled": true, "smtp_server": "smtp.example.com", "smtp_username": "user", "smtp_password": "password", "smtp_port": 25, "send_from": "my_mail@example.com" "send_to": "my_mail@example.com" } } ``` 每次 IP 更改时,您将收到如下电子邮件: #### Telegram 要在 IP 更改时接收 [Telegram](https://telegram.org/) 消息,使用以下片段更新您的配置: ```json "notify": { "telegram": { "enabled": true, "bot_api_key": "11111:aaaa-bbbb", "chat_id": "-123456", "message_template": "域名 ** 已更新为 %0A", "use_proxy": false }, } ``` `message_template` 属性支持 [markdown](https://www.markdownguide.org)。新行需要用 `%0A` 转义。 #### Slack 要在 IP 更改时接收 [Slack](https://slack.com) 消息,使用以下片段更新您的配置: ```json "notify": { "slack": { "enabled": true, "bot_api_token": "xoxb-xxx", "channel": "your_channel", "message_template": "域名 ** 已更新为 \n", "use_proxy": false }, } ``` `message_template` 属性支持 [markdown](https://www.markdownguide.org)。新行需要用 `\n` 转义。 #### Discord 要在 IP 更改时接收 [Discord](https://discord.gg) 消息,使用以下片段更新您的配置: ```json "notify": { "discord": { "enabled": true, "bot_api_token": "discord_bot_token", "channel": "your_channel", "message_template": "(可选) 域名 ** 已更新为 \n", } } ``` #### Pushover 要在 IP 更改时接收 [Pushover](https://pushover.net/) 消息,使用以下片段更新您的配置: ```json "notify": { "pushover": { "enabled": true, "token": "abcdefghijklmnopqrstuvwxyz1234", "user": "abcdefghijklmnopqrstuvwxyz1234", "message_template": "", "device": "", "title": "", "priority": 0, "html": 1 } } ``` 如果 `html` 参数为 `1`,`message_template` 属性支持 [html](https://pushover.net/api#html)。如果留空,将使用默认消息。 如果 `device` 和 `title` 参数留空,Pushover 将选择默认值[参见](https://pushover.net/api#messages)。有关优先级参数的更多详细信息 可以在 Pushover [API 描述](https://pushover.net/api#priority) 中找到。 ### Webhook Webhook 是 GoDNS 提供的另一个功能,用于在 IP 更改时向其他应用程序发送通知。GoDNS 通过 HTTP `GET` 或 `POST` 请求向目标 URL 发送通知。 配置部分 `webhook` 用于自定义 webhook 请求。通常,有 2 个字段用于 webhook 请求: > - `url`:发送 webhook 请求的目标 URL。 > - `request_body`:发送 `POST` 请求的内容,如果此字段为空,则发送 HTTP GET 请求而不是 HTTP POST 请求。 可用变量: > - `Domain`:当前域名。 > - `IP`:新 IP