家里装了宽带、搞了 NAS,或者想在外面随时连上家里那台小主机、跑远程桌面和看监控,大家最头疼的往往就是公网 IP 隔三岔五变一次——每次光猫重拨或者运营商刷新租期,前一天辛辛苦苦连上的地址就彻底失联。要解决这个问题,最省心的方式就是搞一个动态域名解析(DDNS),让设备每隔几分钟自动探测一次最新公网 IP,发现变了就调用域名服务商的 API 把解析记录刷新成新地址。而 DDNS-GO 就是这类工具里公认最好上手也最轻量的一个:它单二进制只有十几兆,自带干净清晰的 Web 管理界面,不仅支持通过网卡、公网 API 甚至自定义命令获取 IPv4 与 IPv6,还原生支持阿里云、腾讯云 DNSPod、Cloudflare、华为云、Porkbun 等近 40 家主流 DNS 服务商,连 Webhook 通知和多配置组管理都一应俱全。
本文基于官方最新的 DDNS-GO v6.17.7 版本(2026 年 9 月发布版本)进行实装实测。需要特别提醒你的是,DDNS-GO 没有任何默认账号密码,也没有单独的注册按钮,它的初始化规则非常特别——容器启动后,你第一次在登录框里输入的账号与密码,就会直接被落盘写入配置文件,成为真正的管理员账号。所以跟着这篇教程操作时,第一眼看到登录页千万别随手输个“123456 进去看看”,直接填好你打算长期使用的强口令即可。
成品长这样
部署完成后进入后台,整个管理面板非常直观:顶部可以自由切换和新增不同的配置组(比如一组专门跑阿里云解析公司域名,另一组专门挂 Cloudflare 解析家里设备),下方按需勾选对应的 DNS 厂商填入密钥,再配置好 IPv4/IPv6 的获取规则与域名列表即可。全部配置实时生效,界面下方还会完整输出每次解析检测与接口调用的详细日志。

准备工作
在开始敲命令前,先把下面这几样东西备齐,十几分钟就能一口气跑通:
- 一台安装好 Docker 与 Docker Compose 的常开设备:家里常开的绿联/极空间/群晖 NAS、软路由或者各类 Linux 低功耗小主机都可以,保证它能持续联网工作。
- 防火墙与端口规划:DDNS-GO Web 控制台默认监听
9876端口,确保局域网内可以访问该端口。如果你的小主机启用了 ufw 或安全组,记得提前放行 TCP9876。 - 域名解析服务商的子账号密钥:提前登录你的域名托管平台(例如阿里云 RAM 控制台、腾讯云 CAM 控制台或 Cloudflare API Token 页面),专门建一个只授予对应域名 DNS 解析管理权限(如 AliyunDNSFullAccess)的 AccessKey / Token,绝不要使用主账号的超级管理员密钥。
- 想好要绑定的动态域名:比如规划好二级或三级域名
home.example.com或nas.example.com,确保域名已托管在上述服务商名下。
第一步:Docker Compose 部署
DDNS-GO 极其精简,后台既没有 MySQL 也没有 Redis,所有数据就存放在一个 YAML 配置文件里。我们用 Docker Compose 来统筹容器与持久化目录:
-
创建专用目录并编写 docker-compose.yml
登录小主机终端,建一个名为
ddns-go的独立目录并进入,然后新建docker-compose.yml文件:services: ddns-go: image: jeessy/ddns-go:v6.17.7 container_name: ddns-go restart: always volumes: - ./config:/root ports: - "9876:9876" -
一键启动容器
在
docker-compose.yml所在目录下执行启动命令,Docker 会自动拉取 v6.17.7 镜像并在后台跑起服务:docker compose up -d -
查看启动日志确认状态
服务拉起后,通过 logs 命令看一眼运行输出:
docker compose logs -f如果你在日志末尾看到类似
Listening on :9876的字样,说明 DDNS-GO 服务已经正常挂载端口、等待接收初次配置了。按下Ctrl+C即可退出日志跟随。
关于挂载路径与配置文件的关键细节:
DDNS-GO 在运行时默认读取并写入当前用户的家目录配置文件 ~/.ddns_go_config.yaml。在官方镜像中,程序是以 root 身份运行的,其默认家目录正是 /root。因此我们把宿主机当前的 ./config 目录映射挂载到容器内的 /root,容器初始化生成的 .ddns_go_config.yaml 就会直接落在宿主机的 ./config 目录里。这个文件包含你所有的配置、账号哈希以及 DNS 服务商的 AccessKey,体积通常只有几 KB,后续备份迁移时只需把这个文件夹打个包即可。
第二步:首次登录即设置管理员
服务启动之后,直接在浏览器里打开 http://<你的服务器IP>:9876。这时候你会发现,DDNS-GO 并没有弹什么花哨的安装向导,而是干脆利落地直接重定向到了 /login 登录页,并在输入框上方给了一句醒目的提示:"Login and configure as an administrator account"。
这里藏着一个很多新手容易懵的机制:DDNS-GO 既没有预设的默认密码(比如 admin/admin),也没有独立的“注册”页面。你在当前页面输入框里第一次键入的用户名和密码,点击 Login 的瞬间,就会被程序直接采纳并固化为系统的管理员账号。程序会把你输入的密码哈希后写入后端的 YAML 配置文件,同时自动初始化出第一个默认配置组(即「1 - alidns」),随后直接进入控制台。

很多人习惯了“先随便输个 123456 进去看看界面,待会儿再改”,在 DDNS-GO 这里千万别这么干——因为你随手敲的这串字符当场就变成真实密码了!既然 9876 端口后续可能暴露在局域网甚至公网,第一次敲键盘就请想好一个高强度的管理员账号密码。
万一哪天真的把密码忘光了,也别慌着删容器重装:直接在宿主机或者容器内部执行
./ddns-go -resetPassword 你的新密码,程序提供了原生的重置参数,敲完就能立刻用新密码重新登入。
第三步:配置一条动态域名
登录成功后就会直接来到配置主页。页面顶部是配置组管理栏(支持通过 Config 下拉框进行多组配置的添加、重命名与切换)。下面我们以最常见的场景为例,把家里的宽带公网 IP 绑定到自己的二级域名上:
1. 选择 DNS 服务商并填入凭据
页面第一栏是 DNS Provider 单选区。DDNS-GO 原生支持了将近 40 家主流服务商(包括 Aliyun、Aliyun ESA、Tencent/DnsPod、Cloudflare、华为云、百度云、Porkbun、GoDaddy 等)。这里我们勾选 Aliyun(阿里云),单选框下方就会动态展开该服务商专属的密钥输入框:AccessKey ID、AccessKey Secret 以及可选的 TTL 解析生效时间。
注:出于教程演示安全考虑,本次实测界面中并未填写真实 AccessKey 密钥,实际部署时建议在阿里云 RAM 控制台专门创建一个仅授予“云解析 DNS 操作权限”的子账号,把权限收死。
2. 设置 IPv4 获取方式与解析域名
往下滑来到 IPv4 配置区块:
- Enabled(启用开关):保持勾选状态,代表开启针对 IPv4 的动态更新。
- Get IP method(获取 IP 方式):系统提供了
By api(通过接口)、By network card(通过网卡设备)和By command(通过命令脚本)三种途径。对于绝大多数家庭宽带或部署在 Docker 容器内的环境,强烈推荐直接使用默认的 By api。系统预置了包括api.ipify.org在内的 5 个高可用外部探测接口,免去了容器内找不到对应物理网卡的麻烦。 - Domains(域名列表):在多行文本框里填入你希望绑定的完整域名,支持一行填写一个。例如这里我们填入演示域名
home.example.com。

3. 保存与自动化比对机制
核对信息无误后,滑到页面底部点击 Save 按钮。DDNS-GO 会立刻发起一次实时的 IP 探针,并在右侧日志区打印出当前获取到的公网 IP。
更省心的是它的运行机制:DDNS-GO 默认会常驻后台,每隔 5 分钟自动做一次本地与远端的 IP 缓存比对。只有当检测到本地出口 IP 确实发生变化时,它才会调用服务商 API 发起解析记录更新请求;如果 IP 没有变动,绝不滥发请求消耗你的云厂商 API 配额。
踩坑实录
1. 没有默认初始账号,首次输入的凭据即为管理员真密码
DDNS-GO 启动后初次访问登录页(/login)时,系统没有内置默认密码,也没有专门的独立注册入口。用户首次在表单中输入的用户名与密码会直接被写入配置文件作为管理员凭据。切勿抱着“先随手输个 123456 进去看看”的心态测试,首次登录请直接设置强口令;若后续遗忘密码,需在命令行执行 ./ddns-go -resetPassword 新密码 进行重置。
2. 操作提示气泡会原样展示宿主机配置文件的绝对路径
在 Web 界面执行保存配置或登录操作时,界面顶部弹出的成功提示气泡会完整打印配置文件的绝对路径(例如 Config file has been saved to: /path/to/config.yaml)。若需要截图发群或发帖求助,务必等待气泡消失后再截取,或手动将顶部提示打码裁切,避免无意间暴露服务器目录结构与用户名等宿主机敏感信息。
3. 云厂商 AccessKey 明文存放于 YAML 配置中
配置的各 DNS 服务商 AccessKey ID 与 AccessKey Secret 均以明文形式直接保存在 YAML 配置文件内。必须严格收紧宿主机配置文件的读写权限,备份文件也应进行加密存放。此外,云厂商侧务必配置最小权限子账号(仅授权特定域名的 DNS 解析修改权,切勿使用主账号 FullAccess 密钥),若配置文件意外泄露,应第一时间前往云控制台吊销并作废该密钥。
4. IPv6 获取方式选「By network card」可能报未找到网卡
配置 IPv6 动态解析时,若获取方式选为「By network card」,程序会依赖系统底层网卡枚举。如果在 Docker 容器或特定受限网络环境下运行,可能会直接提示 No available network card found。遇到此类情况无需排查系统底层网卡适配,直接将获取 IP 方式切换为「By api」走公网查询源即可稳定读取公网 IPv6 地址。
升级与备份
版本升级:使用 Docker Compose 部署时,升级只需修改 docker-compose.yml 中的镜像版本标签,执行 docker compose pull && docker compose up -d 重建容器即可完成平滑切换;若采用官方二进制部署,可直接执行内置的自升级命令 ./ddns-go -u,或下载最新版 Release 压缩包解压替换旧二进制文件并重启服务。
数据备份与恢复:DDNS-GO 无外部数据库依赖,管理员账号、多组 DNS 解析规则及 Webhook 设置全部存放在单一 YAML 配置文件内(默认名为 .ddns_go_config.yaml 或启动时 -c 指定的文件)。日常备份仅需单文件复制该 YAML 文件即可完成热备或冷备;迁移与恢复时,将该文件复制回挂载目录或新环境原路径,带参重启程序即可无缝还原所有配置与解析状态。