跳转到内容
搜索文档

隧道健康状态

最后更新 查看 MarkdownAgent 设置

本指南可帮助您诊断和解决使用 Cloudflare WAN 时的常见隧道健康状况问题。隧道健康检查会监控您的 GRE 和 IPsec 隧道端点(在 Cloudflare 仪表板中也称为连接器)并将流量引导至最佳的可用路由。

快速诊断清单

使用下表将您的症状与最可能的原因和第一步操作进行匹配:

症状 最可能的原因 第一步操作
隧道显示 Down,且从未变健康 配置不匹配或防火墙阻止了 IKE 检查 IPsec 参数和防火墙规则。请参阅 IPsec 隧道建立失败
仪表板显示某些数据中心(colos)为 "100% degraded"(100% 已降级) 正常——这是一个状态指示器,而非丢包率 检查受影响的数据中心是否承载了您的流量。请参阅理解已降级状态
隧道在健康与不健康之间抖动 防重放保护或重签密钥(rekey)中断 禁用您路由器上的防重放保护。请参阅 IPsec 隧道不稳定
健康检查失败但流量能正常流动 状态防火墙丢弃了健康检查探测数据包 将健康检查类型从 Reply 更改为 Request。请参阅隧道显示 Down 但流量正常流动
基于策略的 VPN 隧道健康检查失败 Reply 类型的健康检查落在隧道流量选择器之外 使用带有环回目标的 Request 类型健康检查。请参阅基于策略的 VPN 健康检查失败
某特定区域的所有隧道均已降级或 Down 该区域与您的网络之间的网络路径存在问题 检查 ISP 连接性。使用 traceroute 或 MTR 从您的隧道端点向 Cloudflare 进行测试。
全球范围内的所有隧道均已降级或 Down 您的网络边缘存在问题 检查您的隧道端点路由器及上行连接。

您可以检查的内容

  • 仪表板:每个数据中心的隧道健康状态和每条隧道的流量大小(转到 Insights(洞察) > Network health(网络运行状况) > Network health(网络运行状况)
  • API:通过 Cloudflare WAN 隧道健康 API 获取的隧道健康状态
  • Network Analytics:通过 Network Analytics 监控流量大小、数据包计数和协议分布
  • 在您的网络中:从您的隧道端点向 Cloudflare 发起 Traceroute 和 MTR。由于 Cloudflare 端点使用 Anycast,这将仅测试到最近数据中心的路径。要测试特定区域,请使用 Cloudflare Traceroute API 来运行从特定 Cloudflare 区域到您网络的 traceroute。

您无法检查的内容(当前的局限性)

  • 隧道健康事件与 Cloudflare 网络事件之间的关联
  • 逐包转发决策(哪个数据中心通过哪条隧道转发了哪个数据包)
  • 超过仪表板保留期限的历史健康检查探测数据

常见修复清单

如果您遇到隧道健康问题,请先检查以下各项:

  1. 健康检查类型:如果使用状态防火墙(例如 Palo Alto Networks、Check Point, Cisco 或 Fortinet),请将健康检查类型从 Reply 更改为 Request
  2. 防重放保护:禁用您路由器上的防重放保护,或将重放窗口设置为 0
  3. MTU 设置:验证 MTU 设置是否正确(通常 GRE 为 1476,IPsec 为 1400-1450)。
  4. IPsec 参数:确认您的加密参数与 Cloudflare 支持的配置相匹配。
  5. 健康检查方向:Cloudflare WAN 默认为 Bidirectional
  6. Cloudflare Network Firewall 规则(较少见):确保允许来自 Cloudflare IP 地址的 ICMP 流量。

隧道健康状态

Cloudflare 仪表板中的 Network health 页面显示三种隧道健康状态:

状态 仪表板显示 技术阈值
Healthy(健康) 超过 80% 的健康检查通过 失败率低于 0.1%
Degraded(已降级) 介于 40% 和 80% 的健康检查通过 过去五分钟内至少有 0.1% 的失败(最少两次失败)
Down(宕机) 少于 40% 的健康检查通过 所有健康检查均失败(最后一秒内至少三次采样均失败)

仪表板显示从承载您流量的每个 Cloudflare 数据中心测量到的隧道健康状况。由于互联网路径问题,看到某些位置报告已降级状态是正常现象。请关注在 Traffic volume (1h)(流量大小(1 小时))列中显示流量的位置。

理解仪表板中的已降级状态

隧道健康状况仪表板按数据中心按隧道报告健康状态。每个 Cloudflare 数据中心都会独立跟踪每个隧道的健康状况。

常见的困惑来源是在仪表板上看到 "100% degraded"(100% 已降级),并将其误解为 100% 丢包。请注意,这两者是不同的。

已降级状态是如何触发的:

当健康检查探测失败时,Cloudflare 会发送两个额外的探测。如果有些探测成功有些失败,隧道在该数据中心就会进入已降级状态。几秒钟的间歇性丢包就足以触发这种转换。

要检查的内容:

请关注在 Traffic volume (1h)(流量大小(1 小时))列中显示流量的数据中心。对于显示已降级状态且流量为零或极少的数据中心,这仅是参考信息——它表明该特定 Cloudflare 数据中心与您的网络之间存在路径问题,但如果没有流量通过该数据中心路由,则它不会影响您的流量。

恢复时间:

即使健康检查立即开始成功,隧道也会在已降级状态下保持至少五分钟。从已降级恢复到健康需要持续在一段时间内通过健康检查,这可能需要长达 30 分钟。有关隧道如何在这两种状态之间转换的详细信息,请参阅下文的恢复行为

路由优先级惩罚 (Routing priority penalties)

当隧道变得不健康时,Cloudflare 会对通过该隧道的路由应用优先级惩罚:

  • Degraded(降级):向路由优先级增加 500,000
  • Down(中断):向路由优先级增加 1,000,000

这些惩罚会在维持冗余的同时将流量转移到更健康的隧道。Cloudflare 从不完全移除路由,即使在所有隧道都不健康的情况下也能保留故障转移选项。

恢复行为 (Recovery behavior)

隧道在状态之间的转换是不对称的,以防止抖动:

  • Healthy(健康)Degraded(降级)/Down(中断):检测到失败时快速转换。如果所有探测重试都失败,隧道可以直接从 Healthy 转为 Down。
  • Down(中断)Degraded(降级):需要连续三次成功的健康检查探测。
  • Degraded(降级)Healthy(健康):需要连续 30 次探测的失败率低于 0.1%。

有关监控隧道状态的说明,请参阅 在仪表板中检查隧道健康状况

健康检查类型和方向

健康检查类型:

类型 行为 适用场景
Reply(默认) Cloudflare 发送 ICMP 回复数据包 没有状态防火墙的简单网络
Request(请求) Cloudflare 发送 ICMP 回显请求 具有状态防火墙的网络(建议大多数部署使用)

健康检查方向:

方向 行为 默认用于
Bidirectional(双向) 探测和响应都穿越隧道 Cloudflare WAN (前称 Magic WAN)
Unidirectional(单向) 探测穿越隧道;响应通过互联网返回 Magic Transit(直接服务器返回)

解决常见问题

隧道显示 Down 但流量正常流动

症状

  • 仪表板显示隧道为 DownDegraded
  • 实际用户流量成功通过隧道
  • 尽管连接正常,健康检查失败率仍为 100%

原因

状态防火墙(如 Palo Alto Networks、Check Point、Cisco 和 Fortinet)会丢弃健康检查数据包。默认情况下,Cloudflare 发送 ICMP Reply 数据包作为健康检查探测。

状态防火墙会检查这些数据包,并在其会话表中寻找匹配的 ICMP Request。当不存在匹配的请求时,防火墙会因“状态异常”而丢弃该回复。

解决方案

将健康检查类型从 Reply 更改为 Request

  1. 转到 Connectors(连接器) 页面。

    Go to Connectors ↗
  2. IPsec/GRE tunnels(IPsec/GRE 隧道) 中,在受影响的隧道上选择 Edit(编辑)

  3. Health check type(运行状况检查类型) 下,由 Reply 更改为 Request

  4. 选择 Update tunnel(更新隧道)

当您使用 Request 类型健康检查时,Cloudflare 将发送 ICMP 回显请求。您的防火墙状态检测引擎会将其识别为合法请求,并自动允许 ICMP 回复响应。


Cloudflare Network Firewall 导致的健康检查失败

症状

  • 在启用 Cloudflare Network Firewall 之前,隧道是健康的
  • 添加 Cloudflare Network Firewall 规则后,健康检查失败
  • 阻止 ICMP 流量导致立即发生健康检查失败

原因

Cloudflare Network Firewall 会处理所有流量,包括 Cloudflare 的健康检查探测。如果您创建了阻止 ICMP 流量的规则,您也会阻止 Cloudflare 发送用来监控隧道状态的健康检查数据包。

解决方案

在任何阻止规则之前,为来自 Cloudflare IP 地址的 ICMP 流量添加一条允许规则:

  1. 转到 Firewall policies(防火墙策略) 页面。

    Go to Firewall policies ↗
  2. 创建具有以下参数的新策略:

字段
Action(操作) Allow(允许)
Protocol ICMP
Source Cloudflare IP ranges
  1. 将此规则置于任何阻止 ICMP 流量的规则之前

有关更多信息,请参阅Cloudflare Network Firewall 规则与端点健康检查


IPsec 隧道不稳定或丢包

症状

  • IPsec 隧道频繁在 healthy 和 down 状态之间抖动
  • 隧道上出现间歇性丢包
  • 流量能工作一段时间,然后无需更改配置就会停止
  • 路由器日志显示由于以下原因导致丢包:
    • "replay check failed"(重放检查失败)
    • "invalid sequence number"(序列号无效)
    • "invalid SPI" (安全参数索引无效)

原因

您的路由器上启用了防重放保护。IPsec 防重放保护期望数据包按顺序从单个发送方到达。

Cloudflare 的 Anycast 架构意味着您的隧道流量可能源自数百个数据中心的数千台服务器。每台服务器都维护自己的序列计数器,从而从路由器的角度导致数据包到达无序。

解决方案

禁用路由器上的防重放保护:

对于大多数路由器:

在您的 IPsec 配置中找到防重放(anti-replay)或重放保护(replay protection)设置并将其禁用。

如果只能设置重放窗口大小:

将重放窗口设置为 0 以有效地禁用该检查。

对于不支持禁用防重放的设备:

在 Cloudflare 仪表板中启用重放保护(replay protection)。这会将所有隧道流量路由到单个服务器,从而以失去 Anycast 优势为代价来保持正确的序列号。

  1. 转到 Connectors(连接器) 页面。

    Go to Connectors ↗
  2. IPsec/GRE tunnels(IPsec/GRE 隧道) 中,在您的 IPsec 隧道上选择 Edit(编辑)

  3. 启用 Replay protection(重放保护)

  4. 选择 Update tunnel(更新隧道)

对于遇到 "invalid SPI"(无效 SPI)错误的 Cisco IOS/IOS-XE 路由器:

启用 ISAKMP 无效 SPI 恢复,以帮助路由器重新同步安全关联(Security Associations):

configure terminal
crypto isakmp invalid-spi-recovery
exit

有关为何此设置是必需的详细解释,请参阅 防重放保护


重签密钥(rekey)事件后隧道已降级

症状

  • 隧道健康状况定期降至 DegradedDown
  • 问题与 IPsec rekey 间隔重合(通常是每隔几个小时)
  • 隧道在 1-3 分钟后自动恢复
  • 路由器日志显示 rekey 成功完成

原因

当您的隧道端点发起 IPsec rekey 时,新的安全关联(SA)必须在 Cloudflare 的整个网络中传播。Rekey 传播延迟已显着减少,并且在大多数部署中不常见。但在某些配置中,仍可能在 rekey 期间发生简短的隧道降级。

Cloudflare 从不发起 rekey,只做响应。所有 rekey 尝试都必须来自您的隧道端点。如果您的设备在 rekey 期间收到 TEMPORARY_FAILURE 响应,它必须重新建立 IKE 会话以进行恢复。

解决方案

此行为是预料之内的,且隧道会自动恢复。为最大程度减少影响:

  1. 配置带 restart(重启)的死联检测(DPD):将隧道端点的 DPD 动作设置为 "restart",以便如果 rekey 失败并返回 TEMPORARY_FAILURE 时,它能自动重新建立 IKE 会话。如果没有 DPD 重启,设备可能会陷入 rekey 失败的死循环中。

  2. 增加 rekey 间隔:在隧道端点上配置更长的 SA 生存周期以减少 rekey 频率。常用值为 IKE SA 8-24 小时,IPsec SA 1-8 小时。

  3. 调整健康检查敏感度:如果 rekey 期间的短暂降级触发了警报,请考虑降低健康检查速率:

    1. 转到 Connectors(连接器) 页面。
    Go to Connectors ↗
    1. IPsec/GRE tunnels(IPsec/GRE 隧道) 中,选择该隧道上的 Edit(编辑)
    2. Health check rate(健康检查频率) 更改为 Low
  4. 交错 rekey 时间:如果您有多条隧道,配置不同的 SA 生存周期,使其不会同时执行 rekey。


双向健康检查失败

症状

  • 配置为双向的健康检查始终失败
  • 单向健康检查能正常工作
  • 流量正常通过隧道

原因

双向健康检查要求探测包和响应包都穿过隧道。您的路由器必须:

  1. 接受目的地为隧道接口 IP 地址的 ICMP 数据包
  2. 将 ICMP 响应路由回穿过隧道发送到 Cloudflare

如果流量选择器或防火墙规则不允许此流量,则双向健康检查将失败。

解决方案

For IPsec tunnels:

配置流量选择器以接受隧道接口地址的数据包。例如,如果您的隧道接口地址为 10.252.2.27/31

  • 允许往返于 10.252.2.26(Cloudflare 侧)的流量
  • 允许往返于 10.252.2.27(您这侧)的流量

对于所有隧道类型:

确保您的防火墙允许隧道接口上的 ICMP 流量。许多防火墙需要显式规则才允许隧道接口上的管理流量(包括 ping)。

有关双向健康检查如何工作的详细信息,请参阅 隧道健康检查


IPsec 隧道建立失败

症状

  • 隧道状态显示为 Down 且从未变健康
  • 没有流量通过隧道
  • 路由器日志显示 IKE 协商失败

原因

IPsec 隧道建立可能会因几种配置不匹配而失败:

问题 症状
加密参数不匹配 IKE 协商失败,提示 "no proposal chosen"(未选择提议)
预共享密钥 (PSK) 不正确 阶段 1 中出现身份验证失败
IKE ID 格式错误 尽管 PSK 正确,但身份验证仍失败
防火墙阻止 IKE 没有任何 IKE 流量到达 Cloudflare

解决方案

  1. 验证加密参数是否符合 Cloudflare 支持的配置:

    阶段 1 (IKE)

参数 支持的值
IKE version 仅限 IKEv2
Encryption AES-GCM-16, AES-CBC-256
Authentication SHA-256, SHA-384, SHA-512
DH Group DH group 14, 15, 16, 19, 20

阶段 2 (IPsec)

参数 支持的值
Encryption AES-GCM-16, AES-CBC-256
Authentication SHA-256, SHA-512
PFS Group DH group 14, 15, 16, 19, 20
  1. 验证预共享密钥 (PSK):

    • 在 Cloudflare 仪表板中重新生成 PSK
    • 准确复制新的 PSK(不能有额外的空格或字符)
    • 用新的 PSK 更新您的路由器
  2. 检查 IKE ID 格式:Cloudflare 使用 FQDN 格式作为 IKE ID。请确保您的路由器配置为接受 FQDN 对端身份。该 FQDN 显示在 Cloudflare 仪表板中的隧道详细信息中。

  3. 验证防火墙规则:确保您的边缘防火墙允许:

    • UDP 端口 500 (IKE)
    • UDP 端口 4500 (IKE NAT-T)
    • IP 协议 50 (ESP)

有关受支持参数的完整列表,请参阅 支持的配置参数


基于策略的 VPN 健康检查失败

症状

  • 基于策略的 IPsec 隧道上健康检查持续失败
  • 符合隧道流量选择器(加密域)的流量正常流动
  • 同一设备上基于路由的隧道能正常工作

原因

基于策略的 IPsec 隧道使用流量选择器来定义隧道中允许哪些前缀。Reply 类型的健康检查自我寻址到 Cloudflare IP 地址。由于这些地址落在隧道的流量选择器(其仅允许客户网络目的地)之外,因此隧道端点会丢弃健康检查数据包。

此外,一些防火墙(如 Check Point)即使在基于路由的隧道上,也可能会因 Reply 形式健康检查数据包自我寻址的特性而将其标记为欺骗(spoofed)。

解决方案

  1. 将健康检查类型从 Reply 更改为 Request
  2. 在隧道端点上配置环回地址作为健康检查目标。该目标必须:
    • 可从隧道端点路由
    • 被隧道的流量选择器(加密域)所涵盖
  3. 对于双向健康检查,确保健康检查源(在 Cloudflare 仪表板中配置的隧道接口地址)也被流量选择器覆盖。

特定厂商指南

常见的厂商特定问题

厂商 常见问题 解决方案
Palo Alto Networks 默认设置下健康检查失败 将健康检查类型更改为 Request;禁用防重放
Cisco Meraki 无法禁用防重放 在 Cloudflare 仪表板中启用重放保护
AWS VPN Gateway 无法禁用防重放 在 Cloudflare 仪表板中启用重放保护
VeloCloud 无法禁用防重放 在 Cloudflare 仪表板中启用重放保护
Check Point 状态异常数据包被丢弃 将健康检查类型更改为 Request

收集信息以获取支持

如果您在通读本指南后仍遇到隧道健康问题,在联系 Cloudflare 支持之前,请收集以下信息:

所需信息

  1. 受影响的 Account ID隧道名称
  2. 问题发生的时间戳(以 UTC 为单位)
  3. 隧道配置详细信息:
    • 隧道类型(GRE 或 IPsec)
    • 健康检查类型(Request 或 Reply)
    • 健康检查方向(Bidirectional 或 Unidirectional)
    • 健康检查速率(Low、Medium 或 High)
  4. 路由器信息:
    • 厂商和型号
    • 固件/软件版本
    • IPsec 配置(已做脱敏处理,去除了 PSK)
  5. 观察到的症状:
    • 仪表板中的隧道健康状态
    • 用户流量是否受到影响
    • 路由器日志中的错误消息

有帮助的的诊断数据

  • 来自您路由器且显示隧道流量的数据包捕获(Packet captures)
  • 涵盖问题时间段的路由器日志
  • 从您的网络到 Cloudflare 端点的 Traceroute 结果
  • 隧道健康状况仪表板的屏幕截图
  • 使用类似 ping.pe 的工具进行分布式 traceroute,以测试多个全球位置的可达性

路由器诊断命令

收集以下命令的输出(语法因厂商而异):

  • IPsec SA 状态:show crypto ipsec sa
  • IKE SA 状态:show crypto isakmp sa
  • 隧道接口状态:show interface tunnel <number>
  • 路由表:show ip route

资源


更多 WAN 资源

有关更多信息,请参阅完整的 Cloudflare WAN 文档。

完整隧道健康状态指南 ❯

这篇文档对您有帮助吗?