自托管服务
TimothyYe/godns avatar
TimothyYe/godns

GoDNS 评测:一个带 Web 面板的多提供商 DDNS 客户端

一个动态 DNS 客户端工具,支持 AliDNS、Cloudflare、Google Domains、DNSPod、HE.net & DuckDNS & DreamHost 等,用 Go 编写。

1,778 个 Star247 个 ForkGoApache-2.0
GitHub

秒懂

它是什么?
GoDNS 是一个用 Go 编写的自托管 DDNS 客户端,支持 21 家 DNS 提供商,并内置 Web 面板。本文基于 README 与仓库信息,分析其适用场景、配置方式与局限。
适合谁用?
GoDNS 适合已经拥有域名并托管在受支持提供商处的用户,尤其是那些希望在一个工具里管理多个域名、同时需要 IPv4 和 IPv6 更新的场景。它不适合那些不想自行维护二进制或容器、也不愿阅读配置文件的用户,这类用户更适合 godns.app 或 DuckDNS 这类托管服务。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 3 天前。
用什么语言写的?
主要是 Go(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题,谁需要它

家庭宽带或小型服务器的公网 IP 经常变动,手动改 DNS 记录不现实。GoDNS 是一个自托管的动态 DNS 客户端,它定期检测本机公网 IP,然后调用 DNS 提供商的 API 更新域名解析记录。它面向的是拥有自己域名、并且域名已经托管在受支持提供商处的用户。如果你不想自己跑服务,README 还提到了一个托管版本 godns.app,但那是另一条路。

支持的提供商与覆盖范围

README 列出 21 家 DNS 提供商,包括 Cloudflare、AliDNS、DNSPod、Google Domains、HE.net、DuckDNS、Dreamhost、No-IP、Hetzner、OVH 等。表格显示所有提供商都支持 IPv4 和 IPv6,但根域名支持并不一致。Google Domains、DuckDNS、No-IP、Strato、LoopiaSE、Infomaniak、OVH、Dynu、IONOS、TransIP 都明确不支持根域名,只支持子域名。这意味着如果你只想更新 example.com 而不是 sub.example.com,这些提供商就不适用。Cloudflare、DigitalOcean、DNSPod、HE.net、AliDNS、Scaleway、Linode、Hetzner、Porkbun 则支持根域名。

运行机制:检测与更新流程

GoDNS 的工作方式在 README 中没有详细描述,但根据项目结构可以推断:它作为一个守护进程运行,周期性地获取本机公网 IP,然后与 DNS 记录对比,如果变化就调用对应提供商的 API 更新。它支持 IPv4 和 IPv6,这意味着需要两个检测通道。内置的 Web 面板允许用户通过浏览器查看状态或进行配置,但 README 没有说明面板的具体功能,比如是否支持手动触发更新或查看日志。如果你需要精确了解更新频率或 IP 检测策略,需要查看源码或文档。

安装与配置:从二进制到容器

安装方式有几种。macOS 或 Linux 可以用 Homebrew:brew install godns。也可以从 GitHub releases 下载编译好的二进制。想用容器的话,README 指向 Docker Hub 上的 timothyye/godns 镜像。从源码构建需要 Go 环境,MIPS 平台需要特殊参数:GOOS=linux GOARCH=mips GOMIPS=softfloat go build -a。配置文件的具体格式在 README 中被截断了,但通常这类工具使用 JSON 或 YAML 指定提供商、域名、更新间隔等。你需要查阅完整文档或示例配置来填写具体的 API 密钥和域名列表。

Web 面板与 Docker 部署

内置 Web 面板是 GoDNS 区别于其他 DDNS 客户端的一个特点。Docker 镜像持续发布,README 的徽章显示了镜像大小。对于家庭用户来说,Docker 部署可以省去编译和依赖管理。但面板的具体功能在 README 中没有展开,比如是否支持多用户、是否提供更新历史、是否可以通过面板添加新的域名记录,这些都未说明。如果你依赖面板来管理多个域名,最好先查看项目的截图或文档。

局限性与错误使用场景

一个明显的局限是提供商列表固定,没有提到如何自定义或扩展新的 DNS 提供商。如果你的域名托管在不在列表中的提供商,GoDNS 就无法工作,除非你改代码。另一个局限是根域名支持不统一,这可能导致用户误以为所有提供商都能更新根域名。还有一点,README 没有说明更新失败的告警机制,比如 IP 检测失败或 API 返回错误时如何处理,是重试还是静默跳过。对于需要高可靠性的场景,这可能是个问题。最后,如果你不想自己维护一个常驻进程,GoDNS 就不适合,托管服务或 DuckDNS 的免费子域名可能更省事。

替代方案对比:托管服务与同类型客户端

一个直接的替代是 README 中提到的 godns.app,它是 GoDNS 的托管版本,用户不需要自己运行服务器,甚至不需要先拥有域名。这与 GoDNS 的自托管模式形成对比:GoDNS 要求你注册域名并配置 NS 记录指向受支持提供商,而 godns.app 则把这一切都管理起来。另一个常见的 DDNS 客户端是 ddclient,它也是多提供商支持,但通常没有 Web 面板,配置基于文本文件。GoDNS 的 Go 单二进制部署比 Perl 脚本更简单,但 ddclient 的历史更长,可能支持更多小众提供商。选择哪个取决于你是否愿意用 Web 面板换取更广的提供商覆盖。

维护与许可证

GoDNS 采用 Apache-2.0 许可证,允许商用和修改,但需要保留版权声明。项目持续活跃,v3.4.3 在 2026 年 7 月发布,v3.4.2 和 v3.4.1 分别在 5 月和 4 月发布,更新频率约为每两个月一次。这意味着用户需要定期关注新版本,但也能获得 bug 修复和提供商支持更新。升级成本取决于你如何部署:二进制替换很简单,但 Docker 容器需要拉取新镜像。由于 README 没有提供升级指南,用户需要自行查看 release notes。

编辑结论

GoDNS 适合已经拥有域名并托管在受支持提供商处的用户,尤其是那些希望在一个工具里管理多个域名、同时需要 IPv4 和 IPv6 更新的场景。它不适合那些不想自行维护二进制或容器、也不愿阅读配置文件的用户,这类用户更适合 godns.app 或 DuckDNS 这类托管服务。在采用之前,先确认你的域名是否支持根域名更新,因为 Google Domains、DuckDNS、No-IP 等提供商明确不支持根域名,只支持子域名。还要检查你的 DNS 提供商是否在 21 家列表内,因为 README 没有说明如何添加自定义提供商。最后,由于 v3.4.3 在 2026 年 7 月刚发布,且项目持续活跃,建议直接使用最新 release 的二进制,而不是从源码构建。

官方来源

  1. Official README
  2. Project repository
  3. Release notes
社区笔记

社区笔记