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服务器, 开源项目, 日志审计, 自动化证书