字节笔记本

2026年3月22日

DDNS-Go - 自动更新动态 DNS 工具

本文介绍 ddns-go,一款简单易用的动态域名解析工具,自动获取公网 IP 并同步更新到多个主流 DNS 服务商。

项目简介

ddns-go 是一个开源的动态域名解析(DDNS)工具,能够自动获取你的公网 IPv4 或 IPv6 地址,并将结果解析到对应的域名服务。对于家庭宽带用户、自建服务器运维者以及需要远程访问内网服务的开发者来说,ddns-go 是一个不可或缺的实用工具。

该项目最大的特点在于通过 Web 界面进行配置,无需编写复杂的配置文件,开箱即用。同时支持以系统服务方式运行,能够随系统自动启动,确保域名解析始终保持最新状态。

项目在 GitHub 上获得了大量关注,拥有超过 20k Star,是 Go 语言生态中 DDNS 工具的标杆项目。

核心特性

多平台支持

ddns-go 支持多种操作系统和 CPU 架构:

  • 操作系统:Mac、Windows、Linux(包括群晖 NAS)
  • CPU 架构:ARM、x86、RISC-V

这意味着无论是树莓派、群晖 NAS,还是标准的云服务器和桌面电脑,都可以运行 ddns-go。

丰富的 DNS 服务商支持

ddns-go 内置了众多主流 DNS 服务商的支持,包括:

  • 国内服务商:阿里云、阿里云 ESA、腾讯云、Dnspod、华为云、百度云、DNSLA、时代互联、雨云
  • 国际服务商:Cloudflare、Porkbun、GoDaddy、Namecheap、NameSilo、Dynadot、Gcore、IBM NS1 Connect

此外,还支持通过 Callback 方式接入任意第三方 DNS 服务商,具备极强的扩展性。

智能获取公网 IP

ddns-go 提供了三种获取公网 IP 的方式:

  1. 通过接口获取:通过访问外部服务获取公网 IP
  2. 通过网卡获取:直接从网络接口读取 IP 地址
  3. 通过命令获取:执行自定义命令获取 IP

多域名与多服务商并发

  • 支持同时配置多个 DNS 服务商
  • 支持多个域名同时解析
  • 支持多级域名(子域名)解析
  • 默认每 5 分钟同步一次,间隔时间可自定义
  • 支持通过 -cacheTimes 参数实现快速检测 + 定时对比的策略,既保证实时性又不被服务商限流

Web 管理界面

ddns-go 提供了一个简洁的 Web 界面(默认端口 9876),用户可以通过浏览器完成所有配置操作:

  • 域名和服务商的添加与管理
  • 查看 DNS 解析日志(最近 50 条)
  • 默认勾选"禁止从公网访问",确保安全性

Webhook 通知

支持在域名更新成功或失败时发送 Webhook 通知,内置了多种通知服务的配置示例:

  • Server酱:微信推送
  • Bark:iOS 推送
  • 钉钉:群机器人通知
  • 飞书:群机器人通知
  • Telegram:通过第三方 Bot 通知
  • plusplus 推送加:多渠道推送
  • Discord:频道 Webhook 通知

通知内容支持变量替换,包括新的 IP 地址、域名列表和更新结果等。

其他特性

  • TTL 支持:可自定义 DNS 记录的 TTL 值
  • 自定义参数传递:支持向部分 DNS 服务商传递自定义参数,实现地域解析、多 IP 等高级功能
  • Docker 部署:提供官方 Docker 镜像,支持 host 网络模式
  • IPv6 支持:完整支持 IPv6 地址的获取与解析

技术栈

  • 编程语言:Go(Golang)
  • 部署方式:原生二进制文件 / Docker 容器 / 系统服务
  • 前端:内置 Web 界面
  • 开源协议:MIT License
  • 配置格式:YAML(隐藏文件)

安装指南

方式一:系统安装(推荐)

  1. GitHub Releases 下载对应平台的压缩包并解压

  2. 安装为系统服务:

    Mac/Linux:

    bash
    sudo ./ddns-go -s install

    Windows(以管理员身份打开 CMD):

    cmd
    .\ddns-go.exe -s install
  3. 打开浏览器访问 http://localhost:9876 进行初始化配置

方式二:Docker 安装

使用 Docker host 网络模式运行:

bash
docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go

也可以使用 GitHub Container Registry 镜像:

bash
docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go

方式三:群晖 NAS 安装

  1. 在套件中心下载并打开 Docker
  2. 在注册表中搜索 ddns-go 并下载
  3. 映像 -> 选择 jeessy/ddns-go -> 启动 -> 高级设置
  4. 网络中勾选"使用与 Docker Host 相同的网络"
  5. 高级设置中勾选"启动自动重新启动"
  6. 在浏览器中打开 http://群晖IP:9876 进行配置

快速开始

安装完成后,按照以下步骤快速配置:

  1. 访问 Web 界面:浏览器打开 http://localhost:9876
  2. 选择 DNS 服务商:根据你使用的域名注册商或 DNS 服务商选择对应选项
  3. 填写凭据:输入 API 密钥或其他认证信息
  4. 添加域名:输入需要动态解析的域名
  5. 设置获取 IP 的方式:根据网络环境选择接口、网卡或命令方式
  6. 保存并测试:点击保存,ddns-go 会立即执行一次同步

常用启动参数

bash
# 每 10 分钟同步一次,指定配置文件路径
./ddns-go -s install -f 600 -c /Users/name/.ddns_go_config.yaml

# 每 10 秒检查本地 IP 变化,每 30 分钟与服务商对比
./ddns-go -s install -f 10 -cacheTimes 180

# 重置密码
./ddns-go -resetPassword 123456

# 指定监听地址和端口
./ddns-go -l :9877
参数说明
-l监听地址
-f同步间隔时间(秒)
-cacheTimes间隔 N 次与服务商比对
-c自定义配置文件路径
-noweb不启动 Web 服务
-skipVerify跳过证书验证
-dns自定义 DNS 服务器
-resetPassword重置密码

使用示例

示例一:阿里云域名解析

  1. 登录阿里云控制台,获取 AccessKey ID 和 AccessKey Secret
  2. 在 ddns-go Web 界面中选择"阿里云"
  3. 填入 AccessKey 凭据
  4. 添加域名如 home.example.com
  5. 选择通过接口获取 IPv4 地址
  6. 保存配置,ddns-go 会自动将当前公网 IP 解析到该域名

示例二:Cloudflare 域名解析

  1. 在 Cloudflare 控制台获取 API Token
  2. 在 ddns-go Web 界面中选择"Cloudflare"
  3. 填入 API Token
  4. 添加需要解析的域名
  5. 保存配置即可

示例三:Docker 部署并启用 Webhook 通知

bash
docker run -d \
  --name ddns-go \
  --restart=always \
  --net=host \
  -v /opt/ddns-go:/root \
  jeessy/ddns-go \
  -l :9877 \
  -f 300

配置完成后,在 Web 界面中添加 Webhook URL,例如钉钉机器人:

json
{
    "msgtype": "markdown",
    "markdown": {
        "title": "你的公网IP变了",
        "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
    }
}

示例四:IPv6 动态解析

确保你的网络环境支持 IPv6,然后在 ddns-go 中添加 AAAA 记录类型的域名解析即可。对于群晖用户,建议使用 Docker 的 host 网络模式以获得最佳的 IPv6 支持。

服务卸载

如果需要卸载 ddns-go 服务:

Mac/Linux:

bash
sudo ./ddns-go -s uninstall

Windows:

cmd
.\ddns-go.exe -s uninstall

项目链接

分享: