跳转到内容
搜索文档

在 Magic Transit 和 CDN 中使用 BYOIP

最后更新 查看 MarkdownAgent 设置

使用 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 地址的服务可能会中断。

1. 获取账户信息

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

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

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

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

示例:6b25xxxxxxx000xxx0000000x0000cfc
  1. 要确认您当前是否拥有 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: 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 请求,指明您想要绑定到 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
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. 创建地址映射 (Address maps)

配置好 IP 的 CDN 服务后,您可以使用地址映射 (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 端点。

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

4. 创建 DNS 记录

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

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

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

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

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

  5. 选择 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,并且上述记录存在于同一区域中,您可以预期以下情况:

  1. Cloudflare 针对 DNS 请求响应 203.0.113.100。

  2. Cloudflare 通过 CDN 代理请求,然后通过 GRE 或 CNI 将请求路由到源站服务器 203.0.113.150(该服务器位于 Magic Transit 保护的前缀范围内)。

  3. 根据 Magic Transit 是使用直接服务器返回 (direct server return) 模型还是使用 Magic Transit 出站 (Magic Transit egress)来部署的,源站服务器向 Cloudflare 返回响应的方式为以下之一:

    • 在 Magic Transit 直接服务器返回模型中,直接通过互联网返回响应。
    • 在 Magic Transit 出站模型中,通过 Magic GRE 隧道返回响应。
  4. 当 HTTP 响应从 Cloudflare 网络出站 (egress) 返回客户端时,响应的源 IP 地址变为 203.0.113.100(即 HTTP 请求最初落地处的 IP 地址)。

示例

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

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

5. (可选)添加第 7 层功能

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

这篇文档对您有帮助吗?