在挨踢小茶之前的文章亚马逊云AWS搭建基于静态路由的硬件VPN(Site to Site VPN)教程中讲解了如何使用pfsense来与VPC VGW (Virtual Private Gateway)建立基于静态路由的IPSec VPN,这次我将会讲解如何使用Cisco CSRv1000与VGW建立基于动态路由协议BGP的IPSec VPN。
其实也可以用任何支持VPC VGW的硬件设备来完成这个实验(支持的设备列表看这里),但是鉴于手上并没有空闲的硬件,因此在韩国区域建立了一个Cisco CSRv1000的EC2实例来模拟实际的硬件路由器。刚开始的时候,挨踢小茶尝试多次在东京区域创建Cisco CSR路由器都会出现一些莫名其妙的问题,实例启动后可以ping得通,但是ssh (TCP 22)端口就是无法访问。Security Group和NACL都已经允许了相关流量,而且同一个配置的其他新实例(比如说普通的Amazon Linux AMI)均没有这个问题。不知道是否是Cisco CSR在某些区域的AMI有问题?这就不得而知了。
可从下图看出,左边是韩国区域,建立了一个模拟路由器的实例,并且在区域中创建了一个VPC (172.31.0.0/16)以及相应的Public Subnet,连接Internet Gateway,保证能连接互联网。右边是悉尼区域,创建了一个VPC (10.0.0.0/16)以及相应的Private Subnet,不需要连接因特网。两端的VPC建立Site to Site VPN隧道,并且使用动态路由协议BGP进行路由交换。
如果站点很少,并且网段数量少的情况下,可以使用静态路由。但是如果站点比较多,或者要使用Cloudhub等架构的时候,动态路由协议会更灵活,方便。同时,如果有双线需要负载均衡或者热备的时候则最好使用带动路由协议。
韩国区域(模拟客户网络)创建VPC和实例
其实这次在韩国区域使用的是默认的VPC,但是还是稍微过一下创建VPC的流程吧
- 创建一个新的VPC,并且定义地址范围为172.31.0.0/16
- 创建一个新的网段,并且定义地址范围为172.31.0.0/20
- 创建Internet Gateway,因为创建新的VPC是不会自动创建Internet Gateway的,因此默认情况下你不能访问任何互联网上的资源。所以这里需要手动创建一个Internet Gateway
- 编辑路由表,添加一条目的地址为0.0.0.0/0的路由,下一跳指向刚刚创建的Internet Gateway。这样子子网内的主机才知道,如果访问非本地的内容,要先去Internet Gateway,然后出去因特网。
- 编辑子网,启用“Modify auto-assign IP settings”,这样新创建的主机才会自动分配公网地址。也可以不启用,在创建主机的时候手动更改IP配置选项。
- 创建一个EC2实例,在AWS市场中搜索“cisco byol”
- 按照指引完成EC2的创建,过程中需要选择网络为刚刚创建的VPC,并且保证Security Group允许了ICMP和SSH流量。
悉尼区域创建VPC,VGW和VPN连接
- 创建一个新的VPC,地址为10.0.0.0/16
- 创建这个VPC内的一个子网(私有网络),地址为10.0.0.0/24
- 创建一个VGW(Virtual Private Gateway),作为AWS VPC的VPN连接节点,这个VGW默认会包含两个公网地址作为Tunnel的连接节点
- 将这个VGW绑定到刚才创建的VPC中
- 启用子网的Route Propagation,这样子子网才会继承VGW上的所有动态/静态路由,因此才能从这个子网访问到VPC外的资源
- 创建客户端网关CGW(Customer Gateway),这里输入的IP地址为在韩国区域创建的EC2的公网地址,本次实验选择的是动态路由的方式,BGP ASN可以用默认给的也可以使用自己的ASN
- 创建一个VPN连接,自定义一个名字,然后选择刚才创建的VGW和CGW。路由方式选择动态
- 下载VPN配置文件,在这里可以选择不同的厂家和平台,这里我们选择厂家是Cisco,平台是Cisco CSRv AMI,软件版本默认即可
- 基本上按照配置文件的内容(需要做一点点小更改),粘贴到之前创建的Cisco CSRv1000的实例里面,就可以很容易完成VPN的配置
验证VPN连接
登陆到路由器上,可以看到已经建立了两个BGP的邻居,证明已经成功和VGW建立Tunnel并且成功交换路由条目。
并且可以通过BGP从邻居学到了悉尼区域VPC的子网信息。
从AWS Console上可以看到VPN连接的状态,此时也可以看到两个Tunnel的状态都是UP,并且都已经能收到BGP的路由(条目数为1)。
这个时候,在悉尼区域创建了一台主机(地址为10.0.0.47),并且从路由器上ping这个主机发现已经可以通了。证明这个Site to Site的连接建立成功。
总结
在大部分情况下,能用动态路由协议的时候不要使用静态路由协议,并且在混合架构环境下(比如说双VPN或者VPN+DX线路)只有动态路由协议能控制线路的动态切换和负载均衡。AWS只能支持BGP这种动态路由协议,但是功能蛮强大的。如果存在多个用户站点和同一个VGW建立VPN连接,那么这两个用户站点之间是可以通过VGW做路由中转互访,这个也是AWS VPN CloudHub的特性,这个可以在以后的文章中详细介绍一下。
文章评论
成本怎么样? 没有列个成本费用表?
@筑楼 AWS的计费非常复杂哈,大致上有VPN链接的0.5 USD/小时以及EC2实例的不到0.1 USD/小时,还有流量的费用等等……
@挨踢小茶 一直没敢用,总觉得有坑,博主用起来比阿里云便宜么
@月小升 阿里云会便宜一些哈,AWS最麻烦的就是收费条款很复杂,而且相对贵一些。不过AWS功能是在太强大了,阿里云在这点上还落后很多年吧。