2. Cloud VPN 深入

Cloud VPN 是 Google Cloud 混合云互联中最常用的加密通道方案,但很多工程师第一次接触时容易把 HA VPN 和 Classic VPN 混为一谈。两者虽然都基于 IPsec,但在拓扑、SLA、BGP 支持和路由行为上有本质差异。理解这些差异,是后续配置、排障和调优的前提。

一、HA VPN 与 Classic VPN 的本质区别

Classic VPN 是早期方案,采用静态路由或基于策略的路由,单个隧道只能连接一个对端网关,SLA 为 99.9%。它支持两种场景:静态路由(手动指定远端网段)和动态路由(通过 Cloud Router 建立 BGP)。但 Classic VPN 的动态路由只支持一个隧道对应一个 BGP 会话,且不支持 ECMP 多隧道负载均衡。

HA VPN 是当前推荐方案,SLA 达到 99.99%,必须配合 Cloud Router 使用 BGP。它的核心特征是:一个 HA VPN 网关包含两个接口(interface 0 和 interface 1),每个接口对应一个外部 IP。要获得 99.99% 的 SLA,必须同时建立两条隧道,分别连接到两个不同的接口,并且两条隧道都处于 UP 状态。HA VPN 支持 ECMP,多条隧道可以同时承载流量,实现负载均衡和冗余。

关键判断:如果对端是 Google Cloud 的另一个 VPC,优先使用 HA VPN 到 HA VPN 的拓扑;如果对端是本地设备或第三方云,需要确认对端是否支持 BGP 和双隧道。Classic VPN 仅建议用于对端不支持 BGP 或临时测试场景。

二、HA VPN 配置的关键步骤与参数

配置 HA VPN 到本地网关的典型流程如下。假设本地网关有两个公网 IP:203.0.113.10 和 203.0.113.20,本地子网为 192.168.0.0/24,GCP VPC 子网为 10.0.0.0/24。

  1. 创建 HA VPN 网关:选择区域,GCP 自动分配两个外部 IP,例如 34.82.1.1(interface 0)和 34.82.1.2(interface 1)。
  2. 创建 Cloud Router:指定 ASN,例如 65001,并绑定到 VPC 网络和区域。
  3. 创建对端 VPN 网关:输入本地两个公网 IP,分别对应两个隧道。
  4. 创建两条 VPN 隧道:
    • 隧道 1:GCP interface 0 ↔ 本地 IP 203.0.113.10,IKE 版本选 IKEv2,共享密钥自定义。
    • 隧道 2:GCP interface 1 ↔ 本地 IP 203.0.113.20,使用相同或不同的共享密钥。
  5. 配置 BGP 会话:每条隧道对应一个 BGP 会话。GCP 侧 BGP IP 通常从 169.254.0.0/16 中分配,例如隧道 1 使用 169.254.1.1(GCP)和 169.254.1.2(本地),隧道 2 使用 169.254.2.1 和 169.254.2.2。对端 ASN 设为 65002。
  6. 添加 BGP 路由通告:在 Cloud Router 中配置自定义通告,将 GCP 子网 10.0.0.0/24 通告给本地;本地设备也需要通告 192.168.0.0/24。

配置完成后,在 Cloud Console 的 VPN 隧道页面应看到两条隧道状态均为“已建立”,BGP 会话状态为“已启动”,并且路由表中出现从 BGP 学到的对端网段。

三、BGP 会话建立与路由交换过程

BGP 会话建立分为三个阶段:Idle → Connect → Active → OpenSent → OpenConfirm → Established。实际排障时,最常卡在 Active 或 OpenSent 状态。Active 表示 TCP 连接未建立,通常是 BGP 对端 IP 不可达或防火墙未放行 179 端口;OpenSent 表示 TCP 已连接但 BGP Open 报文参数不匹配,常见原因是 ASN 配置错误或 BGP 认证失败。

路由交换方面,Cloud Router 默认会通告 VPC 中所有子网路由,也可以配置自定义通告。从对端学到的路由会以 priority 和 MED 等属性参与选路。HA VPN 的两条隧道如果学到相同前缀,GCP 会执行 ECMP,将流量哈希到两条隧道上。如果一条隧道断开,路由会快速收敛到另一条,收敛时间通常在秒级。

GCP VPC 10.0.0.0/24 HA VPN 网关 接口 0 34.82.1.1 接口 1 34.82.1.2 Cloud Router ASN 65001 BGP BGP 本地数据中心 192.168.0.0/24 本地 VPN 网关 公网 IP 1 203.0.113.10 公网 IP 2 203.0.113.20 本地路由器 ASN 65002 隧道 1 (IKEv2) 隧道 2 (IKEv2) BGP 会话参数 隧道1: 169.254.1.1 ↔ 169.254.1.2 隧道2: 169.254.2.1 ↔ 169.254.2.2 ECMP 负载均衡 + 冗余

四、故障排查的常见切入点

当隧道无法建立时,按以下顺序排查效率最高:

  • IKE 阶段:检查共享密钥是否一致、IKE 版本是否匹配(建议统一 IKEv2)、对端是否允许 GCP 的公网 IP 发起连接。GCP 侧日志可在 Cloud Logging 中过滤 resource.type="vpn_gateway" 查看。
  • BGP 阶段:确认 BGP 对端 IP 是否可达(可用 ping 从本地设备测试 169.254 地址),检查 ASN 是否匹配,确认 179 端口未被防火墙拦截。
  • 路由阶段:如果隧道和 BGP 都 UP,但业务不通,检查 Cloud Router 是否通告了正确的子网,本地是否学到了 GCP 路由,以及 VPC 防火墙规则是否放行了来自 192.168.0.0/24 的流量。
常见陷阱:HA VPN 的两条隧道必须连接到不同的接口。如果两条隧道都连到 interface 0,虽然可能建立成功,但无法获得 99.99% SLA,且 ECMP 行为可能异常。

五、性能调优要点

Cloud VPN 单隧道吞吐量受限于加密处理和网络路径,通常每个隧道可达到 1.5~3 Gbps。要提升总吞吐,最直接的方式是利用 HA VPN 的多隧道 ECMP。以下参数值得关注:

调优项建议值/做法影响
IKE 版本IKEv2更稳定,支持 MOBIKE,重连更快
加密算法AES-256-GCM硬件加速支持好,吞吐更高
隧道数量2 条以上ECMP 提升总带宽和冗余
MTU1460 或更低避免分片,减少重传
BGP 保持时间默认 60s/180s缩短可加快收敛,但增加报文开销

另外,如果本地设备支持,可以启用 多隧道 ECMP 并调整哈希算法,使流量更均匀地分布。对于延迟敏感的业务,建议监控隧道延迟和丢包,必要时考虑使用 Cloud Interconnect 替代 VPN。

验证方法:配置完成后,用 gcloud compute vpn-tunnels describe 查看隧道状态,用 gcloud compute routers get-status 查看 BGP 会话和学到的路由。业务侧可用 iperf3 测试吞吐,用 ping 测试延迟和丢包。

总结来说,HA VPN 是生产环境的首选,核心在于双接口、双隧道、BGP 和 ECMP 的配合。配置时重点关注 BGP 参数和路由通告,排障时按 IKE → BGP → 路由的顺序逐层排查,性能上优先通过多隧道 ECMP 和加密算法优化来提升。掌握这些要点,就能在混合云场景中稳定、高效地使用 Cloud VPN。