通过 服务绑定 (service bindings),使用 BYOIP 的 CDN1 客户可以将他们导入到 Cloudflare 的相同前缀,用于根据每个 IP 地址有选择地将流量路由到 Spectrum2,反之亦然。这意味着:
-
您可以将 CDN 前缀内的单个 IP 升级为 Spectrum IP。例如,如果您有一个 CDN 前缀
203.0.113.0/24,您可以将203.0.113.1升级到 Spectrum。 -
您可以将 Spectrum 前缀内的单个 IP 升级为 CDN IP。例如,如果您有一个 Spectrum 前缀
203.0.113.0/24,您可以将203.0.113.1升级到 CDN。
本指南将使用第一个示例,并以导入到 CDN 的前缀为例,其中有几个 IP 升级到 Spectrum。
Cloudflare 强烈建议通过聚合的 CIDR 块实现服务绑定,因为这比为不连续的 CIDR 块添加离散绑定更有效率。
示例
CDN 保护的前缀: 203.0.113.0/24
要升级到 Spectrum 的 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 网络掩码的离散 Spectrum 服务绑定。
一旦创建(or 删除)服务绑定,将需要 4 到 6 个小时 在 Cloudflare 的全球网络中进行传播。在此窗口期内,范围内 IP 地址的服务可能会中断。
- 登录您的 Cloudflare 账户,并获取您的 账户 ID 以及 身份验证密钥或令牌。如果使用 API 令牌,权限应包含
Account-IP Prefixes-Edit。 - 向 List Services(列出服务) 端点发送
GET请求,并记下与 Spectrum 服务相关联的id。 - 使用 List Prefixes(列出前缀) 端点,并记下与您要配置的前缀 (
cidr) 相关联的id。
此时,延续 示例,您应该获得一个类似于以下的映射:
| 变量 | 描述 |
|---|---|
{service_id} |
Cloudflare 内部 Spectrum 服务的 ID。 示例: 969xxxxxxxx000xxx0000000x00001bf |
{prefix_id} |
您要配置的 CDN 前缀 (203.0.113.0/24) 的 ID。示例: 6b25xxxxxxx000xxx0000000x0000cfc |
- 要确认您当前是否拥有 CDN 服务绑定且该绑定覆盖了您的整个前缀,请向 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请求,指明您想要绑定到 Spectrum 的 IP 地址。根据需要指定相应的网络掩码。
延续上述示例,203.0.113.100/32 指定了一个在 CDN 前缀 203.0.113.0/24 范围内的 IP 地址。
将 URI 中的 {prefix_id} 替换为前面步骤中的前缀 ID。在请求体中,cidr 值应对应于您配置用于 Spectrum 的 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(列出服务绑定) 端点检查服务绑定的状态。
在传播时间(4 到 6 个小时)之后,List Service Bindings(列出服务绑定) 端点应该返回该前缀中包含的所有服务绑定 —— 在本例中为 CDN 和 Spectrum。
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"如果您已经将 BYOIP 与 CDN 配合使用,您可以跳过此步骤。然而,如果您正在使用本指南将 Spectrum 前缀中的几个 IP 升级到 CDN,请参考以下关于地址映射和DNS 记录的章节。
使用地址映射 (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 如何响应针对您主机名的请求,但在 A/AAAA 记录中指定的 IP 地址将决定 Cloudflare 如何到达已配置的源站。
要在仪表板中创建 DNS 记录:
-
登录 Cloudflare 仪表板,前往 **DNS Records(DNS 记录)**页面。
Go to Records ↗ -
选择 Add record(添加记录)。
-
选择地址(
A/AAAA)记录类型。 -
填写所需字段,将 **Proxy status(代理状态)**设置为 proxied(已代理)。
-
选择 Save(保存)。
要使用 API 创建记录,请发送 POST 请求。有关字段定义,请在请求体规范中选择一种记录类型。
示例
| 类型 | 名称 | IP 地址 | 代理状态 | TTL |
|---|---|---|---|---|
A |
www |
203.0.113.150 |
已代理 |
自动 |
此时,如果区域 example.com 的地址映射指定 Cloudflare 应对已代理的记录使用 203.0.113.100,并且上述记录存在于同一区域中,您可以预期以下情况:
- Cloudflare 针对
www.example.com的 DNS 请求,响应203.0.113.100。 - Cloudflare 通过 CDN 代理请求,然后将请求路由到源站服务器
203.0.113.150。 - 当 HTTP 响应从 Cloudflare 网络出站 (egress) 返回客户端时,响应的源 IP 地址变为
203.0.113.100(即 HTTP 请求最初落地处的 IP 地址)。
示例
假设 203.0.113.100 也是源站 IP,则 DNS 记录应如下所示:
| 类型 | 名称 | IP 地址 | 代理状态 | TTL |
|---|---|---|---|---|
A |
www |
203.0.113.100 |
已代理 |
自动 |
仅能通过 Cloudflare API 将 Spectrum 配置为使用您自己的 IP 地址。
origin_direct 字段接收源站 IP 地址,而 edge_ips 允许您定义 Cloudflare 应该使用 BYOIP 前缀中的哪个 IP 地址来处理您的 Spectrum 应用程序的请求。
Required API token permissions
At least one of the following token permissions is required:Zone Settings Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/spectrum/apps" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '[
{
"protocol": "tcp/22",
"dns": {
"type": "CNAME",
"name": "ssh.example.com"
},
"origin_direct": [
"tcp://192.0.2.1:22"
],
"proxy_protocol": "off",
"ip_firewall": true,
"tls": "full",
"edge_ips": {
"type": "static",
"ips": [
"203.0.113.18"
]
},
"traffic_type": "direct"
}
]'根据您的需求利用其他功能。例如: