# Cloudflare DNS 配置指南 ## 概述 Cloudflare 是全球领先的 CDN 和网络安全服务提供商,提供权威 DNS 解析服务,支持动态 DNS 记录的创建与更新。本 DDNS 项目通过 Cloudflare API 进行 DNS 记录的自动管理。 官网链接: - 官方网站: - 服务商控制台: ## 认证信息 ### 1. API Token 认证(推荐) API Token 方式更安全,支持精细化权限控制,是 Cloudflare 推荐的集成方法。 #### 获取认证信息 1. 登录 [Cloudflare 控制台](https://dash.cloudflare.com/) 2. 进入"我的个人资料" > "API 令牌"或访问 3. 点击"创建令牌",选择"自定义令牌"模板 4. 配置权限: - **区域:读取** (Zone:Read) - **DNS:编辑** (Zone:DNS:Edit) 5. 选择要管理的域名区域 6. 复制生成的 **API Token**,令牌只显示一次,请妥善保存 ```jsonc { "dns": "cloudflare", "token": "your_cloudflare_api_token" // Cloudflare API Token, ID 留空或者不填 } ``` ### 2. Global API Key 认证(不推荐) 使用 Cloudflare 账户邮箱和 Global API Key,权限过大,**安全性较低**,仅建议特殊场景使用。 #### 获取 Global API Key 1. 登录 [Cloudflare 控制台](https://dash.cloudflare.com/) 2. 进入"我的个人资料" > "API 令牌" 3. 查看"Global API Key"并复制 ```jsonc { "dns": "cloudflare", "id": "your-email@example.com", // Cloudflare 账户邮箱 "token": "your_global_api_key" // Cloudflare Global API Key } ``` ## 权限要求 确保使用的 Cloudflare 账号具有以下权限: ### API Token 权限 - **Zone:Read**:区域读取权限,用于列出和获取域名区域信息 - **Zone:DNS:Edit**:DNS 编辑权限,用于创建、更新和删除 DNS 记录 ### Global API Key 权限 - **完全访问权限**:拥有账户下所有资源的完全控制权限 可以在 [Cloudflare API 令牌管理](https://dash.cloudflare.com/profile/api-tokens) 中查看和配置权限。 ## 完整配置示例 ```jsonc { "$schema": "https://ddns.newfuture.cc/schema/v4.1.json", // 格式验证 "dns": "cloudflare", // 当前服务商 "token": "your_cloudflare_api_token", // Cloudflare API Token "index4": ["url:http://api.ipify.org", "public"], // IPv4地址来源 "index6": "public", // IPv6地址来源 "ipv4": ["ddns.newfuture.cc"], // IPv4 域名 "ipv6": ["ddns.newfuture.cc", "ipv6.ddns.newfuture.cc"], // IPv6 域名 "ttl": 300, // DNS记录TTL(秒) "proxied": false // 是否启用 Cloudflare 代理 } ``` ### 参数说明 | 参数 | 说明 | 类型 | 取值范围/选项 | 默认值 | 参数类型 | | :-----: | :----------- | :------------- | :--------------------------------- | :-------- | :--------- | | dns | 服务商标识 | 字符串 | `cloudflare` | 无 | 服务商参数 | | id | 认证邮箱 | 字符串 | Cloudflare 账户邮箱(仅 Global API Key) | 无 | 服务商参数 | | token | 认证密钥 | 字符串 | Cloudflare API Token 或 Global API Key | 无 | 服务商参数 | | index4 | IPv4 来源 | 数组 | [参考配置](../config/json.md#ipv4-ipv6) | `default` | 公用配置 | | index6 | IPv6 来源 | 数组 | [参考配置](../config/json.md#ipv4-ipv6) | `default` | 公用配置 | | ipv4 | IPv4 域名 | 数组 | 域名列表 | 无 | 公用配置 | | ipv6 | IPv6 域名 | 数组 | 域名列表 | 无 | 公用配置 | | ttl | TTL 时间 | 整数(秒) | [参考下方](#ttl) | 300/auto | 服务商参数 | | proxied | 代理状态 | 布尔 | `true`、`false` | 无 | 服务商参数 | | proxy | 代理设置 | 数组 | [参考配置](../config/json.md#proxy) | 无 | 公用网络 | | ssl | SSL 验证方式 | 布尔/字符串 | `"auto"`、`true`、`false` | `auto` | 公用网络 | | cache | 缓存设置 | 布尔/字符串 | `true`、`false`、`filepath` | `true` | 公用配置 | | log | 日志配置 | 对象 | [参考配置](../config/json.md#log) | 无 | 公用配置 | > **参数类型说明**: > > - **公用配置**:所有支持的DNS服务商均适用的标准DNS配置参数 > - **公用网络**:所有支持的DNS服务商均适用的网络设置参数 > - **服务商参数**:当前服务商支持, 值与当前服务商相关 ### proxied `proxied` 参数控制 DNS 记录是否通过 Cloudflare 代理。这是 Cloudflare 特有的功能,用于启用或禁用其 CDN 和安全保护功能。 #### 查询记录匹配逻辑 当配置了 `proxied` 参数时,DDNS 会按照以下优先级查询现有的 DNS 记录: 1. **优先使用 `proxied` 过滤**:首先尝试查询匹配指定 `proxied` 状态的记录 2. **回退到无过滤查询**:如果带有 `proxied` 过滤的查询没有找到记录,将自动重试不带 `proxied` 过滤的查询 这种回退机制确保了以下场景的正确处理: - **场景1**: 配置文件从 `"proxied": true` 改为 `"proxied": false` - 即使原记录是 `proxied=true`,系统也能找到并更新它 - **场景2**: 配置文件从 `"proxied": false` 改为 `"proxied": true` - 即使原记录是 `proxied=false`,系统也能找到并更新它 - **场景3**: 配置文件新增 `"proxied": true/false` 参数 - 能够找到不带 `proxied` 过滤创建的记录并进行更新 > **注意**:如果查询时带 `proxied` 过滤找到了记录,则不会执行回退查询,直接使用匹配的记录。 ### ttl `ttl` 参数指定 DNS 记录的生存时间(TTL),单位为秒。Cloudflare 的 TTL 设置根据记录是否启用代理而有所不同。 #### 代理记录 (Proxied Records) 所有代理记录的 TTL 默认为 **Auto**,固定设置为 **300 秒**(5 分钟),此值**无法编辑**。 由于只有用于 IP 地址解析的记录才能被代理,此设置确保分配的任播 IP 地址的潜在变化能够快速生效,因为递归解析器不会将其缓存超过 300 秒。 > **注意**:实际体验记录变化可能需要超过 5 分钟,因为本地 DNS 缓存可能需要更长时间才能更新。 #### 非代理记录 (Unproxied Records) 对于仅 DNS 记录,您可以选择以下 TTL 范围: | 套餐类型 | 支持的 TTL 范围(秒) | 说明 | | ------------ | :-------------------: | :--- | | Free/Pro/Business | 60 - 86400 | 最低 TTL 为 1 分钟 | | Enterprise | 30 - 86400 | 最低 TTL 为 30 秒 | > 参考:[Cloudflare TTL 说明](https://developers.cloudflare.com/dns/manage-dns-records/reference/ttl/) ## 故障排除 ### 调试模式 启用调试日志查看详细信息: ```sh ddns -c config.json --debug ``` ### 常见问题 - **Invalid API token**:检查 API Token 是否正确,确认权限配置 - **Zone not found**:确保域名已添加到 Cloudflare 账号,域名处于活跃状态 - **Record creation failed**:检查记录格式和 TTL 值,确认权限设置 - **Rate limit exceeded**:API 调用频率超限,降低请求频率 ### 错误处理与缓存 Cloudflare 请求只有在 HTTP 状态为 2xx 且 API 返回 `success: true` 时才视为成功。 最终收到 HTTP 429 等错误状态,或 API 返回 `success: false`、无效响应时,本次域名更新会失败,不会将待更新的 IP 写入成功缓存,后续同步仍会重试。 区域或记录查询失败会终止当前域名的处理,不会被当作“记录不存在”而创建新记录;成功查询返回空记录列表时,仍会正常进入创建流程。 ## 支持与资源 - [Cloudflare 开发者文档](https://developers.cloudflare.com/) - [Cloudflare API 参考](https://developers.cloudflare.com/api/) - [Cloudflare 控制台](https://dash.cloudflare.com/) - [Cloudflare 社区支持](https://community.cloudflare.com/) > **建议**:推荐使用 API Token 方式,支持精细化权限控制,提升账号安全性,避免使用 Global API Key。