亚马逊AWS官方博客

多条 DX 专线上的流量工程与高可用方案设计 – Part 2

浏览本文需要约 10 分钟,建议按照章节分段阅读。

本文是《多条 DX 专线上的流量工程与高可用方案设计 – Part 1》系列的第二篇文章。在第一篇文章中,我们使用两条 AWS Direct Connect(以下简称 DX)专线来连接 AWS 云上业务和本地数据中心业务。第一条 DX 专线使用 Private vif 并通过 VPN Gateway(VGW)来连接 AWS 云上业务。第二条 DX 专线使用 Transit vif 并通过专线网关(DXGW:Direct Connect Gateway)和中转网关(TGW:Transit Gateway)来连接 AWS 云上业务。

在上述组网方案中,通过调整 Border Gateway Protocol(BGP)路由策略以及灵活利用 AWS 网络服务来主动控制入云和出云方向流量的路径,从而满足业务对网络的个性化和高可用需求。但是,上述方案在故障切换时,重要业务出云流量需要在 VPC 路由表内手动调整路由条目才能实现路径切换。同时,该方案使用了 VGW + TGW + DXGW 的组网架构,并同时使用了 Private Vif 和 Transit Vif 两种类型的 DX 专线虚拟接口。

在本文中,我们会探讨将现有网络架构中的 VGW 和 Private Vif 移除并只使用 Transit Vif 这一种类型的虚拟接口,同时实现重要业务出云流量在故障时能够自动切换路径。从而在简化组网方案的同时,增强自动化和高可用能力。另外,在整个组网架构迁移的过程中,可以实现用户业务的零感知。

1. 当前组网架构

1.1 入云流量路由

当前组网架构下,入云流量路径控制如下图所示。

1. 发给 Account-1 VPC1-1 的两个重要业务:10.50.8.115 和 10.50.8.116 的流量优先使用 500M 托管连接。当托管连接发生故障时,自动切换为 1G 专用连接。

2. 发给 Account-1 VPC1-1 和 Account-2 VPC2-1 的普通业务的流量优先使用 1G 专用连接。当专用连接发生故障时,自动切换为 500M 托管连接。

1.2 出云流量路由

当前组网架构下,出云流量路径控制如下图所示。

1. 发给本地数据中心三个重要业务:10.0.181.66、10.0.183.122 和 10.0.185.133 的流量优先使用 500M 托管连接。当托管连接发生故障时,手动切换为 1G 专用连接。

2. 发给本地数据中心普通业务的流量优先使用 1G 专用连接。当专用连接发生故障时,自动切换为 500M 托管连接。

2. 过渡组网架构

为了平滑移除 VGW 和 Private Vif,首先为 1G 专用连接新建一个 Transit Vif 并关联到 DXGW。在过渡期间,这个 Transit Vif 上不承载任何流量。要达成这个目标,我们需要对入云和出云流量进行路由设计。过渡阶段的组网架构如下图所示:

2.1 入云流量路由设计

在数据中心出口路由器上应用如下路由策略,调整通过 1G 专用连接 Transit Vif 学习到的路由。

1. 重要业务入云流量:Account-1 VPC1-1- 重要业务对应的两条 BGP 主机路由 10.50.8.115/32 和 10.50.8.116/32,数据中心出口路由器会同时通过 1G 专用连接的 Transit Vif 和 500M 托管连接的 Transit Vif 学习到。过滤通过 1G 专用连接 Transit Vif 学习到的这两条 BGP 路由,从而保证发送给主机 10.50.8.115 和 10.50.8.116 的入云流量总是选择 500M 托管连接。

2. 普通业务入云流量:Account-1 VPC1-1 普通业务对应两条 BGP 路由 10.50.0.0/21 和 10.50.8.0/21,Account-2 VPC2-1 普通业务对应一条 BGP 路由 10.50.24.0/21。数据中心出口路由器会通过 1G 专用连接的 Private Vif 和 Transit Vif,以及 500M 托管连接的 Transit Vif 同时学习到这三条路由。当前配置下,数据中心出口路由器通过 1G 专用连接 Private Vif 学习到的这三条 BGP 路由,已经设置 local-preference 为 200。对于数据中心出口路由器通过 1G 专用连接 Transit Vif 学习到的这三条 BGP 路由,现在设置 local-preference 为 199。数据中心出口路由器通过 500M 托管连接 Transit Vif 学习到的这三条 BGP 路由,默认 local-preference 为 100。

在数据中心出口路由器上,AWS 重要业务和普通业务入云流量所需的配置如下:

!在prefix-list中允许AWS云上普通业务对应的三条路由,拒绝AWS云上重要业务对应的两条路由。
ip prefix-list AWS-Normal-Services seq 1 permit 10.50.0.0/21
ip prefix-list AWS-Normal-Services seq 2 permit 10.50.8.0/21
ip prefix-list AWS-Normal-Services seq 3 permit 10.50.24.0/21
ip prefix-list AWS-Normal-Services seq 4 deny 10.50.8.115/32
ip prefix-list AWS-Normal-Services seq 5 deny 10.50.8.116/32

!在route-map中设置通过1G专用连接的Transit Vif学习到的三条普通业务对应的BGP路由Local-Preference值为199;同时拒绝AWS云上重要业务对应的两条BGP路由。
route-map AWS-Normal-Services-Prefer-DX-1-TGW permit 10
 match ip address prefix-list AWS-Normal-Services
 set local-preference 199

!将上述route-map应用在1G专用连接Transit Vif对应BGP邻居的入口方向。
router bgp 64512
 address-family ipv4
  neighbor 169.254.24.1 route-map AWS-Normal-Services-Prefer-DX-1-TGW in

配置完成后,数据中心出口路由器上的路由如下所示:

2.2 出云流量路由设计

从 AWS 云上 VPC 发往本地数据中心的流量为出云流量,路径控制按如下两种情况进行分析。

两条专线都工作正常

1. 发给本地数据中心三个重要业务:10.0.181.66、10.0.183.122 和 10.0.185.133 的流量优先使用 500M 托管连接。流量到达 DXGW 后,DXGW 需要选择 500M 托管连接而非 1G 专用连接作为下一跳,所以需要数据中心出口路由器给 1G 专用连接 Transit Vif 对应的 BGP 邻居发送路由时,不能发送数据中心三条重要业务对应的路由:10.0.181.66/32、10.0.183.122/32 和 10.0.185.133/32。相关的路由配置如下:

!在access-list中定义IDC重要业务对应的三条路由并拒绝。
ip access-list extended Block-IDC-Critical-Services-Route-on-DX-1
 1 deny   ip host 10.0.181.66 host 255.255.255.255
 2 deny   ip host 10.0.183.122 host 255.255.255.255
 3 deny   ip host 10.0.185.133 host 255.255.255.255
 1000 permit ip any any

!宣告本地数据中心的四条路由,并将上述access-list应用在1G专用连接Transit Vif对应BGP邻居的出口方向,从而确保通过1G专用连接Transit Vif发送给DXGW和TGW的BGP路由只有10.0.0.0/8。
router bgp 64512
 address-family ipv4
  network 10.0.0.0
  network 10.0.181.66 mask 255.255.255.255
  network 10.0.183.122 mask 255.255.255.255
  network 10.0.185.133 mask 255.255.255.255
  neighbor 169.254.24.1 distribute-list Block-IDC-Critical-Services-Route-on-DX-1 out

2. 发给本地数据中心普通业务 10.0.0.0/8 的流量优先使用 1G 专用连接。在过渡组网架构下,AWS VPC 路由表通过 VGW 传播过来的路由 10.0.0.0/8 进行转发,下一跳为 VGW,然后发送给 1G 专用连接的 Private Vif,满足需求,无需其它配置。

一条专线出现故障

1. 当 500M 托管连接发生故障时

发给本地数据中心普通业务的流量:在过渡组网架构下,AWS VPC 路由表通过 VGW 传播过来的路由 10.0.0.0/8 进行转发,下一跳为 VGW,然后发送给 1G 专用连接的 Private Vif,满足需求,无需其它配置。

发给本地数据中心三个重要业务的流量:在过渡组网架构下,AWS VPC 路由表内有到本地数据中心三个重要业务流量的静态路由,下一跳指向 TGW。由于 TGW1 和 TGW2 已经通过 DXGW 学习到 1G 专用连接 Transit Vif 对应的 10.0.0.0/8 路由,所以可以实现自动切换而无需更改 VPC 的路由表,这是在过渡组网架构阶段就已经得到的改善。这时,AWS 发给本地数据中心三个重要业务的出云流量路径如下:

VPC1-1 或 VPC2-1 路由表内的本地数据中心三个重要业务对应的三条静态路由–>TGW1 或 TGW2 通过 DXGW 学习到的 10.0.0.0/8 路由–>DXGW 通过 1G 专用连接 Transit Vif 学习到的 10.0.0.0/8 路由,具体如下图所示:

2. 当 1G 专用连接发生故障时

发给本地数据中心普通业务的流量:当专用连接发生故障时,AWS VPC 路由表中通过 VGW 传播过来的 10.0.0.0/8 路由被删除,这时会使用指向 TGW 的静态路由 10.0.0.0/7,从而可以自动切换为 500M 托管连接。 在过渡阶段的组网架构中已经实现。这时,AWS 发给本地数据中心普通业务的出云流量路径如下:

VPC1-1 或 VPC2-1 路由表内的本地数据中心普通业务对应的静态路由 10.0.0.0/7–>TGW1 或 TGW2 通过 DXGW 学习到的 10.0.0.0/8 路由–>DXGW 通过 500M 托管连接学习到的 10.0.0.0/8 路由。

发给本地数据中心三个重要业务的流量:在过渡组网架构下,AWS VPC 路由表内有到本地数据中心三个重要业务流量的静态路由,下一跳指向 TGW。由于 TGW1 和 TGW2 已经通过 DXGW 学习到 500M 托管连接对应的本地数据中心三个重要业务的路由,可以实现自动切换。

当专用连接发生故障时,普通业务和重要业务流量转发的具体路径如下图所示:

移除 VGW 和 Private Vif 前的准备工作

移除 VGW 和 Private Vif 后,AWS 发给本地数据中心普通业务的流量会通过 TGW 送给 DXGW,在 DXGW 上需要优选 1G 专用连接;当 1G 专用连接出现故障时,自动切换为 500M 托管连接。要实现这个需求,需要在数据中心出口路由器上设置 1G 专用连接对应 BGP 邻居的出向路由策略,在路由策略中指定数据中心普通业务对应的路由 10.0.0.0/8 的 community 为 7224:7300,DXGW 收到该路由后会将该路由的 local-preference 设置为一个较大的值,这个值会大于从 500M 托管连接学习到的 10.0.0.0/8 的 local-preference 的值。这样就可以保证 DXGW 为发送到数据中心普通业务的流量优选 1G 专用连接。除了通过 BGP community 来影响 DXGW 上出云流量的选路之外,在数据中心出口路由器上还可以通过设置两条专线上 BGP 路由的 as-path 来调整专线的优先级。具体可以参考 How do I set an Active/Passive Direct Connect connection to AWS?

数据中心出口路由器上的具体配置如下:

!在prefix-list中定义本地数据中心普通业务对应的一条路由。
ip prefix-list IDC-Normal-Services seq 1 permit 10.0.0.0/8

!在route-map中设置发往1G专用连接Transit Vif BGP邻居的路由community为7224:7300。
route-map IDC-Normal-Services-Prefer-DX-1 permit 10
 match ip address prefix-list IDC-Normal-Services
 set community 7224:7300

!将上述route-map应用在1G专用连接上Transit Vif对应BGP邻居的出口方向。
router bgp 64512
 address-family ipv4
  neighbor 169.254.24.1 send-community
  neighbor 169.254.24.1 route-map IDC-Normal-Services-Prefer-DX-1 out

3. 目标组网架构

3.1 组网架构简化

移除 Private Vif 和 VGW 后,最终组网架构如下图所示:

3.2 入云流量路由设计

在数据中心出口路由器上,删除与 VGW 和 Private Vif 对接相关的配置,包括接口、路由策略和 BGP 配置。最终的入云流量示意图如下:

数据中心出口路由器的最终配置如下所示:

!在prefix-list中允许AWS云上普通业务对应的三条路由,拒绝AWS云上重要业务对应的两条路由。
ip prefix-list AWS-Normal-Services seq 1 permit 10.50.0.0/21
ip prefix-list AWS-Normal-Services seq 2 permit 10.50.8.0/21
ip prefix-list AWS-Normal-Services seq 3 permit 10.50.24.0/21
ip prefix-list AWS-Normal-Services seq 4 deny 10.50.8.115/32
ip prefix-list AWS-Normal-Services seq 5 deny 10.50.8.116/32

!在prefix-list中定义本地数据中心普通业务对应的一条路由并允许。
ip prefix-list IDC-Normal-Services seq 1 permit 10.0.0.0/8

!在access-list中定义本地数据中心重要业务对应的三条路由并拒绝。
ip access-list extended Block-IDC-Critical-Services-Route-on-DX-1
 1 deny   ip host 10.0.181.66 host 255.255.255.255
 2 deny   ip host 10.0.183.122 host 255.255.255.255
 3 deny   ip host 10.0.185.133 host 255.255.255.255
 1000 permit ip any any
 
!在route-map中设置通过1G专用连接的Transit Vif学习到的三条普通业务对应的BGP路由Local-Preference值为199;同时拒绝AWS云上重要业务对应的两条BGP路由。
route-map AWS-Normal-Services-Prefer-DX-1-TGW permit 10
 match ip address prefix-list AWS-Normal-Services
 set local-preference 199

!在route-map中设置发往1G专用连接Transit Vif BGP邻居的路由community为7224:7300。
route-map IDC-Normal-Services-Prefer-DX-1 permit 10
 match ip address prefix-list IDC-Normal-Services
 set community 7224:7300

ip bgp-community new-format

!宣告本地数据中心的四条路由;
!1G专用连接Transit Vif对应的BGP邻居为169.254.24.1;
!为BGP邻居169.254.24.1出口方向应用distribute-list Block-IDC-Critical-Services-Route-on-DX-1,从而确保通过1G专用连接Transit Vif发送给DXGW和TGW的BGP路由只有10.0.0.0/8;
!为BGP邻居169.254.24.1入口方向应用route-map AWS-Normal-Services-Prefer-DX-1-TGW,从而确保通过1G专用连接的Transit Vif学习到的AWS云上三条普通业务对应的BGP路由Local-Preference值为199,同时拒绝AWS云上重要业务对应的两条BGP路由;
!为BGP邻居169.254.24.1出口方向应用route-map IDC-Normal-Services-Prefer-DX-1,为通过1G专用连接Transit Vif发送给DXGW和TGW的BGP路由10.0.0.0/8设置community为7224:7300;
router bgp 64512
 address-family ipv4
  network 10.0.0.0
  network 10.0.181.66 mask 255.255.255.255
  network 10.0.183.122 mask 255.255.255.255
  network 10.0.185.133 mask 255.255.255.255
  neighbor 169.254.24.1 send-community
  neighbor 169.254.24.1 distribute-list Block-IDC-Critical-Services-Route-on-DX-1 out
  neighbor 169.254.24.1 route-map AWS-Normal-Services-Prefer-DX-1-TGW in
  neighbor 169.254.24.1 route-map IDC-Normal-Services-Prefer-DX-1 out

3.3 出云流量路由设计

在 AWS VPC 路由表内取消 VGW 的路由传播,删除 VGW 和 Private Vif,然后添加一条指向 TGW 的 10.0.0.0/8 静态路由,最后再删除原有的指向 TGW 的 10.0.0.0/7 的静态路由。最终的出云流量示意图如下:

4. 总结

本文主要讲述了两条 Direct Connect 连接下的混合云组网实践,利用 Direct Connect Gateway 和 Transit Gateway,通过调整 BGP 路由策略以及灵活利用 AWS 网络服务来主动控制入云和出云方向的流量路径,从而满足业务对网络的个性化和高可用的要求。

从《多条 DX 专线上的流量工程与高可用方案设计 – Part 1》中的组网方案过渡到本文介绍的组网方案,具备以下优势:

  • 整个迁移过程实现了零丢包,业务零感知。
  • 移除了 VGW 和 Private Vif,只使用 TGW、DXGW 和 Transit Vif 进行组网,简化了网络架构。
  • 引入了 Transit Vif 和 TGW,支持连接更多的云上和云下资源,极大地增强了网络的弹性和可扩展性。
  • 实现了入云和出云流量在故障时都能够自动切换路径而无需人工干预,提升了高可用性和业务的可持续性。

由于具备以上多种优势,当前架构是混合云场景下推荐的组网方案。

5. 参考资料

[1] Amazon Direct Connect 常见问题

[2] DirectConnect 与 VPN 主备高可用组网

[3] AWS Direct Connect高可用路由设计

[4] 利用 Direct Connect Gateway 和 Transit Gateway 打造跨国企业网络环境

[5] 托管虚拟接口与托管连接之间的区别

[6] How do I set an Active/Passive Direct Connect connection to AWS?

本篇作者

缪翰林

亚马逊云科技解决方案架构师,负责基于亚马逊云科技方案架构的咨询、设计和评估。在运维,DevOps 方面有丰富的经验,目前侧重于大数据领域的研究。在加入 AWS 之前曾就职于 HP,VMware 等公司担任高级系统工程师,主要服务于国内外金融类客户。

张蒙蒙

亚马逊云科技资深网络专家,负责亚马逊云科技网络相关的架构与解决方案设计。在企业网、运营商城域网与核心网、SDN、SD-WAN 以及云网络等方向具备丰富的实践经验。张蒙蒙对 Container/K8S 相关技术和方案也具有深厚的兴趣和一定的研究。在加入亚马逊云科技之前,张蒙蒙曾历任 Juniper、Versa 和 360 企业安全等公司的高级技术支持工程师、资深解决方案架构师和 SD-WAN 产品总监等职位。