
Debian/Ubuntu 全自动 Cloudflare DDNS 一键脚本
我的主要需求是解锁并观看台湾地区的流媒体服务,例如HBO Go、4GTV及Hami Video。为此,我选择了一台配备台湾中华电信(HINET)住宅宽带IP的VPS,因为住宅IP在模拟本地用户、规避检测方面效果更佳。但问题也随之而来:这种家宽的IPv4地址是动态的,隔三差五就会变。为了让我的域名能一直指向正确的IP,我就写了这个脚本,让它自动去获取最新的IPv4地址,然后实时更新到Cloudflare的解析记录上。这样一来,就再也不怕IP变动了。
这是一个功能强大且高度优化的 Shell 脚本,旨在帮助用户在 Debian 或 Ubuntu 系统上一键配置 Cloudflare DDNS (动态域名解析服务)。脚本会自动检测并更新您的公网 IPv4 和 IPv6 地址,确保您的域名始终指向服务器的最新 IP。
脚本特点
- 一键式安装:自动检测并安装
curl
和jq
依赖,无需手动干预。 - 双栈支持:同时支持 IPv4 (A 记录) 和 IPv6 (AAAA 记录) 的动态更新。
- 智能定时:通过 systemd 定时器实现,每 5 分钟自动执行一次 IP 检测与更新,稳定可靠。
- Telegram 通知:当 IP 地址成功更新或发生错误时,可通过 Telegram Bot 发送实时通知。
- 安全加固:配置文件和 IP 缓存文件权限被严格设置为
600
,防止未授权访问。 - 高效稳定:缓存 Zone ID 以减少不必要的 API 请求;从多个源获取公网 IP,提高成功率。
- 管理便捷:安装后可通过
ddns
命令随时调出管理菜单,进行启动、停止、修改配置、查看日志等操作。 - 彻底卸载:提供一键卸载功能,干净地移除所有相关文件和服务。
准备工作
在运行脚本之前,请确保您已准备好以下信息:
- 一台运行 Debian 或 Ubuntu 的服务器。
- 拥有服务器的 root 权限。
- 一个在 Cloudflare 解析的域名。
- 您的 Cloudflare 账户邮箱。
- 您的 Cloudflare Global API Key。
获取方式:登录 Cloudflare -> 右上角头像 -> 我的个人资料 -> API 令牌 -> Global API Key -> 查看。
- (重要) 在 Cloudflare DNS 管理页面,提前创建好您想用于 DDNS 的 A 记录和 AAAA 记录。例如,如果您想用
v4.yourdomain.com
指向 IPv4,v6.yourdomain.com
指向 IPv6,您必须先手动创建这两个记录(IP 地址可以随便填,如1.1.1.1
)。 - (可选) 如果需要 Telegram 通知,请准备好您的 Telegram Bot Token 和 Chat ID。
使用方法
1. 下载并运行脚本
使用 SSH 连接到您的服务器,并以 root 用户身份执行以下命令:
wget -O ddns.sh https://raw.githubusercontent.com/chinggirltube/my_script/refs/heads/main/ddns.sh && bash ddns.sh
2. 首次配置
脚本第一次运行时,会引导您完成安装和配置流程:
- 自动安装依赖:脚本会检查并安装
curl
和jq
。 - 输入 Cloudflare API 信息:根据提示,输入您的 Cloudflare 账户邮箱和 Global API Key。
- 输入域名:
- 输入要用于 IPv4 DDNS 的完整域名(如
v4.yourdomain.com
)。如果不需要,直接回车跳过。 - 输入要用于 IPv6 DDNS 的完整域名(如
v6.yourdomain.com
)。如果不需要,直接回车跳过。
- 输入要用于 IPv4 DDNS 的完整域名(如
- 配置 Telegram 通知 (可选):根据提示输入您的 Bot Token 和 Chat ID。如果不需要,直接回车跳过。
配置完成后,脚本会自动设置并启动定时任务。安装成功!
后续管理
您可以随时在终端输入 ddns
命令,调出管理菜单进行后续操作。
ddns
管理菜单选项说明:
- 1. 启动 / 重启 DDNS:启动或重启后台的定时任务。
- 2. 停止 DDNS:停止后台的定时任务。
- 3. 修改要解析的域名:重新设置用于 IPv4 和 IPv6 的域名。
- 4. 修改 Cloudflare API:更新您的 Cloudflare 邮箱和 API Key。
- 5. 配置 Telegram 通知:修改或添加 Telegram Bot 配置。
- 6. 彻底卸载 DDNS:从系统中移除脚本、配置文件和定时任务。
- 7. 查看 DDNS 实时日志:实时监控 DDNS 脚本的运行情况,排查问题。
- 8. 测试 Telegram 通知:发送一条测试消息,以验证 Telegram 配置是否正确。
- 9. 立即手动执行一次DDNS检查:不等定时器触发,立即手动运行一次 IP 更新。
文件结构
脚本安装后,相关文件位于以下路径:
- 管理脚本:
/usr/bin/ddns
- 核心执行脚本:
/etc/DDNS/DDNS
- 配置文件:
/etc/DDNS/.config
(包含 API Key, 域名等敏感信息) - 日志文件:
/var/log/ddns.log
- Systemd 服务单元:
/etc/systemd/system/ddns.service
- Systemd 定时器单元:
/etc/systemd/system/ddns.timer
常见问题 (FAQ)
Q: 日志提示
无法获取 Zone ID
是为什么? A: 这通常意味着您的 Cloudflare 邮箱 或 Global API Key 不正确,或者您填写的域名(例如yourdomain.com
)并不在该 Cloudflare 账户下。请通过ddns
命令选择4
重新配置。
Q: 日志提示
无法获取 DNS Record ID
是为什么? A: 这是最常见的问题。原因是您没有在 Cloudflare 上预先创建该 DNS 记录。例如,如果您在脚本中配置了v4.mydomain.com
,您必须先登录 Cloudflare 手动为mydomain.com
添加一条名为v4
的 A 记录。
Q: 脚本多久检查一次 IP 地址? A: 默认每 5 分钟检查一次。
Q: 如何修改检查频率? A: 编辑文件
/etc/systemd/system/ddns.timer
,修改OnUnitActiveSec=5min
这一行,例如改为10min
就是 10 分钟一次。修改后执行systemctl daemon-reload
和ddns
菜单中的1
重启服务。