告别动态公网IP掉线:基于 ddns-go 与 Cloudflare 的自动化 DDNS 部署指南
对于拥有家庭公网 IP 的折腾玩家来说,直连的体验无疑是极佳的。但现实情况是,运营商随时可能重新分配你的公网 IP。如果单纯依靠记忆 IP 地址,一旦变动就会导致服务全面瘫痪;而使用路由器自带的花生壳等传统 DDNS 服务,不仅免费版限制颇多,更致命的是域名控制权不在自己手中,解析生效也往往存在延迟。
作为一名在 IT 架构领域摸爬滚打多年的老兵,我的建议是:将域名的解析权牢牢攥在自己手里。 今天,我们将通过“自有域名 + ddns-go + Cloudflare”的组合,彻底解决动态 IP 带来的访问痛点。
为什么选择自建 DDNS?
传统的第三方 DDNS 往往存在生态封闭、刷新慢等问题。自己购买域名并配置 DDNS 拥有不可替代的优势:
-
绝对的控制权:域名完全属于你,不依赖第三方厂商的转发服务器。
-
高自由度:无论是需要备案的国内域名,还是无需备案的海外域名,均可无缝接入。
-
极速解析:搭配 Cloudflare 等顶级 DNS 服务商,API 响应迅速,IP 变动即刻同步。
核心引擎:ddns-go 是什么?
ddns-go 是一款轻量级、开源的动态域名解析工具。它的核心逻辑非常纯粹:定时(默认约 5 分钟)侦测你当前的真实公网 IP(支持 IPv4 和 IPv6)。一旦发现 IP 发生变化,它会立即调用 DNS 服务商的 API,将指定域名的 A 记录或 AAAA 记录更新为最新 IP。如果 IP 未变,则静默待命。
它原生支持 Cloudflare、阿里云、腾讯云 (DNSPod)、华为云等主流服务商,且支持多域名、多级子域名统一管理,是家庭实验室(Homelab)的绝佳伴侣。
实战部署:在飞牛 NAS 上使用 Docker 运行 ddns-go
为了保证系统的纯净和易维护性,强烈推荐使用 Docker Compose 进行容器化部署。无论你是使用飞牛 NAS 还是其他标准的 Linux 环境,这种方案都能让你在后续的升级和迁移中省下大量精力。
ddns-go 需要获取主机的真实公网 IP。在单机 NAS 环境下,使用 host 网络模式是最简单高效的选择。
1. 创建目录与配置文件
首先,在你的宿主机上创建一个专用的配置目录(例如 /opt/ddns-go),并在其中新建 docker-compose.yml 文件:
services:
ddns-go:
image: jeessy/ddns-go
container_name: ddns-go
restart: always
network_mode: host
volumes:
# 左侧路径请替换为你实际创建的目录
- /opt/ddns-go:/root/opt/ddns-go
2. 启动容器并配置
在配置文件所在目录下执行 docker compose up -d 即可将服务跑起来。
容器启动后,在浏览器访问 http://<你NAS的IP>:9876 进入 Web 界面。以 Cloudflare 为例,首次配置步骤如下:
-
选择 DNS 服务商:勾选 Cloudflare。
-
获取并填写 Token:前往 Cloudflare 控制台创建一个 API Token,为了安全起见,权限仅需赋予
Zone - DNS - Edit和Zone - Zone - Read即可。 -
填写解析域名:输入你需要 DDNS 自动更新的域名或子域名。
-
保存配置:配置会自动保存在我们刚才挂载的目录中,容器重启数据也不会丢失。
资深老兵的安全与进阶建议
-
阻断公网访问:在 ddns-go 的设置页中,务必勾选**“禁止从公网访问”**。9876 端口仅限内网访问即可,将管理端口暴露在公网存在极大的安全隐患。
-
与反向代理(如 Lucky)的协同:DDNS 和反向代理并不冲突。ddns-go 负责解决“域名解析到哪个 IP”的问题,而 Lucky 或 Nginx 负责解决“流量怎么转发、如何附加 SSL 证书和访问认证”的问题。将内网服务放在反代之后,不仅能避免直接暴露 80/443 端口,还能提升整体架构的安全性。
总结
这套方案我已经稳定运行了大半年,期间公网 IP 变动过数次,系统均实现了无感自动切换。如果你也有公网 IP,并且厌倦了厂商自带 DDNS 的种种限制,这套“一劳永逸”的自动化解析方案绝对值得你花十分钟去部署。