DDNS-GO自动获得公网IPv4 IPv6并解析到域名:详细使用教程与IPv6实战指南

覆盖 DDNS-GO 工作原理、Docker 部署、Web 界面配置、IPv4/IPv6 双栈、Aliyun/Cloudflare 接入、群晖/OpenWrt 实战,基于 17000+ stars 开源项目的 DDNS 完整教程。
DDNS-GO自动获得公网IPv4或IPv6地址-IT峰哥软件库

一、为什么 DDNS-GO 是国内 NAS / 家庭宽带用户的首选?

如果你家里或公司有 NAS、软路由、监控摄像头、Web 服务,又用的是普通宽带(运营商分配的是动态公网 IP),你一定遇到过 IP 变了之后外网访问断掉的窘境。DDNS(Dynamic DNS)就是为这个场景设计的——自动检测你的公网 IP 变化,把域名解析实时更新到新 IP。DDNS-GO 是国内开发者 jeessy2 用 Go 语言写的轻量 DDNS 工具,17000+ GitHub stars、MIT 协议、完全免费,至今仍是国内同类工具中最受欢迎的项目之一。今天这篇 DDNS-GO 详细教程,我会从原理、安装、配置、IPv6、群晖/路由器场景、安全加固、常见坑 7 个维度,把过去几年给客户部署 DDNS-GO 的实战经验完整梳理一遍。

先说几个 DDNS-GO 的差异化优势:

  • 覆盖 20+ DNS 服务商:阿里云、腾讯云、Dnspod、Cloudflare、华为云、百度云、Porkbun、GoDaddy、Namecheap、NameSilo、Dynadot、DNSLA、IBM NS1 Connect、雨云、EdgeOne 等
  • IPv4 + IPv6 双栈:同时支持 IPv4 DDNS 和 IPv6 DDNS,国内运营商现在主推 IPv6 公网,必须支持
  • 极轻量:单个二进制文件 5-10MB,内存占用 20MB 左右,ARM / x86 / RISC-V 全架构覆盖,树莓派、NAS、软路由、OpenWrt 都能跑
  • Web 配置界面:默认端口 9876,所有参数可视化配置,默认勾选”禁止从公网访问”,安全模型好
  • Webhook + Callback:IP 更新成功/失败时回调通知,方便对接监控告警
  • MIT 协议 + 中文友好:纯开源无广告,国内开发者维护,中文文档齐全

本文涉及的所有命令(docker run、systemd 服务、Aliyun DNS SDK 接入等)均参考 jeessy2/ddns-go GitHub 官方 README(v6.17.1,2026-06-07 发布)实测验证。具体参数(如监听端口、同步间隔、回调 URL)以你部署的版本实际界面为准。

二、DDNS-GO 工作原理:3 步搞定动态 IP 解析

DDNS-GO 的工作流程可以用 3 步概括:

Step 1:检测公网 IP。DDNS-GO 默认通过 HTTP 接口(如 ip.sb、ip.cn、ifconfig.me、cloudflare.com/cdn-cgi/trace)获取当前设备的公网 IP。支持按接口/网卡/自定义命令获取,多种方式兜底避免单点失败。

Step 2:比对上一次 IP。如果 IP 没变,5 分钟后再检查(默认间隔);如果 IP 变了,立即触发更新。

Step 3:调用 DNS 服务商 API 更新解析记录。DDNS-GO 内置 20+ DNS 服务商的 SDK(如阿里云 Alidns 2015-01-09、Tencent Cloud DNSPod 2021-03-23、Cloudflare v4),调用对应 API 把域名解析记录 A(IPv4)或 AAAA(IPv6)更新到新 IP。

整个流程跑完通常 1-3 秒,对家庭宽带 / 中小企业带宽几乎零开销。

三、Docker 部署(最推荐)

Docker 部署是绝大多数用户的首选,一次配置长期运行。下面给三个最常用场景的命令。

3.1 基础部署(host 网络模式)

DDNS-GO 需要正确获取本机公网 IP,推荐使用 --net=host 模式,让容器和宿主机共享网络命名空间:

# 创建配置目录
mkdir -p /opt/ddns-go

# 启动容器(host 模式)
docker run -d --name ddns-go 
  --restart=always 
  --net=host 
  -v /opt/ddns-go:/root 
  jeessy/ddns-go

启动后浏览器打开 http://宿主机IP:9876 即可进入配置界面。

3.2 自定义端口 + 同步间隔

如果 9876 端口被占用,或者你想降低检测频率减少 API 调用:

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

参数说明:-l :9877 监听 9877 端口;-f 600 同步间隔 600 秒(10 分钟)。

3.3 桥接模式(非 host)

少数场景下不能用 host 模式(如 Docker Desktop for Mac/Windows、群晖某些套件限制):

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

桥接模式下获取的 IP 可能是 Docker 网桥的 IP,不是真实公网 IP,需要额外配置「通过命令获取 IP」或「通过接口获取 IP」才能正确工作。

四、系统中部署(直接跑二进制)

不适合用 Docker 的场景(精简 Linux、路由器、Windows Server),可以直接跑二进制。

4.1 Linux 安装

# 从 GitHub Releases 下载(v6.17.1 为最新稳定版)
wget https://github.com/jeessy2/ddns-go/releases/download/v6.17.1/ddns-go_6.17.1_linux_x86_64.tar.gz
tar xzf ddns-go_6.17.1_linux_x86_64.tar.gz
sudo ./ddns-go -s install

# 浏览器访问 http://localhost:9876 配置
# 服务会注册为 systemd unit,开机自启

# 卸载服务
sudo ./ddns-go -s uninstall

4.2 macOS / Windows 安装

Mac 用户和上面 Linux 步骤一样(Mac 也是 ./ddns-go -s install)。Windows 用户下载 .exe 后以管理员身份运行 cmd,执行 .ddns-go.exe -s install

五、Web 界面配置详解

DDNS-GO 的配置全部在 Web 界面完成,下面按 6 个区域拆解。

5.1 DNS 服务商配置

选择你的域名所在的 DNS 服务商,比如域名在阿里云就选「阿里云」。然后填入 AccessKey ID 和 AccessKey Secret。重要安全提示

  • 不要用主账号的 AccessKey,新建一个 RAM 子账号,只授权 Alidns 的读写权限
  • AccessKey Secret 只在首次配置时显示在 Web 界面,配置完自动隐藏;丢失只能重置
  • Web 界面默认勾选「禁止从公网访问」,不要取消这个勾

5.2 域名与解析记录

支持四种解析记录类型:

  • A 记录:IPv4 解析(最常用)
  • AAAA 记录:IPv6 解析(国内运营商必备)
  • CNAME:把一个域名别名指向另一个域名(DDNS-GO 不直接支持 CNAME 更新,但可以 A 记录 + CNAME 配合)
  • NS:不常用,跳过

支持多级域名(如 nas.example.comhome.example.com),支持同域名多记录(A + AAAA 同时存在)。

5.3 IPv4 / IPv6 获取方式

DDNS-GO 提供 4 种获取 IP 的方式:

  • 通过接口获取:调 HTTP 接口(ip.sb、ip.cn、ifconfig.me 等),最常用
  • 通过网卡获取:读网卡 IP(适合有固定公网 IP 但运营商不主动推送的场景)
  • 通过命令获取:自定义 shell 命令返回 IP(最灵活,比如先 curl + grep + sed)
  • 不获取:手动填一个固定 IP(特殊场景)

IPv6 必看:很多 Linux 设备有多张网卡(如 eth0 有 IPv6 全局地址、eth0.1 有 IPv6 链路本地地址),必须明确选对接口。DDNS-GO 在「通过接口获取」模式下会列出所有网卡和 IPv6 地址供选择。

5.4 同步间隔与缓存

默认 5 分钟同步一次,参数 -f 可调。不建议把间隔调到 30 秒以内,容易被 DNS 服务商限流(Cloudflare 限制 1200 次/5 分钟,阿里云 1000 次/天)。

-cacheTimes 参数控制「每 N 次才真正调用 DNS API 比对」,适合「频繁检测 IP + 偶尔比对服务商」的场景:

# 每 10 秒检查本地 IP,每 30 分钟(180 次)调用一次 DNS API
./ddns-go -s install -f 10 -cacheTimes 180

5.5 Webhook 通知

DDNS-GO 在 IP 更新成功/失败时会回调 Webhook URL,支持变量替换

  • {ip}:新 IP
  • {domain}:域名
  • {status}:成功/失败状态
  • {time}:时间戳

实战用法:把 Webhook 接到钉钉 / 飞书 / 微信 / Telegram Bot,IP 变了立即通知手机。注意:Webhook 失败不会重试,所以只适合做告警,不能依赖它做关键控制

5.6 Callback 模式

Callback 是另一种机制——DDNS-GO 不直接调 DNS API,而是把检测到的 IP 通过 HTTP POST 发给你自己的服务器,你自己的服务器负责调 DNS API 更新。适合不想给 DDNS-GO 授权 DNS 服务商 API 凭据的场景(比如多服务器共用一个 API key 时)。

六、IPv6 DDNS:国内运营商用户必备

2024 年开始国内运营商(电信 / 联通 / 移动)新装宽带基本不再分配 IPv4 公网地址,但 IPv6 公网地址几乎人人有。DDNS-GO 对 IPv6 支持非常完善,下面讲三个关键点。

6.1 路由器开启 IPv6 防火墙放行

默认运营商光猫 / 路由器 IPv6 防火墙是「入站全拦截」,DDNS-GO 解析到 IPv6 也没用——外网访问直接被路由器拦。必须在路由器后台给特定设备开放 IPv6 入站端口

不同品牌路由器操作不同:

  • 华硕路由器:「IPv6 防火墙」→「默认入站规则」→「接受」
  • 小米路由器:「常用设置」→「局域网设置」→「IPv6 防火墙」关闭
  • OpenWrt:「网络」→「防火墙」→「IPv6 规则」自定义
  • 运营商光猫:通常没有 IPv6 防火墙设置权限,需要改桥接 + 自己路由

6.2 客户端必须能访问 IPv6

DDNS-GO 检测到的 IPv6 是「本地网卡的 IPv6」,必须确保这个 IPv6 是全局地址(2000::/3 前缀),而不是链路本地地址(fe80::/10)。

Linux 下检查:

ip -6 addr show eth0 | grep "inet6"
# 应该看到 2000::/3 开头的地址,而不是只有 fe80::

如果只有 fe80::,说明路由器没下发 IPv6 前缀,检查路由器 IPv6 配置。

6.3 群晖 NAS IPv6 DDNS 配置

群晖用户最常见的坑是「DDNS-GO 在容器里检测到的不是 NAS 的 IPv6 而是 Docker 网桥的 IPv6」。解决方法

  1. 容器必须用 --net=host 模式(群晖 docker 套件 → 容器 → 编辑 → 网络 → 使用与 Docker Host 相同的网络)
  2. DDNS-GO 配置 → IPv6 获取方式 → 通过接口获取 → 选择 NAS 的物理网卡(eth0 或群晖特定的 bond0 / ovs_eth0)

6.4 IPv6 实战案例:从零配置到外网访问

讲一个完整的 IPv6 DDNS 实战案例,假设场景:你家电信宽带 1000M,路由器是华硕 AX86U Pro(Merlin 固件),想远程访问群晖 NAS。

Step 1:确认运营商给了 IPv6

浏览器访问 https://test-ipv6.com/ 看是否显示 IPv6 地址。如果显示「Your IPv6 address is … 」,说明 ISP 给了 IPv6,否则继续往下也无法用 IPv6。

Step 2:路由器开启 IPv6 防火墙放行

华硕路由器后台 → 高级设置 → IPv6 防火墙 → 默认入站规则改为「接受」(默认是「拒绝」)。这一步是绝大多数人失败的原因——IPv6 DDNS 解析对了但外网访问被路由器拦。

Step 3:路由器给 NAS 分配固定 IPv6 前缀

华硕路由器 → LAN → DHCP Server → IPv6 → 配置 RA(Router Advertisement)→ 模式选「Stateless + Stateful」→ 给 NAS MAC 绑定固定 IPv6 后缀(如 ::100)。这样 NAS 重启后 IPv6 不变,DDNS-GO 解析稳定。

Step 4:群晖 DDNS-GO 配置 IPv6

群晖 docker 跑 DDNS-GO(host 模式)→ Web 界面 → IPv6 获取方式 → 通过接口获取 → 选物理网卡(不是 docker0)→ 验证显示的 IPv6 是 2000::/3 全局地址。

Step 5:Cloudflare / 阿里云添加 AAAA 解析

DDNS-GO 自动把 nas.example.com 的 AAAA 记录更新为 NAS 的 IPv6 地址。解析生效后(DNS 缓存 1-10 分钟),用手机 4G/5G(确保手机有 IPv6)访问 http://nas.example.com:5000(群晖 DSM 默认端口)就能远程访问。

Step 6:手机端确认 IPv6 通

有些手机运营商(特别是移动)在某些地区对 IPv6 限速或不开通。用 https://test-ipv6.com/ 在手机浏览器测试下,确认手机也能访问 IPv6 网站。如果手机没有 IPv6,IPv6 DDNS 解析成功但手机访问不到(仍然需要 IPv4 或 VPN)。

七、Aliyun 域名接入实战

国内用户最常用的就是阿里云域名,下面给完整流程。

7.1 创建 RAM 子账号

登录阿里云 RAM 控制台 → 用户 → 创建用户 → 访问方式选「OpenAPI 调用访问」→ 保存生成的 AccessKey ID 和 Secret。

授权策略:

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "alidns:DescribeDomainRecords",
        "alidns:DescribeDomains",
        "alidns:UpdateDomainRecord",
        "alidns:AddDomainRecord",
        "alidns:DeleteDomainRecord"
      ],
      "Resource": "*"
    }
  ]
}

7.2 在 DDNS-GO 配置阿里云

DNS 服务商选「阿里云」→ 填入 AccessKey ID / Secret → 勾选要解析的域名 → 选择记录类型(A / AAAA)→ 主机记录(如 nas)→ TTL 选 600 秒(10 分钟)。

保存后 DDNS-GO 立即执行一次解析更新,然后按同步间隔持续检测。Web 界面右下角的「日志」可以查看最近 50 条更新记录。

八、Cloudflare 接入实战

Cloudflare 是国外域名托管的首选,DDNS-GO 通过 Cloudflare API v4 直接调用,配置最简单

8.1 获取 API Token

Cloudflare 控制台 → My Profile → API Tokens → Create Token → Custom Token → 权限选「Zone / DNS / Edit」+「Zone / Zone / Read」→ Zone Resources 选「Include / All zones」或指定具体域名 → Continue → 保存 Token。

8.2 在 DDNS-GO 配置 Cloudflare

DNS 服务商选「Cloudflare」→ 填入 Email(注册邮箱)和 API Token(不是 Global API Key)→ 选择 Zone(域名)→ 选记录类型和主机记录。

坑点:早期版本用 Global API Key 即可,但 2023 年起 Cloudflare 强烈推荐用 Token。如果用 Key 失败,改用 Token。

九、群晖 NAS 完整部署流程

群晖用户部署 DDNS-GO 是高频需求,下面给完整步骤。

  1. 套件中心 → 搜索 docker 并安装(如已装跳过)
  2. 注册表 → 搜索 ddns-go → 下载 jeessy/ddns-go 镜像
  3. 映像 → 选中镜像 → 启动 → 高级设置:
    • 卷:添加 /docker/ddns-go 映射到 /root(或自建目录)
    • 网络:勾选「使用与 Docker Host 相同的网络」(关键)
    • 启动自动重新启动:勾选
  4. 容器启动后浏览器访问 http://群晖IP:9876
  5. 配置 DNS 服务商和域名(同 Linux 章节)

十、安全加固建议

DDNS-GO 一旦被攻破,攻击者可以劫持你的域名解析到任意 IP。必须做以下加固

  • Web 界面禁止公网访问:默认勾选,不要取消。如果需要远程管理,用 VPN + 内网访问
  • 设置强密码:首次配置时设置 Web 登录密码(默认无密码)
  • RAM 子账号最小权限:阿里云 AccessKey 只授权 Alidns 相关 5 个 API,不要给全局权限
  • Cloudflare Token 限制 Zone:用 Custom Token 而不是 Global API Key,权限精确到指定域名
  • 配置文件权限chmod 600 /opt/ddns-go/.ddns_go_config.yaml(包含明文 API 凭据)
  • 开启 HTTPS:如果必须公网访问 Web 界面,用 Nginx 反向代理 + Let’s Encrypt 证书
  • Webhook 不要泄露密钥:Webhook URL 带 ?token=xxx 时,token 会被网关日志记录

十一、常见故障与排查

整理 7 个高频故障,按发生概率排序。

11.1 检测到的 IP 不是公网 IP

现象:DDNS-GO 日志显示更新了 192.168.x.x10.x.x.x,明显是内网 IP。

排查:

  • 容器没用 --net=host 模式
  • 「通过接口获取」选错了网卡(选到了 docker0 / br-xxx 网桥)
  • 「通过接口获取」获取到的是 IPv6 链路本地地址(fe80::),不是全局地址

解决:换 host 模式 + 选对物理网卡。

11.2 DNS API 调用失败

现象:日志显示「API 调用失败」或「认证失败」。

排查:

  • AccessKey ID / Secret 填错(重新复制,注意空格)
  • RAM 子账号权限不够(按上文补 Alidns 5 个 API 权限)
  • Cloudflare Token 过期(Token 默认不过期,但删除或重置后会失效)
  • 网络问题:DDNS-GO 容器无法访问 DNS 服务商 API(检查防火墙、代理)

11.3 IPv6 更新成功但外网访问不到

现象:DNS 解析到 2000::/3 全局 IPv6 地址,但 curl/wget 超时。

排查:

  • 路由器 IPv6 防火墙拦截入站(参考 6.1 节)
  • 客户端 IPv6 出口不通(用 curl -6 https://test-ipv6.com/ip 测试)
  • 目标服务(NAS、软路由)只监听了 IPv4,没监听 IPv6

11.4 同步频率过高被 DNS 服务商限流

现象:日志频繁显示「rate limit exceeded」。

解决:把 -f 调到 300 以上(5 分钟),加 -cacheTimes 30 减少 API 调用。

11.5 Docker 容器反复重启

现象:docker ps 显示容器一直在 restarting。

排查:

  • 配置目录权限问题(容器内是 root,需要宿主机目录可写)
  • 端口冲突(9876 被宿主机其他进程占用)
  • docker logs ddns-go 最后一行错误

11.6 Webhook 收不到回调

现象:IP 更新了但钉钉 / 飞书没收到通知。

排查:

  • Webhook URL 不可达(容器内 ping 不到外网)
  • Webhook URL 没返回 2xx 状态码(DDNS-GO 认为失败)
  • 变量替换错误(如 {ip} 写成 {IP} 大小写不一致)

11.7 IPv6 地址变化频繁

现象:IPv6 几乎每小时变一次,DDNS-GO 频繁调用 API。

原因:IPv6 默认有 SLAAC + Privacy Extensions,操作系统会定期更换 IPv6 地址(保护隐私)。

解决:

  • Linux:在 /etc/network/if-up.d/ 关闭 privacy extensions
  • Windows:netsh interface ipv6 set privacy state=disabled
  • 接受变化:增加 -cacheTimes 到 180,让 API 调用变少

11.8 误区:DDNS 解析成功就一定能访问

很多新手以为 DDNS 解析到 IP 就能外网访问,实际还要过三关:① 路由器 / 防火墙入站端口放行;② 服务(NAS / 软路由)监听了对应端口;③ 客户端(手机 / 电脑)能从对应 IP 出去。任意一关没过都不通。

排错顺序:先 ping / curl 测端口连通性,再逐步检查防火墙和服务监听。

11.9 误区:用主账号 AccessKey 配置 DDNS

很多教程直接让用户用阿里云主账号 AccessKey 配置,这是非常危险的做法。主账号 AccessKey 泄露等于整个阿里云账号被攻破——ECS、RDS、OSS、域名全部沦陷。

正确做法:必须新建 RAM 子账号,只授权 Alidns 相关 5 个 API,AccessKey 泄露影响范围限制在 DNS 解析这一个服务。

11.10 误区:DDNS-GO 跑在 OpenWrt 路由器上做完整 DDNS

OpenWrt 跑 DDNS-GO 是常见的「折腾方案」,但只适合 IPv6 简单场景。原因:① OpenWrt 资源有限(4-32MB 内存),跑 Go 二进制很吃力;② 路由器重启 IP 频繁变化,DDNS-GO 需要在系统启动后才能正确启动,错过首发 IP;③ 路由器本身只挂「A 记录 + 单域名」还行,多服务商 + 多域名 + IPv6 + Webhook 一旦全开,OpenWrt 性能撑不住。

推荐方案:DDNS-GO 跑在 NAS / 树莓派 / 小服务器上,OpenWrt 只负责路由器本职(拨号 + IPv6 防火墙 + DHCP)。

十二、DDNS-GO vs 其他方案对比

方案 DDNS-GO aliyun-ddns dnspod-shell 路由器内置
DNS 服务商覆盖 20+ 仅阿里云 仅 Dnspod 1-3 个
IPv4 + IPv6 双栈 部分
Web 配置界面 ✗(配置文件) ✗(命令行)
Webhook 通知
Docker 部署 需自己写 需自己写
多域名 / 多服务商 部分
维护活跃度 高(持续更新) 依赖路由器厂商
中文友好

结论:DDNS-GO 是国内自建 DDNS 的最佳选择,除非你只用阿里云一个服务商且能接受命令行配置。如果只用路由器内置 DDNS,主要痛点是服务商覆盖少、IPv6 支持差。

总结

DDNS-GO 是一款简单易用、功能完整、中文友好的开源 DDNS 工具,17000+ stars、MIT 协议、持续维护 5 年,是 NAS / 软路由 / 家庭宽带用户的首选方案。希望这篇 DDNS-GO 详细教程能帮你避开那些文档里不会写的坑。

配套的 DDNS-GO 部署资源包我整理在了 IT 峰哥软件库,里面包含 DDNS-GO 全架构二进制、Docker Compose 部署文件、Aliyun RAM 权限策略、Cloudflare Token 创建脚本、Nginx HTTPS 反代配置、群晖 / OpenWrt 部署教程。所有内容经过企业部署实测,可以直接下载部署使用。

🚀 IT峰哥软件库

专业企业级软件资源分享平台
安全可靠 · 持续更新 · 授权版本齐全

立即访问 pan.92zl.cn →

👉 DDNS-GO 部署资源包

含 DDNS-GO 全架构二进制 / Docker Compose / RAM 权限策略 / Cloudflare Token 脚本
企业部署开箱即用

立即获取 →

默认

群晖Active Backup for Business使用详细教程:从部署到整机恢复实战指南

2026-7-12 10:37:31

默认

NetMount统一管理和挂载云存储设施:基于Rclone和OpenList的多云盘管理详细教程

2026-7-12 11:35:48

搜索