一、说明
对于vpn以前使用最多的是pptpd这个解决方案,但是pptpd相对于OpenVPN来说,没有OpenVPN安全,而且pptpd在Linux下命令行支持不是很好,稳定性也不如OpenVPN。所以最后就选择OpenVPN来搭建VPN。本文的OpenVPN Server安装在Ubuntu 14.04上安装.有关OpenVPN在CentOS6.6 64bit的配置完全可以使用,已经经过验证。文章后有CentOS详细配置命令及步骤。
二、OpenVPN原理
- OpenVPN通过使用公开密钥(非对称密钥,加密解密使用不同的key,一个称为Publice key,另外一个是Private key)对数据进行加密的。这种方式称为TLS加密
- OpenVPN使用TLS加密的工作过程是,首先VPN Sevrver端和VPN Client端要有相同的CA证书,双方通过交换证书验证双方的合法性,用于决定是否建立VPN连接。
- 然后使用对方的CA证书,把自己目前使用的数据加密方法加密后发送给对方,由于使用的是对方CA证书加密,所以只有对方CA证书对应的Private key才能解密该数据,这样就保证了此密钥的安全性,并且此密钥是定期改变的,对于窃听者来说,可能还没有破解出此密钥,VPN通信双方可能就已经更换密钥了。
三、安装OpenVPN
OpenVPN的安装我们分为apt-get
方式和源码方式,下面我们只讲解apt-get
方式的安装。有关源码方式安装OpenVPN,可自行查询。apt-get
方式安装的命令如下所示:
sudo apt-get -y install openvpn libssl-dev openssl |
OpenVPN安装完毕后,我们来查看OpenVPN的版本,如下:
openvpn –version |
这里我安装的OpenVPN
的版本为2.3.2
。
我们再来查看下OpenVPN
安装时产生的文件,如下:
dpkg -L openvpn |more |
OpenVPN
安装完毕后,我们再来安装easy-rsa
,easy-rsa
是用来制作OpenVPN
相关证书的。安装easy-rsa
,使用如下命令:
sudo apt-get -y install easy-rsa |
查看easy-rsa
安装的文件,代码如下:
dpkg -L easy-rsa |more |
注:在我的服务器上面easy-rsa
已经安装到/usr/share/easy-rsa/
目录下。
四、制作相关证书
根据第一章节OpenVPN
的工作原理,我们可以知道OpenVPN
的证书分为三部分:CA证书
、Server端证书
、Client端证书
。下面我们通过easy-rsa
分别对其进行制作。
- 制作CA证书
OpenVPN
与easy-rsa
安装完毕后,我们需要在/etc/openvpn/
目录下创建easy-rsa
文件夹,如下:然后把sudo mkdir /etc/openvpn/easy-rsa/
/usr/share/easy-rsa/
目录下的所有文件全部复制到/etc/openvpn/easy-rsa/
下,如下代码所示:当然,我们也可以直接在sudo cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/
/usr/share/easy-rsa/
制作相关的证书,但是为了后续的管理证书的方便,我们还是把easy-rsa
放在了OpenVPN
的启动目录下。
注意:由于我们现在使用的是Ubuntu
系统,所以我们必须切换到root
用户下才能制作相关证书,否则easy-rsa
会报错。如果是Centos
系统,则不存在此问题。因为我一直处于root
状态,所以不用切换了,当然,这种一直处于root
状态的习惯并不是好习惯,毕竟root
太强大了。
在开始制作CA证书之前,我们还需要编辑vars
文件,进入并修改下面相关选项内容即可。如下:
sudo vi /etc/openvpn/easy-rsa/vars |
vars
文件主要用于设置证书的相关组织信息,红色部分的内容可以根据自己的实际情况自行修改。其中export KEY_NAME=”test”
这个要记住下,我们下面在制作Server端证书
时,会使用到。以上内容,我们也可以使用系统默认的,也就是说不进行修改也是可以使用的。
然后使用source vars
命令使其生效,如下:
source vars |
注意:执行clean-all
命令会删除当前目录下的keys
文件夹。
现在开始正式制作CA证书
:
[从之前博客找回的部分信息,此处缺图片,待后期重新尝试。]
然后如果成功的话,会提示类似与下面的提示(我的是windows10,所以提示是这样的):
[从之前博客找回的部分信息,此处缺图片,待后期重新尝试。]
windows7端的提示可能是这样的:
[从之前博客找回的部分信息,此处缺图片,待后期重新尝试。]
查看了一下ip,的确连上了。
[从之前博客找回的部分信息,此处缺图片,待后期重新尝试。]
注意:上图中的client
就是根据client.ovpn
,这个文件名来的。
通过上图,我们可以看到本机确实已经连接到Server端,而且获得的IP地址也确实为10.8.0.6
。
五、在Linux上
在Windows
上测试完毕后,我们现在在切换到Linux
系统。这个Linux
系统是我的搬瓦工的一个VPS,之前是用来番茄的,现在用来测试一下。它的系统叫我更改成Ubuntu14.04
,。
要在Ubuntu
上连接OpenVPN Server端
,我们需要先安装OpenVPN
软件,如下:
sudo apt-get -y install openvpn |
安装完毕后,把我们刚刚在Windows系统配置的文件上传到Ubuntu系统中。之前我们先在/etc/openvpn
目录下面创建了一个test
文件,用于存放上传的那四个文件,然后我们使用FileZilla
工具利用SSH上传,上传完成如下:
[从之前博客找回的部分信息,此处缺图片,待后期重新尝试。]
注意:上传完毕后,我们不需要修改任何配置文件。因为这几个文件在Windows下已经可以正确连接OpenVPN Server端
。
注意:在连接Server端
之前,一定要切换到root用户下。因为在连接Server端
时,OpenVPN
会在本机创建一个虚拟网卡,如果使用普通用户的话,是没有权限创建虚拟网卡的。
切换到root
用户,使用sudo su
命令,然后切换到我们创建的test
目录下,然后使用如下命令:
openvpn --config client.ovpn |
如果出现下图的信息,说明已经正确连接Server端。
[从之前博客找回的部分信息,此处缺图片,待后期重新尝试。]
现在我们在本机使用ifconfig
进行查看,在此建议重新开启一个新的ssh
窗口。
[从之前博客找回的部分信息,此处缺图片,待后期重新尝试。]
通过上图,我们可以很明显的看出,本机已经正确连接Server端
,并且也在本机虚拟出一个叫tun0
的虚拟网卡。
如果想让Ubuntu
开机启动并后台运行的话,可以把这条命令写入rc.local
文件中。我们先用下面的命令打开rc.local
文件:
vi /etc/rc.local |
然后将下面的代码录入该文件并保存:/usr/sbin/openvpn --config /etc/openvpn/test/client.ovpn >/var/log/openvpn.log &
注意,命令末尾的&
符号不能省略,否则将可能阻塞系统的正常启动。同时这个时候,client.ovpn
文件中有关证书的配置一定要写成绝对路径,要不然系统会报错。如下:
[从之前博客找回的部分信息,此处缺图片,待后期重新尝试。]
如果是CentOS
系统的话,我们首先需要安装epel
源,然后安装OpenVPN
软件包。如下:
rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm |
以上安装完毕后,把Windows
已经成功连接的Client
相关文件上传到CentOS
系统中,然后连接方法和Ubuntu
系统上一样。
注意:如果在CentOS
系统要开机启动的话,也是和Ubuntu
系统是一样的,但是有一点需要指出就是Client
相关配置文件不能放在/root
目录下。
因为CentOS
的OpenVPN Server
配置和Ubuntu
基本一样,所以就不再单独写一篇有关CentOS
下安装配置OpenVPN Server
的文章。下面附上在CentOS
下,所有执行的命令。如下:
rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm |
服务器端配置文件:
vim /etc/openvpn/server.conf |
客户端配置文件:
grep -vE “;|#|^$” centos.conf |
以上信息参考网络上的信息,自己亲身实践并整理一番,有不对之处,请告知。(测试时间:2015年11月8日)