Ubuntu搭建OpenVPN服务器

一、说明

对于vpn以前使用最多的是pptpd这个解决方案,但是pptpd相对于OpenVPN来说,没有OpenVPN安全,而且pptpd在Linux下命令行支持不是很好,稳定性也不如OpenVPN。所以最后就选择OpenVPN来搭建VPN。本文的OpenVPN Server安装在Ubuntu 14.04上安装.有关OpenVPN在CentOS6.6 64bit的配置完全可以使用,已经经过验证。文章后有CentOS详细配置命令及步骤。

二、OpenVPN原理

  1. OpenVPN通过使用公开密钥(非对称密钥,加密解密使用不同的key,一个称为Publice key,另外一个是Private key)对数据进行加密的。这种方式称为TLS加密
  2. OpenVPN使用TLS加密的工作过程是,首先VPN Sevrver端和VPN Client端要有相同的CA证书,双方通过交换证书验证双方的合法性,用于决定是否建立VPN连接。
  3. 然后使用对方的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分别对其进行制作。

  1. 制作CA证书
    OpenVPNeasy-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
export KEY_COUNTRY=”CN”
export KEY_PROVINCE=”SD”
export KEY_CITY=”JN”
export KEY_ORG=”SOIL"
export KEY_EMAIL=”abc@abc.com”
export KEY_OU=”test”
export KEY_NAME=”test”

vars文件主要用于设置证书的相关组织信息,红色部分的内容可以根据自己的实际情况自行修改。其中export KEY_NAME=”test”这个要记住下,我们下面在制作Server端证书时,会使用到。以上内容,我们也可以使用系统默认的,也就是说不进行修改也是可以使用的。

然后使用source vars命令使其生效,如下:

source vars
./clean-all

注意:执行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
yum -y install openvpn

以上安装完毕后,把Windows已经成功连接的Client相关文件上传到CentOS系统中,然后连接方法和Ubuntu系统上一样。

注意:如果在CentOS系统要开机启动的话,也是和Ubuntu系统是一样的,但是有一点需要指出就是Client相关配置文件不能放在/root目录下。

因为CentOSOpenVPN Server配置和Ubuntu基本一样,所以就不再单独写一篇有关CentOS下安装配置OpenVPN Server的文章。下面附上在CentOS下,所有执行的命令。如下:

rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
yum -y install openvpn
rpm -ql openvpn
cat /usr/share/doc/openvpn-2.3.7/sample/sample-config-files/README
yum -y install easy-rsa
rpm -ql easy-rsa
cd /usr/share/easy-rsa/2.0/
vim vars
export KEY_COUNTRY=”CN”
export KEY_PROVINCE=”SD”
export KEY_CITY=”JN”
export KEY_ORG=”SOIL”
export KEY_EMAIL=”abc@abc.com”
export KEY_OU=”SOIL”
export KEY_NAME=”test
source vars
./clean-all
./build-ca
./build-key-server test
./build-dh
./build-key centos
cd keys
cp ca.crt test.key test.crt dh2048.pem /etc/openvpn/
cp ca.crt centos.key centos.crt /root/
cp /usr/share/doc/openvpn-2.3.7/sample/sample-config-files/client.conf /root
cp /usr/share/doc/openvpn-2.3.7/sample/sample-config-files/server.conf /etc/openvpn/

服务器端配置文件:

vim /etc/openvpn/server.conf
grep -vE “;|#|^$” /etc/openvpn/server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert test.crt
key test.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3

客户端配置文件:

grep -vE “;|#|^$” centos.conf
client
dev tun
proto udp
remote 182.254.223.140 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert centos.crt
key centos.key
remote-cert-tls server
comp-lzo
verb 3

以上信息参考网络上的信息,自己亲身实践并整理一番,有不对之处,请告知。(测试时间:2015年11月8日)


Author: bugwz
Link: https://bugwz.com/2015/11/08/ubuntu-openvpn/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.