群晖 DSM 更新后 Cloudflare DDNS 失效的排查记录

前言

前两天我的群晖 NAS 提示 DSM 有新版本更新。由于已经好久没更新,一瞄发行说明发现新 feature 和 bugfix 还挺多,想着时间也不短了,那就顺手更一下吧。

系统更新得倒是很顺利,更新后啥异常也没发现,内网/外网访问都正常,我也就没再管。

直到昨晚事情才开始不对:我突然发现通过 DDNS 完全无法访问 NAS 上的任何应用。不过当时家里网络卡得要命,我也没太当回事,只以为是网络抽风。

但今天一早起来网络速度恢复,可域名依然不通,这时候我才知道绝对不是网络速度的问题了,这才开始正式排查。

排查链路复盘

下面是我这次遇到问题后的完整排查过程。一方面是给可能遇到同样坑的朋友提供一个参考思路,另一方面也是给自己做个记录,方便以后再遇到类似情况时能更快定位问题。

1. 先确认 NAS 服务本身是否正常

第一步很简单: 通过内网 IP 访问 NAS,一切正常,系统服务都在。

2. 再确认公网访问是否正常

用家里的 公网 IP 直连 NAS 暴露出去的端口,能通。说明 ISP 没问题,端口也没被封。

3. 检查群晖 DSM 自带的 DDNS 状态

打开 控制面板 → 外部访问 → DDNS

果然看到 DDNS 状态一直卡在 "正在连接..." , 点"测试连接",转半天圈,最后报 连接超时

至此基本确认问题出在 DDNS。

4. 怀疑是否是 NAS 上的代理导致的问题

我之前遇到过: 只要开了系统代理 → 重启 NAS → 自定义 DDNS 会无法连接

必须是:

  1. 先连上 DDNS
  2. 再手动开启系统代理

这很奇怪,但确实存在这个问题,我也一直没有去解决,所以这次我也先排查了一遍代理设置,结果发现代理是关闭的,这条可能性排除了。

5. 怀疑 Cloudflare 又宕机?

突然想起前两天 Cloudflare 宕机,难不成又宕机了?

我登录 CF 控制台看了眼,没有任何告警。为了确认,我还顺手访问了几个托管在 Vercel、经过 Cloudflare 的服务,一切正常,说明 Cloudflare 没锅。

6. 终于把怀疑对象指向 DSM 更新

这时我不禁想起了福尔摩斯法则:

"当你排除了所有不可能的,剩下的即使再离谱,也必然是真相。"

我先是在 Nas 上添加 DDNS 的地方看了一下服务提供商,果然,没有之前自定义的 Cloudflare 了。

我回忆了一下,群晖默认不支持 Cloudflare DDNS,需要自己手动部署第三方脚本,比如很多玩家都用的 SynologyCloudflareDDNS

但我这是两三年前配置的了,早忘得干干净净,只记得当时是用 SSH 登进去扔了些脚本、改了 ddns_provider 配置,我只好去网上重新查教程。

7. 转折:ddns_provider 配置"消失了"

网上的做法都差不多,我也照着检查了一下 NAS 的 /etc/ddns_provider.conf

结果一打开就发现:我之前手动添加的 Cloudflare provider 配置彻底没了。

八成是这次 DSM 更新覆盖了系统文件,把自定义的 DDNS provider 给清干净了。

于是我把缺失的配置重新补上、保存,然后再回到 DSM 的 DDNS 界面一看,果然有变化: 列表里多出了一个"访问 DDNS 供应商的网站"的按钮。

这说明新增的 provider 已成功加载(因为在 ddns_provider.conf 里设置 website 字段后,DSM 会自动在面板中显示这个入口)。

再测试连接,结果:还是失败。

8. 再一查:原先放在 /sbin 的脚本也没了

我继续顺着配置里引用的脚本路径查下去(就是 SynologyCloudflareDDNS 的核心脚本)。

结果:指定路径下根本没有脚本! 我甚至怀疑是不是我之前放在其他地方了,于是全盘搜索了一遍。

找不到,根本找不到,基本可以确认整个 /sbin 目录都被更新重置了。

至此终于搞清楚问题根因:

DSM 更新时覆盖了系统目录,导致自定义 DDNS Provider 配置 + 脚本全部消失。

9. 修复:重新上传脚本 + 重新配置 provider

我重新下载脚本,上传到 /sbin,给可执行权限,再更新 ddns_provider 配置。

测试连接,这次成功了,DDNS 恢复正常!

10. 为什么前两天还能用?

现在回头一想,为什么更新当天没问题?

很简单:因为我的公网 IP 那几天没变。 DDNS 虽然挂了,但只要 Cloudflare 上的 DNS A 记录还指向老 IP,访问就不会出问题。

直到昨天公网 IP 有一点点变动(可能只差一两位),我登陆 CF 又没仔细看 A 记录,这才导致域名完全失效。

总结

这次问题的根因其实非常隐蔽:

  • DSM 更新 → 覆盖系统目录
  • 自定义 DDNS Provider 配置被删
  • /sbin 下的 Cloudflare 更新脚本也清空
  • 但因为公网 IP 没变,所以问题延后了两天才暴露
  • 最后一度误以为是 Cloudflare、代理或网络的问题

最终的解决办法就是:重新放回脚本 + 重写 ddns_provider.conf。

相关推荐
Csvn5 小时前
OpenSpec 详细使用教程
前端
明月_清风5 小时前
加密解密系统完全指南:原理剖析与 Go 实践
后端
之歆6 小时前
Day19_LESS 完全指南——从入门到工程实践
前端·css·less
小江的记录本6 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
云水一下7 小时前
HTML5 从入门到精通:实战收官——从零搭建完整静态网站,综合运用所有知识
前端·html5
不总是7 小时前
Windows 系统 Node.js 免安装版(zip)安装与配置教程(2026 最新)
前端·windows·node.js
冬奇Lab7 小时前
每日一个开源项目(第105篇):Twenty - 跳出 Salesforce 的圈套,定义现代开源 CRM
前端·后端·开源
zhangyao9403308 小时前
开发pc端时,表格的高度怎么设置才能铺满页面
前端·javascript·elementui
ServBay8 小时前
月之暗面 Kimi Code 0.4.0 发布,终端 AI 编码助手全面采用 TypeScript,实现毫秒级启动
后端·aigc·ai编程
小江的记录本8 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试