你是否有过这样的困扰:家中宽带通过PPPoE拨号获取的IPv6地址一旦因断电重启而变化,之前配置好的隧道或直连服务就立刻失效?这不,我之前还庆幸IPv6地址稳定,结果家里一停电,路由器重新拨号,IPv6地址就变了,之前辛苦配置的 GRE over IPv6隧道 也随之作废。
这时自然会想到用动态域名解析(DDNS)来解决。但对于IPv6,很多厂商的设备原生支持有限。查阅某些厂商资料,会明确指出当前IPv6域名解析尚不支持DDNS。

不过,社区总有解决方案。GitHub上就有不少优秀的开源DDNS工具,其中 ddns-go 项目功能强大且支持IPv6。它的出现,恰好弥补了部分商用DNS服务在IPv6动态更新方面的空白。

根据项目介绍,ddns-go 支持多平台(macOS、Windows、Linux)和多架构(ARM/x86),并能对接阿里云、腾讯云、Cloudflare等主流域名服务商。下面,我将以Ubuntu系统为例,演示如何利用 ddns-go 实现IPv6地址的动态解析。
前期准备:确认IPv6网络环境
首先,确保你的服务器或主机能够正常获取到公网IPv6地址。在图形化设置中,应将IPv6配置为“自动”获取。

随后,在系统详情或通过命令行查看已获取的IPv6地址。你会发现,系统通常会有多个IPv6地址。

通过 ip 命令可以更清晰地看到区别:

上面输出中,第一个 inet6 地址(带有 dynamic mngtmpaddr 标记)是临时地址,有效期较短;第二个才是相对稳定的隐私扩展地址。ddns-go 可以灵活选择使用哪一个。
下载并安装 ddns-go
访问项目的 Releases 页面,根据你的系统架构下载对应的二进制文件。例如,对于x86_64的Linux系统,下载链接如下:
https://github.com/jeessy2/ddns-go/releases/download/v6.6.9/ddns-go_6.6.9_linux_x86_64.tar.gz

下载后解压,你会得到一个名为 ddns-go 的可执行文件。先通过 --help 查看其可用参数:

常用参数解释:
-c:自定义配置文件路径。
-f:设置IP检查更新频率(秒)。
-cacheTimes:设置经过多少次检查后,与DNS服务商的记录进行比对。
-l:设置Web管理界面监听端口。
-s:服务管理(安装、卸载、重启)。
为了让它以后台服务的形式运行,并实现每60秒检查一次IP变化,每30次检查(即30分钟)后与DNS服务商记录比对一次,执行安装命令:
./ddns-go -s install -f 60 -cacheTimes 30

安装成功后,即可通过浏览器访问 http://<你的服务器IP>:9876 进行配置。
配置 ddns-go 实现 IPv6 解析
首次访问会要求设置管理员账号和密码。

登录后,核心配置步骤如下:
-
选择DNS服务商并配置密钥:以阿里云为例,选择“阿里云”,然后填入 AccessKey ID 和 AccessKey Secret。

如果你没有阿里云的AccessKey,需要登录阿里云控制台,在“访问控制RAM”中创建。请务必在创建时保存好Secret,因为它只显示一次。

-
配置IPv6解析:
- 关闭“IPv4”的启用开关。
- 开启“IPv6”的启用开关。
- “获取IP方式”选择“通过网卡获取”,它会自动列出网卡和探测到的IPv6地址。
- 在“Domains”框中输入你想要解析的域名,例如
ipv6.yourdomain.com。ddns-go 默认会使用检测到的第一个IPv6地址(即临时地址)进行更新。如果你希望使用第二个更稳定的地址,可以在“匹配正则表达式”框中填写 @2。

-
保存配置:点击页面底部的“保存”按钮。
验证配置结果
保存后,ddns-go 会立即尝试执行一次解析更新,并开始按照设定频率运行。你可以在Web界面的“日志”页签下查看运行状态。

登录你的域名服务商控制台(如阿里云云解析DNS),可以看到一条类型为 AAAA 的记录已经添加成功。

最后,在客户端使用 nslookup 或 ping 命令测试域名解析,确认已正确指向你的动态IPv6地址。

至此,你已经成功使用 ddns-go 这个优秀的开源实战项目,搭建了一套IPv6动态域名解析系统。无论你的公网IPv6地址如何变化,域名都能自动更新指向最新的地址,彻底解决了因IP变动导致的服务中断问题。如果你对网络自动化、脚本工具等运维话题感兴趣,欢迎在 云栈社区 与其他开发者交流探讨更多实战技巧。