亚马逊云AWS搭建基于静态路由的硬件VPN(Site to Site VPN)教程

  如之前使用软件VPN,硬件VPN或AWS DirectConnect连接客户网络与AWS所说,要连接AWS VPC网络和客户端网络的方式有3种。之前一篇文章亚马逊云AWS搭建软件VPN(Client VPN)教程已经介绍了如何使用软件VPN的方法,下面介绍下如何使用硬件VPN。这种方式的VPN实际上是通过客户网络的硬件与亚马逊AWS VPC的VGW(Virtual Private Gateway)建立一条IPSec VPN隧道,因此也可以叫做Site to Site VPN。

  因为挨踢小茶手头上没有找到可用的可以充当硬件CGW(Customer Gateway)的设备,因此先是尝试使用家里闲置的树莓派(Ubuntu内核)来做这个实验,但是以失败告终,可能是因为Ubuntu版本和配置文件不匹配造成的。然后又尝试了OpenVPN Access Server EC2实例,也以失败告终……最后没有办法,找到了著名的防火墙软件pfSense来做才成功。pfSense有很丰富的GUI界面,因此对于Linux CLI不太熟悉的朋友,使用这个软件也比较省心一些。

  大致上拓扑是这样的,我在日本东京区域建立了一个VPC(192.168.0.0/16)以及一个公共网段192.168.1.0/24,模拟客户网络(图右侧)。这个VPC里面创建了一个装有pfSense的EC2实例,这个实例通过公网的Internet Gateway访问外网,同时这个EC2实例充当了CGW的角色。然后在悉尼区域建立了一个VPC(10.0.0.0/8)以及一个私有网段10.0.0.0/24(图左侧),在这个VPC内创建CGW,VGW和VPN连接,建立与客户端网络的IPsec VPN隧道。另外还在这个私有网络中创建了一台普通的Linux EC2主机,用来最后测试连通性。

Topology - site to site vpn from customer network to aws vpc

  这次的VPN两边的网络使用静态路由的方式进行通信,并没有使用动态路由协议BGP,挨踢小茶在亚马逊云AWS搭建基于BGP动态路由的硬件VPN(Site to Site VPN)教程中使用了BGP协议来做这个实验。

东京区域(模拟客户网络)创建VPC和EC2实例

  1. 创建一个新的VPC,命名为VPC1,网络地址为192.168.0.0/16
    AWS VPC
  2. 创建一个子网(公共网络),网络地址为192.168.1.0/24
    AWS Public Subnet in VPC
  3. 创建Internet Gateway,因为创建新的VPC是不会自动创建Internet Gateway的,因此默认情况下你不能访问任何互联网上的资源。所以这里需要手动创建一个Internet Gateway
  4. 编辑路由表,添加一条目的地址为0.0.0.0/0的路由,下一跳指向刚刚创建的Internet Gateway。这样子子网内的主机才知道,如果访问非本地的内容,要先去Internet Gateway,然后出去因特网。
    Route Table of VPC Public Subnet
  5. 编辑子网,启用“Modify auto-assign IP settings”,这样新创建的主机才会自动分配公网地址。也可以不启用,在创建主机的时候手动更改IP配置选项。
  6. 创建一个EC2实例,在AWS市场中搜索“pfsense”,Netgate公司出的就是官方版本
    pfSense AMI
  7. 根据指引创建EC2实例,需要注意的是网络选择的时候要选择刚才创建的VPC VPC1。过大概5分钟,实例就会正常运行,并且分配公网IP地址。

悉尼区域(模拟数据中心)创建VPC,VGW和VPN连接

  1. 创建一个新的VPC,地址为10.0.0.0/16
  2. 创建这个VPC内的一个子网(私有网络),地址为10.0.0.0/24
  3. 创建一个VGW(Virtual Private Gateway),作为AWS VPC的VPN连接节点,这个VGW默认会包含两个公网地址作为Tunnel的连接节点
  4. 将这个VGW绑定到刚才创建的VPC中
    VGW and attach to VPC
  5. 更改子网的路由,这里选择开启Route Propagation功能,这样的话,在VGW中学到的路由(比如去往192.168.1.0/24的路由),会自动下发到子网的路由器上。因此任何这个子网的主机,都知道如果要访问192.168.1.0/24的网络,要先去VGW,然后VGW会通过VPN连接去到客户网络。如果不开启这个功能,也可以在这个网段中的路由表写一条静态路由,所有目的地址为192.168.1.0/24的下一跳地址为VGW。
    Route Propagation
  6. 创建客户端网关CGW(Customer Gateway),这里输入的IP地址为在东京区域创建的EC2的公网地址,本次实验选择的是静态路由的方式
    Create CGW
  7. 创建一个VPN连接,自定义一个名字,然后选择刚才创建的VGW和CGW。路由方式选择静态路由,并且手动添加对端的网络,此处为192.168.1.0/24
    Create VPN Connection
  8. 下载VPN配置文件,在这里可以选择不同的厂家和平台,这里我们选择厂家是pfSense,平台也是pfSense,软件版本默认即可
    Download VPN connection configuration
  9. 这个配置文件是一个txt文档,里面详细介绍了如何一步一步地配置你的pfsense防火墙,里面还包含了配置所需要的所有信息。

配置pfSense防火墙的IPSec VPN

  1. 使用公网地址登陆pfSense防火墙(注意,要先在Security Group中允许入方向的TCP 443的端口访问。同时VPC中的NACL也需要打开相应的许可)
  2. 默认的账号是admin,初始密码可以从AWS管理界面中的EC2->Actions->Instance Settings->Get System Log找到
  3. 第一次登陆会让你更改密码
  4. 进入VPN ->IPSec,点击添加一个Phase 1连接

    a. Disabled : uncheck
    b. Key Exchange version :V1
    c. Internet Protocol : IPv4
    d. Interface : WAN
    e. Remote Gateway: <VGW Tunnel 1的公网地址>
    f. Description: <连接的描述>

    Phase 1 proposal (Authentication)
    a. Authentication Method: Mutual PSK
    b. Negotiation mode : Main
    c. My identifier : My IP address
    d. Peer identifier : Peer IP address
    e. Pre-Shared Key: <AWS 提供的PSK>

    Phase 1 proposal (Algorithms)
    a. Encryption algorithm : aes128
    b. Hash algorithm : sha1
    c. DH key group : 2
    d. Lifetime : 28800 seconds

    Advanced Options
    a. Disable Rekey : uncheck
    b. Responder Only : uncheck
    c. NAT Traversal : Auto
    d. Deed Peer Detection : Enable DPD
    Delay between requesting peer acknowledgement : 10 seconds
    Number of consecutive failures allowed before disconnect : 3 retries

  5. 保存后退出
  6. 点击创建好的P1连接,点击+按钮,创建一个Phase2连接

    a. Disabled :uncheck
    b. Mode : Tunnel
    c. Local Network : Type: LAN subnet
    Address : 192.168.1.0/24
    d. Remote Network : Type : Network
    Address : 10.0.0.0/24
    e. Description : <AWS的描述>

    Phase 2 proposal (SA/Key Exchange)
    a. Protocol : ESP
    b. Encryption algorigthms :aes128
    c. Hash algorithms : sha1
    d. PFS key group : 2
    e. Lifetime : 3600 seconds

  7. 保存并退出,重复以上步骤创建第二个VPN连接

验证IPSec VPN连接

点击Status->IPsec可以查看IPSec VPN的状态,可以看到这个时候,VPN连接已经成功建立了。

VPN Connection Status on pfSense

打开AWS Console,可以看到在VPN Connection->Tunnel Details上看到,2个Tunnel的状态已经变成了UP。

VPN Connection Status

这个时候,在悉尼区域创建了一个新的EC2主机,私有地址是10.0.0.120。从pfSense(192.168.1.88)ping 10.0.0.120已经可以通了,证明客户网络和AWS的网络成功打通。

Ping from PFSense to EC2 server

总结

  pfSense防火墙可以通过插件支持BGP路由,因此也可以通过类似的方法建立基于BGP的IPSec VPN连接,或者是CloudHub架构下的多条IPSec VPN连接。如果有条件的话,还是建议使用硬件的防火墙/路由器来建立IPSec VPN连接。另外,pfSense还有一种更方便的方法配置IPSec VPN,它可以直接通过AWS Access Key ID和Secret Key调用AWS的资源,并且直接启用BGP。具体操作步骤可以参照一下AWS VPC Wizard User Guide


扫描下面二维码添加公众号【挨踢茶馆】,并回复微信群。您将被邀请进入AWS群,走向人生巅峰,迎娶白富美!  
 
 » 除非注明,本博客文章均为挨踢小茶原创,转载请以链接形式标明本文地址
该日志由 挨踢小茶 于2017年12月18日发表在 AWS, 云计算 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 亚马逊云AWS搭建基于静态路由的硬件VPN(Site to Site VPN)教程 | 挨踢茶馆
关键字: , , ,

亚马逊云AWS搭建基于静态路由的硬件VPN(Site to Site VPN)教程:目前有5 条留言

  1. 地板
    casoul:

    可以将pfsense做成东京region的网关吗?如果有其他的ec2 实例想访问 sydney region的机器。

    2018-08-13 下午 4:22 [回复]
    • 当然也是可以的,但是需要改动VPC默认路由,将默认路由指到pfsense上。并且需要考虑带宽瓶颈喔~

      2018-10-24 下午 6:56 [回复]
  2. 文章大有看点,支持!

    2017-12-19 下午 3:16 [回复]
  3. 沙发
    挨踢小茶:

    欢迎各位大侠留言讨论

    2017-12-19 上午 8:13 [回复]

发表评论



快捷键:Ctrl+Enter

使用以下社交账号登陆: