概述

ddns-go 是一款开源的动态 DNS(DDNS)客户端,由 jeessy2 用 Go 语言开发。它解决了家庭宽带或服务器公网 IP 经常变化的问题 —— 将域名自动解析到最新的公网 IP 上。

你不需要懂 DDNS 协议,不需要写脚本,也不需要理解 DNS 记录的 API。配置界面是 Web 页面,勾勾选选就能跑起来。

  • 支持主流 DNS 服务商 — 阿里云 DNS、腾讯云 DNSPod、华为云 DNS、Cloudflare、DuckDNS、Google Domains、自定义回调等
  • 支持 IPv4 和 IPv6 — 可同时更新
  • Web 管理界面 — 浏览器配置,所见即所得
  • 多平台 — Windows、Linux、macOS、群晖、OpenWrt、RouterOS
  • Docker 部署 — 一条命令启动
  • 后台运行 — 守护进程模式,变化时自动更新
  • Webhook 通知 — 更新后通过飞书、钉钉、企业微信、Server 酱等通知
  • 每分钟轮询 — IP 变化后最快 1 分钟内生效(默认 5 分钟)

安装方式

方式一:Docker 部署(推荐)

docker run -d \
  --name ddns-go \
  --restart=always \
  -p 9876:9876 \
  -v /opt/ddns-go:/root \
  jeessy/ddns-go:latest

参数说明:

参数 说明
-p 9876:9876 Web 管理端口,左侧可按需修改
-v /opt/ddns-go:/root 持久化配置数据
--restart=always 容器退出自动重启

访问 http://你的IP:9876 进入配置界面。

Docker Compose 方式:

version: '3.8'

services:
  ddns-go:
    image: jeessy/ddns-go:latest
    container_name: ddns-go
    restart: always
    ports:
      - "9876:9876"
    volumes:
      - ./ddns-go-data:/root
docker compose up -d

方式二:群晖 DSM(套件中心)

群晖用户可以直接在 套件中心 → 设置 → 添加第三方源 安装:

套件来源https://spk.lihz.cn/

也可以手动下载 .spk 安装包从 GitHub Releases 安装。

安装后通过 套件中心 → ddns-go → 打开 访问 Web UI。


方式三:OpenWrt / 路由器

# 下载对应架构的二进制文件
wget https://github.com/jeessy2/ddns-go/releases/latest/download/ddns-go_linux_amd64.tar.gz
tar -zxvf ddns-go_linux_amd64.tar.gz
./ddns-go -l 0.0.0.0:9876

或者直接在 OpenWrt 的 系统 → 软件包 中搜索 ddns-go 安装:

opkg update
opkg install ddns-go

OpenWrt 版本会自动注册为系统服务,开机自启。


方式四:直接安装(Windows / Linux / macOS)

GitHub Releases 下载对应系统架构的二进制文件。

Linux:

# 下载
wget https://github.com/jeessy2/ddns-go/releases/latest/download/ddns-go_linux_amd64.tar.gz
tar -zxvf ddns-go_linux_amd64.tar.gz

# 启动(后台运行)
sudo ./ddns-go -l 0.0.0.0:9876 -f 300

# 注册为系统服务(systemd)
sudo ./ddns-go -s install

Windows:

  1. 下载 ddns-go_windows_x86_64.exe
  2. 双击运行(或从命令行启动)
  3. 访问 http://localhost:9876
  4. 注册为 Windows 服务:以管理员身份运行 ddns-go.exe -s install

macOS:

# Homebrew 安装(如果已收录)
brew install ddns-go

# 或手动下载
wget https://github.com/jeessy2/ddns-go/releases/latest/download/ddns-go_darwin_amd64.tar.gz
tar -zxvf ddns-go_darwin_amd64.tar.gz
./ddns-go -l 0.0.0.0:9876

安装后的系统服务命令

# 使用 -s 参数管理服务
./ddns-go -s install    # 安装为系统服务(systemd / Windows Service)
./ddns-go -s uninstall  # 卸载服务
./ddns-go -s status     # 查看服务状态
./ddns-go -s restart    # 重启服务

配置说明

首次配置

访问 http://IP:9876,进入配置页面:

![配置页面:左侧基础设置,右侧 DNS 服务商设置]

整个配置分为四个区域:

区域 说明
DNS 服务商 选择你的域名托管商,填入 API 凭据
IPv4 / IPv6 配置 IP 获取方式和要解析的域名
Webhook IP 更新时发送通知
设置 登录密码、轮询间隔等

第一步:选择 DNS 服务商

支持以下主流服务商:

服务商 需要的信息 说明
阿里云 DNS AccessKey ID + Secret RAM 用户需授权 AliyunDNSFullAccess
腾讯云 DNSPod SecretId + SecretKey 在 API 密钥管理页面创建
Cloudflare API Token 或 Global API Key 推荐使用 API Token,仅给 DNS:Edit 权限
华为云 DNS AccessKey + SecretKey IAM 用户授权 DNS 管理
DuckDNS Token 免费域名服务,配置最简单
Google Domains 用户名 + 密码 自动同步
自定义回调 URL 模板 自建 DNS 服务或支持 API 的任意服务商

💡 Cloudflare 用户注意事项

  • API Token 访问:需创建 Token,权限为 Zone:DNS:Edit,指定具体域名
  • Global API Key:路径 My Profile → API Tokens → Global API Key
  • 推荐使用 API Token,更安全

第二步:配置 IP 获取方式

IPv4 获取方式:

方式 说明 推荐场景
通过接口获取 自动从 ipv4.ip.sb 等接口获取公网 IP 家庭宽带,最简单
通过网卡获取 获取指定网卡上的 IP(需设备有公网 IP) 服务器直连公网
通过命令获取 执行自定义命令获取 IP 特殊网络环境
禁用 IPv4 不更新 IPv4 解析 纯 IPv6 环境

IPv6 获取方式类似,同样支持接口、网卡、命令三种来源。

⚠️ 如果路由器或服务器直接有公网 IP,推荐使用 「通过网卡获取」,不依赖外部接口更可靠。

第三步:添加域名解析

「Domains」 输入框中填写要解析的域名,每行一个:

example.com
www.example.com
api.example.com

ddns-go 会自动创建或更新指定域名的 A 记录(IPv4)和 AAAA 记录(IPv6)。

第四步:设置 Webhook(可选)

IP 更新时可以通过 Webhook 发送通知:

{
  "url": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx",
  "requestBody": "{\"msgtype\":\"text\",\"text\":{\"content\":\"IP 已更新为 {{ipv4}}\"}}"
}

内置的 {{ipv4}}{{ipv6}} 占位符会替换为最新的 IP 地址。

支持的 Webhook 类型:

  • 企业微信机器人
  • 钉钉机器人
  • 飞书机器人
  • Server 酱
  • PushPlus
  • 自定义 URL

第五步:设置密码(安全)

配置完成后,建议立即设置登录密码:设置 → 开启登录验证

不设置密码意味着局域网内任何知道地址的人都可以修改你的 DDNS 配置。


命令行参数

ddns-go 常用参数:

-l ":9876"           # Web 监听地址和端口
-f 300               # 轮询间隔(秒),默认 300 秒
-c "/path/config"    # 指定配置文件路径
-s install           # 安装为系统服务
-s uninstall         # 卸载系统服务
-s status            # 查看服务状态
-s restart           # 重启服务
-delay 60            # 启动后延迟 60 秒再开始检查(等网络就绪)
-dns cloudflare      # 通过命令行指定 DNS 服务商(非交互模式)
-secret 123456       # Web 界面登录密码

示例:自定义端口和轮询间隔

# Docker 方式
docker run -d --name ddns-go --restart=always \
  -p 8080:8080 \
  -v /opt/ddns-go:/root \
  jeessy/ddns-go:latest \
  -l :8080 -f 60

# 直接运行
./ddns-go -l :8080 -f 60

实际部署场景

场景 1:家庭 NAS + 阿里云 DDNS

宽带拨号 → 公网 IP(动态)
     ↓
ddns-go(Docker 跑在 NAS 上)
     ↓
阿里云 DNS A 记录自动更新
     ↓
通过域名随时访问 NAS

配置要点:

  • DNS 服务商:阿里云
  • IPv4 获取方式:通过接口获取(ipv4.ip.sb
  • 域名:nas.example.com
  • 轮询间隔:5 分钟(默认即可)
  • 建议配合 端口转发frp 使用

场景 2:软路由 OpenWrt

# 安装
opkg install ddns-go

# 配置
# OpenWrt 版本安装后自带 LuCI 界面
# 或通过 http://192.168.1.1:9876 配置

# 利用 OpenWrt 的稳定性,24 小时在线
# 路由器重启后 ddns-go 自动启动

场景 3:公司内网穿透

公司内网服务器(无公网 IP)
     ↓
frp / Tailscale / ZeroTier
     ↓
ddns-go 更新公网入口 IP
     ↓
员工通过域名访问内部服务

场景 4:IPv6 纯环境

很多家庭宽带虽然不给 IPv4 公网地址,但 IPv6 是公网的:

配置:
  IPv4:禁用
  IPv6:通过网卡获取(或通过接口获取)
  域名解析:只更新 AAAA 记录
  客户端:需要支持 IPv6 才能访问

常见问题

Q:ddns-go 多久检查一次 IP 变化?

默认 300 秒(5 分钟)。可以用 -f 参数调整:

# 每分钟检查一次
./ddns-go -f 60

不建议低于 60 秒,容易被 DNS 服务商的 API 频率限制。

Q:如何确认配置生效了?

查看日志 —— Web 界面底部就有实时日志输出,或者通过 docker logs 查看:

docker logs -f ddns-go

正常日志类似:

[2025-01-15 10:30:00] 当前 IP: 1.2.3.4
[2025-01-15 10:30:00] 域名 example.com 已更新为 1.2.3.4

Q:多个域名共用同一个 IP,需要重复配置吗?

不需要。在 「Domains」 输入框中每行写一个域名即可,一次配置全量更新:

example.com
www.example.com
blog.example.com

Q:公网 IP 怎么确认?

登录路由器查看 WAN 口 IP,然后用手机 4G/5G 网络 ping 一下试试:

# 查看你的公网 IP
curl ip.sb

# 测试是否能从外网 ping 通
ping your-domain.com

如果路由器 WAN 口 IP 和 ip.sb 返回的不一致,说明你在大内网(NAT 级联),DDNS 也无法从外网访问。

Q:支持哪些 DNS 服务商?

服务商 支持情况
阿里云 DNS ✅ 完整支持
腾讯云 DNSPod ✅ 完整支持
Cloudflare ✅ 完整支持
华为云 DNS ✅ 完整支持
DuckDNS ✅ 支持
Google Domains ✅ 支持
Porkbun ✅ 支持
Namecheap ✅ 支持
NameSilo ✅ 支持
自定义回调 ✅ 任意 HTTP API

查看 完整列表

Q:群晖里装了 ddns-go,和群晖自带的 DDNS 冲突吗?

不冲突。群晖自带 DDNS 只支持 Synology 自家的域名或少数服务商。ddns-go 是独立的服务,可以同时运行。

Q:配置存在哪里?

配置文件保存在:

  • Docker:映射目录 /root 下(即宿主机的 /opt/ddns-go
  • 直接安装:与二进制同目录,或 -c 参数指定路径

核心文件:

  • /root/ddns-go.yaml — 配置文件(账号密码、域名列表、DNS 服务商凭据)

⚠️ DNS 服务商的 API 密钥明文存储在此文件中,注意文件权限。


与同类工具对比

特性 ddns-go ddclient inadyn nsupdate
配置方式 Web 界面 配置文件 配置文件 命令行
安装难度 ⭐ 极低 ⭐⭐⭐ 中等 ⭐⭐ 低 ⭐⭐⭐⭐ 高
Docker 支持 ✅ 官方 ❌ 需自制 ❌ 需自制
多服务商 15+ 家 30+ 家 20+ 家 仅 Bind
IPv6 支持
Webhook ✅ 内置
界面语言 中文 + 英文 英文 英文 英文
资源占用 ~10MB ~20MB ~10MB ~5MB
更新频率 活跃 较慢 较慢 随系统

一句话:ddns-go 是目前对中文用户最友好的 DDNS 工具,Web 配置 + 中文界面 + 国内 DNS 服务商直连。


总结

维度 评价
上手难度 ⭐ 极低,Docker 或二进制运行后 Web 配置
功能完整度 ⭐⭐⭐⭐ 主流服务商全覆盖,IPv4/IPv6 双栈
界面体验 ⭐⭐⭐⭐ 中文界面,清清爽爽
资源占用 ⭐⭐⭐⭐⭐ Go 编译的单二进制 ~10MB
社区活跃度 ⭐⭐⭐⭐ GitHub 10k+ Star
适合人群 家庭 NAS 用户 → 软路由玩家 → 中小企业服务器

一句话总结:如果你需要一个免费的 DDNS 客户端,要求配置简单、中文界面、支持国内云厂商 —— ddns-go 是最佳选择,没有之一。


参考链接