先说结论: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,说明凭证有效。
配置文件示例(config.json):
不同脚本配置结构略有差异,但关键字段通常如下。注意将 api_key 或 token 字段更新为新生成的 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 变更对比:
# 旧方式
-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 确认实际服务名称。
常见风险与限制
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