Aws Site To Site Vpn With On Premise Openswan Or Libreswan

简介:本文介绍了openswan连接AWS Site to Site VPN的过程供参考。

前置知识:网络路由、网络协议、IPSec VPN、Linux系统等。请自行学习。

AWS Site to Site VPN 介绍

AWS site to site VPN 是用来连接私有IDC网络与AWS VPC的一种低成本方案。其中AWS端由AWS提供托管服务,客户段可以采用Cisco等路由器设备,也可以采用Openswan这类软件VPN搭建。本文主要介绍Openswan软件类VPN方式。关于其他VPN设备可以参考相关设备文档。

搭建环境介绍

VPN环境如图所示:

VPN 环境

Virtual Private Gateway 是AWS VPC 的边界路由器,Customer Gateway 是 On-premises的边界路由器。

其中 AWS 侧 VPC CIDR为 172.31.0.0/16, on-premises 侧 CIDR 为 10.50.0.0/16

为了方便测试,本次on-premises采用不同region的EC2 代替。

AWS侧配置

创建Customer Gateway

AWS Console配置的Customer Gateway (cgw) 其实是on-premises设备信息的”注册”,在AWS上登记on-premises路由器信息。 所以创建过程很简单。只需要提供IP或者证书、路由类型。

因为我们用EC2搭建openswan,而openswan暂不支持BGP。 所以路由类型我们选择Static,IP Address填入 EC2的IP地址。

CGW create

Tips: 这里的IP地址填入后就不能更改。建议采用可长期使用的IP地址(如AWS上的EIP),不要采用动态分配的地址(如ADSL分配的公网地址)。

创建 Virtual Private Gateway

Virtual Private Gateway (vgw) 是 VPC的边界路由器。我们在创建完毕后需要attach到某一个AWS VPC。过程如下

  • 创建vgw

创建vgw

  • attach到vpc

attach到vpc

在弹出的对话框中选择你的目标VPC。 注意:一个VPC仅可attach 一个vgw。

创建site to site VPN connection

在AWS VPC console中,找到Site to Site VPN,然后新建。内容如下。其中vgw/cgw 选择之前新建的。

vpn-create-1 vpn-create-1

VPN创建好后,可以在VPC detail 页面,看到两个Tunnel的公网IP。

下载VPN配置文件

AWS为了方便on-premise配置,提供了大量现成的配置文件,一般情况下,只需要选择对应的配置文件,下载后无脑配置即可。

vpn-download-config vpn-download-config

修改路由

为了在VPN可用的时候,路由表能够自动更新,需要在VPC内相应的 subnet 路由表中启用路由传播。如图

routtable-propagation

On-premise 配置

安装openswan/libreswan

Openswan 没有提供官方的Centos/Ubuntu发行版。需要自行下载、编译。具体过程可以参考官方文档。

为了简单起见,我们安装了openswan的分支 libreswanlibreswan 有官方的yum/apt 源,可以快速、可靠安装。如过是ubuntu:

sudo apt-get update
sudo apt-get install -y libreswan

# 检查安装结果
ipsec --version

配置IPSec

打开AWS上下载的openswan配置文件,可以看到两个Tunnel的配置。两个Tunnel是为了实现高可靠性,我们的测试没有同时启用两个,仅采用一个Tunnel。所以可以任选一个Tunnel,按文档进行配置。

  1. 编辑 /etc/sysctl.conf,在文件末尾添加:
     net.ipv4.ip_forward = 1
     net.ipv4.conf.default.rp_filter = 0
     net.ipv4.conf.default.accept_source_route = 0
    
  2. 执行 sysctl -p,让配置生效
  3. 编辑 /etc/ipsec.conf,确保包含如下内容
     include /etc/ipsec.d/*.conf
    
  4. 编辑 /etc/ipsec.d/aws.conf,按AWS上下载的文档,复制&粘贴配置。然后修改部分配置文件:
    1. leftsubnet=后面填入on-premise的CIDR(本例中的10.50.0.0/16) ;
    2. rightsubnet=填入AWS VPC CIDR (本例中的17.31.0.0/16) 。所以,配置中的left都代表本地,right都代表远端。
    3. 特别提醒:最新版本的openswan不再需要 auth=esp内容,请确保配置不包含该内容。
       conn Tunnel1
       	authby=secret
       	auto=start
       	left=%defaultroute
       	leftid=1.1.1.1
       	right=2.2.2.2
       	type=tunnel
       	ikelifetime=8h
       	keylife=1h
       	phase2alg=aes128-sha1;modp1024
       	ike=aes128-sha1;modp1024
       	keyingtries=%forever
       	keyexchange=ike
       	leftsubnet=<LOCAL NETWORK>
       	rightsubnet=<REMOTE NETWORK>
       	dpddelay=10
       	dpdtimeout=30
       	dpdaction=restart_by_peer
      
  5. 编辑 /etc/ipsec.d/aws.secrets ,按AWS下载的配置文件填入内容:
     1.1.1.1 2.2.2.2: PSK "PSWD_**********"
    

启用IPSec VPC

为了确保连接正常,请确保机器UDP 端口500 (如果采用NAT穿透,还需端口 4500) 双向开放。

sudo systemctl enable ipsec.service
sudo systemctl start ipsec.service

# 检查运行状态
sudo systemctl status ipsec.service

on-premise 路由更新

为了让前往AWS VPC (172.31.0.0/16)的网络流量都走VPN,需要更新路由表。由于我们的测试环境使用的AWS VPC,所以我们更新了VPC路由表,添加 172.31.0.0/16 指向我们的openswan EC2。

测试验证

首先,确保两边安全组/防火墙都开启了 ICMP。 然后,再AWS VPC以及on-premise启动机器,互相ping。 可以看到都能ping通。

References

Written on October 8, 2021