Site to Site VPN注意事项

本节我们将介绍Site to Site VPN的一些注意事项,包括NAT-T, Route Propagation, Transitive Routing

NAT Traversal

上一节在On-premise侧的CGW,直接将Public IP暴露在了公网:

image-20240608205231093

如果想对外隐藏这个Public IP,可以使用NAT Traversal(NAT-T)。假设您在On-premise 网络上拥有私有 IP 空间,这些空间都通过单个路由器或防火墙连接到互联网。现在,可以使用NAT将 CGW 从私有 IP 映射到公共 IP,并使用 NAT-Traversal 将CGW连接到VGW。NAT-T 创建源自 NAT 设备后面的本地 IP 连接,并使用已转换的地址连接到 VPC。此映射过程在建立 VPN 时进行:

image-20240608205038688

使用的时候,需要在防火墙(网络出口)中打开 UDP 端口 4500 才能使用 NAT-T。

路由传播

在上一节创建VPN Connection时,专门选择了静态路由:

image-20240608210312098

  • 在静态路由情况下,必须手动配置CIDR的范围;如果在AWS侧或On-premise侧添加了任何网段,路由不会自动传播,需要再次手动添加。

  • 在静态路由情况下,两端都能自动学到变化,新添加的网段会被AWS侧的路由表学到

  • 但是AWS侧的路由表最多支持100条路由, 如果超过100条可能要考虑网段合并

在动态路由(比如BGP)场景下,需要在CGW和VGW侧都指定ASN:

image-20240608210706468

Transitive Routing

在我们On-premise侧与AWS侧使用VPN进行连接后,需要讨论能不能访问到背后的网络及服务,即Transitive Routing

On-premise侧通过VPN连接到AWS,通过AWS IGW访问外网

这是一个企业比较常见的场景,比如国内访问不了google,借VPN连接到AWS后,能否利用AWS的IGW成功翻qiang科学上网?

答案是不能。在AWS上,带Gateway的(比如这里的IGW,还有之前的S3 Gateway Endpoint)一般不具有transitive能力,因为它上面没有ENI;带ENI的,比如Interface endpoint通常具有transitive能力,因为它有ENI,可以配置路由

image-20240608213334061

On-premise侧通过VPN连接到AWS,通过AWS NAT Gateway访问外网

这个也做不到,因为NAT Gateway上不能做配置的更改:

image-20240608213828458

On-premise侧通过VPN连接到AWS,通过AWS NAT Instance访问外网

这个可以实现:

image-20240608213925901

On-premise侧通过VPN连接到AWS,通过AWS VPC Peering访问其他VPC

不可以:

image-20240608214001267

On-premise侧通过VPN连接到AWS,通过AWS Gateway Endpoint访问其他服务

跟第一个场景提到的一样,Gateway一般不具有transitive能力:

image-20240608214037715

On-premise侧通过VPN连接到AWS,通过AWS Interface Endpoint访问其他服务

这个可以做到:

image-20240608214128396

AWS侧通过VPN连接到On-premise,通过On-premise NAT访问其他服务

可以实现,在On-premise NAT作一些自定义配置即可:

image-20240608214201218

Tunnels and Routing

在前面配置VPN connections时,看到有两个Tunnel:

image-20240609075158950

而Site to Site VPN有两种模式,一种是Active/Active,另一种是Active/Passive, 根据Static/Dynamic Routing,分为多种场景来讨论。

Static Routing + Active/Active Tunnels

image-20240609075347312

  • 此时无法将 AWS侧配置首选特定隧道来发送流量(图左侧),AWS 随机选择隧道将流量从 AWS 发送到本地网络。如果隧道1出现故障,则来自 AWS 的流量会自动故障转移到隧道2。

  • 使用Active/Active配置时,假如On-premise发往AWS的流量走了Tunnel 1(上图上面的绿色箭头),则AWS的回程流量是随机的,有可能走Tunnel 2(下面的绿色箭头),此时如果CGW上安装了防火墙,则有可能block这部分流量。所以必须在CGW上支持非对称路由(Asymmetric routing)

参考 https://repost.aws/zh-Hans/knowledge-center/vpn-configure-tunnel-preference

Dynamic Routing + Active/Active Tunnels

image-20240609080112838

现在有两个Tunnel,CGW侧可以设置希望优先使用某个VPN Tunnel:

  1. 向客户希望从 AWS 接收流量的隧道上的VGW发布更具体的前缀。
  2. 对于使用 BGP 的每个 VPN 连接,如果匹配的前缀相同,则会比较 AS 路径,优先选择 AS 路径最短的前缀。
  3. 如果 AS PATH 的长度相同,则比较MED。MED 值最低的路径是首选路径。

Active/Passive Tunnels

无论是静态路由还是动态路由,这种情况下正常运行的Tunnel只有一个,如果Tunnel挂了,需要CGW侧支持自动切换:

image-20240609075945001