• AWS使用 Client VPN 配置访问VPC 内网资源


    AWS使用AWS Client VPN 访问云上VPC 内网资源

    一、背景和架构

    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 需要的证书

    AWS Client VPN 使用的是OpenVPN协议,身份认证方式支持微软AD认证和SSL证书认证等方式。本文采用证书方式认证进行配置。

    1、创建CA和服务器证书以及客户端证书,导出证书并上传到ACM

    首先在海外AWS区域创建一个EC2,建议使用Amazon Linux 2系统,在其上配置AWSCLI工具和对应的AKSK,使其具有AWS Certificate Manager(ACM)服务操作权限。

    执行如下命令生成CA证书。注意最后一个命令执行后,需要输入证书使用的域名。

    1. git clone https://github.com/OpenVPN/easy-rsa.git
    2. cd easy-rsa/easyrsa3
    3. ./easyrsa init-pki
    4. ./easyrsa build-ca nopass
    5. ./easyrsa build-server-full server nopass 【中途输入yes】
    6. ./easyrsa build-client-full all.man.use nopass 【中途输入yes】
    7. mkdir ~/custom_folder/
    8. cp pki/ca.crt ~/custom_folder/
    9. cp pki/issued/server.crt ~/custom_folder/
    10. cp pki/private/server.key ~/custom_folder/
    11. cp pki/issued/all.man.use.crt ~/custom_folder
    12. cp pki/private/all.man.use.key ~/custom_folder/
    13. cd ~/custom_folder/

    2、导出证书并上传到ACM

    1. 本地上传证书
    2. 需要aws的token具有证书管理员权限
    3. aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt --region ap-northeast-1
    4. 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信息则表示成功。 

    3生成单个用户登陆证书【需要为每个用户设置单独的证书提供使用】

    1. cd /home/ec2-user/config/vpn/easy-rsa/easyrsa3
    2. ./easyrsa build-client-full jack.man.use nopass
    3. cp pki/issued/jack.man.use.crt ~/custom_folder
    4. cp pki/private/jack.man.use.key ~/custom_folder/
    5. cd ~/custom_folder/
    6. 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
    7. 然后需要修改客户端的连接密钥文件才能远程连接

    4、续订服务器证书【参考】

    因为生成的证书每隔一年会到期,所以到一年后需要续订

    1. $ ./easyrsa renew server nopass
    2. $ mkdir ~/custom_folder2
    3. $ cp pki/ca.crt ~/custom_folder2/
    4. $ cp pki/issued/server.crt ~/custom_folder2/
    5. $ cp pki/private/server.key ~/custom_folder2/
    6. $ cd ~/custom_folder2/
    7. $ aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt

    三、创建AWS Client VPN终端节点

    1、创建Endpoint终端节点

    进入对应区域的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完成。

    2、绑定子网

    进入创建好的AWS Client VPN Endpoint界面,找到第二个标签页Associations,点击Associate按钮。如下截图。

    在弹出的绑定子网界面中,选中AWS Client VPN 要连接的子网。首先选择VPC和第一个子网。然后点确定。如下截图。

    重复以上步骤,将两个子网都绑定到AWS Client VPN。如下截图。

    接下来需要等待几分钟,等待黄色的Associating字样变成绿色的Associated。如下截图。

    3、绑定策略

    进入创建好的AWS Client VPN Endpoint界面,找到第四个标签页Authorization授权界面。点击Authorize Ingress按钮。如下截图。

    输入AWS Client VPN要访问的VPC的CIDR,例如本文的VPC地址段是10.1.0.0/16,然后点击授权。如下截图。

    至此VPC服务器端配置完成。

    四、获取客户端配置文件并修改配置

    1、下载客户端配置文件

    在上一步完成操作的界面,点击页面中间蓝色的按钮Download Client Configuration,获取客户端配置文件。

    这样将在下载目录中打开名为downloaded-client-config.ovpn的文件,接下来使用任意文本编辑器修改其配置。

    2、设置客户端证书

    接上一步,打开扩展名为ovpn的配置文件,在最后增加如下两段内容:

    1. <cert>
    2. 这里粘贴上前文生成的客户端密钥username.domain.tld.crt的内容
    3. </cert>
    4. <key>
    5. 这里粘贴上前文生成的客户端密钥username.domain.tld.key的内容
    6. </key>

    3、设置访问域名

    接上一步,找到配置文件中开头部分如下一行。

    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

    在要使用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分流功能工作正常。

    至此配置完成。

  • 相关阅读:
    CentOS7.9安装elasticsearch-8.3.1和window 10安装elasticsearch-8.3.1
    时间序列预测:用电量预测 02 KNN(K邻近算法)
    adb 一些命令操作记录
    心理健康数据集:mental_health_chatbot_dataset
    Java - 由ReflectionFactory引发的对final关键字的思考
    记录和分享一下自己自定义的博客园主题样式
    c++ primer中文版第五版作业第三章
    纯知识分享||Java多线程又遇到死锁?三招帮你彻底解决
    【项目管理】敏捷项目每日站会中的四大“坑”
    substring 和 substr 的区别
  • 原文地址:https://blog.csdn.net/ma_qi_chao/article/details/136542775