ddns-go是一款基于Go语言实现的动态域名解析(DDNS)客户端,常见于家庭路由器、NAS或轻量级服务器上。它的定位是把本地网络的公网IP变动情况实时同步到云端 DNS 记录,从而保持外部访问的域名始终指向当前有效的IP。
程序启动后首先读取配置文件中的 DNS 提供商信息与域名列表,然后调用对应 SDK 的 API 获取当前公网 IP。获取方式分为两类:一是通过 https://api.ipify.org 等外部服务;二是直接读取路由器的 WAN 接口信息。随后根据 DNS 供应商的 API 规范,发送 UpdateRecord 请求,将新 IP 写入预设的记录 ID。若返回成功码,日志记录“更新成功”,否则记录错误并在下次轮询时重试。
假设一位用户在自家光纤宽带上装了 OpenWrt,公网 IP 每隔数天会被运营商更换。用户在阿里云购买了 myhome.example.com,希望随时通过该域名访问家中的 Synology NAS。只需在 OpenWrt 的软件中心安装 ddns-go,填入阿里云 AccessKey 与域名记录 ID,开启 IPv4 同步。此后,无论运营商何时更换 IP,浏览器里输入 myhome.example.com 都会自动跳转到最新的路由器外网地址。
另一个场景是开发者在云端部署临时实验环境,公网 IP 随实例重启而变化。把 ddns-go 以 Docker 容器形式挂载到实例内部,配置 Cloudflare 的 API Token,实验结束后直接销毁容器,DNS 记录自然失效,省去手动清理的麻烦。
“ddns-go的轻量级二进制文件不到 5 MB,却把多家 DNS 平台的差异抽象成统一的接口,真的让动态域名解析不再是技术壁垒。”
如果你正为家中设备的远程访问频繁因 IP 变动而中断而苦恼,ddns-go提供的即插即用方案或许正合适。只要一次配置,后续的 IP 迁移几乎全自动完成。
参与讨论
ddns-go真的够轻量,几分钟搞定阿里云的动态解析,省事儿。
这玩意儿上手快,省心。
顺带一提,Docker 版的环境变量里还能直接写 Cloudflare 的 API Token,省去额外配置文件。
这个客户端在M1芯片的Mac上能跑吗?需要额外的arm版二进制吗?
如果本地网络同时有IPv4和IPv6,ddns-go会分别更新两条记录吗?
我觉得它的日志功能不够细致,错误只记录一句,日志里没有具体的请求参数和返回体,这在排查网络异常时真的很头疼。
挺实用的,装完后再也不怕IP换了。
前几天我在家路由器上装了ddns-go,IP一换就自动更新,省了手动改DNS的麻烦。
默认界面在127.0.0.1:8080,外网访问得自行改端口。
听说ddns-go刚加了新厂商,赶紧去试试👍
有朋友把ddns-go当sidecar放进K8s,配合Ingress的ExternalDNS一起用,实现了容器重启后域名自动指向新IP,整个流程几乎零手动,感觉挺牛的。
感觉还行。