跳转到内容
搜索文档

在 CDN 和 Spectrum 中使用 BYOIP

最后更新 查看 MarkdownAgent 设置

通过 服务绑定 (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 地址的服务可能会中断。


准备您的 IP

1. 获取账户信息

  1. 登录您的 Cloudflare 账户,并获取您的 账户 ID 以及 身份验证密钥或令牌。如果使用 API 令牌,权限应包含 Account - IP Prefixes - Edit
  2. List Services(列出服务) 端点发送 GET 请求,并记下与 Spectrum 服务相关联的 id
  3. 使用 List Prefixes(列出前缀) 端点,并记下与您要配置的前缀 (cidr) 相关联的 id

此时,延续 示例,您应该获得一个类似于以下的映射:

变量 描述
{service_id} Cloudflare 内部 Spectrum 服务的 ID。

示例:969xxxxxxxx000xxx0000000x00001bf
{prefix_id} 您要配置的 CDN 前缀 (203.0.113.0/24) 的 ID。

示例:6b25xxxxxxx000xxx0000000x0000cfc
  1. 要确认您当前是否拥有 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: Write
  • IP Prefixes: Read
List Service Bindingsbash
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"

2. 创建服务绑定

  1. 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
Create Service Bindingbash
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(列出服务绑定) 端点检查服务绑定的状态。

3. 验证所有服务绑定

在传播时间(4 到 6 个小时)之后,List Service Bindings(列出服务绑定) 端点应该返回该前缀中包含的所有服务绑定 —— 在本例中为 CDN 和 Spectrum。

Required API token permissions

At least one of the following token permissions is required:
  • IP Prefixes: Write
  • IP Prefixes: Read
List Service Bindingsbash
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"

设置您的 Cloudflare 服务

CDN

如果您已经将 BYOIP 与 CDN 配合使用,您可以跳过此步骤。然而,如果您正在使用本指南将 Spectrum 前缀中的几个 IP 升级到 CDN,请参考以下关于地址映射DNS 记录的章节。

地址映射 (Address maps)

使用地址映射 (address maps)指定当记录被代理 (proxied)时,Cloudflare 在 DNS 响应中应使用哪些 IP。

您可以选择两种不同的范围:

  • 账户级 (Account-level):对一个账户内所有区域 (Zones) 的所有代理 DNS 记录使用地址映射。
  • 区域级 (Zone-level):对一个区域内的所有代理 DNS 记录使用地址映射。
  1. 登录 Cloudflare 仪表板,前往 **Address Maps(地址映射)**页面。

    Go to Address maps ↗
  2. 选择 Create an address map(创建地址映射)

  3. 选择地址映射的范围。

  4. 添加您想要映射的区域和 IP 地址。

  5. 为您的地址映射命名。

  6. 检查信息并选择 Save and Deploy(保存并部署)

使用 Create Address Map 端点。

确保您拥有正确的密钥/令牌以及相应权限。

DNS 记录 (DNS records)

虽然 DNS 记录代理状态和地址映射将决定 Cloudflare 权威 DNS 如何响应针对您主机名的请求,但在 A/AAAA 记录中指定的 IP 地址将决定 Cloudflare 如何到达已配置的源站

要在仪表板中创建 DNS 记录:

  1. 登录 Cloudflare 仪表板,前往 **DNS Records(DNS 记录)**页面。

    Go to Records ↗
  2. 选择 Add record(添加记录)

  3. 选择地址(A/AAAA记录类型

  4. 填写所需字段,将 **Proxy status(代理状态)**设置为 proxied(已代理)

  5. 选择 Save(保存)

要使用 API 创建记录,请发送 POST 请求。有关字段定义,请在请求体规范中选择一种记录类型。

示例

类型 名称 IP 地址 代理状态 TTL
A www 203.0.113.150 已代理 自动

此时,如果区域 example.com 的地址映射指定 Cloudflare 应对已代理的记录使用 203.0.113.100,并且上述记录存在于同一区域中,您可以预期以下情况:

  1. Cloudflare 针对 www.example.com 的 DNS 请求,响应 203.0.113.100
  2. Cloudflare 通过 CDN 代理请求,然后将请求路由到源站服务器 203.0.113.150
  3. 当 HTTP 响应从 Cloudflare 网络出站 (egress) 返回客户端时,响应的源 IP 地址变为 203.0.113.100(即 HTTP 请求最初落地处的 IP 地址)。

示例

假设 203.0.113.100 也是源站 IP,则 DNS 记录应如下所示:

类型 名称 IP 地址 代理状态 TTL
A www 203.0.113.100 已代理 自动

Spectrum

仅能通过 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
Create Spectrum application using a name for the originbash
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"
		}
	]'

(可选)添加第 7 层功能

根据您的需求利用其他功能。例如:

Footnotes

  1. 基于第 7 层 HTTP

  2. 带有自定义端口的第 4 层或第 7 层 HTTP

这篇文档对您有帮助吗?