caddy-dns/cloudflare

GitHub: caddy-dns/cloudflare

该项目是 Caddy 的 Cloudflare DNS 模块,通过调用 Cloudflare API 自动管理 DNS 记录,从而支持 ACME DNS challenge 实现证书的自动化签发。

Stars: 938 | Forks: 113

# Caddy 的 Cloudflare 模块 此包包含一个用于 [Caddy](https://github.com/caddyserver/caddy) 的 DNS provider 模块。它可用于管理 Cloudflare 账户的 DNS 记录。 ## Caddy 模块名称 ``` dns.providers.cloudflare ``` ## 配置 此模块为用户提供了两种配置 API token 的方式。 1. 分离的 Zone Token 和 DNS Token(已弃用) - **Zone Token:** 对你正在使用 Caddy 管理的域拥有 `Zone.Zone:Read` 权限 - **DNS Token:** 对你正在使用 Caddy 管理的域拥有 `Zone.DNS:Edit` 权限 2. 单个 API Token(推荐) - **API Token:** 对你正在使用 Caddy 管理的域拥有 `Zone.Zone:Read` 和 `Zone.DNS:Edit` 权限 **注意:** 已弃用的分离 token 支持仅为向后兼容而保留,并可能在此模块的未来版本中被移除。 ### JSON 示例 要将此模块用于 ACME DNS challenge,请按如下方式[在你的 Caddy JSON 中配置 ACME issuer](https://caddyserver.com/docs/json/apps/tls/automation/policies/issuers/acme/): ``` { "module": "acme", "challenges": { "dns": { "provider": { "name": "cloudflare", "api_token": "{env.CF_API_TOKEN}" } } } } ``` ### Caddyfile 示例 #### 双密钥方式 ``` tls { dns cloudflare { zone_token {env.CF_ZONE_TOKEN} api_token {env.CF_API_TOKEN} } } ``` #### 单密钥方式 ``` tls { dns cloudflare {env.CF_API_TOKEN} } ``` 如果你希望直接将认证 token 放在配置中而不是使用环境变量,你可以将 `{env.CF_*}` 占位符替换为实际的认证 token,但这会降低安全性。 ## 身份验证 有关凭证的重要信息,请参阅 [libdns 包中相关的 README](https://github.com/libdns/cloudflare)。 **注意**:如果你是从 Caddy v1 迁移过来,你需要将使用的 Cloudflare API Key 更改为具有特定权限范围(scoped)的 API Token。请查看上方链接了解更多信息。 ## 故障排除 ### 错误:`Invalid request headers` 如果你通过 ENV 变量提供 API token,而在运行 Caddy 时该变量由于疏忽未被设置或不可用,你将会收到来自 Cloudflare 的此错误。 请仔细检查 Caddy 是否有权访问有效的 CF API token。 ### 错误:`timed out waiting for record to fully propagate` 某些环境在从 Cloudflare 查询 `_acme-challenge` TXT 记录时可能会遇到问题。请在 Cloudflare dashboard 中验证临时记录是否正在被创建。 如果记录确实存在,则你的 DNS resolver 可能在记录生效之前缓存了先前的响应。你可以将 Caddy 配置为使用备用 DNS resolver,例如 [Cloudflare 官方的 `1.1.1.1`](https://www.cloudflare.com/en-gb/learning/dns/what-is-1.1.1.1/)。 在 [`tls` 指令](https://caddyserver.com/docs/caddyfile/directives/tls) 中添加自定义的 `resolver`: ``` tls { dns cloudflare {env.CF_API_TOKEN} resolvers 1.1.1.1 } ``` 或者在使用 Caddy JSON 时,将其添加到 `acme` 模块中:[`challenges.dns.provider.resolvers: ["1.1.1.1"]`](https://caddyserver.com/docs/json/apps/tls/automation/policies/issuer/acme/challenges/dns/resolvers/)。 ### 错误:`expected 1 zone, got 0 for ...` 为了使 DNS challenge 成功,你的域名必须能够被公共 DNS 服务器解析。例如,如果你的域名恰好定义在 `/etc/hosts` 中,或者正在由本地 DNS 服务器解析,则 challenge 将失败并显示此错误。 可以通过更改运行 Caddy 的系统的 DNS 配置,或者在 [`tls` 指令](https://caddyserver.com/docs/caddyfile/directives/tls) 中添加自定义的 `resolver` 来解决此问题: ``` tls { dns cloudflare {env.CF_API_TOKEN} resolvers 1.1.1.1 } ```
标签:ACME, Caddy, Cloudflare, DNS解析, EVTX分析, MITRE ATT&CK, Web服务器, 开源项目, 日志审计, 自动化证书