AWS Client VPN是一种基于客户端的托管VPN服务,让您能够安全地访问云上资源或借助云作为网络通道访问其他资源。AWS Client VPN具有专用的VPN客户端,也支持使用OpenVPN作为客户端。
注意:AWS Client VPN只能用于企业海外员工到附近的海外AWS区域的访问接入,不可用于跨境访问。跨境需求需要申请符合相关法律规定的具有资质的跨境专线。
与云上自行部署Client VPN相比,AWS Client VPN除了具有运维管理的便捷性之外,还可以用于与没有Internet Gateway的VPC内网互联实现对云上私密数据的访问,且访问VPN同时不影响客户端本机的互联网访问。如下图架构所示。
在上图中,位于海外区域的远程用户希望访问云上的VPC内的应用,且出于合规安全考虑云上的VPC是一个没有关联Internet Gateway、也没有外网路由的内部VPC。此时AWS Client VPN支持通过ENI方式将流量注入到VPC内实现访问。同时,为了确保客户端能对其他Internet网络正常访问,本方案将使用AWS Client VPN 的 Split-tunnul 功能分离网络流量,允许去往非VPC的流量直接从客户端对外发出而不经过VPN。本文描述此场景下的配置过程。
AWS Client VPN 使用的是OpenVPN协议,身份认证方式支持微软AD认证和SSL证书认证等方式。本文采用证书方式认证进行配置。
首先在海外AWS区域创建一个EC2,建议使用Amazon Linux 2系统,在其上配置AWSCLI工具和对应的AKSK,使其具有AWS Certificate Manager(ACM)服务操作权限。
执行如下命令生成CA证书。注意最后一个命令执行后,需要输入证书使用的域名。
- git clone https://github.com/OpenVPN/easy-rsa.git
- cd easy-rsa/easyrsa3
- ./easyrsa init-pki
- ./easyrsa build-ca nopass
- ./easyrsa build-server-full server nopass 【中途输入yes】
- ./easyrsa build-client-full all.man.use nopass 【中途输入yes】
- mkdir ~/custom_folder/
- cp pki/ca.crt ~/custom_folder/
- cp pki/issued/server.crt ~/custom_folder/
- cp pki/private/server.key ~/custom_folder/
- cp pki/issued/all.man.use.crt ~/custom_folder
- cp pki/private/all.man.use.key ~/custom_folder/
- cd ~/custom_folder/
- 本地上传证书
- 需要aws的token具有证书管理员权限
- aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt --region ap-northeast-1
- aws acm import-certificate --certificate fileb://all.man.use.crt --private-key fileb://all.man.use.key --certificate-chain fileb://ca.crt --region ap-northeast-1
返回CertificateArn信息则表示成功。
- cd /home/ec2-user/config/vpn/easy-rsa/easyrsa3
- ./easyrsa build-client-full jack.man.use nopass
- cp pki/issued/jack.man.use.crt ~/custom_folder
- cp pki/private/jack.man.use.key ~/custom_folder/
- cd ~/custom_folder/
- aws acm import-certificate --certificate fileb://jack.man.use.crt --private-key fileb://jack.man.use.key --certificate-chain fileb://ca.crt --region ap-northeast-1
- 然后需要修改客户端的连接密钥文件才能远程连接
因为生成的证书每隔一年会到期,所以到一年后需要续订
- $ ./easyrsa renew server nopass
- $ mkdir ~/custom_folder2
- $ cp pki/ca.crt ~/custom_folder2/
- $ cp pki/issued/server.crt ~/custom_folder2/
- $ cp pki/private/server.key ~/custom_folder2/
- $ cd ~/custom_folder2/
- $ aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt
进入对应区域的VPC服务界面,在左侧菜单中找到Client VPN Endpoints,点击进入,并点击新建,如下截图。
在创建界面上填写VPN服务名称、描述信息,并设置IP地址段。IP地址段是AWS Client VPN 服务器与客户端之间的一个私有网络,这个地址段的子网掩码范围/12和/22之间,且地址不能与客户端本地或云上VPC冲突。例如本文使用10.88.0.0/16
作为地址段。
然后在下方的服务器证书位置,选择ACM中包含的server证书。如下截图。
在客户端认证选项中,选择Use mutual authentication
使用证书双向认证,然后在Client证书选择框中,选择ACM中包含的client证书。如下截图。
接下来将页面向下移动。在DNS位置留空,VPN 服务器将不强制推送DNS服务器。在对接企业AD场景下如果有需要的话可推送自己的DNS。在传输协议位置保持默认的UDP协议。在Enable split-tunnel位置,选中这个选项,表示客户端将把去往AWS的流量和本地互联网流量分离。由此不需要所有流量都经过VPN处理。接下来选择安全组为本VPC默认的安全组,默认的安全组规则是对外出栈放行,对内入栈禁止所有。如下截图。
页面继续向下移动,在页面下方,选中Do you want to enable Client Login Banner text
的选项,并设置一段文本,可以在VPN连接过程中显示这个文本信息。最后点击右下角创建按钮。如下截图。
至此创建Client VPN Endpoint完成。
进入创建好的AWS Client VPN Endpoint界面,找到第二个标签页Associations
,点击Associate
按钮。如下截图。
在弹出的绑定子网界面中,选中AWS Client VPN 要连接的子网。首先选择VPC和第一个子网。然后点确定。如下截图。
重复以上步骤,将两个子网都绑定到AWS Client VPN。如下截图。
接下来需要等待几分钟,等待黄色的Associating
字样变成绿色的Associated
。如下截图。
进入创建好的AWS Client VPN Endpoint界面,找到第四个标签页Authorization
授权界面。点击Authorize Ingress
按钮。如下截图。
输入AWS Client VPN要访问的VPC的CIDR,例如本文的VPC地址段是10.1.0.0/16
,然后点击授权。如下截图。
至此VPC服务器端配置完成。
在上一步完成操作的界面,点击页面中间蓝色的按钮Download Client Configuration
,获取客户端配置文件。
这样将在下载目录中打开名为downloaded-client-config.ovpn
的文件,接下来使用任意文本编辑器修改其配置。
接上一步,打开扩展名为ovpn的配置文件,在最后增加如下两段内容:
- <cert>
- 这里粘贴上前文生成的客户端密钥username.domain.tld.crt的内容
- </cert>
-
- <key>
- 这里粘贴上前文生成的客户端密钥username.domain.tld.key的内容
- </key>
接上一步,找到配置文件中开头部分如下一行。
remote cvpn-endpoint-05ba461a63c340555.prod.clientvpn.eu-central-1.amazonaws.com 443
在其前方增加一个子域名,使用前边申请证书的子域名即可,例如username.domain.tld。如下配置。
remote username.cvpn-endpoint-05ba461a63c340555.prod.clientvpn.eu-central-1.amazonaws.com 443
保存退出,至此本用户的客户端配置文件修改完成。现在需要将此文件复制到要连接VPN的客户机上。
请注意,今后每增加一个新的用户,都需要新制作这样一个客户端配置文件。由此,当单个用户需要注销的时候,只要在ACM服务内注销掉用户对应的客户端证书即可。
在要使用VPN的客户机上下载AWS Client VPN 客户端对应的操作系统的版本,包括Windows、Linux和MacOS的支持。如下截图。
AWS Client VPN Download | Amazon Web Services
安装完成后启动客户端。点击菜单上的File命令,然后点击Manage Profiles按钮管理配置文件。如下截图。
点击添加按钮,再选择前文编辑完成的客户端配置文件,然后点击Add Profile按钮完成添加。如下截图。
添加配置文件完成。此时可以准备开始连接了。如下截图。
连接成功后,使用cmd去ping在VPC内网的环境,可看到ping成功。如下截图。
此外,通过AWS控制台上Client VPN界面的Connections标签页,也可以看到当前连接的客户端。如下截图。
在前文配置VPN过程中已经将Split-tunnel选项设置为Enable启用状态,所以只有去往VPC中的流量才会通过VPN传输,其他流量将从客户本地网络上直接访问互联网。由于本次配置的云上VPC是没有Internet Gateway的,因此当您连接到Client VPN后能同时访问VPC和访问Internet,就意味着启用了Split-tunnel分流功能工作正常。
至此配置完成。