AWS中国区使用EC2+Openwan作为路由器部署Site-to-site VPN服务手册(简版)

一、背景

之前做过两个类似主题的文档,第1贴是使用Cloudformation从零开始搭建实验环境创建出来2个VPC,然后配置VPN对接。第2贴是讲述海外AWS的托管VPN服务的配置。这部分文档讲解是按照学习和做实验的角度,对于配置环境可能过于复杂。因此这里又整理了一个简化版。

本文是个简化版文档,不搭建学习实验环境,只部署用于生产系统,使用Libreswan 3.0(Openswan 2.6的分支)部署VPN路由器。

本配置文档使用使用范围:

  • 如果与IDC对接,本文在Checkpoint路由器上测试通过
  • 如果远端是其他云,推荐使用云上的托管VPN网关服务,也可以被选使用云上虚拟机部署软路由器

注意:只能用于国内,不能跨境。跨境请使用合法跨境专线。

二、对接环境

1、创建EC2

创建一台使用Amazon Linux 2系统的EC2,配置2vCPU 4GB,分配EIP可远程登录。

2、开启网络转发

在EC2更多操作下拉框下,找到网络,将这台EC2的“目标地址和源地址检查”选项设置为禁用。

3、配置安全规则组

承担路由器的EC2需要配置安全组,开放如下端口:

  • UDP协议,端口500
  • UDP协议,端口4500
  • 选择Custom Protocol,输入ESP,Source填写为远端路由器地址

将此安全组应用到EC2上。

4、安装软件包

为这个EC2操作系统安装包:

yum update -y
yum install openswan -y
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.send_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.eth0.send_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.accept_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.eth0.accept_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.rp_filter = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.rp_filter = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.eth0.rp_filter = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.lo.rp_filter = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.ip_vti0.rp_filter = 0" >> /etc/sysctl.conf
sysctl -p
echo "iptables -t mangle -A FORWARD -o eth0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1360" >> /etc/rc.d/rc.local
iptables -t mangle -A FORWARD -o eth0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1360
chmod +x /etc/rc.d/rc.local

5、创建Libreswan配置和认证文件。

将以下内容保存为/etc/ipsec.d/cisco.conf文件。

conn cisco
    authby=secret
    auto=start
    leftid=LOCALEIP
    left=%defaultroute
    leftsubnet=10.1.0.0/16
    leftnexthop=%defaultroute
    right=REMOTEEIP
    rightsubnet=192.168.0.0/16
    keyingtries=%forever
    ike=aes128-sha1;modp1024
    ikelifetime=86400s
    phase2alg=aes128-sha1
    salifetime=3600s
    pfs=no

替换以上文档中:

  • LOCALEIP为AWS云上EC2路由器的EIP
  • leftsubnet参数为AWS云上VPC网络的CIDR
  • REMOTEEIP为远端路由器公网IP
  • rightsubnet参数为云下IDC或其他云上VPC的CIDR。

修改后保存退出。

将以下内容保存为/etc/ipsec.d/cisco.secrets文件。

LOCALEIP REMOTEEIP: PSK "aws123@@@888"

替换以上文档中:

  • LOCALEIP为AWS云上EC2路由器的EIP
  • leftsubnet参数为AWS云上VPC网络的CIDR
  • 双引号内的是认证的密钥

替换后注意保持冒号、空格、引号的准确性。

三、启动服务

1、 启动服务

运行如下命令

systemctl enable ipsec
ipsec start
ipsec verify

所有返回信息的状态都是绿色的OK表示配置成功。

2、修改AWS一侧VPC的路由表

配置步骤如下:

  • 进入AWS控制台的VPC模块
  • 从左侧菜单找到路由表,找到要配置的VPC所对应的路由表,如果有多张路由表,需要分别修改
  • 选中路由表,点击页面下半部分,第二个标签页Route Table路由表,点击Edit Route编辑路由按钮
  • 现有路由条目不要修改,点击Add Route添加路由按钮增加一行新的路由
  • Destation目标填写为远端IDC或者其他云的VPC的CIDR网段,例如192.168.0.0/16,在Targe目标从下拉框中选择Instance,然后从Instance菜单下会自动加载出来刚才配置为路由器的EC2,选中它,点击保存路由按钮

3、修改IDC/其他云上路由表

此过程根据不同产品和服务有所不同,配置的目的是在增加对AWS上VPC的路由条目。本文不再描述。

4、测试

至此配置完成,分别在AWS云上和另一侧网络内可以发起ping命令测试。