如何更新 Cloudflare 动态域名解析脚本适配新 API 版本

文章导读
先说结论:Cloudflare DNS API v4 接口保持稳定,所谓的“适配新版本”核心是将认证方式从全局 API 密钥升级为 API Token,脚本逻辑通常无需大规模重写。
📋 目录
  1. A 核心逻辑:认证方式升级而非接口重构
  2. B 场景一:现有开源脚本配置更新
  3. C 场景二:自写脚本代码适配
  4. D 验证与排查步骤
  5. E 常见风险与限制
  6. F 参考来源
A A

先说结论:Cloudflare DNS API v4 接口保持稳定,所谓的“适配新版本”核心是将认证方式从全局 API 密钥升级为 API Token,脚本逻辑通常无需大规模重写。

  • 适合:正在使用 Shell、Python 或 Go 编写的 DDNS 脚本,且当前使用全局 API Key 的用户
  • 先准备:Cloudflare 账户登录权限及需要更新的域名管理权
  • 验收:脚本运行日志无 403/401 报错,且 Cloudflare 控制台 DNS 记录随本地 IP 变化

核心逻辑:认证方式升级而非接口重构

Cloudflare 长期以来主要使用 API v4 版本处理 DNS 请求,接口端点并没有频繁变动。用户感知到的“需要更新”,大多是因为安全策略调整。全局 API Key 拥有账户的所有权限,一旦泄露风险极高;而 API Token 可以限制为仅操作特定域名的 DNS 记录。

Cloudflare 官方文档未指出 API v4 接口在性能上有显著差异,但使用 Token 能降低凭证泄露后的横向渗透风险。脚本逻辑通常只关心 HTTP 请求的返回状态码,只要认证通过,原有的更新逻辑一般无需改动。

场景一:现有开源脚本配置更新

如果你使用的是常见的开源脚本(如 ddns-go、acme.sh 或社区维护的 shell 脚本),通常不需要修改代码,只需在配置文件中替换凭证。以下是一个通用的 curl 测试命令,用于验证新生成的 Token 是否有权限修改 DNS:

curl -X GET "https://api.cloudflare.com/client/v4/zones" \
-H "Authorization: Bearer 你的_API_Token" \
-H "Content-Type: application/json"

如果返回 JSON 中包含 "success": true 且列出你的域名 Zone ID,说明凭证有效。

如何更新 Cloudflare 动态域名解析脚本适配新 API 版本

配置文件示例(config.json):

不同脚本配置结构略有差异,但关键字段通常如下。注意将 api_keytoken 字段更新为新生成的 API Token,而非旧的 Global API Key。

{
  "dns": {
    "provider": "cloudflare",
    "api_key": "vF9s8... (此处填写 API Token)", 
    "zone_id": "example_com",
    "domain": "ddns.example.com"
  }
}

场景二:自写脚本代码适配

如果你是自己编写的脚本,需要检查 HTTP 请求头。旧的全局密钥认证方式正在逐步被限制,建议迁移至 Bearer Token 认证。

Python 请求头变更对比:

# 旧方式 (Global API Key)
headers = {
    "X-Auth-Email": "user@example.com",
    "X-Auth-Key": "global_api_key_string",
    "Content-Type": "application/json"
}

# 新方式 (API Token)
headers = {
    "Authorization": "Bearer your_api_token_string",
    "Content-Type": "application/json"
}

Shell/Curl 变更对比:

如何更新 Cloudflare 动态域名解析脚本适配新 API 版本
# 旧方式
-H "X-Auth-Email: user@example.com" \
-H "X-Auth-Key: global_api_key_string" \

# 新方式
-H "Authorization: Bearer your_api_token_string" \

验证与排查步骤

1. 查看脚本日志:大多数 DDNS 脚本会有运行日志。观察最近一次运行记录,确认没有 HTTP 401 (Unauthorized) 或 403 (Forbidden) 错误。

2. 强制触发更新:如果本地 IP 未变化,脚本可能不会请求 API。部分脚本支持强制更新参数,或者暂时修改本地 hosts 文件模拟变化,观察脚本是否发起请求。

3. 控制台核对:登录 Cloudflare 控制台,进入 DNS 管理页面,检查 A 记录或 AAAA 记录的“上次编辑时间”是否更新,且记录值是否与当前本地公网 IP 一致。

4. 服务重启:如果脚本是以 systemd 服务或 Docker 容器运行,执行重启命令使配置生效。例如 systemctl restart <你的服务名>docker restart 容器名。建议使用 systemctl list-units | grep ddns 确认实际服务名称。

如何更新 Cloudflare 动态域名解析脚本适配新 API 版本

常见风险与限制

1. 权限范围过小:创建 Token 时如果未选中具体的 Zone(域名),或者权限只给了“查看”而非“编辑”,脚本会报错。确保权限包含 Zone:DNS:Edit

2. 代理状态混淆:DDNS 脚本通常只负责解析记录更新,不负责 CDN 代理状态。如果脚本配置中有 proxy 参数,确保理解其含义(橙色云/灰色云),避免误改导致服务中断。

3. API 速率限制:Cloudflare API 有明确的速率限制。对于 DDNS 场景,请参考 Cloudflare 官方 API 速率限制文档,通常建议更新间隔不低于 5 分钟,避免触发封禁。

4. IPv6 支持:如果网络环境支持 IPv6,确保脚本和 Token 权限同时覆盖了 AAAA 记录,否则只更新 IPv4 会导致部分用户无法访问。

参考来源

  • Cloudflare Developer Documentation, "Create an API Token", https://developers.cloudflare.com/fundamentals/api/get-started/create-token/
  • Cloudflare Developer Documentation, "DNS Records", https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-list-dns-records