字节笔记本
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 的方式:
- 通过接口获取:通过访问外部服务获取公网 IP
- 通过网卡获取:直接从网络接口读取 IP 地址
- 通过命令获取:执行自定义命令获取 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(隐藏文件)
安装指南
方式一:系统安装(推荐)
-
从 GitHub Releases 下载对应平台的压缩包并解压
-
安装为系统服务:
Mac/Linux:
bashsudo ./ddns-go -s installWindows(以管理员身份打开 CMD):
cmd.\ddns-go.exe -s install -
打开浏览器访问
http://localhost:9876进行初始化配置
方式二:Docker 安装
使用 Docker host 网络模式运行:
docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go也可以使用 GitHub Container Registry 镜像:
docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go方式三:群晖 NAS 安装
- 在套件中心下载并打开 Docker
- 在注册表中搜索
ddns-go并下载 - 映像 -> 选择
jeessy/ddns-go-> 启动 -> 高级设置 - 网络中勾选"使用与 Docker Host 相同的网络"
- 高级设置中勾选"启动自动重新启动"
- 在浏览器中打开
http://群晖IP:9876进行配置
快速开始
安装完成后,按照以下步骤快速配置:
- 访问 Web 界面:浏览器打开
http://localhost:9876 - 选择 DNS 服务商:根据你使用的域名注册商或 DNS 服务商选择对应选项
- 填写凭据:输入 API 密钥或其他认证信息
- 添加域名:输入需要动态解析的域名
- 设置获取 IP 的方式:根据网络环境选择接口、网卡或命令方式
- 保存并测试:点击保存,ddns-go 会立即执行一次同步
常用启动参数
# 每 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 | 重置密码 |
使用示例
示例一:阿里云域名解析
- 登录阿里云控制台,获取 AccessKey ID 和 AccessKey Secret
- 在 ddns-go Web 界面中选择"阿里云"
- 填入 AccessKey 凭据
- 添加域名如
home.example.com - 选择通过接口获取 IPv4 地址
- 保存配置,ddns-go 会自动将当前公网 IP 解析到该域名
示例二:Cloudflare 域名解析
- 在 Cloudflare 控制台获取 API Token
- 在 ddns-go Web 界面中选择"Cloudflare"
- 填入 API Token
- 添加需要解析的域名
- 保存配置即可
示例三:Docker 部署并启用 Webhook 通知
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,例如钉钉机器人:
{
"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:
sudo ./ddns-go -s uninstallWindows:
.\ddns-go.exe -s uninstall项目链接
- GitHub 仓库:https://github.com/jeessy2/ddns-go
- 开源协议:MIT License
- 最新版本:持续更新中
- Docker 镜像:
jeessy/ddns-go/ghcr.io/jeessy2/ddns-go