如之前使用软件VPN,硬件VPN或AWS DirectConnect连接客户网络与AWS所说,要连接AWS VPC网络和客户端网络的方式有3种,其中一种最简单,对硬件/线路要求最少的方式便是使用软件VPN来进行连接。针对于AWS DirectConnect需要的购买专线和CGW设备(Customer Gateway)或者硬件VPN所需要的CGW硬件设备,软件VPN的搭建过程只需要在AWS VPC内创建一个有VPN Server功能的主机,以及用户侧需要安装一个VPN Client的软件即可。
比方说有远程办公需求的员工,需要在家庭网络或者公共网络的环境下访问位于AWS数据中心的数据或资源,那么只需要使用VPN客户端即可连接到AWS数据中心,非常方便快捷。使用VPN成功登陆的用户,相当于是企业内网/AWS网络中的一个用户,可以很方便地访问内网的一切资源。另外,这种连接方法可以支持多种平台,Windows,Linux,MacOS和各种移动设备。
好了,废话不多说,下面直接讲解如何进行AWS Software VPN的搭建。
创建OpenVPN Access Server的EC2实例
首先需要搭建一个有VPN服务端功能的EC2实例,本文将以OpenVPN Access Server为例子,当然也可以选择有类似功能的PaloAlto和思科的镜像,更多的相关实例可以看这里。
这个EC2实例的软件是免费的,具体收费的部分是EC2实例所运行的时间(不同区域的收费标准略有不同)。OpenVPN的好处是多平台的支持,配置多样化,以及还能支持多重认证(Google Authenticator的软Token)。
创建这个实例的时候,需要注意的一个地方是在网络的选择的时候,需要选择一个具有公网地址的网段(网段内有关联Internet Gateway),也就是说这个VPN服务器需要能访问到因特网。
另外在创建安全组(Security Group)的时候,会默认允许SSH/HTTPS以及TCP 943,UDP1194端口的访问,这些端口都需要开放,但是可以针对实际情况做IP地址的限制。
创建Elastic IP(弹性IP)地址
下一步是创建Elastic IP地址,因为如果你只是使用普通的公网地址的话,每一次主机关机再启动(重启不算)后,它的公网IP地址都会变化,这样不利于客户端进行VPN连接。当然你也可以使用DNS名称进行连接,并且DNS动态解析到这个公网IP地址来解决这个问题。
当实例创建完成以及Elastic IP地址分配成功后,你就可以通过这个固定的公网IP地址对VPN服务器进行访问了。
另外,需要将EC2实例的Source/Destination Check功能关闭,才能正常使用VPN。这是因为在默认情况下,EC2实例会对数据包的源和目的地址进行分析,一个EC2实例只能接受目的地址是自己的数据包。但当这个实例扮演的是路由器,防火墙,NAT Instance等角色的时候,经过这个实例的数据包的目的地址不一定是实例自己的,所以需要禁用这个检查功能。
OpenVPN服务器的配置
然后就可以通过Elastic IP地址远程登录到这台OpenVPN Access Server上了(具体的连接和秘钥的设置就不在这里详细阐述了),缺省的root账号是openvpnas。
第一次登陆到服务器的时候,会显示一段End User License Agreement (OpenVPN-AS EULA)的用户许可声明,输入yes再回车进行接受即可。接下来会需要你做一些简单的配置(如下),配置一些简单的接口,端口等。
Once you provide a few initial configuration settings,
OpenVPN Access Server can be configured by accessing
its Admin Web UI using your Web browser.Will this be the primary Access Server node?
(enter 'no' to configure as a backup or standby node)
> Press ENTER for default [yes]: yesPlease specify the network interface and IP address to be
used by the Admin Web UI:
(1) all interfaces: 0.0.0.0
(2) eth0: 172.31.22.18
Please enter the option number from the list above (1-2).
> Press Enter for default [2]:Please specify the port number for the Admin Web UI.
> Press ENTER for default [943]:Please specify the TCP port number for the OpenVPN Daemon
> Press ENTER for default [443]:Should client traffic be routed by default through the VPN?
> Press ENTER for default [no]:Should client DNS traffic be routed by default through the VPN?
> Press ENTER for default [no]:Use local authentication via internal DB?
> Press ENTER for default [yes]:Private subnets detected: ['172.31.0.0/16']
Should private subnets be accessible to clients by default?
> Press ENTER for EC2 default [yes]:To initially login to the Admin Web UI, you must use a
username and password that successfully authenticates you
with the host UNIX system (you can later modify the settings
so that RADIUS or LDAP is used for authentication instead).You can login to the Admin Web UI as "openvpn" or specify
a different user account to use for this purpose.Do you wish to login to the Admin UI as "openvpn"?
> Press ENTER for default [yes]:> Please specify your OpenVPN-AS license key (or leave blank to specify later):
Initializing OpenVPN...
Adding new user login...
useradd -s /sbin/nologin "openvpn"
Writing as configuration file...
Perform sa init...
Wiping any previous userdb...
Creating default profile...
Modifying default profile...
Adding new user to userdb...
Modifying new user as superuser in userdb...
Getting hostname...
Hostname: 13.230.142.128
Preparing web certificates...
Getting web user account...
配置完成后,先用sudo passwd openvpn命令修改一下用户openvpn的密码,这个账号密码可以用来管理OpenVPN的网站管理页面。
接着就可以通过URL来访问OpenVPN的管理页面和用户页面了
管理UI: https://<Elastic IP Address>:943/admin
用户UI: https://<Elastic IP Address>:943/
登陆OpenVPN管理员UI以及下载VPN客户端软件
通过https://<Elastic IP Address>:943/admin地址可以访问OpenVPN服务端的管理页面,在这个页面你可以设置VPN的参数,创建/编辑VPN用户,编辑VPN客户端所在的网段,添加双重认证功能等等。
然后可以访问https://<Elastic IP Address>:943/地址,根据提示下载相应的OpenVPN客户端软件。下载完成后,输入正确的用户名密码即可连接到VPN服务器了!
从下图可以看到,VPN客户端连接成功后,会拿到相应的IP地址。需要注意的是,这个IP地址默认情况下并不是AWS VPC网络里面的地址,而是VPN服务器设置的地址。因此,任何从VPN客户端访问出去的流量,都会经过VPN服务器NAT之后,才会到达AWS内网。
创建私有网络的EC2实例并测试连通性
下面创建一个Private Subnet中的EC2实例,这个实例只能访问处于VPC中的所有网络,但是并不能访问因特网(没有定义0.0.0.0/0的默认路由)。创建完成后,从VPN客户端已经能够访问处于私有网络中的EC2实例,表示VPN连通性没有问题。
存在的问题
因为VPN服务器会将VPN客户端的地址进行一次NAT,因此客户端可以访问VPC内的资源。但是反过来,VPC内的其他服务器要直接访问客户端是会不通的。挨踢小茶暂时还没有找到比较好的解决方案,如果有知道的朋友,欢迎留言交流。
而且,VPN客户端的地址分配不在AWS VPC的IP地址范围之内,可能会对地址管理带来一些麻烦。
文章评论
一般我天天连着,真觉得按时间算的都是土豪
免费用一年需要绑定信用卡预扣1美金 吓的赶紧关闭账号了
@thornbird 哈哈,幽默
留个脚印,并预祝博主下一年快乐,因为我知道博主今年很快乐!
@促美优品 也预祝你今年心想事成呀~