4. AWS Site-to-Site VPN互联
AWS Site-to-Site VPN 是在本地数据中心与 AWS VPC 之间建立加密隧道的托管服务,它由四个关键对象协作完成:虚拟专用网关(Virtual Private Gateway,VGW)或中转网关(Transit Gateway,TGW)作为 AWS 侧端点,客户网关(Customer Gateway,CGW)描述本地设备公网地址与路由行为,VPN 连接承载两条 IPsec 隧道,路由则决定哪些流量被送入隧道。理解这四者的职责边界,是后续配置与排障的基础。
一、四个核心对象的职责
VGW 是挂在 VPC 上的逻辑网关,它本身不承载公网 IP,而是通过 AWS 分配的隧道端点地址与本地设备建立 IPsec 会话。创建 VGW 后必须将其附加(Attach)到目标 VPC,并在 VPC 路由表中添加指向 VGW 的路由,否则隧道即使建立,VPC 内实例也无法回包。
CGW 是 AWS 侧对本地设备的“描述”,它记录本地 VPN 设备的公网 IP 和路由类型(静态或 BGP)。CGW 并不主动发起连接,它只是配置参数,因此本地设备的公网 IP 必须固定且可达。若本地出口使用动态公网地址,需要先解决地址稳定性问题,否则隧道会因对端地址变化而中断。
VPN 连接创建后,AWS 会自动生成两条隧道,分别位于不同的可用区,每条隧道有独立的公网 IP 和预共享密钥(PSK)。这是 AWS 高可用设计的基础:单条隧道故障时,另一条仍可承载流量。
二、隧道配置的关键参数
隧道配置的核心是 IKE 与 IPsec 参数匹配。AWS 默认使用 IKEv2,加密算法为 AES-128-GCM 或 AES-256,完整性校验 SHA-256,DH 组为 Group 14 或更高。本地设备若使用较老的 IKEv1 或弱加密算法,需要在 AWS 侧调整或升级设备固件。
预共享密钥由 AWS 生成,也可在创建时自定义。两条隧道使用不同的 PSK,配置时不要混用。隧道内部地址(Tunnel Inside CIDR)默认从 169.254.0.0/16 中分配,例如 169.254.10.0/30 和 169.254.11.0/30,这两个 /30 地址分别用于两条隧道的 BGP 邻居或静态路由下一跳。
示例隧道参数(教学假设值):
隧道1:AWS 端点 203.0.113.10,本地端点 198.51.100.2,Inside CIDR 169.254.10.0/30
隧道2:AWS 端点 203.0.113.11,本地端点 198.51.100.2,Inside CIDR 169.254.11.0/30
PSK:两条隧道分别使用不同密钥,长度建议 32 位以上随机字符串
IKE:IKEv2,AES256,SHA256,DH Group 14
IPsec:AES256,SHA256,PFS DH Group 14,SA 生命周期 3600 秒
三、BGP 动态路由与静态路由的选择
BGP 动态路由适合本地网络存在多条路径、需要自动收敛或需要传递大量网段的场景。配置时,AWS 侧为每条隧道指定一个 BGP 自治系统号(ASN),本地设备使用另一个 ASN,双方通过隧道内部地址建立 BGP 邻居。AWS 默认 ASN 为 64512,本地可使用 65000 等私有 ASN。
BGP 建立后,本地通过 BGP 宣告本地网段,AWS 通过 BGP 宣告 VPC 网段。路由优先级由 BGP 属性决定,AWS 支持 AS_PATH 预置(AS Path Prepending)来影响选路。若需要让某条隧道优先,可在另一条隧道的宣告中预置多个 AS 号,使该路径变长而降低优先级。
静态路由则适合本地网段固定、设备不支持 BGP 或拓扑简单的场景。静态路由需要在 VPN 连接上手动指定本地网段,并在 VPC 路由表中添加指向 VGW 的路由。静态路由的缺点是:一条隧道中断时,若没有配合健康检查与路由切换,流量不会自动切换到另一条隧道。
选择建议:本地设备支持 BGP 且网络规模较大时优先使用 BGP;设备老旧或仅需互联少量固定网段时可用静态路由,但必须配合隧道健康检查与路由冗余设计。
四、高可用设计
AWS Site-to-Site VPN 的高可用分为三个层次。第一层是双隧道:AWS 自动提供两条隧道,本地设备应同时配置两条隧道,并启用 BGP 或静态路由的冗余。第二层是双 CGW:若本地有两个出口设备或两条公网链路,可创建两个 CGW,分别对应不同公网 IP,再建立两条 VPN 连接,实现设备级冗余。第三层是双 VGW 或 TGW:在关键业务中,可使用两个 VGW 分别连接不同 VPC,或使用 TGW 作为中心枢纽,配合多个 VPN 连接实现跨 VPC 与本地的高可用互联。
需要特别注意的是,AWS 不会自动在两条隧道之间做流量负载均衡,默认情况下流量只走其中一条隧道。若需要主动-主动,需依赖 BGP 的 ECMP(等价多路径)能力,且本地设备与 AWS 侧均需支持。对于静态路由,通常只能实现主备切换,切换时间取决于设备探测机制,一般在数秒到数十秒之间。
五、配置后的验证与排障要点
隧道建立后,首先在 AWS 控制台查看 VPN 连接状态,两条隧道应显示为“UP”。若显示“DOWN”,优先检查本地设备公网 IP 是否可达、PSK 是否一致、IKE/IPsec 参数是否匹配。其次检查 BGP 邻居状态,若为“Idle”或“Active”,说明 TCP 179 端口未通或 ASN 配置错误。
路由层面,在 VPC 路由表中确认本地网段指向 VGW,且状态为“active”。若为“blackhole”,说明 VPN 连接未建立或路由未传播。在本地设备上使用 show ip bgp summary 或等效命令查看邻居与路由条目,确认本地网段已被宣告且 AWS 网段已学习到。
常见误区:只配置一条隧道、两条隧道使用相同 PSK、VPC 路由表忘记添加回程路由、本地设备未放行 UDP 500/4500 与 ESP 协议。这些都会导致隧道看似建立但业务不通。
最后,建议在正式割接前使用 ping 或 traceroute 从 VPC 实例测试到本地网段的连通性,并观察流量实际走哪条隧道。若需要验证主备切换,可在本地设备上关闭主隧道接口,观察 BGP 是否在数十秒内收敛到备隧道,并确认业务未中断或中断时间在可接受范围内。