亚马逊AWS官方博客
利用 Site-to-Site VPN 在亚马逊云科技中国区实现企业级混合云互连(实践篇)
![]() |
在“利用 Site-to-Site VPN 在亚马逊云科技中国区实现企业级混合云互连(设计篇)”中我们设计采用亚马逊云科技中国区的 TGW 和虚拟路由器与云下本地数据中心的边缘路由器通过基于互联网的隧道技术(Site-to-Site VPN)实现了互连互通,同时,本设计考虑到了网络的冗余负载,对路由器和线路进行了 HA 部署,采用 BFD 技术弥补了互联网传输不稳定的问题,并能做到快速路由收敛。利用 BGP 支持的等价多路径特性,互连的带宽增加了一倍。本篇将对该设计进行配置实现,同时对等价多路径和 BFD 以及 VRRP 的实现做验证和对比。
1. 拓扑和参数规划
云端数据中心与本地数据中心互连设计的参数拓扑设计如下,见图 1。
![]() |
图 1. 云端与本地数据中心互连设计拓扑与参数
对相关网络组件的 IP 地址、BGP ASN 等参数进行设计和分配(VPC 和路由器等名称、IP 地址、ASN 编号等都是设计示例,读者可以按照实际情况调整),见表 1。
云端宁夏区 IP 地址: | TGW-Transit VPC Connect 挂载 GRE/BGP 参数 | 宁夏区-本地数据中心 GRE 隧道 IP 地址 | 本地数据中心路由器 IP 地址和 ASN |
OCserverVPC: 172.16.0.0/16 AppVPC: 172.18.0.0/16 Router1 PrivateSub1: 10.20.2.10/24 Router2 PrivateSub2: 10.20.4.10/24 Router1 PublicSub1: 10.20.1.x/24 (DHCP) Router2 PublicSub2: 10.20.3.x/24 (DHCP) Router1 WAN EIP: 69.230.215.128 Router2 WAN EIP: 52.83.51.173 TGW CIDR: 10.10.10.0/24 TGW-Router1 Address: 10.10.10.10 TGW-Router2 Address: 10.10.10.20 |
TGW-Router1 GRE 地址: 169.254.10.0/29 Router1 GRE tunnel Interface: 169.254.10.1 TGW-Router1 GRE tunnel Interface: 169.254.10.2 – 3 TGW-Router2 GRE 地址: 169.254.20.0/29 Router2 GRE tunnel Interface: 169.254.20.1 TGW-Router2 GRE tunnel Interface: 169.254.20.2 – 3 Transit VPC BGP ASN: 65510 TGW BGP ASN: 64512 |
Router1-RouterA: 169.254.240.1/24 – 169.254.240.2/24 Router2-RouterB: 169.254.241.1/24 – 169.254.241.2/24 Router1-RouterB: 169.254.242.1/24 – 169.254.242.2/24 Router2-RouterA: 169.254.243.1/24 – 169.254.243.2/24 |
RouterA WAN IP: 173.39.153.12 RouterB WAN IP: 173.39.153.13 RouterA LAN IP: 10.100.2.252 RouterB LAN IP: 10.100.2.253 VRRP Virtual IP: 10.100.2.254 LAN: 10.100.2.0/24 BGP ASN: 65521 |
表 1. 公有云和本地数据中心互连的参数设计和分配
其中 Transit VPC 中的虚拟路由器的公网地址是启用 Cisco Catalyst 8000v 路由实例后为其创建并分配的亚马逊云科技 EIP(Elastic IP,弹性 IP)地址,为不变公网地址。本地数据中心的路由器 WAN IP 为企业用户向运营商申请的固定公网地址,建议两台路由器可采用不同运营商的互联网链路,提高可靠性和可用性。两端路由器的公网地址的分配原则是避免使用自动分配的地址,而是采用固定 IP 地址,防止路由因地址变化而失效。
2. 网络互连的实现
登陆亚马逊云科技中国区云端管理控制台,根据前述设计和相关参数的分配,通过以下步骤实现本设计。
2.1 创建 Transit VPC
创建Transit VPC 和相关子网,命名为 TransitVPC-ZHY,配置 CIDR 地址段为 10.20.0.0/16。创建一个 IGW,并附加在 Transit VPC 上。在 VPC 内创建四个子网,两个公有子网的 CIDR 为 10.20.1.0/24、10.20.3.0/24,两个私有子网为 10.20.2.0/24、10.20.4.0/24。子网分两个 AZ 部署,见图 1。
2.2 创建并启动路由器实例
在亚马逊云科技管理控制台的启动 EC2,并选择“Catalyst8000v”为系统映像,在配置实例详细信息对话框中输入以下参数,见图 2。
![]() |
图 2. 配置 Cisco 路由器实例
通过选择在第一步中创建的 TransitVPC,将路由器实例放置在其中。选择第一个 AZ,将本次创建的路由器实例放置在 AZ1 中。在网络接口配置中,需要为路由器实例创建两个 eni 网口,其中 eth0 被放置于公有子网 TransitPubSub1 中,将成为路由器的 WAN 接口。eth1 将成为路由器的 LAN 接口,将此接口放置在私有子网 TransitPrivSub1 中,并设置 IP 地址为 10.20.2.10,此地址将成为路由器 LAN 口 IP 地址。为此路由器实例起名为 CSR01-ZHY。
按照上述方法再启动一个路由器实例命名为 CSR02-ZHY,将其放置到 AZ2 所在子网内,手动配置 eth1 的 IP 地址为 10.20.4.10。
在 VPC 控制面板左栏选择“弹性 IP”(EIP),创建两个 EIP。选择路由器实例,然后将 EIP 关联到路由器实例上。
2.3 创建并配置 TGW Connect 挂载
首先将 Transit VPC 作为 VPC 挂载附加到在第 3 章中创建的 TGW 上,方法见第 3 章相关描述。此 VPC 挂载将作为 Connect 挂载的 GRE 隧道的 Underlay 网络,因此在 Transit VPC 中与私有子网关联的路由表的配置中需加入指向 TGW CIDR 10.10.10.0/24 的路由项,网关指向该 TGW VPC 挂载 ID 以建立路由器到 TGW 的 Underlay 层路由可达性。
在 VPC 控制面板左栏选择“中转网关连接”后在右上角选择“创建 Transit Gateway 挂载”,在对话框中输入配置,如图 3 所示。
![]() |
图 3. Transit VPC 中私有子网路由表的配置
在图 3 的配置中选择相应的 TGW,挂载类型选择 Connect,之前配置的 Transit VPC 挂载为传输挂载,命名 Connect 挂载为 Connect-TGW-CSR 后创建完毕。
之后在 TGW Connect 中创建 Connect 对等连接,如图 4。
![]() |
图 4. Connect 对等的配置
在图 4 的配置中创建了名为 Connect-Peer-CSR01 的 Connect 对等连接。对话框中“Transit Gateway GRE 地址”输入的是用于建立 GRE 隧道的底层网络的 TGW 接口地址,“对等 GRE 地址”是虚拟路由器的 LAN 口 IP 地址,“CIDR 块的 IPv4 内的 BGP”地址实际上是 GRE 隧道的虚拟接口地址段,也用于建立 eBGP 邻居。“对等 ASN”中输入本设计中为 Transit VPC 内的虚拟路由器分配的 BGP ASN 65510。本设计中采用双虚拟路由器架构,因此需要创建两个 Connect 对等连接,配置方法同上。IP 地址和 ASN 的分配见表 1。
2.4 配置 Transit VPC 中的虚拟路由器
登陆 CSR01-ZHY 虚拟路由器实例,进入 Cisco IOS 路由器命令行配置界面。
首先对端口进行配置,建立 GRE 隧道,在互联网 GRE 隧道接口上启用 BFD,第一台路由器 CSR01-ZHY 的主要配置命令和注释如下:
然后在路由器上配置 BGP 路由协议,并设置与本地数据中心路由器建立的 BGP 邻居上启用 BFD,主要配置命令和注释如下:
在路由器上配置 Underlay 网络到 TGW CIDR 的静态路由,网关指向亚马逊云科技为子网 10.20.2.0/24 保留的网关地址 10.20.2.1,配置命令如下:
最后在路由器上配置 Underlay 网络到互联网的静态路由供建立 GRE 隧道所用,网关指向亚马逊云科技为公有子网 10.20.1.0/24 保留的网关地址 10.20.1.1,配置命令如下:
Transit VPC 中第二台路由器 CSR02-ZHY 的配置方法相同,相关的 IP 地址和 BGP 参数请参见表 1。
路由器配置完毕后,查看 TGW Connect 对等连接可以看到 TGW 与路由器的连接已经成功,见图 5。
![]() |
图 5. Connect 对等连接状态确认
2.5 配置本地数据中心路由器
本地数据中心路由器的配置主要包括配置与 Transit VPC 中路由器的 GRE 隧道连接、BGP 路由、BFD、将直连网段分发到 BGP 路由中。本例启用双路由器做 HA 部署,因此,配置中还包括 VRRP 冗余网关的配置。
首先对端口进行配置,建立 GRE 隧道,在互联网 GRE 隧道接口上启用 BFD,在 LAN 口上启用 VRRP 冗余网关。第一台路由器 OP-RouterA 主要配置命令和注释如下:
然后在路由器上配置 BGP 路由协议,并设置与云端 Transit VPC 中路由器建立的 BGP 邻居上启用 BFD,主要配置命令和注释如下:
在第二台路由器 OP-RouterB 的 VRRP 配置中需要为 VRRP 指定与 OP-RouterA 不同的优先级,并设置同样的虚拟网关地址,两台路由器中优先级数值较大的这台为主用网关,较小的为备用网关,本设计中 OP-RouterA 为主用网关,OP-RouterB 为备用,配置命令如下:
2.6 配置 GRE 隧道的 IPSec 加密(GRE over IPSec)
这里我们用 IPSec 来加密云端和本地数据中心基于互联网通过 GRE 隧道互连的链路,以保证传输中的安全。
IPSec 加密涉及每台路由器的两个步骤为:
- 配置 ISAKMP(IKE)
- 配置 IPSec
IKE 的存在是为 IPsec 建立 SA(安全关联)。IKE 必须与对等体协商一个 SA 关系。
以云端路由器 CSR01-ZHY 和本地路由器 OP-RouterA 间的配置为例。首先从 CSR01-ZHY 开始配置。
1. 配置 ISAKMP 策略:
接下来,为 CSR01-ZHY 路由器与本地路由器 OP-RouterA(公有 IP 为 173.39.153.12)间的认证定义一个预共享密钥:
预共享密钥设置为 amazonws。这个密钥将用于与本地路由器 OP-RouterA 的所有 ISAKMP 协商。
2. 配置 IPSec
首先创建用于保护传输数据的转换集,将其命名为 TSET:
然后,我们创建一个 IPSec 配置文件,将先前定义的 ISAKMP 和 IPSec 配置连接在一起。我们将我们的 IPSec 配置文件命名为 gre-tunnel:
最后将 IPsec 加密配置到路由器的 Tunnel interface 上:
同样,在本地路由器 OP-RouterA 的 IPsec 加密配置如下:
现在,之前配置的 GRE 隧道已经使用 IPSec 进行了加密,为数据传输提供了安全保护。
2.7 在云端 VPC 路由表中添加到本地数据中心的路由项
在与 OCserverVPC-ZHY 和 AppVPC-ZHY 两个亚马逊云科技宁夏区 VPC 相关联的路由表中添加目的为云下本地数据中心网段 10.100.0.0/16 的路由项,目标指向相应 TGW 的 VPC 挂载 ID,见图 6。
![]() |
图 6. 为 VPC 路由表添加路由项
3. 云端与本地互连实现结果验证和优化
3.1 实现结果验证
首先在云下本地数据中心路由器上通过“show ip route”命令查看通过 BGP 获得的路由表,见图 7。
![]() |
图 7. 本地数据中心路由器 A 的路由表
在本地数据中心路由表中可以看到通过 GRE 隧道连接,目标为宁夏 VPC 网络的两个 IP 网段都已经学习到,且根据设计要求都实现了 ECMP。
在云端 Transit VPC 中的路由器上通过“show ip route”命令查看通过 BGP 获得的路由表,见图 8。
![]() |
图 8. 云端 Transit VPC 中路由器 1 的路由表
在 Transit VPC 中路由器的路由表中可以看到云下本地数据中心的网段 10.100.0.0/16 通过与本地数据中心路由器连接的两条 GRE 隧道获得;亚马逊云科技宁夏区的两个 VPC 网段则通过与 TGW Connect 连接的 GRE 隧道获得。这些路由都是按照设计要求实现的 ECMP。
查看 TGW 的路由表,可以看到云下本地数据中心的网段 10.100.0.0/16 已经通过 TGW 和 Transit VPC 内两台路由器之间的 BGP 路由协议获得,见图 9。
![]() |
图 9. TGW 路由表中的本地数据中心路由项
在云端登陆 VPC 内的虚拟主机,通过 ping 本地数据中心中的主机验证端到端的连接成功,见图 10。
![]() |
图 10. 云端和本地数据中心主机之间的连通性测试
在云端路由器 CSR01-ZHY 上通过“show bfd neighbor”命令查看与本地数据中心路由器上所建立 BFD 连接状态,可以看到 BFD 都被启用,见图 11。
![]() |
图 11. 云端和本地路由器的 BFD 状态
3.2 对比和优化
3.2.1 ECMP 实现效果对比
由图 7、图 8、图 9可以看到,到两端的目的网段都有两条等价路径存在。采用基于 linux 的 iperf3 网络性能测试工具,在云端宁夏区主机(172.16.3.146)和云下数据中心的主机(10.100.2.100)间进行端到端的带宽测试。
首先,将宁夏区或本地数据中心的路由器关闭一台,使 ECMP 失效,测试的传输带宽为 421Kbps,如图 12 所示:
![]() |
图 12. 未启用 ECMP 时的带宽测试
连续三次测试结果在 350Kbps – 450Kbps 之间。
然后恢复关闭的路由器,使 ECMP 重新生效,测试的传输带宽为 922Kbps,见图 13 所示。
![]() |
图 13. 启用 ECMP 后的带宽测试
连续三次测试结果在 750Kbps – 950Kbps 之间。
以上测试验证了启用 ECMP 使传输带宽约增加一倍,达到设计目标。
3.2.2 BFD 快速实现 BGP 收敛的效果对比
由于本方案采用了 BGP 的 ECMP 实现,两端的目的网段在 TGW、路由器中的路由表中均有等价路径的存在。路由器实现 ECMP 是基于数据流的负载均衡,因此持续的 ping 被当作一条完整的数据流。在实际测试过程中,有 50% 的概率,ping 数据流不经过被中断的数据链路,因此 BGP 的收敛过程以及 BFD 的作用不能显示出来。在测试中,本文将测试方案拓扑简化为图 14,这样能够清晰地对比 BFD 作用下的 BGP 收敛效果。
![]() |
图 14. BFD 测试方案
两端路由器如上图均只保留到对端的一条隧道连接,同时通过 GRE 隧道连接宁夏区的两台路由器,使测试环境仍然具有可收敛的冗余路径,该链路上设置并启用 iBGP 路由协议。
清除路由器中所有的 BFD 配置,从云端主机持续 ping 本地数据中心主机,然后关闭本地数据中心充当 VRRP Master 的路由器,ping 连接中断,等待 ping 连接恢复,共丢失 177 个包,见图 15。这是由于思科路由器的 BGP 协议每 60 秒检测邻居的可达性,如果检测到邻居不可达,需要保持 180 秒才确认邻居路由器失效并启动 BGP 路由收敛至冗余链路后连接恢复。
![]() |
图 15. 无 BFD 时的连接测试
重新开启 Master 路由器,并在所有路由器中 BGP 协议覆盖的链路上启用 BFD,重复上述 ping 测试,关闭 Master 路由器。共丢失 2 个包,见图 16。
![]() |
图 16. 启用 BFD 时的连接测试
其中,VRRP 的切换时间约为 1 秒(本文设置 VRRP Master 存活检测时间为 250ms),见图 17。
![]() |
图 17. VRRP 主从切换参数
通过 Show log 命令查看路由器日志,可以看到 BFD 从检测到链路失效到触发 BGP 收敛为毫秒级别,见图 18。
![]() |
图 18. BFD 的故障检测
通过上述验证,可以看到启用 BFD 极大地改善了故障恢复的时间,VRRP 的主从网关切换会产生少量传输丢包。
3.2.3 互联网链路故障下的 VRRP 优化
上述测试将本地数据中心的 VRRP Master 路由器关机进行 VRRP 的切换验证,根据配置,VRRP Backup 路由器在预置时间内无法检测到 Master 路由器就升级为主用局域网网关路由器以完成故障保护切换。
但是,如果 Master 路由器本身未宕机,只是所连接的 WAN 口发生链路故障,虽然 BFD 同样可以触发 BGP 进行收敛,但由于 VRRP 仅在 LAN 口上生效,由于 LAN 口状态仍旧正常,因此将不会触发网关切换。从宁夏区主机发起对本地数据中心主机的持续 ping,然后将 Master 路由器的 WAN 口 IP 地址改成错误地址模拟连接失效,ping 连接立即中断,且永不恢复。其原因是:虽然 BFD 触发 BGP 路由收敛后 ping 的 echo request 包将通过本地 backup 路由器到达目的地,但 ping 的 echo reply 回程包仍旧将 Master 路由器作为本地 LAN 网关,由此产生路由黑洞。见图 19。
![]() |
图 19. WAN 口链路故障下的 VRRP 路由黑洞
为了解决上述问题,VRRP 路由器需要在 WAN 链路发生故障时有策略机制去使 VRRP Master 路由器失效,从而触发 VRRP 的保护切换。本设计采用路由器所提供的链路状态跟踪(tracking)功能,并配合 VRRP 优先级修改策略使 Master 路由器的优先级降至比 Backup 路由器更低,从而触发局域网网关的主从切换。以 Master 路由器为例,在原有配置基础上增加相关配置如下:
上述配置将建立 ID 为 10 和 20 的两个 track 进程,分别通过 ping(ICMP)来跟踪 Master 路由器上基于 WAN 接口的两条 GRE 隧道链路的情况,一旦任何一条隧道链路发生连通性问题将立即使 VRRP 的优先级降低 30(原先 Master 为 120,Backup 为 100),这将使 Backup 路由器拥有更高的 VRRP 优先级,从而触发主从网关切换。
经过上述配置后,在宁夏区主机和本地数据中心主机间发起持续 ping,修改 Master 路由器 WAN 口 IP 地址模拟链路失效后的恢复情况见图 20。共丢失 5 个包。
![]() |
图 20. VRRP 切换策略配置后启用 BFD 时的连接测试
链路失效后 BFD 的作用以及 VRRP 切换记录见图 21。产生的丢包主要源于 tracking 的可达性检测延迟。
![]() |
图 21. 基于策略的 VRRP 主从切换日志
经上述对 VRRP 的配置优化,可以做到无论是本地路由器设备和链路故障,都能做到有效的故障保护切换。
4. 总结
本篇讨论了亚马逊云科技中国区和云下本地数据中心的互连的实现和优化。通过采用云端的 TGW 和虚拟路由器与云下数据中心的边缘路由器通过基于互联网的隧道技术实现了互连互通,同时,本设计也考虑到了网络的冗余负载,对路由器和线路进行了 HA 部署并采用 BFD 技术弥补了互联网传输不稳定的问题,并能做到快速路由收敛。利用 BGP 支持的等价多路径特性,互连的带宽增加了一倍。本篇还对等价多路径和 BFD 以及 VRRP 的实现做了验证和对比,并且针对 WAN 链路失效下 VRRP 不起作用的场景提出了优化解决方案,使本设计达到企业级联网要求。