Zero Trust Networks 路由终点和 Cloudflare Tunnel 连接字段将于 2026 年 10 月 5 日停用
在 2026 年 10 月 5 日,两项变更将在 Zero Trust Networks API 和 Cloudflare Tunnel API 中生效:移除经过 CIDR 编码的路由终点,且 tunnel list 和 get 响应将不再包含 connections 字段。如果您通过 API、cloudflared、Terraform 或其他集成管理私有网络路由或读取 tunnel 连接详情,请阅读以下部分中的变更说明并在移除日期之前完成迁移。
经过 CIDR 编码的路由终点已被弃用,转而使用目前已存在的基于标准 route_id 的终点。这两组终点都是通过 Cloudflare Tunnel 或 Cloudflare Mesh 路由私有网络(API 仍将 Mesh 节点称为 warp_connector)— 仅请求形状(request shape)发生了变化。
已弃用的终点(将于 2026 年 10 月 5 日移除):
- 创建 tunnel 路由(CIDR 终点):
POST /accounts/{account_id}/teamnet/routes/network/{ip_network_encoded} - 更新 tunnel 路由(CIDR 终点):
PATCH /accounts/{account_id}/teamnet/routes/network/{ip_network_encoded} - 删除 tunnel 路由(CIDR 终点):
DELETE /accounts/{account_id}/teamnet/routes/network/{ip_network_encoded}
替代终点:
- 创建 tunnel 路由:
POST /accounts/{account_id}/teamnet/routes - 更新 tunnel 路由:
PATCH /accounts/{account_id}/teamnet/routes/{route_id} - 删除 tunnel 路由:
DELETE /accounts/{account_id}/teamnet/routes/{route_id}
| 已弃用(CIDR 编码路径) | 替代方案 | |
|---|---|---|
| 路由标识符 | 路径中经过 URL 编码的 CIDR (/network/{ip_network_encoded}) |
路径中的 route_id(创建时 network 移动到请求体中) |
| 创建 | POST .../teamnet/routes/network/{ip_network_encoded} |
请求体中包含 network 和 tunnel_id 的 POST .../teamnet/routes |
| 更新 | PATCH .../teamnet/routes/network/{ip_network_encoded} |
PATCH .../teamnet/routes/{route_id} |
| 删除 | DELETE .../teamnet/routes/network/{ip_network_encoded} |
DELETE .../teamnet/routes/{route_id} |
- 通过调用列出 tunnel 路由获取每个路由的
route_id,或者在首次使用替代终点创建路由时从响应中读取它。 - 更新任何直接调用经过 CIDR 编码的终点的脚本、后端服务或 CI/CD 流水线。
- 如果您使用
cloudflared tunnel route ip add | delete命令管理路由,请将cloudflared升级到最新版本 ↗。 - 如果您使用 Terraform 管理路由,请确保您使用的是最新版本的
cloudflare_zero_trust_tunnel_cloudflared_route↗ 资源以及 Cloudflare Terraform 提供商 ↗。
# Before: create a route by URL-encoding the CIDR into the path
curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/teamnet/routes/network/172.16.0.0%2F16 \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-d '{"tunnel_id": "'$TUNNEL_ID'", "comment": "Example comment for this route."}'
# After: create a route with the network in the request body
curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/teamnet/routes \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-d '{"network": "172.16.0.0/16", "tunnel_id": "'$TUNNEL_ID'", "comment": "Example comment for this route."}'
# After: update or delete a route using its route_id
curl -X PATCH https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/teamnet/routes/$ROUTE_ID \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-d '{"comment": "Updated comment for this route."}'
curl -X DELETE https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/teamnet/routes/$ROUTE_ID \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"自同一天起,将从 Cloudflare Tunnel 和 Cloudflare Mesh 节点(cfd_tunnel 和 warp_connector API 资源)的 list 和 get 响应中移除 connections 数组。请查询专用的连接终点,而不是从 tunnel 或节点对象中读取该字段。
这会影响:
GET /accounts/{account_id}/cfd_tunnel— 从result中的每个项目中移除connectionsGET /accounts/{account_id}/cfd_tunnel/{tunnel_id}— 从result中移除connectionsGET /accounts/{account_id}/warp_connector— 从result中的每个项目中移除connectionsGET /accounts/{account_id}/warp_connector/{tunnel_id}— 从result中移除connections
从特定于 tunnel 的连接终点获取连接详情,而不是从 list 或 get 响应中解析。对于 Cloudflare Tunnel,请调用 GET /accounts/{account_id}/cfd_tunnel/{tunnel_id}/connections。对于 Cloudflare Mesh,请调用 GET /accounts/{account_id}/warp_connector/{tunnel_id}/connections。
# Before: read connections off the tunnel object
curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/cfd_tunnel/$TUNNEL_ID \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
# After: query connections directly
curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/cfd_tunnel/$TUNNEL_ID/connections \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"更新任何从 tunnel list 或 get 响应中解析 connections 的仪表板、监控脚本或自动化。cloudflared 和 Cloudflare Terraform 提供商不读取此字段,因此它们的这一部分更新不需要做任何更改。
- 响应更小、速度更快。 具有许多连接的 Cloudflare Tunnel 和 Cloudflare Mesh 节点不再膨胀每次 list 和 get 调用 — 仅在您需要时才获取连接详情。
- 静态或标识路由的单一方式。 统一使用
route_id消除了对路径中 CIDR 范围进行 URL 编码的需要,并且与 Zero Trust Networks API 中所有其他资源的寻址方式一致。 - 跨 API 的一致性。 这两项变更使这些终点与 Cloudflare 针对资源标识符和嵌套详情终点的标准 REST 约定保持一致。
要了解更多信息,请参阅 Zero Trust Networks API、Cloudflare Tunnel API 和路由文档。
在仪表板中通过单页面管理您的所有路由
Cloudflare 仪表板中的 **Routes(路由)**页面现在在单个表格中显示您所有连接器的路由——包括 Cloudflare Mesh 和 Cloudflare Tunnel 路由,以及 Cloudflare WAN 和 Magic Transit 静态路由,而不是每个产品分别显示独立的路由视图。
在统一的 Routes 页面中,您可以:
- 通过交互式地图可视化您的网络,该地图显示了您的目的地如何流向您的连接器——包括由多个连接器提供相同前缀服务的等价多路径(ECMP)路由。选择一个节点以过滤表格以显示其后面的路由。
- 在单个表格中查看每条路由,及其目的地、类型、连接器、优先级和来源,并进行过滤或排序以找到您需要的内容。
- 创建、编辑和删除路由(支持任何受支持的类型),而无需离开页面。添加 Cloudflare WAN 或 Magic Transit 静态路由时,您现在可以通过连接器名称选择下一跳,而无需输入其 IP。
- 在专用选项卡中管理虚拟网络。
- 测试路由,以便在提交更改之前查看目的地解析为哪个连接器和下一跳。
要找到它,请前往仪表板侧边栏中的 Networking(网络) > Routes(路由)。
Go to Routes ↗您现有的路由、API 和配置保持不变——这是一个将它们聚集在一个地方的仪表板体验。了解如何添加路由和管理虚拟网络。
Cloudflare Tunnel 现在在启动时运行连接性预检查
从 cloudflared 版本 2026.5.2 ↗ 开始,Cloudflare Tunnel 直接在二进制文件内部自动执行整个连接性预检查工作流程。以前,客户必须安装 dig 和 netcat 并手动运行这些命令来验证其环境。现在 cloudflared 在启动时以原生方式执行此操作 — 并在某些内容被阻止时提供可操作的修正提示。
在每次运行 cloudflared tunnel run(以及 cloudflared tunnel diag)时,二进制文件现在都会原生检查:
- DNS 解析 —
region1.v2.argotunnel.com和region2.v2.argotunnel.com解析为有效的 Cloudflare IP。 - 传输连接性 — 端口
7844上的出站UDP (QUIC)和TCP (HTTP/2)。 - Management API — 发往
api.cloudflare.com的出站TCP/443,用于软件更新。
结果将以可扫描的 CLI 表格形式打印,包含以下三种状态:
- ✅ 通过 — 检查成功。
- ⚠️ 警告 — 非阻塞问题,例如 Management API 无法访问,因此自动更新将无法工作,但 Tunnel 仍会启动。
- ❌ 失败 — 阻塞问题,并附有具体的修正提示(例如
Allow outbound UDP on port 7844)。
如果 DNS 无法解析,或者端口 7844 上的 UDP 和 TCP 双双失败,cloudflared 将提前退出并报告失败,而不是在不透明的 failed to dial 错误中循环。
现在每次启动都会自动运行预检查,这还能捕获诸如通宵防火墙策略变更之类的问题退化 — 无需记得重新运行故障排除指南。
要获取这一新行为,请将 cloudflared 升级到版本 2026.5.2 或更高版本。欲了解更多细节,请参阅连接性预检查文档。
Cloudflare Tunnel 和 Cloudflare Mesh 的细粒度权限
您现在可以将 Cloudflare 权限范围限定为单个 Cloudflare Tunnel 实例和 Cloudflare Mesh 节点。管理员可以委派对特定 Tunnel 或 Mesh 节点的访问权限,而无需授予对整个账户中私有网络的控制权。
当您添加成员或创建权限策略时,资源选择器现在将 Cloudflare Tunnel 实例和 Cloudflare Mesh 节点列为可限定范围的资源类型。您可以:
- 向支持操作人员授予对单个 Cloudflare Tunnel 实例的只读角色,以进行日志流传输和诊断,而不会暴露其他 Tunnel 或允许破坏性操作。
- 向应用程序团队授予对特定 Cloudflare Mesh 节点的写入角色,而无需让他们访问私有网络的其余部分。
- 将单个策略的范围同时限定为一个或多个 Tunnel 以及 Mesh 节点。
细粒度权限是与现有账户级别角色平行的层,它们不会取代后者。
- 现现的账户级别角色继续有效。 拥有
Cloudflare Access或Cloudflare Zero Trust的成员将保留对账户中每个 Tunnel 和 Mesh 节点的写入访问权限。这确保了与现有自动化和令牌的向后兼容性。 - 细粒度权限是累加的。 对于针对特定 Tunnel 或 Mesh 节点的任何 API 请求,如果主体具有账户级别角色或该资源的细粒度权限,则将授予访问权限。
- 资源枚举是感知授权的。 列表端点(
GET /accounts/{id}/cfd_tunnel,GET /accounts/{id}/warp_connector)仅返回主体至少具有只读访问权限的资源。
- 配置 Cloudflare Tunnel 的细粒度权限。
- 配置 Cloudflare One 中 Cloudflare Tunnel 和 Cloudflare Mesh 的细粒度权限。
- 查看 Cloudflare 角色参考上的资源范围角色。
简化 WARP Connector 部署
您现在可以使用类似于 cloudflared 连接器的简化、引导式工作流来部署 WARP Connector。有关详细说明,请参阅 WARP Connector 文档。
--grace-period Bug 修复
新的 cloudflared 版本 2024.10.0 ↗ 修复了与 --grace-period 隧道运行参数相关的 Bug。cloudflared 连接器现在将在强制关闭与 Cloudflare 网络的连接之前遵守指定的等待期。
GitHub 上提供适用于 Apple 芯片的 cloudflared 版本
macOS 用户现在可以直接从 GitHub ↗ 下载 cloudflared-arm64.pkg,此外还可以通过 Homebrew 获取。