使用 BYOIP 的 Magic Transit 客户也可以从 Cloudflare 为基于 HTTP 的应用程序提供的性能、可靠性和安全性中受益。服务绑定 (service bindings) 允许 BYOIP 客户根据每个 IP 地址有选择地将流量路由到 CDN 管道(包括 Cache、Web Application Firewall (WAF) 等)。
本指南介绍了如何使用 Cloudflare API 配置带有 CDN 的 Magic Transit。也可以定义服务绑定来选择性地将流量路由到 Spectrum 管道。有关可能配置的完整列表及其他可用指南,请参阅范围。
需要特别注意的是,路由到 CDN 管道的流量在第 3 层和第 4 层受到 CDN 管道原生固有 DDoS 防护能力的保护。
-
确保您的合同根据自身需求包含 CDN。如果在执行以下步骤时发现任何与订阅相关的问题,请联系您的客户团队。
-
规划将使用哪些 IP:
Cloudflare 强烈建议通过聚合的 CIDR 块实现服务绑定,因为这比为不连续的 CIDR 块添加离散绑定更有效率。
示例
Magic Transit 保护的前缀:
203.0.113.0/24要升级到 CDN 的 IP:
203.0.113.16
203.0.113.17
203.0.113.18
203.0.113.19
203.0.113.20
203.0.113.21
203.0.113.22
203.0.113.23为
203.0.113.16添加一个带有/29网络掩码的离散 CDN 服务绑定。一旦创建(or 删除)服务绑定,将需要 4 到 6 个小时 在 Cloudflare 的全球网络中进行传播。在此窗口期内,范围内 IP 地址的服务可能会中断。
- 登录您的 Cloudflare 账户,并获取您的 账户 ID 以及 身份验证密钥或令牌。如果使用 API 令牌,权限应包含
Account-IP Prefixes-Edit。 - 向 List Services(列出服务) 端点发送
GET请求,并记下与 CDN 服务相关联的id。 - 使用 List Prefixes(列出前缀) 端点,并记下与您要配置的前缀 (
cidr) 相关联的id。
此时,延续 示例,您应该获得一个类似于以下的映射:
| 变量 | 描述 |
|---|---|
{service_id} |
Cloudflare 内部 CDN 服务的 ID。 示例: 969xxxxxxxx000xxx0000000x00001bf |
{prefix_id} |
您要配置的 Magic Transit 前缀 (203.0.113.0/24) 的 ID。示例: 6b25xxxxxxx000xxx0000000x0000cfc |
- 要确认您当前是否拥有 Magic Transit 服务绑定且该绑定覆盖了您的整个前缀,请向 List Service Bindings(列出服务绑定) 端点发送
GET请求。将 URI 路径中的{prefix_id}替换为步骤中获得的实际前缀 ID。
Required API token permissions
At least one of the following token permissions is required:IP Prefixes: WriteIP Prefixes: Read
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/addressing/prefixes/$PREFIX_ID/bindings" \
--request GET \
--header "X-Auth-Email: $CLOUDFLARE_EMAIL" \
--header "X-Auth-Key: $CLOUDFLARE_API_KEY"- 向 Create service binding(创建服务绑定) 端点发送
POST请求,指明您想要绑定到 CDN 的 IP 地址。根据需要指定相应的网络掩码。
延续上述示例,203.0.113.100/32 指定了一个在 Magic Transit 前缀 203.0.113.0/24 范围内的 IP 地址。
将 URI 中的 {prefix_id} 替换为前面步骤中的前缀 ID。在请求体中,cidr 值应对应于您配置用于 CDN 的 IP 地址或子网。
Required API token permissions
At least one of the following token permissions is required:IP Prefixes: Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/addressing/prefixes/$PREFIX_ID/bindings" \
--request POST \
--header "X-Auth-Email: $CLOUDFLARE_EMAIL" \
--header "X-Auth-Key: $CLOUDFLARE_API_KEY" \
--json '{
"cidr": "203.0.113.100/32",
"service_id": "<SERVICE_ID>"
}'在响应体中,初始预配状态应为 provisioning。
{
"errors": [],
"messages": [],
"success": true,
"result": {
"cidr": "203.0.113.100/32",
"id": "<SERVICE_BINDING_ID>",
"provisioning": {
"state": "provisioning"
},
"service_id": "<SERVICE_ID>",
"service_name": "<SERVICE_NAME>"
}
}您可以定期使用 List Service Bindings(列出服务绑定) 端点检查服务绑定的状态。
配置好 IP 的 CDN 服务后,您可以使用地址映射 (address maps)指定当记录被代理 (proxied)时,Cloudflare 在 DNS 响应中应使用哪些 IP。
您可以选择两种不同的范围:
- 账户级 (Account-level):对一个账户内所有区域 (Zones) 的所有代理 DNS 记录使用地址映射。
- 区域级 (Zone-level):对一个区域内的所有代理 DNS 记录使用地址映射。
-
登录 Cloudflare 仪表板,前往 **Address Maps(地址映射)**页面。
Go to Address maps ↗ -
选择 Create an address map(创建地址映射)。
-
选择地址映射的范围。
-
添加您想要映射的区域和 IP 地址。
-
为您的地址映射命名。
-
检查信息并选择 Save and Deploy(保存并部署)。
使用 Create Address Map 端点。
确保您拥有正确的密钥/令牌以及相应权限。
要在仪表板中创建 DNS 记录:
-
登录 Cloudflare 仪表板,前往 **DNS Records(DNS 记录)**页面。
Go to Records ↗ -
选择 Add record(添加记录)。
-
选择地址(
A/AAAA)记录类型。 -
填写所需字段,将 **Proxy status(代理状态)**设置为 proxied(已代理)。
-
选择 Save(保存)。
要使用 API 创建记录,请发送 POST 请求。有关字段定义,请在请求体规范中选择一种记录类型。
虽然 DNS 记录代理状态和地址映射将决定 Cloudflare 权威 DNS 如何响应针对您主机名的请求,但在 A/AAAA 记录中指定的 IP 地址将决定 Cloudflare 如何到达已配置的源站。
示例
| 类型 | 名称 | IP 地址 | 代理状态 | TTL |
|---|---|---|---|---|
A |
www |
203.0.113.150 |
已代理 |
自动 |
此时,如果区域 example.com 的地址映射指定 Cloudflare 应对已代理的记录使用 203.0.113.100,并且上述记录存在于同一区域中,您可以预期以下情况:
-
Cloudflare 针对 DNS 请求响应
203.0.113.100。 -
Cloudflare 通过 CDN 代理请求,然后通过 GRE 或 CNI 将请求路由到源站服务器
203.0.113.150(该服务器位于 Magic Transit 保护的前缀范围内)。 -
根据 Magic Transit 是使用直接服务器返回 (direct server return) 模型还是使用 Magic Transit 出站 (Magic Transit egress)来部署的,源站服务器向 Cloudflare 返回响应的方式为以下之一:
- 在 Magic Transit 直接服务器返回模型中,直接通过互联网返回响应。
- 在 Magic Transit 出站模型中,通过 Magic GRE 隧道返回响应。
-
当 HTTP 响应从 Cloudflare 网络出站 (egress) 返回客户端时,响应的源 IP 地址变为
203.0.113.100(即 HTTP 请求最初落地处的 IP 地址)。
示例
假设 203.0.113.100 也是源站 IP,则 DNS 记录应如下所示:
| 类型 | 名称 | IP 地址 | 代理状态 | TTL |
|---|---|---|---|---|
A |
www |
203.0.113.100 |
已代理 |
自动 |
根据您的需求利用其他功能。例如: