跳转到内容
搜索文档

在 Magic Transit 和 CDN 中使用 BYOIP

最后更新 查看 MarkdownAgent 设置

使用 BYOIP 的 Magic Transit 客户也可以从 Cloudflare 为基于 HTTP 的应用程序提供的性能、可靠性和安全性中受益。服务绑定 (service bindings) 允许 BYOIP 客户根据每个 IP 地址有选择地将流量路由到 CDN 管道(包括 CacheWeb 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 代理请求,然后通过 GRECNI 将请求路由到源站服务器 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 层功能

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

这篇文档对您有帮助吗?