亚马逊AWS官方博客

基于 Amazon Transit Gateway Connect 实现企业级组网

Amazon Transit Gateway Connect 是亚马逊云科技 2021 年 5 月发布的一项旨在让企业更加方便地接入 SD-WAN,并通过 SD-WAN 实现企业级组网的产品功能。本文介绍了一种通过开源软件构建云端路由器,模拟 SD-WAN 接入终端的企业组网方案,进而详尽地介绍如何使用 Amazon Transit Gateway Connect 构建企业网络,帮助用户更加深入地掌握和理解该功能的使用与原理。目标读者为企业网络架构师、网络管理员,SD-WAN 设备商、SD-WAN 服务商等网络行业相关专家厂家。

Amazon Transit Gateway Connect 简介

Amazon Transit Gateway(亚马逊云科技中转网关)是亚马逊云科技提供的一种虚拟网络设备,它可以成为网络中央枢纽,连接我们的亚马逊云科技中多个 Amazon Virtual Private Cloud(VPC)以及线下本地网络。每个网络只需连接到 Amazon Transit Gateway,即可自动与其他连接到 Amazon Transit Gateway 的网络连通,实现简便轻松的网络扩展,帮助企业简化网络架构,降低运维复杂度。

Amazon Transit Gateway Connect(亚马逊云科技中转网关连接)是 Amazon Transit Gateway 的一个功能,主要用于支持将 SD-WAN(Software-Defined WAN,软件定义广域网) 设备接入到亚马逊云科技。 客户可以使用 GRE 和 BGP 等标准协议,将其 SD-WAN 边缘无缝扩展到亚马逊云科技。

Amazon Transit Gateway Connect 工作原理

Amazon Transit Gateway Connect 是一种构建于 Amazon Transit Gateway VPC 连接之上的虚拟 Amazon Transit Gateway 连接。建立 Amazon Transit Gateway Connect 后,我们可以进一步在其上创建多个 Connect Peer。每个 Connect Peer 通过 GRE 隧道协议,实现 Amazon Transit Gateway 与 Amazon EC2 路由实例之间的高带宽虚拟连接。建立 GRE 隧道连接后,Amazon Transit Gateway 与 Amazon EC2 路由器之间,通过建立 BGP 会话来交换、传播路由信息。具体实现机制如图 1 Amazon Transit Gateway Connect 工作原理所示。

除了 Amazon Transit Gateway VPC 连接,Amazon Transit Gateway Connect 也支持将 Amazon Direct Connect 专线连接作为底层连接,实现更加灵活的混合云组网。

图 1 Amazon Transit Gateway Connect 工作原理

Amazon Transit Gateway Connect 企业组网典型架构

图 2 Amazon Transit Gateway Connect 典型网络架构是一个 Amazon Transit Gateway Connect 企业组网参考实现。Amazon Transit Gateway Connect 通过连接云上三方设备软件(Amazon EC2 搭建的 SD-WAN CPE 路由器),与线下 IDC、各地分支机构、终端用户等,经由 SD-WAN 网络,实现互联互通。

图 2 Amazon Transit Gateway Connect 典型网络架

Amazon Transit Gateway Connect 优点

使用 Amazon Transit Gateway connect 组网,具有很多实用的优点:

  • 多 VPC 即时接入:对于多 VPC 场景,客户新 VPC 仅需配置 Amazon Transit Gateway VPC Attachement,即可完成 VPC 全域接入,与线下 IDC 打通,简单快速。
  • 支持 BGP 动态路由协议:通过 BGP 动态路由协议,可以实现全网流量通过路由协议进行调度。相比 SD-WAN CPE 设备直接部署于应用 VPC,极大地简化了网络维护工作与整体网络可靠性,以及网络使用效率。
  • 高带宽:每个 Amazon Transit Gateway Connect 可以提供 4 个 Connect Peer,每个 Connect Peer 与 SD-WAN 路由实例之间的 GRE 隧道带宽高达 5Gbps,最终总带宽可高达 20Gbps。
  • 高可用:每个 Connect Peer 可以与 SD-WAN 路由实例建立两个 BGP 连接,Connect Peer 之间还可以实现 ECMP。全链路无单点,设备故障无感切换。

Amazon Transit Gateway Connect 云端路由器方案

使用 SD-WAN 终端设备

SD-WAN 终端设备(即 CPE, Customer Premises Equipment)是 SD-WAN 的接入点。网络流量通过 SD-WAN 终端设备进入 SD-WAN 网络,其内运行 SD-WAN 相关隧道协议,实现虚拟专用网。

因为物理设备无法直接在云端使用,对于 SD-WAN 设备商/服务商而言,需要做如下技术改造:

  • 设备系统移植:将原来运行于 SD-WAN 终端设备的软件,运行到云端虚拟机。
  • GRE/BGP 协议支持:添加对 GRE/BGP 协议的支持,用于与 Amazon Transit Gateway Connect 建立隧道、打通 BGP 连接。
  • Amazon Transit Gateway Connect 管理:添加对应的 Amazon Transit Gateway Connect 配置工具与管理选项。

使用开源软件路由器

对于没有 SD-WAN 需求的客户场景,我们可以通过开源软件,在 Amazon EC2 自行构建软件路由器,以实现通过公网组建企业广域网。涉及到的子系统主要包括 GRE 隧道、BGP 路由协议、虚拟专用网,本文重点介绍该方案。

GRE 隧道

Linux Kernel 提供了 ip_gre 内核模块,用于实现 GRE 隧道。所以,对于 Linux 系统,我们只需要启用该内核模块即可实现 GRE 隧道功能。

BGP 协议

BGP 协议软件众多,如 OpenBGP、RustyBGP、FRR、BIRD 等。可以根据实际情况自行选择。BIRD 相对简单易用,本文选用 BIRD 运行 BGP 协议。

虚拟专用网

虚拟专用网技术非常成熟,前述 GRE 也是一种虚拟专用网技术。还有如广泛使用的 IPSec、L2TP 等。Wireguard 是一种相对较新的实现,配置使用非常简单。所以本文选取 Wireguard 进行演示。生产环境请客户根据实际场景选取。

接下来,本文将详尽介绍如何通过开源软件构建云端路由器,与 Amazon Transit Gateway Connect 实现广域组网,帮助大家更好地理解与掌握 Amazon Transit Gateway Connect 技术。

Amazon Transit Gateway Connect 开源软件路由器组网实战

网络环境配置

在进行组网实战前,我们先介绍我们的网络环境。具体如何构建该网络请参考亚马逊云科技相关产品文档。

网络地址规划

网络环境分为云端(亚马逊云科技宁夏区域)与 IDC(亚马逊云科技北京区域模拟)。对于 IP 地址,我们进行了一定规划:

  • 云端:10.0.0.0/18
    • 网络 VPC:10.0.0.0/16
    • 业务 VPC1:10.11.0.0/16
    • 业务 VPC2:10.22.0.0/16
  • Amazon Transit Gateway:
    • 100.64.100.0/24
  • IDC:
    • 10.100.0.0/16
  • BGP 地址:
    • 169.254.0.0/16 中选取

亚马逊云科技云上网络环境

云上环境部署如图 3 亚马逊云科技云上部署环境所示。所有VPC的内网(10.0.0.0/8 网段)访问都路由到 Amazon Transit Gateway,由 Amazon Transit Gateway 统一路由转发;业务 VPC 的出口流量由 Amazon Transit Gateway 调度到网络 VPC,通过 NAT Gateway 出网。

注意:因为 Amazon Transit Gateway 并不会将路由传播到 VPC 路由表,所以本文通过合理的地址规划,将 10.0.0.0/8 路由到 Amazon Transit Gateway,实现 VPC 的内网路由指向兜底到 Amazon Transit Gateway,后续不需要因为 IDC 网段变化而更新 VPC 路由表。

图 3 亚马逊云科技云上部署环境

线下 IDC 网络环境

本文 IDC 通过亚马逊云科技北京区域进行模拟。线下 IDC VPC 配置如图 4 IDC 部署环境所示。兜底内网路由 10.0.0.0/8 指向出口路由器。

图 4 IDC 部署环境

Amazon Transit Gateway Connect 与开源软件路由器配置

搭建好测试环境后,我们开始创建对应的 Amazon Transit Gateway Connect 组网环境。包括云上环境配置、云上路由器配置、IDC 路由器配置、高可用配置几部分。

Amazon Transit Gateway Connect 配置

图 5 创建 Amazon Transit Gateway Connect 所示,我们填写名字、选择 Amazon Transit Gateway 实例、选择挂载类型为 Connect。Amazon Transit Gateway Connect 需要构建与底层传输挂载通道之上。这里我们使用 Amazon Transit Gateway VPC Attachment 作为底层传输通道。填写完毕后即可创建一个 Amazon Transit Gateway Connect。

图 5 创建 Amazon Transit Gateway Connect

Amazon Transit Gateway Connect 创建完毕后,我们需要进一步在其上创建 Connect Peer,也就是 GRE/BGP 通道实例。如图 6 Amazon Transit Gateway Connect 创建 Connect Peer 所示,在 Amazon Transit Gateway Connect 详情页面,创建 Connect Peer。

图 6 Amazon Transit Gateway Connect 创建 Connect Peer

Connect Peer 需要填写的主要内容参考图 7 创建 Connect Peer,根据实际情况为 Amazon Transit Gateway 分配 Amazon Transit Gateway IP、填写 Connect Peer 对端 EC2 路由器 IP,用于创建 GRE Tunnel;填写 BGP CIDR、BGP ASN 用于 BGP 连接。

图 7 创建 Connect Peer

创建成功的 Amazon Transit Gateway Connect Peer 信息可以在 Connect Peer 详情中查看。如图 8 查看 Connect Peer 详情图 9 查看 Connect Peer 配置与状态详情所示。这些信息在我们进行软件路由器配置的时候需要用到。

图 8 查看 Connect Peer 详情

图 9 查看 Connect Peer 配置与状态详情

开源软件路由器配置

  • EC2 实例配置

软件路由器为 EC2 实例,默认情况下,每个 EC2 实例都会执行源/目标检查。 这意味着该实例只能发送或接收源或目的为该 EC2 的网络流量。 在我们的场景下,EC2 需要接收源或目标不是其本身的数据包。 因此,我们必须禁用该 EC2 实例上的源/目标检查。在亚马逊云科技 EC2 console 页面内,选择操作、联网,然后如图 10 EC2 软件路由器禁用地址检查所示禁用源/目标检查。更详细介绍可以参考禁用源/目标检查

图 10 EC2 软件路由器禁用地址检查

同时,因为软件路由器需要与 Amazon Transit Gateway 建立 GRE 隧道,需要访问前面配置的 Amazon Transit Gateway IP 地址。所以,在该软件路由器 EC2 所在的 VPC subnet 中,需要添加如图 11 配置访问 Amazon Transit Gateway 的路由所示的路由项。

图 11 配置访问 Amazon Transit Gateway 的路由

  • WireGuard 虚拟专用网配置

参考 wireguard 文档,添加配置文件 `/etc/wireguard/wg0.conf`,然后启动对应`wg0`服务,完成 wireguard 虚拟专用网接口配置。可参考如下配置文件。

1.	[Interface]
2.	PostUp = wg set %i private-key /etc/wireguard/%i.priv
3.	Address = 169.254.255.20/29
4.	ListenPort = 11111
5.	
6.	[Peer]
7.	# the peer information
8.	PublicKey = ThePublicKeyOfPeerWireguard=
9.	AllowedIPs = 169.254.255.16/29,10.100.0.0/10
10.	Endpoint = 222.222.222.222:22222
  • GRE 隧道配置

GRE 隧道直接通过 ip 命令进行配置,可参考下面的命令。

1.	ip tunnel add gre1 mode gre local 10.0.1.111 remote 100.64.100.1 ttl 255
2.	ip addr add 169.254.10.1/29 dev gre1
3.	ip link set gre1 up
  • BGP 网络协议(BIRD 实现)配置

与 Amazon Transit Gateway Connect 的 BGP 配置:根据 Amazon Transit Gateway Connect 要求与注意事项,Amazon Transit Gateway Connect 的 BGP IP 需要两调才能到达,所以,需要添加`multihop 2`的配置选项。具体的 BIRD BGP 配置信息如下配置文件。

1.	protocol bgp Amazon Transit Gatewayip1  {
2.	  multihop 2;  # Amazon Transit Gateway BGP IP并不能直达,必须设置hop为2
3.	  local 169.254.20.1 as 65002;
4.	  neighbor 169.254.20.2 as 65001;
5.	}
  • 与线下 IDC 的 BGP 配置

与线下 IDC 我们同样通过 BGP 实现路由交换与互联互通。同时,云端两条 Amazon Transit Gateway Connect Peer 对应两条网络连接,我们可以通过 BGP BFD 实现高可用配置。所以,如下配置文件,我们添加了启用 BFD 协议的配置选项 `bfd on`。

1.	protocol bgp idcip1 from Amazon Transit Gatewayip{
2.	  direct;
3.	  bfd on;
4.	  local 169.254.255.10 as 65002;
5.	  neighbor 169.254.255.11 as 65003;
6.	}

关于更多云端路由器实现技术要求,可进一步参考中转网关 Connect 挂载和中转网关 Connect 对等节点要求和注意事项

IDC 路由器网络配置

在 IDC 路由器,我们需要同两台云端软件路由器建立 wireguard 虚拟专用网连接。具体命令参考下面 Linux 命令。注意,因为 wireguard 文件会自动配置网络路由,但我们使用 BIRD 进行路由管理,所以这里我们采用手工命令方式进行配置。

1.	# 创建 wireguard 虚拟网卡
2.	ip link add wg0 type wireguard
3.	# 设置私有 Key
4.	wg set wg0 private-key /etc/wireguard/wg0.priv
5.	# 设置虚拟网卡 wg0 BGP ip
6.	ip -4 address add 169.254.255.11/24 dev wg0
7.	# 启动虚拟网卡 wg0
8.	ip link set mtu 8921 up dev wg0
9.	# 启动 wireguard, 111.111.111.111:11111 是对端 IP:Port
10.	wg set wg1 listen-port 22222 peer ThePublicKeyOfPeerWireguard= allowed-ips 169.254.255.0/24,10.0.0.0/10 endpoint 111.111.111.111:11111

通过 BFD 实现网络层高可用

双向转发检测(Bidirectional Forwarding Detection,BFD)是一种网络协议,用于检测链路连接的两台路由器或交换机之间的故障。 BFD 通过网络链路,在两个设备之间建立会话,然后通过定时心跳检测,实现链路可达性监测。

BIRD 默认的 BFD 为 100ms 一次心跳,5 次失败判定为 BGP 协议断开。所以,通过启用 BIRD BGP 的 BFD 功能,可以实现 500ms 内检测到对端故障,再由 BIRD 自动触发路由切换。

BFD 的启用同前面云端路由器一致,在 BIRD BGP 配置中添加`bfd on;` 即可。

1.	protocol bgp awsip1  {
2.	  direct;
3.	  bfd on;
4.	  local 169.254.255.11 as 65003;
5.	  neighbor 169.254.255.10 as 65002;
6.	}

开源软件路由器组网验证与测试

网络部署最终架构

在完成了上述设备、软件配置后,我们将得到如图 12 企业广域网架构图所示的部署架构:

  • 业务 VPC 通过 Amazon Transit Gateway 连接到网络 VPC,通过网络 VPC 访问互联网以及线下 IDC。
  • Amazon Transit Gateway Connect 建立两条 Connect Peer,用于高可用/ECMP。
  • 每条 Connect Peer 连接软件路由器,与 Amazon Transit Gateway 建立 BGP 动态路由连接。同时,路由器还与 IDC 建立 Wireguard 虚拟专用网连接,并通过该连接转发云端与 IDC 之间的 IP 数据包。
  • 线下 IDC 分别与两个云端软件路由器连接,通过 BGP BFD 实现链路侦测与故障自动切换。

图 12 企业广域网架构图

在所有配置结束、BGP 信息开始同步后,我们可以检查 Amazon Transit Gateway 关联的路由表,可以发现 IDC 侧的路由已经经由我们云端的软件路由器传播到 Amazon Transit Gateway 路由表。如图 13 Amazon Transit Gateway 路由表所示。

图 13 Amazon Transit Gateway 路由表

连通性测试

完成连接后,我们开始进行联通性测试。

  • 10.100.4.41 是 IDC 内的业务应用实例
  • 10.11.135.84 是云端业务 VPC1 的应用实例

通过 ping 命令,我们可以成功检测到网络已经连通。

图 14 网络联通性 ping 测试

高可用测试

接下来,我们开始进行高可以测试。测试步骤为:

  1. 重启云端一台软件路由器,模拟硬件故障。
  2. 在 IDC 路由器,通过`route -n`检测当前路由信息。
  3. 在 IDC 业务应用服务器上,通过持续的`ping`检测网络联通性。
  4. 在 IDC 业务应用服务器上,通过持续的`mtr`检测当前路由路径信息。

在切换开始前,我们先检查当前 IDC 路由器上的路由信息,如图 15 切换前 IDC 路由表所示。

图 15 切换前 IDC 路由表

接下来,我们在对应 IDC 路由器`wg0`接口对应的云端路由器上,执行`reboot`操作。服务器重启,BGP 连接断开,我们可以立刻观察到对应路由变更到`wg1`连接。如图 16 切换后 IDC 路由表所示。

图 16 切换后 IDC 路由表

同样,在 IDC 业务服务器上,可以观察到,`mtr`出现新的路径节点信息。如图 17 MTR 工具发现双路由所示。

图 17 MTR 工具发现双路由

而 IDC 业务服务器上的 ping 联通性测试,不会观察到任何异常,没有产生任何丢包。当然,如果 ping 间隔小于 500ms,理论上可能出现个别 timeout 数据包,我们使用 ping 默认的 1 秒间隔,所以没有丢包。

实际上,对于 TCP 应用,会有重传机制,个别丢包不会影响连接状态;对于 UDP 应用,本来就是无状态设计,应用本身会根据实际情况确定是否重传。切换过程中的具体 ping 结果如图 18 切换测试 ping 检测结果所示。

图 18 切换测试 ping 检测结果

总结

本文介绍了一种通过 Amazon Transit Gateway Connect 功能,自建 EC2 软件路由器,实现企业多地广域组网。该方案可以实现云端 VPC 接入 Amazon Transit Gateway 即可与 IDC 连通,运维简单;并支持故障秒级切换,让企业更稳定地使用云。同时,该方案也可以供 SD-WAN 设备商/服务商参考,用于 SD-WAN 终端设备上云改造。

当然,本文所演示的方案,还可以进一步优化,我们可以根据需求自行进行:

  • IDC 端路由器为单点设计。实际上我们完全可以 IDC 端 2 台路由器,实现 2×2 多线 BGP 连接,链路完全无单点。
  • Amazon Transit Gateway 并不能将 BGP 路由传播到 VPC 路由。本文通过合理的规划网络,实现内网默认走 Amazon Transit Gateway,规避了该问题。对于无法通过规划网络实现的场景,我们也可以通过路由器上路由变化的 hook 触发脚本、程序化更新 VPC 路由。

最后,本文涉及到的软件配置文件,可以访问对应代码库获取。欢迎有意将业务扩展到亚马逊云科技的 SD-WAN 设备商/服务商与我们进一步交流,改造 SD-WAN 终端设备上云。

参考文献

  1. Amazon Transit Gateway https://docs.amazonaws.cn/vpc/latest/tgw/what-is-transit-gateway.html
  2. Amazon Transit Gateway Connect 创建与管理 https://docs.amazonaws.cn/vpc/latest/tgw/tgw-connect.html
  3. Amazon Transit Gateway 配额与限制 https://docs.amazonaws.cn/vpc/latest/tgw/transit-gateway-quotas.html
  4. 通过 Amazon Transit Gateway Connect 简化 SD-WAN 连接 https://thinkwithwp.com/cn/blogs/networking-and-content-delivery/simplify-sd-wan-connectivity-with-aws-transit-gateway-connect/
  5. Wireguard 高性能虚拟专用网 https://github.com/WireGuard/wireguard-linux
  6. BIRD(The BIRD Internet Routing Daemon)https://bird.network.cz/
  7. BFD(Bidirectional Forwarding Detection,双向转发侦测)https://en.wikipedia.org/wiki/Bidirectional_Forwarding_Detection
  8. 详细配置文档与配置文件 https://github.com/kealiu/BYO-EC2-Router

本篇作者

刘科

西云数据解决方案架构师,15+年 IT 研发、管理经验,曾就职于知名通信设备厂商、头部互联网企业,有丰富、广泛的系统架构与研发管理经验。擅长帮助企业打造完善研发 Devops 体系,构建网络与安全体系,帮助企业业务产品项目落地。

沈城伟

西云数据解决方案架构师,15 年 IT 服务经验,擅长大型网站架构设计和系统管理。