跳转到内容
搜索文档

宣告前缀

最后更新 查看 MarkdownAgent 设置

接入前缀

您可以将自己的公共 IP 地址带到 Cloudflare,以便与 Magic Transit 一起使用。这也被称为自带 IP (BYOIP)。这个过程涉及两种不同类型的前缀:

  1. IP 前缀:您带到 Cloudflare 的每个 IP 地址块都需要一个 IP 前缀条目。IP 前缀包括允许 Cloudflare 宣告网络或其子网的权限 (授权书 (LOA))。您还可以定义可选的 自治系统编号 (ASN),以便包含在我们宣告的 AS 路径中。
  2. BGP 前缀:这些前缀控制 Cloudflare 从其全球网络宣告哪些前缀。默认情况下,每个 IP 前缀都有一个匹配的 BGP 前缀。您可以配置额外的、更具体的 BGP 前缀(IP 前缀的子网),最大前缀长度为 /24

IP 前缀

Cloudflare 根据您定义的 BGP 前缀数量来衡量 Magic Transit 前缀数量。每个前缀单独计费,即使它们重叠。例如,一个 /16 和其中的任何 /24 都会单独计算。接入较大的聚合前缀不会自动将其较小的子网包含在宣告或计费中。

接受的前缀大小没有计费限制。但是,只能接受最大为 /24 的前缀用于接入,因为更长的前缀(如 /25/26)在全球不可路由。

提供您计划接入的所有 IP 前缀,以及您将用来宣告它们的 ASN。在指定前缀时,请遵守以下准则:

  • 前缀必须至少包含 256 个 IP 地址(在 CIDR(无类别域间路由)表示法中为 /24)。如果不符合 /24 前缀长度要求,请参阅 使用 Cloudflare IP
  • Internet Routing Registry 条目和 LOA 必须与您提交给 Cloudflare 的前缀和始发前缀匹配。
  • 当使用连续前缀时,尽可能指定聚合前缀。
  • 当使用路由源授权 (ROA) 为 资源公钥基础设施 (RPKI) 签署路由时,前缀和始发 ASN 必须与接入提交匹配。
  • 如果您没有 ASN,您可以使用 Cloudflare 客户 ASN (AS13335)。

Cloudflare ASN 与您自己的 ASN

作为 IP 前缀接入过程的一部分,您需要决定 Cloudflare 将使用哪个 ASN 来宣告您的前缀。如果您提供自己的 ASN,Cloudflare 会将主 Cloudflare ASN (AS13335) 添加到 BGP AS_PATH 的前面。例如,如果您的 ASN 是 AS64496,直接与 Cloudflare 对等互连的任何人看到的路径为 13335 64496

如果您没有 ASN 或不想将您的 ASN 带到 Cloudflare,您可以使用 Cloudflare 客户 ASN (AS13335)。

BGP 前缀

BGP 前缀代表 Cloudflare 将从 Cloudflare 的全球网络通过任播宣告的前缀。默认情况下,始终至少有一个与接入的 IP 前缀相同的 BGP 前缀。

例如,如果您向 Magic Transit 接入一个 /20 IP 前缀,它只能被宣告为 /20,因为只有默认的 /20 BGP 前缀。该 /20 范围内较小的子前缀(如 /24)除非被配置为单独的 BGP 前缀,否则无法单独宣告。

BGP 前缀宣告控制方法

Cloudflare 提供多种机制来控制按需前缀的宣告和撤回。每种方法服务于不同的部署场景:

  • Addressing API:通过 API 调用手动控制前缀宣告。请参阅 宣告或撤回 BGP 前缀
  • 与路由反射器的 BGP 对等互连:通过到 Cloudflare 全球分布的路由反射器的 BGP 会话控制宣告,可以通过 Internet 或通过使用 Dataplane v1 的 CNI 连接。如果您需要此选项,请联系您的 Cloudflare 客户团队。请参阅 使用 Cloudflare 路由反射器的 BGP 控制
  • Network Flow:根据您网络中观察到的用户定义的流量阈值自动宣告前缀。请参阅 Network Flow(前身为 Magic Network Monitoring)。
  • 与 Magic Transit Virtual Network 路由表的 BGP 对等互连:根据通过使用 Dataplane v2 的 CNI 学习到的 BGP 路由,或者 GRE 和 IPsec 隧道自动控制前缀宣告(测试版,需要 Unified Routing)。请参阅 对 Magic Transit Virtual Network 路由表的 BGP 控制

管理 BGP 前缀

添加 BGP 前缀

创建一个 POST 请求以添加 BGP 前缀。例如:

Create BGP Prefixbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/addressing/prefixes/$PREFIX_ID/bgp/prefixes" \
	--request POST \
	--header "X-Auth-Email: $CLOUDFLARE_EMAIL" \
	--header "X-Auth-Key: $CLOUDFLARE_API_KEY" \
	--json '{
		"cidr": "192.0.2.0/24"
	}'

宣告或撤回 BGP 前缀

  1. 转到 Routes(路由) 页面。
Go to Routes ↗
  1. IP prefixes(IP 前缀) 选项卡中,选择您要修改的前缀 > Edit(编辑)
  2. Status(状态) 下拉菜单中,选择 Advertised(已宣告)Withdrawn(已撤回)
  3. (可选)编辑前缀的描述。
  4. 选择 Edit IP Prefix(编辑 IP 前缀) 以保存您的更改。

任何配置的 BGP 前缀都可以通过使用 PATCH 请求的 API 进行控制。例如:

Required API token permissions

At least one of the following token permissions is required:
  • Magic Transit Write
  • IP Prefixes: Write
  • IP Prefixes: BGP On Demand Write
Update BGP Prefixbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/addressing/prefixes/$PREFIX_ID/bgp/prefixes/$BGP_PREFIX_ID" \
	--request PATCH \
	--header "X-Auth-Email: $CLOUDFLARE_EMAIL" \
	--header "X-Auth-Key: $CLOUDFLARE_API_KEY" \
	--json '{
		"on_demand": {
				"advertised": true
		}
	}'

删除 IP 前缀

您只能删除状态为 Unapproved(未批准) 的前缀。要删除具有不同状态的前缀,请联系您的管理员或客户经理。

  1. 转到 Routes(路由) 页面。
Go to Routes ↗
  1. IP Prefixes(IP 前缀) 选项卡中,找到您要修改的前缀并选择 Delete(删除)
  2. 通过在模态框中选择 Delete(删除) 来确认您的选择。

使用 API 在 BGP 前缀上设置 AS 预置

使用 Addressing API 来控制 Cloudflare 在前缀前面添加其自治系统编号 (ASN) 的次数。您可以在前缀的 BGP 更新的 AS_PATH 中最多预置三次 AS13335。

有关如何在 BGP 前缀上预置三次 AS13335,请参阅以下示例:

Required API token permissions

At least one of the following token permissions is required:
  • Magic Transit Write
  • IP Prefixes: Write
  • IP Prefixes: BGP On Demand Write
Update BGP Prefixbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/addressing/prefixes/$PREFIX_ID/bgp/prefixes/$BGP_PREFIX_ID" \
	--request PATCH \
	--header "X-Auth-Email: $CLOUDFLARE_EMAIL" \
	--header "X-Auth-Key: $CLOUDFLARE_API_KEY" \
	--json '{
		"asn_prepend_count": 3
	}'

AS 预置可帮助您在网络提供商之间优雅地过渡流量。通过在 Cloudflare 的宣告中添加预置,您可以使通过 Cloudflare 的路由对某些 Internet 网络提供商来说不太受首选。这允许您同时从替代提供商宣告具有更短、更理想的 AS_PATH 的相同前缀。同时从两个提供商进行宣告可以提供更顺畅的流量迁移,并最大限度地减少更改提供商期间的丢包。

"asn_prepend_count" 参数接受从 03 的值。较高的值会使路由不太受首选。您还可以使用 BGP 更改此参数。请参阅 使用团体属性在任播前缀上设置 AS 预置

当您使用 AS 预置将流量从 Magic Transit 迁移走时,典型的事件顺序如下:

  • 初始状态:Cloudflare 使用默认优先级宣告您的前缀("asn_prepend_count": 0)。Cloudflare 将到您网络的所有流量路由通过 Cloudflare 全球网络。
  • 降低 Cloudflare 的优先级:您通过 API 更新前缀以设置 AS 预置计数(例如,"asn_prepend_count": 3)。Cloudflare 现在使用更长的 AS_PATH 宣告您的前缀。外部网络将更新其 BGP 表,以识别出 Cloudflare 路径具有新的、更长的 AS_PATH
  • 引入新提供商:您开始从您的替代提供商使用标准(较短)的 AS_PATH 宣告相同的前缀。
  • 最终状态:外部网络现在收到两个宣告:通过 Cloudflare 的预置路由和通过您的新提供商的未预置路由。外部网络将根据其 BGP 策略规则选择一条路径。

安全撤回 BYOIP 前缀

缓解残留的 BGP 路由

当您准备从 Cloudflare 边缘移除 自带 IP (BYOIP) 前缀的流量时,直接的 BGP 撤销操作会带来 BGP 路由残留的风险。当路由在互联网的 无默认路由区域 (DFZ) 中受阻时,就会发生这种状态。错过撤销公告的核心路由器将继续向现已失效的下一跳转发流量(即所谓的黑洞)。您可以在我们的博文 BGP 僵尸与过度路径寻觅 中阅读有关此内容的更多信息。

在全局路由表依赖从更具体前缀到较不具体前缀路由回退的使用案例中,这种风险尤为明显。由于这种回退机制极易导致路由不稳定,Cloudflare 建议采用多步骤的流量排空(draining)过程。

多步骤 BYOIP 撤销过程

排空流量时,在 Cloudflare 和您的 ISP(互联网服务提供商)上使用相同的前缀长度,因为匹配的前缀长度可以提供最有效和确定性的行为。

以下步骤概述了推荐的多步骤排空过程,以实现干净的流量切换并防止黑洞化。

  1. 从您的源网络发起播发:开始从您的本地基础设施向您的上游互联网服务提供商 (ISP) 宣告完全相同长度的前缀(例如,192.0.2.0/24)。此操作会将一条相同长度的竞争路由引入全局路由表中。BGP 最佳路径选择将根据其他指标(例如,较短的 AS 路径长度或本地优先级)优先选择您的原生路由,从而使流量开始从 Cloudflare 边缘排空。请注意,您的某些流量可能不会按预期路由,因为这取决于您的 ISP 如何偏好路由(例如,如果未完全撤销,Cloudflare 路由可能会被视为较不优选的路径)。

  2. 等待全局 BGP 收敛:留出一段时间(通常为五到十分钟),以便新的原生播发在全局路由表中完全传播,并使路由收敛。此被动等待期可确保在进行下一步之前,大部分流量已转移到您的本地网络。

  3. 向 Cloudflare 边缘发送 BGP 撤销信号:一旦确认流量已成功排空,请使用其中一种 BGP 控制方法停止从 Cloudflare 边缘播发该前缀。

  4. 排空过程完成。

对 Magic Transit Virtual Network 路由表的 BGP 控制

自动宣告和撤回基于任播的 Magic BGP 路由

如果您使用带有 Dataplane v2 的 CNI、GRE 或 IPsec 隧道,您可以:

  • 当您从 Magic Transit Virtual Network 路由表中撤回所有匹配的通过 BGP 学习的前缀时,从 Cloudflare 的全球边缘基础结构自动撤回您的前缀。
  • 当在 Magic Transit Virtual Network 路由表中有至少一个匹配的通过 BGP 学习的前缀时,通过 Cloudflare 的全球边缘基础结构自动宣告您的前缀。

要启用自动全局宣告和撤回,请使用 Addressing API 在 BGP 前缀上启用此功能。例如:

Required API token permissions

At least one of the following token permissions is required:
  • Magic Transit Write
  • IP Prefixes: Write
  • IP Prefixes: BGP On Demand Write
Update BGP Prefixbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/addressing/prefixes/$PREFIX_ID/bgp/prefixes/$BGP_PREFIX_ID" \
	--request PATCH \
	--header "X-Auth-Email: $CLOUDFLARE_EMAIL" \
	--header "X-Auth-Key: $CLOUDFLARE_API_KEY" \
	--json '{
		"auto_advertise_withdraw": true
	}'

一旦您为 BGP 前缀配置了此功能,Cloudflare 会应用以下逻辑:

  • 如果在 Magic Transit Virtual Network 路由表中没有与 BGP 前缀完全匹配的 BGP 路由,Cloudflare 会撤回该 BGP 前缀。
  • 如果在 Magic Transit Virtual Network 路由表中至少有一个与 BGP 前缀完全匹配的 BGP 路由,Cloudflare 会宣告该 BGP 前缀。

Addressing API BGP 前缀和 Magic Transit Virtual Network 路由表 BGP 路由必须完全匹配(相同的 IP 前缀和 CIDR 前缀长度)。如果有指向子网或超网的有效路由,当没有完全匹配的 Magic Transit Virtual Network BGP 路由时,Cloudflare 会撤回 BGP 前缀。

使用团体属性在任播前缀上设置 AS 预置

作为 通过 API 在任播前缀上设置 AS 预置的替代方案,您可以使用 BGP 团体属性控制 Cloudflare 从其边缘为您的前缀宣告 AS 预置的次数。团体属性值为:

  • 13335:50101:使用 13335 ASN 预置一次
  • 13335:50102:使用 13335 ASN 预置两次
  • 13335:50103:使用 13335 ASN 预置三次

如果您需要切换到备用服务提供商,您可以多次预置 Cloudflare 的 ASN。目的通常是使路由不太受首选,并允许优雅地过渡到新提供商。预置次数越多,如果没有其他优先级规则到位,Cloudflare 的连接就越不受首选。

有关此功能的对等方行为的重要信息,请参阅 关于 AS 预置的警告

使用 Cloudflare 路由反射器的 BGP 控制

(可选)您可以使用 BGP 在按需部署场景下控制从 Cloudflare 的全球网络中宣告或撤回您的前缀状态。BGP 控制通过建立到 Cloudflare 全球分布的路由反射器的 BGP 会话来工作,这些路由反射器启动您的前缀宣告在 Cloudflare 全球网络中的传播。您可以通过 Internet 或 CNI 与 Cloudflare 的路由反射器对等互连。可以通过您的客户团队进行 CNI 对等互连。

您可以通过支持的按需方法(如 BGP 控制)或通过 UI、API 或 Network Flow 动态地从 Cloudflare 网络宣告前缀。在按需前缀的接入过程中,请指定您是需要受 BGP 控制的宣告还是动态宣告(通过仪表板/API/Network Flow)。

我们的网络架构利用多个冗余的路由反射器。任何单个反射器的故障都不会影响整体网络弹性或流量转发。为了实现最大弹性,我们建议与 Cloudflare 的所有三个冗余路由反射器对等互连。

要开始使用 BGP 控制,请与您的客户团队联系并提供以下信息:

  • BGP 端点 IP 地址
  • 您要与 BGP 控制一起使用的前缀
  • 您用于 BGP 会话的 ASN

收到您的信息后,Cloudflare 将更新防火墙过滤器以建立 BGP 会话,并为您提供 BGP 端点以控制您的前缀。

示例路由器配置

以下示例显示了为利用 BGP 控制的按需部署进行的 Cisco IOSJuniper Junos OS 对等互连配置。使用的 IP 地址来自 Cloudflare 的路由反射器,应保持原样。

Cisco IOS

ip route {{ <YOUR-MAGIC-TRANSIT-PREFIX> }} Null0
ip prefix-list magic-transit-prefix seq 5 permit {{ <YOUR-MAGIC-TRANSIT-PREFIX> }}

route-map cloudflare-magic-transit-out permit 1
match ip address prefix-list magic-transit-prefix
!
route-map cloudflare-magic-transit-out deny 99

route-map reject-all deny 99

router bgp {{ <YOUR-ASN> }}
neighbor 141.101.67.22 remote-as 13335
neighbor 141.101.67.22 ebgp-multihop 64
neighbor 141.101.67.22 timers 60 900
neighbor 162.158.160.22 remote-as 13335
neighbor 162.158.160.22 ebgp-multihop 64
neighbor 162.158.160.22 timers 60 900
neighbor 173.245.63.66  remote-as 13335
neighbor 173.245.63.66  ebgp-multihop 64
neighbor 173.245.63.66  timers 60 900
!
address-family ipv4 unicast
redistribute static
neighbor 141.101.67.22 route-map cloudflare-magic-transit-out out
neighbor 141.101.67.22 route-map reject-all in
neighbor 162.158.160.22 route-map cloudflare-magic-transit-out out
neighbor 162.158.160.22 route-map reject-all in
neighbor 173.245.63.66  route-map cloudflare-magic-transit-out out
neighbor 173.245.63.66  route-map reject-all in
exit-address-family

Juniper MX (Junos OS set 命令)

set protocols bgp group CF_ROUTE_REFLECTORS neighbor 162.158.160.22 description "CF RR#1 SIN"
set protocols bgp group CF_ROUTE_REFLECTORS neighbor 173.245.63.66 description "CF RR#2 IAD"
set protocols bgp group CF_ROUTE_REFLECTORS neighbor 141.101.67.22 description "CF RR#3 CDG"
set protocols bgp group CF_ROUTE_REFLECTORS peer-as 13335
set protocols bgp group CF_ROUTE_REFLECTORS import REJECT-ALL
set protocols bgp group CF_ROUTE_REFLECTORS export BGP-CONTROL-OUT

set policy-options policy-statement REJECT-ALL then reject
set policy-options policy-statement BGP-CONTROL-OUT term <TERM-NAME> from route-filter 104.245.62.0/24 exact
set policy-options policy-statement BGP-CONTROL-OUT term <TERM-NAME> from protocol static
set policy-options policy-statement BGP-CONTROL-OUT term <TERM-NAME> from route-type internal
set policy-options policy-statement BGP-CONTROL-OUT term <TERM-NAME> then accept
set policy-options policy-statement BGP-CONTROL-OUT then reject

Juniper MX (Junos OS XML 格式)

@rtr01> show configuration routing-instances STAGE protocols bgp group CF_ROUTE_REFLECTORS
type external;
multihop {
    ttl 64;
}
local-address {{customer router IP}}
import NONE;
export NONE;
peer-as 13335;
local-as {{customer AS}} loops 2;
neighbor 162.158.160.22 {
    description "CF RR#1 SIN";
}
neighbor 173.245.63.66 {
    description "CF RR#2 IAD";
}
neighbor 141.101.67.22 {
    description "CF RR#3 CDG";
}

BGP 对等互连

如果您使用带有 Dataplane v2 的 CNI、GRE 或 IPsec 隧道将网络流量引至 Magic Transit,请参阅 BGP 详细信息 以了解如何使用 BGP 处理 Cloudflare 和您的网络之间的流量路由。请注意,这与使用 BGP 作为控制您的前缀的宣告状态的方式是不同的选项。

区域设置

Magic Transit 支持静态路由和 BGP 来将流量从 Cloudflare 的网络引导到您配置的出口(GRE 隧道、IPsec 隧道或 CNI)。Cloudflare 目前不支持为了流量工程目的宣告路由。作为减少最后一跳延迟的最佳实践,请考虑按区域限定您的路由。

Cloudflare 有九个地理区域:

区域代码 区域
AFR 非洲
APAC 亚太地区
EEUR 东欧
ENAM 北美东部
ME 中东
OC 大洋洲
SAM 南美洲
WEUR 西欧
WNAM 北美西部

静态路由区域的默认设置为 All Regions。当 添加编辑 静态路由时,在 Region code(区域代码) 部分配置流量范围。

有关更多信息,请参阅 将路由限定到特定区域

这篇文档对您有帮助吗?