亚马逊AWS官方博客

搭建 Transit Gateway,轻松玩转复杂网络架构

AWS的网络非常强大,提供了用户多种访问云端的方式。包括互联多个VPC的VPC Peering,互联数据中心的Direct Connect和VPN。而对于经常使用AWS网络的用户来说,如何轻松的管理复杂的网络架构,一直是每个AWS的网络专家关心的问题。比如说如下的网络架构,其实就是一个复杂网络模型的典型案例。

现在,如果有了AWS Transit Gateway,网络世界就会变成这个样子。AWS Transit Gateway到底是什么,它是如何帮助网络专家简化网络设计和配置。并且我们又如何使用AWS Transit Gateway开始我们的网络配置之旅。下面的文章内容会带给大家一个具体的思路。

AWS Transit Gateway 是一项服务,使客户能够将 Amazon Virtual Private Cloud (VPC) 及其本地网络连接到单个网关。随着 AWS 上运行的工作负载数量的增加,您需要能够跨多个帐户和 Amazon VPC 扩展网络,以跟上增长的速度。今天,您可以使用对等连接来连接 Amazon VPC 对。但是,如果无法集中管理连接策略,而跨多个 Amazon VPC 管理点到点连接,则可能会造成操作成本高昂且操作繁琐。对于本地连接,您需要将 AWS VPN 连接到每个单独的 Amazon VPC。当 VPC 数量增长到数百个时,此解决方案的构建可能非常耗时,也难以进行管理。

使用 AWS Transit Gateway,只需创建和管理从中央网关到网络中每个 Amazon VPC、本地数据中心或远程办公室的单个连接。Transit Gateway 就像一个中心,控制流量在所有连接的网络之间的路由方式,而这些网络就像辐条。这种轴辐式模型可显著简化管理并降低运营成本,因为每个网络只需连接到 Transit Gateway,而不是连接到所有其他网络。任何新的 VPC 都只需连接到 Transit Gateway,然后自动向连接到 Transit Gateway 的所有其他网络开放。这种易连接性使您可以随着增长轻松扩展网络。

预先准备:创建TGW

选择VPC服务,找到Transit Gateway,先创建一个Transit Gateway以备后续使用

创建时写上名字和描述,点击创建即可。其他选项没有特殊需求保留默认即可。

 

场景一:使用TGW互联region内各个VPC

配置Transit Gateway Attachment

Transit Gateway核心概念之一:Transit Gateway Attachment。简单的理解就是你想要把什么网络资源往TGW上面互联,就添加一个Attachment。

选择当前你的TGW,选择VPC选项,在VPC ID里找到你要添加的VPC,并且选择你要通告出去的子网。注意:一定要看好你要对外发布的子网是哪一个

 

检查Transit Gateway Route Tables

Transit Gateway核心概念之二:Transit Gateway Route Table。Transit Gateway有自己的路由表,当一个数据包进入了Transit Gateway之后,Transit Gateway会通过查询该路由表来决定该数据包如何路由。

当添加两个VPC作为Transit Gateway之后,在Transit Gateway的路由表中就会自动添加到这两个VPC的路由。

在需要互联的VPC中,找到相关的路由表,点击Edit routes,将需要互联的对端VPC的CIDR添加到路由条目中,下一跳是Transit Gateway。下图的例子就是在172.31.0.0/16的VPC路由表中添加到另一个10.16.0.0/16的VPC的路由,而下一跳就是Transit Gateway。

可以看见在作为以上配置之后,使用172.31.0.0/16中的EC2去ping在10.16.0.0/16的EC2,是可以ping通的

 

场景二:使用TGW互联VPN和VPC

配置Transit Gateway Attachment

VPN和VPC一样,也属于TGW的一个attachment,所以依然还是在TGW Attachment处添加一个新的attachment。注意这里的VPN是指的IPSec VPN。

Attachment的类型选择VPN。在VPN attachment的细节配置中,指定要跟TGW使用VPN互联的远端路由器/防火墙地址。因为当前TGW仅支持使用BGP和对端网络进行动态路由学习,所以如果希望动态维护您的网络信息,那么选择BGP协议,并且配置好BGP的ASN号。当然如果您网络较为简单,那么您也可以选择静态路由来维护。这里我们选择动态路由的方式。最后在Tunnel Options处,我们留空,即让AWS来帮助我们默认生成VPNtunnel的IP和VPN的Pre-share密钥

我们在VPC服务页面下的Site-to-Site VPN Connections页面下,可以看见刚刚生成的VPN Tunnel信息。从页面最底部的Tunnel Details处,我们可以看见TGW作为VPN头端设备的外网地址及隧道IP地址。

 

配置本地路由器IPSec配置,以思科路由器为例

注意:如果您不是太熟悉需要配置什么内容,那么您可以在上一个页面,即Site-to-Site VPN Connections页面下,点击Download Configuration,选择合适您本地的设备型号,即可下载AWS的推荐配置。

以下仅截出关键性配置

IPsec 相关配置:

crypto keyring keyring-vpn-0a8854e50782fb208-0

  local-address 172.35.10.233

  pre-shared-key address 52.76.185.43 key Cieb0p_SzeuNKuDm6oRd2gxwEmV69uz1

crypto isakmp policy 10

encr aes

hash md5

authentication pre-share

group 2

crypto isakmp policy 200

encr aes

authentication pre-share

group 2

lifetime 28800

crypto isakmp keepalive 10 10

crypto isakmp profile isakmp-vpn-0a8854e50782fb208-0

   keyring keyring-vpn-0a8854e50782fb208-0

   match identity address 52.76.185.43 255.255.255.255

   local-address 172.35.10.233

crypto ipsec security-association replay window-size 128

crypto ipsec transform-set ipsec-prop-vpn-0a8854e50782fb208-0 esp-aes esp-sha-hmac

mode tunnel

crypto ipsec df-bit clear

crypto ipsec profile ipsec-vpn-0a8854e50782fb208-0

set transform-set ipsec-prop-vpn-0a8854e50782fb208-0

set pfs group2

 

Tunnel相关配置:

interface Tunnel1

ip address 169.254.29.78 255.255.255.252

ip tcp adjust-mss 1379

tunnel source 172.35.10.233

tunnel mode ipsec ipv4

tunnel destination 52.76.185.43

tunnel protection ipsec profile ipsec-vpn-0a8854e50782fb208-0

ip virtual-reassembly

 

在路由器上查看IPSec的状态,是Active的说明IPSec VPN已经建立

回到Site-to-Site VPN Connections页面下,你可以发现IPSec的状态已经变成了UP。之所以状态是DOWN,主要原因是因为两端的BGP Session还未建立起来

 

BGP相关配置:

ip-172-35-10-233(config)#do sh run | s bgp

router bgp 65000

bgp log-neighbor-changes

neighbor 169.254.29.77 remote-as 64512

neighbor 169.254.29.77 timers 10 30 30

!

address-family ipv4

  network 172.35.10.0 mask 255.255.255.0

  neighbor 169.254.29.77 activate

  neighbor 169.254.29.77 default-originate

  neighbor 169.254.29.77 soft-reconfiguration inbound

exit-address-family

再次回到Site-to-Site VPN Connections页面下,可以发现VPN的状态现在是变成了UP,并且已经提示说BGP Route出现了

检查路由表:

在Transit Gateway Route Tables中检查从VPN站点传输过来的路由。可以发现如果是从VPN过来的,那么后面的Resource Type会显示是VPN。

在路由器上查看从BGP传输过来的路由表,可以发现之前的两个已经互联到TGW上的VPC的CIDR地址段。

注意:VPN后面的主机的路由表需要设置成到云上VPC网段的下一跳是这个思科的路由器,才能利用VPN进行云上互联

 

继续配置第二条IPSec VPN隧道做冗余:

此过程和前面的步骤一致,在此不做赘述。

 

云上VPC需要配置一条静态路由指向TGW:

最后将VPC到VPN对端网段的路由写到自己的路由表中,下一跳指向TGW。

使用ping进行对VPN网段和云上VPC的主机进行测试。可以发现通过TGW,已经将VPC和VPN打通

本篇作者

姚远

亚马逊AWS解决方案架构师,负责基于AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内的应用和推广。现致力于网络和DevOps相关领域的研究。在加入AWS之前,在思科中国担任系统工程师,负责方案咨询和架构设计,在企业私有云和基础网络方面有丰富经验。