亚马逊AWS官方博客

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

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

AWS Direct Connect(以下简称 DX,或专线)用于连接客户在亚马逊云科技、其他公有云服务提供商以及本地数据中心内部署的业务,它为客户提供了一个私有、可靠的混合云和多云连接解决方案。企业客户在使用已有专线的基础上,随着业务的新增或扩展,需要增加专线来满足需求。另外,为了避免单线故障,提升业务容灾能力,灵活使用边界网关协议(BGP:Border Gateway Protocol)和 AWS 提供的各类网络服务来实现业务在新老专线的负载均衡或主备冗余。本文以客户的使用案例为主线,介绍如何实现上述功能。

1. 现网业务及架构

客户现有专线是一条 1Gbps 的专用连接,经由 AWS DX 酒仙桥 PoP(Point of Presence)点连接云上私有网络(VPC)和本地数据中心(IDC),划分了多个私有虚拟接口(Private VIF)并分别关联不同 AWS 账户的 VPN Gateway(VGW)。本地数据中心放置了一台 Cisco 路由器,使用 BGP 打通云上 VPC 和本地 IDC 的互访,现网架构如下图中黄色虚线所示:

1.1 业务部署现状及问题

如上图所示,客户在云上和本地数据中心内部署的业务分为普通业务和重要业务两类,具体如下:

  1. Account-1 VPC 1-1 有 10.50.0.0/21 和 10.50.8.0/21 两个网段,VPC1-1 内部署了普通业务与两个重要业务:10.50.8.115 和 10.50.8.116。
  2. Account-2 VPC 2-1 有 10.50.24.0/21 一个网段,只部署了普通业务。
  3. 本地数据中心有 10.0.0.0/8 一个网段,部署了普通业务与三个重要业务:10.0.181.66、10.0.183.122 和 10.0.185.133。

当前,客户使用现有 1Gbps 专线承担所有业务,但随着业务的扩展,现有专线上的业务突增并经常拥塞,导致重要业务丢包。为了保障重要业务,客户需要新开通一条专线,专门用于承载重要业务流量,并作为普通业务的备用线路。

1.2 组网方案设计

AWS Direct Connect 提供两种类型的专线,分别是专用连接(Dedicated Connection )和托管连接(Hosted Connection)。在下表中,对两种类型的专线进行主要特性的对比,可以看到托管连接的费用更低,并且两者在组网方案上的能力是相同的。由于对费用敏感,客户选择了成本较低的托管连接。

特性 托管连接 专用连接
费用
速率 50 Mbps, 100 Mbps, 200 Mbps, 300 Mbps, 400 Mbps, 500 Mbps, 1 Gbps, 2 Gbps, 5 Gbps, 10 Gbps 1 Gbps, 10 Gbps, 100 Gbps
虚拟接口 1 个虚拟接口,类型可以为私有、公共或中转 50 个私有或公共虚拟接口,
以及 1 个中转虚拟接口
组网方案 Private Vif + VGW
Private Vif + DXGW + VGW
Transit Vif + DXGW + TGW
Private Vif + VGW
Private Vif + DXGW + VGW
Transit Vif + DXGW + TGW

为了实现 PoP 点级别的冗余,将新增 500M 托管连接由本地数据中心接入 AWS DX 国富瑞 PoP 点,和已有接入 AWS DX 酒仙桥 PoP 点的 1G 专用连接形成两条独立的物理链路。两条物理专线针对普通业务和重要业务互为主备,当其中一条专线出现故障网络不通时,流量全部切换至另一条专线,确保业务正常运行。

下图中连接 AWS DX 国富瑞 PoP 点的专线是客户新开通的 500Mbps 托管连接,用蓝色连线表示:

一个托管连接只支持一个虚拟接口,为了连接客户在 AWS 云上多个业务部门的 VPC,需要采用 Transit Vif + DXGW + TGW 的组网方案。由于每个业务部门有自己独立的 AWS 账户,需要各个业务部门分别创建自己的中转网关(TGW:Transit Gateway),然后去连接运维团队账户的专线网关(DXGW:Direct Connect Gateway)。

新旧两条专线组合在一起,完整的组网方案如下图所示:

另外,AWS Direct Connect 支持 Bidirectional Forwarding Detection(BFD),BFD 是一种链路探测协议,它的开启能够实现 BGP 亚秒级的故障收敛时间。更多关于 BFD 的配置说明,可参考:How do I enable BFD for my Direct Connect connection

2. 路由设计

2.1 入云流量路由设计

从本地数据中心发往 AWS 云上 VPC 的流量为入云流量,路径要求如下:

  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 托管连接。

通过 1G 专用连接发送给本地数据中心的路由如下图所示。

  1. Account-1 VGW1 发布 VPC1-1 的两条路由给本地数据中心出口路由器:10.50.0.0/21 和 10.50.8.0/21。
  2. Account-2 VGW2 发布 VPC2-1 的一条路由给本地数据中心出口路由器:10.50.24.0/21。

通过 500M 托管连接发送给本地数据中心的路由如下图所示。

  1. Account-1 TGW1 发布 VPC1-1 的四条路由给本地数据中心出口路由器:10.50.0.0/21、10.50.8.0/21、10.50.8.115/32 和 10.50.8.116/32。
  2. Account-2 TGW2 发布 VPC2-1 的一条路由给本地数据中心出口路由器:10.50.24.0/21。

本地数据中心出口路由器通过两条专线学习到的全部 BGP 路由如下图所示。

  1. 重要业务入云流量:Account-1 VPC1-1 重要业务对应的两条 BGP 主机路由 10.50.8.115/32 和 10.50.8.116/32,本地数据中心出口路由器只会通过 500M托管连接学习到。当本地数据中心发送重要业务流量给 Account-1 VPC1-1 时,默认出口是 DX-2 托管连接。当托管连接出现故障时,本地数据中心出口路由器还有通过专用连接学习到的 10.50.8.0/21 BGP 路由,重要业务入云流量可以自动切换到 1G 专用连接。
  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。本地数据中心出口路由器会通过两条专线同时学习到这三条路由,对于从本地数据中心发往云上的普通业务流量,本地数据中心出口路由器会根据 BGP 选路规则选择其中一条专线做出口,可能会选择托管连接,这不满足客户的需求。

从本地数据中心发往云上的普通业务流量,客户期望优先走 1G 专用连接,当专用连接发生故障时,自动切换为 500M 托管连接。这时候需要在本地数据中心出口路由器上,利用 BGP 路径属性控制路由的优先级。BGP 的路径属性主要有 Local-Preference, AS_Path, Origin, MED 等,客户选择使用 Local-Preference 属性来控制普通业务入云流量优先走 1G 专用连接,拥有最大 Local-Preference 的路径将优先被选择。

本地数据中心出口路由器上设置从 1G 专用连接学习到的 BGP 路由的 local-preference 值为 200,而从 500M 托管连接学习到的 BGP 路由的 local-preference 默认值为 100,低于通过 1G 专用连接学习到路由的 200,会被作为备份路由。从而,从本地数据中心发给 AWS 云上 VPC 普通业务的流量优先使用 1G 专用连接。当专用连接发生故障时,使用 500M 托管连接。本地数据中心出口路由器的 BGP 配置范例如下:

!在 prefix-list 中定义 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


!在 route-map 中设置 AWS 云上普通业务对应的三条 BGP 路由 Local-Preference 值为 200。
route-map AWS-Normal-Services-Prefer-DX-1 permit 10 
 match ip address prefix-list AWS-Normal-Services
 set local-preference 200


!将上述 route-map 应用在 1G 专用连接上两个 BGP 邻居的 in 方向,从而确保通过 1G 专用连接学习到的普通业务 BGP 路由条目被本地数据中心优选。
router bgp 64512
 address-family ipv4
  neighbor 169.254.22.1 route-map AWS-Normal-Services-Prefer-DX-1 in
  neighbor 169.254.23.1 route-map AWS-Normal-Services-Prefer-DX-1 in

入云流量路径控制的完整示意如下图所示。

  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 托管连接。

2.2 出云流量路由设计

从 AWS 云上 VPC 发往本地数据中心的流量为出云流量,路径要求如下:

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

为了满足上述出云流量的路径要求,本地数据中心出口路由器需要通过 1G 专用连接发送给 AWS VGW1 和 VGW2 的路由为 10.0.0.0/8,同时通过 500M 托管连接发送给 AWS DXGW 的路由为 10.0.0.0/8、10.0.181.66/32、10.0.183.122/32 和 10.0.185.133/32。

本地数据中心出口路由器的 BGP 配置范例如下:

!在 access-list 中定义 IDC 重要业务对应的三条路由并 deny。
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.123 host 255.255.255.255
 1000 permit ip any any


!宣告本地数据中心的四条路由,并将上述access-list应用在1G专用连接上两个BGP邻居的out方向,从而确保通过1G专用连接发送给VGW1和VGW2的路由只有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.123 mask 255.255.255.255
  neighbor 169.254.22.1 distribute-list Block-IDC-Critical-Services-Route-on-DX-1 out
  neighbor 169.254.23.1 distribute-list Block-IDC-Critical-Services-Route-on-DX-1 out

AWS 云上 VGW1 和 VGW2 关联 1G 专用连接,TGW 和 DXGW 关联 500M 托管连接,AWS 云上 VPC 到本地数据中心的出云流量,需要在 VPC 路由表处完成路径选择。所以本地数据中心的出口路由器上除了上述 BGP 邻居的 distribute-list 配置外,无需设置 BGP 路由的各种属性。

  1. 在 Account-1 VPC1-1 和 Account-2 VPC2-1 的路由表内添加三条静态路由,分别对应本地数据中心的三个重要业务。这三条静态路由的下一跳都指向 TGW。根据路由选择的最长匹配原则,从 AWS 云上 VPC 发给本地数据中心三个重要业务的流量会优先使用 500M 托管连接。当托管连接发生故障时,需要手动调整这三条重要业务路由下一跳指向 VGW 从而使用 1G 专用连接。
  2. 在 Account-1 VPC1-1 和 Account-2 VPC2-1 的路由表内开启对应 VGW 的路由自动传播功能。本地数据中心的普通业务:10.0.0.0/8 对应的一条 BGP 路由,两个 VPC 的 VGW 都会从 1G 专用连接学习到并自动传播到对应 VPC 的路由表内。由于 TGW 不支持将路由自动传播到 VPC 路由表内,需要手动添加一条静态路由 10.0.0.0/7 指向 TGW。根据路由选择的最长匹配原则,从 AWS 云上 VPC 发给本地数据中心普通业务的流量会优先使用 1G 专用连接。当专用连接发生故障时,VPC 路由表内的 10.0.0.0/8 会被自动移除,VPC 会开始使用路由 10.0.0.0/7 也就是 500M 托管连接。VPC 路由表开启 VGW 路由自动传播功能如下图所示:


VPC 路由表完成上述配置后,出云流量路径控制的完整示意如下图所示。

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

3. 总结

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

上述混合云组网方案中,重要业务出云流量需要在 VPC 路由表内手动调整路由条目才能实现路径切换。同时,在该方案中使用了 VGW + TGW + DXGW 的组网方案,并同时使用了 Private Vif 和 Transit Vif 两种类型的虚拟接口。在本系列第二篇文章中,我们会探讨将现有网络架构中的 VGW 移除并只使用 Transit Vif 这一种类型的虚拟接口,同时实现重要业务出云流量在故障时能够自动切换路径。从而在简化组网方案的同时,增强自动化和高可用能力。

4. 参考资料

[1] Amazon Direct Connect 常见问题

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

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

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

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

本篇作者

缪翰林

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

张蒙蒙

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