亚马逊AWS官方博客
利用 VPC Route Server 实现冗余网关的保护切换
![]() |
企业在部署网络出口网关(路由器或网络防火墙等)时,通常采用双网关冗余方式以确保在其中一侧设备或链路发生故障时网络传输在最大程度上得以永续。在云端部署也不例外,通常虚拟网关设备建议冗余部署在两个不同的可用区(Availability Zone,AZ),以获得更高的可靠性,见图 1。
![]() |
图 1. 跨可用区部署的云端虚拟网关设备
但在云端 VPC(Virtual Private Cloud)部署跨可用区的双虚拟网关设备作为 VPC 子网网关时,将无法像在云下本地数据中心环境中采用 HSRP(Hot Standby Router Protocol)/VRRP(Virtual Router Redundancy Protocol)协议来为 LAN(Local Area Network,局域网)用户实现冗余网关,原因如下:
- 亚马逊云科技 VPC 环境下无法支持组播,而 HSRP/VRRP 通过组播来交换协议信息;
- HSRP/VRRP 要求两台路由器面向 LAN 的网关地址和虚拟网关地址都在同一网段,但跨可用区部署的路由器 LAN 端口不在一个网段下;
- 为 LAN(私有子网)中的主机实例路由表建立的网关只能指向本子网的路由器的虚拟网口 eni(elastic network interface,弹性网络接口),无法指向具体的 IP 地址。
因此,《在跨可用区部署的双路由器实例间实现冗余网关切换》一文中描述了用厂商虚拟网关设备所提供的冗余保护切换功能或采用 AWS Lambda 等服务修改子网路由表的方式来实现自动故障保护切换。
2025 年 4 月 1 日,亚马逊云科技宣布全面推出 VPC Route Server(后文采用“路由服务器”作为同义名词),用于简化 Amazon VPC 中虚拟网关设备之间的动态路由。借助路由服务器,能够通过 BGP(Border Gateway Protocol,边界网关协议)从虚拟网关设备发布路由信息,并动态更新与子网和互联网网关相关联的 VPC 路由表。这也为解决前述挑战提供了新的选择。
目前,路由服务器已在以下亚马逊云科技区域推出:美国东部(弗吉尼亚)、美国东部(俄亥俄州)、美国西部(俄勒冈州)、欧洲地区(爱尔兰)、欧洲地区(法兰克福)和亚太地区(东京)。
本文将利用路由服务器来实现跨可用区的冗余虚拟网关设备的故障保护切换。
1. 路由服务器的实现原理
路由服务器是一个完全托管的服务,它可以自动管理 VPC 内的路由,实现动态路由更新和故障切换。以下是路由服务器的工作原理:
- 路由服务器支持 BGP,这允许虚拟网关设备与路由服务器间建立 BGP 邻居关系,并动态交换路由信息。
- 路由服务器充当 VPC 内的路由表中央控制平面,对 VPC 或子网路由表进行集中式路由项管理。它从所有配置的 BGP 邻居处收集路由信息,计算最佳路径,并将这些路由自动传播到所选的 VPC 子网路由表。因此,用户无须手动配置子网路由表,路由服务器会根据 BGP 的路由选择,将到达目标网络的最佳路径安装到子网路由表中,并且在虚拟网关设备或链路发生故障时,将 BGP 路由收敛后的结果更新到子网路由表中,从而实现冗余网关的故障保护切换。
- 路由服务器使用 BFD(Bidirectional Forwarding Detection,双向转发检测)或 BGP keepalive 来监控或检测与 BGP 邻居的连接状态。当检测到网关设备故障时,路由服务器会自动更新路由,将流量切换到可用的备用虚拟网关设备,从而实现故障检测和自动切换。推荐采用 BFD 来检测链路状态,因为 BFD 提供了更快的故障检测速度,并与 BGP 协同工作,触发 BGP 快速收敛。
- 在双虚拟网关设备冗余部署下,有超过一条到达目标网段的链路,BGP 路由协议会选择较优路径放置到路由表中。路由服务器利用 BGP 属性中的 MED(Multi Exit Discriminator,多出口鉴别器)属性来决定最佳路径。MED 是 BGP 路由的一个可选、非传递属性,用于影响从其他 AS(Autonomous System,自治系统)进入本 AS 的最佳路径。MED 类似于路由的度量值,在 AS 之间交换,一个 AS 使用 MED 来影响另一个 AS 选择出口路径。MED 主要用于多个入口点场景下,帮助 AS 选择到达目标网段的最佳路径,从而实现流量控制和优化。MED 不会影响 AS 内部的路由选择,主要作用在于 AS 间的路径选择。
- 路由服务器本身就是一个高可用的服务,可以跨多个可用区部署。这确保即使在单个可用区发生故障的情况下,路由服务器仍然可用。
- 路由服务器不维护任何连接状态信息,它只负责路由的计算和分发。这简化了跨可用区部署的复杂性,无需考虑虚拟网关设备之间的状态同步问题。
图 2 的架构图展示了路由服务器解决方案的原理以及本文实现冗余网关故障保护切换所用到的示例参数。
![]() |
图 2. 路由服务器架构图及设计参数
2. 实现方法和步骤
本文将通过一个具体的示例,演示如何使用路由服务器实现跨可用区的冗余网关故障保护切换。在这个示例中,本文将在两个不同的可用区部署 Cisco 虚拟路由器实例作为网关设备,并为每个私有子网都关联一个独立的路由表。通过观察在网关设备失效时,路由表中指向目标网段的下一跳网关地址的变化以及网络连接的恢复情况来验证该解决方案的实现。实现架构图以及相关示例设计参数请见图 2。
2.1 路由服务器相关术语
路由服务器引入了如下相关术语:
- Route server(路由服务器):路由服务器使用 BGP 路由协议计算的 IPv4 或 IPv6 路由更新 VPC 路由表。
- VPC association(VPC 关联):VPC 关联是在路由服务器和 VPC 之间建立关联,也就是该路由服务器将在关联的 VPC 中工作。
- Route server endpoint(路由服务器端点):路由服务器端点是子网内由亚马逊云科技管理的组件,用于建立路由服务器与 BGP 对等体之间的 BGP 连接。
- Route server peer(路由服务器对等方):路由服务器对等方是路由服务器端点与在亚马逊云科技中部署的虚拟网关设备(例如在 EC2 实例上运行的防火墙设备或本例中的 Cisco 虚拟路由器)之间的会话。
- Route server propagation(路由服务器传播):启用后,路由服务器传播会将 BGP 路由表中的路由更新到指定的 VPC 子网路由表中。
为了和 VPC 管理控制台中的中文名称匹配,便于对照,本文在下面的配置描述中将采用中文术语。
2.2 前提条件和示例设计参数
首先,用户需要有适当的 IAM 权限以创建和管理路由服务器和相关组件,以下是所需的权限策略:
其次,虚拟网关设备需要支持 BGP 协议以及能够发起 BGP 会话。如果采用 BFD 作为链路故障检测工具,则网关设备还需要支持 BFD。
本文为每台虚拟网关设备配置了两个 eni,一个 eni 为公有子网接口,另一个 eni 为私有子网接口,该接口和所配置的 IP 地址为私有子网的网关。相关示例参数见表 1。注:IP CIDR(Classless Inter-Domain Routing)地址段和 BGP ASN(Autonomous System Number)请勿和参与路由的其他网段重复。
AZ 1 | AZ 2 | |
私有子网 ID | subnet-0cba5273588cfa22b | subnet-09304f4bfbe09844a |
私有子网路由表 ID | rtb-082b0493f877ef448 | rtb-05e2bf1bb660e2b9a |
私有子网 CIDR | 10.60.2.0/24 | 10.60.4.0/24 |
私有子网网关地址 | 10.60.2.10 | 10.60.4.10 |
私有子网网关 eni | eni-0d514fb34d40cad6b | eni-0578dcb5e19942f56 |
路由服务器端点地址 | 10.60.2.96(创建端点后自动分配) | 10.60.4.112(创建端点后自动分配) |
虚拟网关的 ASN | 65530((建议采用介于 64512–65534 之间的 ASN)) | |
路由服务器的 ASN | 64555(建议采用介于 64512–65534 之间的 ASN) |
表 1. 配置参数表
2.3 配置实现步骤
2.3.1 创建配置路由服务器并关联 VPC
在亚马逊云科技的 VPC 管理控制台的左栏选择“路由服务器”并创建路由服务器,见图 3。
![]() |
图 3. 创建路由服务器
输入路由服务器名称,BGP ASN 以及选择是否保留路由。如果启用“保留路由”,在路由发生变化时,原路由会在路由表中继续保留到预设时间结束,本文禁用该功能以及时更新路由表,见图 4。
![]() |
图 4. 路由服务器参数
配置完毕后等待路由服务器的状态为“可用”。将虚拟网关设备所在的 VPC 关联到该路由服务器,见图 5。
![]() |
图 5. 路由服务器关联 VPC
2.3.2 创建并配置路由服务器端点
端点可以理解为路由服务器的网络接口,通过路由服务器端点与虚拟网关设备建立网络连接并交换 BGP 路由信息。选择“路由服务器端点”配置卡,并创建路由服务器端点,见图 6。
![]() |
图 6. 创建路由服务器端点
分别为两台虚拟网关设备创建对应的路由服务器端点,以 AZ 1 的私有子网为例输入端点名称和对应的子网,见图 7。
![]() |
图 7. 为 AZ 1 创建路由服务器端点
对应两个 AZ 的路由服务器端点创建后,系统为每个端点都分配了 eni 网卡以及根据端点所在的子网 CIDR 分配了 IP 地址,见图 8。
![]() |
图 8. 路由服务器端点配置后的状态
2.3.3 创建并配置路由服务器对等方
在“路由服务器对等方”的配置中,路由服务器将与虚拟网关设备建立 BGP 连接,并交换 BGP 路由信息。以 AZ 1 内相关配置为例,图 9 中选择前步骤中在 AZ 1 中创建的路由服务器端点,输入 AZ 1 中的虚拟网关设备位于私有子网的 eni 端口 IP 地址以建立 BGP 邻居,并输入虚拟网关设备的 ASN。故障检测选择 BFD(如虚拟网关设备不支持 BFD 可选择 BGP keepalive)。
![]() |
图 9. 为 AZ 1 创建路由服务器对等方
用同样的方法为 AZ 2 的路由服务器端点也创建路由服务器对等方。
在路由服务器对等方创建完毕后,检视路由服务器端点 eni 所在的安全组,会发现由系统自动添加了允许 TCP179(BGP)和 UDP3784(BFD)端口的入站规则,见图 10。
![]() |
图 10. 路由服务器端点安全组的入站规则
2.3.4 配置虚拟网关设备
在虚拟网关设备上配置相应的 BGP 路由以及 BFD 参数。以 AZ 1 中的 Cisco 虚拟路由器为例,与本文相关的配置如下:
上面的配置指定了以 AZ 1 的路由服务器端点为 BGP 邻居以及该端点的 ASN,并启用 BFD 作为链路检测工具。配置完成后在虚拟路由器上用“show ip bpg neighbors 10.60.2.96”可以看到 BGP 会话以及 BFD 进程已经成功建立,见图 11。
![]() |
图 11. 在虚拟路由器上检视 BGP 和 BFD 的状态
同样为 AZ 2 中的虚拟路由器完成相关配置。检视 VPC 管理控制台上路由服务器对等方的状态,可以看到 BGP 和 BFD 的会话都已经成功建立,见图 12。
![]() |
图 12. 路由服务器对等方的状态
2.3.5 将 BGP 路由传播到子网路由表
在 VPC 管理控制台上检视路由服务器通过 BGP 路由协议从虚拟网关设备学习到的路由项,可以看到虚拟网关设备所连接的外部网段 172.27.0.0/16、172.28.0.0/26 和 172.51.0.0/16 已经在路由服务器的路由表中。由于存在双路径,BGP 通过路由服务器缺省设置的 MED 值(0 和 100)选择了 AZ 1 的虚拟网关的私有子网 eni 作为到所有外部网络的下一跳网关,网关地址为 10.60.2.10,这些路由项被装入两个私有子网路由表中,见图 13 中的“已安装路由(2/2)”。
![]() |
图 13. 路由服务器通过 BGP 学习到的外部网段
注:虚拟网关设备如果通过 BGP 以外的路由协议,比如:OSPF、静态路由等获得的路由项,应当采用“Redistribution”路由重分发等方式,将这些路由项注入到虚拟网关设备的 BGP 路由表中,这样才可以通过 BGP 路由协议将这些路由项传播到路由服务器中。
在路由服务器的“传播”配置卡中通过“启用传播”选择两个私有子网关联的路由表,将路由服务器学习到的路由项传播到所选择的子网路由表中。见图 14。
![]() |
图 14. 将 BGP 路由项传播到子网路由表
图 15 为启用路由传播前 AZ 1 的私有子网关联路由表,只有缺省的本地网段路由项。
![]() |
图 15. 启用传播前的私有子网路由表
图 16 和图 17 为启用路由传播后的 AZ 1 和 AZ 2 的私有子网关联路由表,可以看到远端 BGP 路由项已由路由服务器自动注入到子网路由表。
![]() |
图 16. 启用路由传播后的 AZ 1 的子网路由表
![]() |
图 17. 启用路由传播后的 AZ 2 的子网路由表
两个子网路由表中指向外部目标网络的网关均为 eni-0d514fb34d40cad6b,查询表 1 可知,该 eni 为位于 AZ 1 的虚拟网关设备 Router 1 在私有子网中的网卡,对应 IP 地址为 10.60.2.10。这表明无论 EC2 服务器位于哪个私有子网,访问这些外部网络时流量都由 Router 1 进行转发,此时 Router 2 为空闲状态。
3. 冗余网关故障切换效果验证
选择 AZ 1 的私有子网内的 EC2 主机 10.60.2.215 和外部网络 172.27.0.0/16 内的主机 172.27.1.232 间进行持续的 ping 连接。关闭 AZ 1 中 Router 1 的私有子网接口或停止 Router 1 实例,由于启用了 BFD,迅速检测到链路中断后触发 BGP 快速收敛,ping 连接没有中断,见图 18。
![]() |
图 18. 持续 ping 测试
查看路由服务器的路由项,下一跳的 IP 地址已经切换为 AZ 2 中的虚拟网关设备 Router 2 的私有子网端口地址 10.60.4.10。由于 Router 1 的私有子网端口被关闭,指向 10.60.2.10 网关的路由项已消失,见图 19。
![]() |
图 19. 切换后路由服务器的路由表
图 20 和图 21 为 BGP 路由切换收敛后的 AZ 1 和 AZ 2 的私有子网路由表。可以看到指向外部目标网络的网关均切换为 eni-0578dcb5e19942f56。查询表 1 可知,该 eni 为位于 AZ 2 的虚拟网关设备 Router 2 在私有子网中的网卡,IP 地址为 10.60.4.10。此时私有子网的 EC2 服务器访问这些外部网络时流量都切换至 Router 2 进行转发,此时 Router 1 网关不可用。
![]() |
图 20. BGP 路由切换后的 AZ 1 的子网路由表
![]() |
图 21. BGP 路由切换后的 AZ 2 的子网路由表
重新开启 AZ 1 虚拟网关设备 Router 1 的私有子网端口,由于与之相连的路由服务器端点具有较小的 BGP MED 值(0),因此指向外部网络的网关将从 Router 2 切换回到 Router 1,路由服务器路由表状态恢复到图 13 所示,两个子网路由表状态恢复到图 16 和图 17 所示。
4. 总结
作为亚马逊云科技新推出的托管服务,VPC Route Server(路由服务器)在跨可用区的虚拟网关故障保护切换中提供了新的选项。该解决方案将路由服务器作为管理和更新子网路由表的控制平面,通过 BGP 协议获得虚拟网关设备的路由表信息,并将这些路由信息自动安装到子网路由表中。当冗余的虚拟网关设备发生故障时,路由服务器通过 BFD 迅速检测到设备和链路故障从而触发BGP进行路由收敛,并快速更新子网路由表,以实现网络连接的持续。路由服务器方案具有使用简单、切换迅速、更新路由表完全自动化等特点,极大简化了相关网络设计、配置和运维管理。
参考文档
Dynamic routing in your VPC using VPC Route Server