# Debian/Ubuntu 全自动 Cloudflare DDNS 一键脚本 这是一个功能强大且高度优化的 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` 命令随时调出管理菜单,进行启动、停止、修改配置、查看日志等操作。 - **彻底卸载**:提供一键卸载功能,干净地移除所有相关文件和服务。 ## 准备工作 在运行脚本之前,请确保您已准备好以下信息: 1. 一台运行 **Debian 或 Ubuntu** 的服务器。 2. 拥有服务器的 **root** 权限。 3. 一个在 **Cloudflare** 解析的域名。 4. 您的 **Cloudflare 账户邮箱**。 5. 您的 **Cloudflare Global API Key**。 > **获取方式**:登录 Cloudflare -> 右上角头像 -> 我的个人资料 -> API 令牌 -> Global API Key -> 查看。 6. **(重要)** 在 Cloudflare DNS 管理页面,**提前创建**好您想用于 DDNS 的 A 记录和 AAAA 记录。例如,如果您想用 `v4.yourdomain.com` 指向 IPv4,`v6.yourdomain.com` 指向 IPv6,您必须先手动创建这两个记录(IP 地址可以随便填,如 `1.1.1.1`)。 7. **(可选)** 如果需要 Telegram 通知,请准备好您的 **Telegram Bot Token** 和 **Chat ID**。 ## 使用方法 ### 1. 下载并运行脚本 使用 SSH 连接到您的服务器,并以 root 用户身份执行以下命令: ```bash wget -O ddns.sh https://raw.githubusercontent.com/chinggirltube/my_script/refs/heads/main/ddns.sh && bash ddns.sh ``` ### 2. 首次配置 脚本第一次运行时,会引导您完成安装和配置流程: 1. **自动安装依赖**:脚本会检查并安装 `curl` 和 `jq`。 2. **输入 Cloudflare API 信息**:根据提示,输入您的 Cloudflare 账户邮箱和 Global API Key。 3. **输入域名**: - 输入要用于 IPv4 DDNS 的完整域名(如 `v4.yourdomain.com`)。如果不需要,直接回车跳过。 - 输入要用于 IPv6 DDNS 的完整域名(如 `v6.yourdomain.com`)。如果不需要,直接回车跳过。 4. **配置 Telegram 通知 (可选)**:根据提示输入您的 Bot Token 和 Chat ID。如果不需要,直接回车跳过。 配置完成后,脚本会自动设置并启动定时任务。安装成功! ## 后续管理 您可以随时在终端输入 `ddns` 命令,调出管理菜单进行后续操作。 ```bash 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` 重启服务。